4.文件和目录操作相关的命令

4.文件和目录操作相关的命令

1.文件操作命令

1.显示文件命令

1.1cat命令

①cat的语法
  • 格式:cat [选项] [文件]
  • 特点:
①cat 命令可以用来 查看文件内容、创建文件、文件合并、追加文件内容等功能

②cat 会一次显示所有的内容,适合 查看内容较少 的文本文件
②cat的使用
  • 常用的参数及解释见下:
1、cat filename,查看filename内容。
 
2、cat -n filename,查看文件的内容,并对所有输出行从1开始进行编号(包括空白行)。
 
3、cat -b filename ,用法和 -n 差不多,但是不对空白行编号。
 
4、cat -s filename,当遇到有连续两行或两行以上的空白行,就代换为一行的空白行。
 
5、cat -e filename,在输出内容的每一行后面加一个$符号(包括空白行)。

6、cat file1>file2,  文件重定向,相当于cp file1 file2
  • 查看cat的具体用法:

可以使用以下命令显示帮助信息

cat --help
 
或者
 
cat  --h
  • 查看版本信息
cat --version
  • 创建一个文件
# 只能创建新文件,不能编辑已有的文件,未设置结束符,则ctrl+C可以结束文件的录入
cat >filename
 
# 创建新文件,并设置END作为结束符,当识别到用户输入END,则结束文件的录入,END可以自定义;
cat >filename <<END
  • 追加文件内容的用法
# 在原文件的基础上,追加内容
cat >>filename 
 
# 设置结束符
cat >>filename <<end
  • 合并多个文件
# 将file1 和file2 合并成一个新的文件file,
# 如果file以前有内容,则先会清除它们然后再写入合并后的内容。
cat file1 file2 > file
 
# 如果不想清除文件内容,则可以把单边号>变成了双边号>>
cat file1 file2 >> file
  • 使用cat 查看多少行
# 显示文件最后100行
cat filename | tail -n 100
 
# 显示文件前面100行
cat filename | head -n 100
 
# 从100行开始显示,显示100行以后的所有行
cat filename | tail -n +100
 
# 显示100行到500行
cat filename | head -n 500 | tail -n +100
  • 其他参数
选项 说明
-A 显示文件所有内容
-b 为非空行显示行号
-E 显示文件行尾,用一个 $ 符号
-e 等价于 -vE
-s 如果有多个空白输出行,则只显示一个空行
-n 文件的每一行都显示行号,无论是否是空行
-T 显示特殊的制表符用 ^I 符号
-t 等价于 -vT
-v 显示不可打印字符

linux cat命令详解,作用,说明

1.2more命令

Linux中 more命令功能类似 cat,cat命令是整个文件的内容从上到下显示在屏幕上。more 是一个基于VI编辑器的文本过滤器,会以全屏幕的方式按页显示文本文件的内容,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能 。more命令从前向后读取文件,因此在启动时就加载整个文件。

①语法
more [选项] 要查看的文件
②功能

more命令和cat的功能一样都是查看文件里的内容,但有所不同的是more可以按页来查看文件的内容,还支持直接跳转行等功能。

③参数
+n   从笫n行开始显示。
-n   定义屏幕大小为n行。
+/pattern   在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示。
-c   从顶部清屏,然后显示。
-d   提示“Press space to continue,’q’ to quit(按空格键继续,按q键退出)”,禁用响铃功能。
-l   忽略Ctrl+l(换页)字符。
-p   通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似。
-s   把连续的多个空行显示为一行。
-u   把文件内容中的下画线去掉。
④常用操作命令
操作 功能说明
空格键 (space) 代表向下翻一页
Enter 代表向下翻n行,需要定义,默认为1行
q 代表立刻离开 more ,不再显示该文件内容
Ctrl+F 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
!命令 调用Shell,并执行命令
V 调用vi编辑器
⑤常用范例

例一:显示文件中从第3行起的内容

命令:more +3 log1.txt

[root@localhost test]# cat log1.txt 
Thu Feb 25 09:46:34 2021
Create Relation ADR_CONTROL
Create Relation ADR_INVALIDATION
Create Relation INC_METER_IMPT_DEF
Create Relation INC_METER_PK_IMPTS
[root@localhost test]# more +3 log1.txt 
Create Relation ADR_INVALIDATION
Create Relation INC_METER_IMPT_DEF
Create Relation INC_METER_PK_IMPTS

例二:从文件中查找第一个出现"INC_METER_PK_IMPTS"字符串的行,并从该处前两行开始显示输出

命令:more +/INC_METER_PK_IMPTS log1.txt

[root@localhost test]# cat log1.txt 
Thu Feb 25 09:46:34 2021
Create Relation ADR_CONTROL
Create Relation ADR_INVALIDATION
Create Relation INC_METER_IMPT_DEF
Create Relation INC_METER_PK_IMPTS
[root@localhost test]# more +/INC_METER_PK_IMPTS log1.txt 

...跳过
Create Relation ADR_INVALIDATION
Create Relation INC_METER_IMPT_DEF
Create Relation INC_METER_PK_IMPTS

例三:设定每屏显示行数

命令:more -3 log1.txt

最下面显示了该屏展示的内容占文件总行数的比例,按 Ctrl+F 或者 空格键 将会显示下一屏3条内容,百分比也会跟着变化。如果显示完,百分比也会消失。

[root@localhost test]# cat log1.txt 
Thu Feb 25 09:46:34 2021
Create Relation ADR_CONTROL
Create Relation ADR_INVALIDATION
Create Relation INC_METER_IMPT_DEF
Create Relation INC_METER_PK_IMPTS
[root@localhost test]# more -3 log1.txt 
Thu Feb 25 09:46:34 2021
Create Relation ADR_CONTROL
Create Relation ADR_INVALIDATION
--更多--(55%)

例四:列一个目录下的文件用分页显示

命令:ll |more -5

|符号是管道符,用于把|前的输出作为后面命令的输入。每页显示5个文件信息,按 Ctrl+F 或者 空格键 将会显示下5条文件信息。

[root@localhost usr]# ll
总用量 244
dr-xr-xr-x.   2 root root 45056 5月  12 14:20 bin
drwxr-xr-x.   3 root root    18 5月  14 16:01 games
drwxr-xr-x.   4 root root    43 5月  12 14:19 include
dr-xr-xr-x.  37 root root  4096 5月  12 14:19 lib
dr-xr-xr-x. 126 root root 81920 5月  12 14:23 lib64
drwxr-xr-x.  49 root root 12288 5月  12 14:20 libexec
drwxr-xr-x.  12 root root   131 5月  12 14:16 local
dr-xr-xr-x.   2 root root 20480 5月  12 14:20 sbin
drwxr-xr-x. 223 root root  8192 5月  12 14:19 share
drwxr-xr-x.   4 root root    34 5月  12 14:16 src
lrwxrwxrwx.   1 root root    10 11月  3 2020 tmp -> ../var/tmp
[root@localhost usr]# ll |more -5
总用量 244
dr-xr-xr-x.   2 root root 45056 5月  12 14:20 bin
drwxr-xr-x.   3 root root    18 5月  14 16:01 games
drwxr-xr-x.   4 root root    43 5月  12 14:19 include
dr-xr-xr-x.  37 root root  4096 5月  12 14:19 lib
--更多--

Linux命令 - more命令

1.3less命令

Linux中 less 命令也是对文件或其它输出进行分页显示的工具。less 的用法的功能与more指令类似但是比起 more 更加强大,支持各种显示终端。在 more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使用了 less 时,就可以使用 [pageup] [pagedown] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容。除此之外,在 less 里可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。

①语法
less [选项] 要查看的文件
②功能

less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。

③参数
-b   <缓冲区大小> 设置缓冲区的大小。
-e   当文件显示结束后,自动离开。
-f   强迫打开特殊文件,例如外围设备代号、目录和二进制文件。
-g   只标志最后搜索的关键词。
-i:搜索时忽略大小写,除非搜索串中包含大写字母
-I:搜索时忽略大小写
-m   显示类似more命令的百分比。
-M:显示读取文件的百分比、行号及总行数
-N   显示每行的行号。
-o   <文件名> 将less 输出的内容在指定文件中保存起来。
-Q   不使用警告音。
-s   显示连续空行为一行。
-S   行过长时间将超出部分舍弃。
-x   <数字> 将“tab”键显示为规定的数字空格。
④常用操作命令

打开一个文件后,可以使用以下操作命令,搜索时整个文本中匹配的部分会被高亮显示。

操作 功能说明
/字符串 向下搜索“字符串”的功能。n 向下查找;N 向上查找
?字符串 向上搜索“字符串”的功能。 n 向上查找;N 向下查找
n 重复前一个搜索(与 / 或 ? 有关)
N 反向重复前一个搜索(与 / 或 ? 有关)
b 向后翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一行
回车键 回车键
回车键 回车键
[pageup]或[pgup]键 向上翻动一页
⑤常用范例

例一:查看文件

命令:less log1.txt

用来分屏查看文件内容,按Q退出 。

Thu Feb 25 09:46:34 2021
Create Relation ADR_CONTROL
Create Relation ADR_INVALIDATION
Create Relation INC_METER_IMPT_DEF
Create Relation INC_METER_PK_IMPTS
log1.txt (END)

例二:浏览多个文件

命令:less log1.txt log2.txt

当打开多个文件时,使用命令在多个文件之间切换,:n 浏览下一个文件log2.txt,:p 浏览前一个文件log1.txt。

Thu Feb 25 09:46:34 2021
Create Relation ADR_CONTROL
Create Relation ADR_INVALIDATION
Create Relation INC_METER_IMPT_DEF
Create Relation INC_METER_PK_IMPTS
(END) - Next: log2.txt

例三:列一个目录下的文件用分页显示

命令:ll |less

总用量 244
dr-xr-xr-x.   2 root root 45056 5月  12 14:20 bin
drwxr-xr-x.   3 root root    18 5月  14 16:01 games
drwxr-xr-x.   4 root root    43 5月  12 14:19 include
dr-xr-xr-x.  37 root root  4096 5月  12 14:19 lib
dr-xr-xr-x. 126 root root 81920 5月  12 14:23 lib64
drwxr-xr-x.  49 root root 12288 5月  12 14:20 libexec
drwxr-xr-x.  12 root root   131 5月  12 14:16 local
dr-xr-xr-x.   2 root root 20480 5月  12 14:20 sbin
drwxr-xr-x. 223 root root  8192 5月  12 14:19 share
drwxr-xr-x.   4 root root    34 5月  12 14:16 src
lrwxrwxrwx.   1 root root    10 11月  3 2020 tmp -> ../var/tmp
~
~
(END)
⑥附加备注

1.全屏导航

ctrl + F - 向前移动一屏

ctrl + B - 向后移动一屏

ctrl + D - 向前移动半屏

ctrl + U - 向后移动半屏

2.单行导航

j - 向前移动一行

k - 向后移动一行

3.其它导航

G - 移动到最后一行

g - 移动到第一行

q / ZZ - 退出 less 命令

4.其它有用的命令

v - 使用配置的编辑器编辑当前文件

h - 显示 less 的帮助文档

&pattern - 仅显示匹配模式的行,而不是整个文件

5.标记导航

当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置:

ma - 使用 a 标记文本的当前位置

'a - 导航到标记 a 处

1.4head命令

Linux中 head 命令是用来显示开头某个数量的文字区块,显示档案的开头至标准输出中。

①语法
head [参数]... [文件]...
②功能

用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。

③参数
-q或--quiet或--silent   不显示包含给定文件名的文件头即隐藏文件名。
-v或--verbose    总是显示包含给定文件名的文件头即显示文件名。
-c<字节>或--bytes=[-]K   显示每个文件的前多少K字节内容,如果附加"-"参数,则除了每个文件的最后K字节数据外显示剩余全部内容。
-n<行数>或--lines=[-]K   显示每个文件的前K行内容,如果附加"-"参数,则除了每个文件的最后K行外显示剩余全部内容。
④常用范例

例一:显示文件的前3行

命令:head -n 3 log1.txt

[root@localhost test]# cat log1.txt 
Thu Feb 25 09:46:34 2021
Create Relation ADR_CONTROL
Create Relation ADR_INVALIDATION
Create Relation INC_METER_IMPT_DEF
Create Relation INC_METER_PK_IMPTS
[root@localhost test]# head -n 3 log1.txt 
Thu Feb 25 09:46:34 2021
Create Relation ADR_CONTROL
Create Relation ADR_INVALIDATION

例二:显示文件前10个字节

命令:head -c 10 log.txt

执行命令ll查询详细信息时,第五个说明表示文件大小。文件log.txt的文件大小为27byte也就是27字节。每次结尾都会多一个空格占一个字符。英文和数字占一个字节;中文占一个字符,也就是两个字节。

[root@localhost test]# ll
总用量 16
-rw-r--r--. 1 root root 156 5月  14 17:00 log1.txt
-rw-r--r--. 1 root root 592 5月  14 17:00 log2.txt
-rw-r--r--. 1 root root 655 5月  14 17:06 log3.txt
-rw-r--r--. 1 root root  27 5月  17 17:28 log.txt
[root@localhost test]# cat log.txt 
abcdefghigklmnopqrstuvwxyz
[root@localhost test]# head -c 10 log.txt 
abcdefghig

例三:文件的除了最后1个字节以外的内容

命令:head -c -1 log.txt

[root@localhost test]# ll
总用量 16
-rw-r--r--. 1 root root 156 5月  14 17:00 log1.txt
-rw-r--r--. 1 root root 592 5月  14 17:00 log2.txt
-rw-r--r--. 1 root root 655 5月  14 17:06 log3.txt
-rw-r--r--. 1 root root  27 5月  17 17:28 log.txt
[root@localhost test]# cat log.txt 
abcdefghigklmnopqrstuvwxyz
[root@localhost test]# head -c -1 log.txt 
abcdefghigklmnopqrstuvwxyz

例四:输出文件除了最后1行的全部内容

命令:head -n -1 log1.txt

[root@localhost test]# cat log1.txt 
Thu Feb 25 09:46:34 2021
Create Relation ADR_CONTROL
Create Relation ADR_INVALIDATION
Create Relation INC_METER_IMPT_DEF
Create Relation INC_METER_PK_IMPTS
[root@localhost test]# head -n -1 log1.txt 
Thu Feb 25 09:46:34 2021
Create Relation ADR_CONTROL
Create Relation ADR_INVALIDATION
Create Relation INC_METER_IMPT_DEF

1.5tail命令

Linux中 tail 命令从指定点开始将文件写到标准输出。使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不断刷新,使你看到最新的文件内容。

①语法

tail[必要参数][选择参数][文件]

②功能

用于显示指定文件末尾内容,默认情况下tail指令显示文件的后10行内容。不指定文件时,作为输入信息进行处理。常用查看日志文件。

③参数
-f   显示文件最新追加的内容,监视文件变化。
-q   不显示处理信息。
-v   显示详细的处理信息。
-c<数目>   显示的字节数。
-n<行数>   显示文件尾部n行行数。
--pid=PID   与-f合用,表示在进程ID,PID死掉之后结束。 
-q或--quiet或--silent   从不输出给出文件名的首部。
-s或--sleep-interval=S   与-f合用,表示在每次反复的间隔休眠S秒。
④常用范例

例一:显示文件末尾内容

命令:tail -n 3 log1.txt

显示文件最后3行内容。

[root@localhost test]# cat log1.txt 
Thu Feb 25 09:46:34 2021
Create Relation ADR_CONTROL
Create Relation ADR_INVALIDATION
Create Relation INC_METER_IMPT_DEF
Create Relation INC_METER_PK_IMPTS
[root@localhost test]# tail -n 3 log1.txt 
Create Relation ADR_INVALIDATION
Create Relation INC_METER_IMPT_DEF
Create Relation INC_METER_PK_IMPTS

例二:动态查看日志情况

命令:tail -f catalina.out

当我们想实时查看日志情况时,先进入到该日志目录,在使用此命令(后面是跟的日志文件名称),用Ctrl+c来终止。

一个终端tail -f test.log , 另一个终端: echo “hello world” >>test.log

tail -f test.log之后阻塞,等待条件成立。另一个终端: echo “hello world” >>test.log“hello world”写入到test.log>表示追加,>>表示覆盖

经常用于调试代码时,日志显示

例三:从第2行开始显示文件

命令:tail -n +2 log1.txt

[root@localhost test]# cat log1.txt 
Thu Feb 25 09:46:34 2021
Create Relation ADR_CONTROL
Create Relation ADR_INVALIDATION
Create Relation INC_METER_IMPT_DEF
Create Relation INC_METER_PK_IMPTS
[root@localhost test]# tail -n +2 log1.txt 
Create Relation ADR_CONTROL
Create Relation ADR_INVALIDATION
Create Relation INC_METER_IMPT_DEF
Create Relation INC_METER_PK_IMPTS

2.搜索、排序及去掉重复行命令

2.1grep命令

grep是Global Regular Expression Print的缩写,表示全局正则表达式版本,在Linux中 grep 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。它的使用权限是所有用户。
grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。
grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。
查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为“-”,则grep指令会从标准输入设备读取数据。
经常与管道符“|”搭配使用,管道符表示将前一个命令的处理结果输出传递给后面的命令处理。

①语法

grep [选项] [文件或目录]...

②功能

查找文件里符合条件的字符串。

③参数
-a或--text   不要忽略二进制的数据。
-A<显示列数>或--after-context=<显示列数>   除了显示符合范本样式的那一列之外,并显示该列之后的内容。
-b或--byte-offset   在显示符合范本样式的那一列之前,标示出该列第一个字符的位编号。
-B<显示列数>或--before-context=<显示列数>   除了显示符合范本样式的那一列之外,并显示该列之前的内容。
-c或--count   计算符合范本样式的列数。
-C<显示列数>或--context=<显示列数>或-<显示列数>   除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
-d<进行动作>或--directories=<进行动作>   当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-e<范本样式>或--regexp=<范本样式>   指定字符串做为查找文件内容的范本样式。
-E或--extended-regexp   将范本样式为延伸的普通表示法来使用。
-f<范本文件>或--file=<范本文件>   指定范本文件,其内容含有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每列一个范本样式。
-F或--fixed-regexp   将范本样式视为固定字符串的列表。
-G或--basic-regexp   将范本样式视为普通的表示法来使用。
-h或--no-filename   在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
-H或--with-filename   在显示符合范本样式的那一列之前,表示该列所属的文件名称。
-i或--ignore-case   忽略字符大小写的差别。
-l或--file-with-matches   列出文件内容符合指定的范本样式的文件名称。
-L或--files-without-match   列出文件内容不符合指定的范本样式的文件名称。
-n或--line-number   在显示符合范本样式的那一列之前,标示出该列的列数编号。参数可以显示该查找内容所在的行号
-q或--quiet或--silent   不显示任何信息。
-r或--recursive   此参数的效果和指定“-d recurse”参数相同,若是目录, 则可以递归搜索
-s或--no-messages   不显示错误信息。
-v或--revert-match   反转查找。
-w或--word-regexp   只显示全字符合的列。
-x或--line-regexp   只显示全列符合的列。
-y   此参数的效果和指定“-i”参数相同。
④规则表达式

grep的规则表达式:

^   锚定行的开始,如:'^grep'匹配所有以grep开头的行。    

$   锚定行的结束,如:'grep$'匹配所有以grep结尾的行。    

.   匹配一个非换行符的字符,如:'gr.p'匹配gr后接一个任意字符,然后是p。    

*   匹配零个或多个先前字符,如:'*grep'匹配所有一个或多个空格后紧跟grep的行。    

.*   一起用代表任意字符。   

[]   匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。    

[^]   匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。    

\(..\)   标记匹配字符,如'\(love\)',love被标记为1。    

\<   锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。    

\>   锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。    

x\{m\}   重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。    

x\{m,\}   重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。    

x\{m,n\}   重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。   

\w   匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。   

\W   \w的反置形式,匹配一个或多个非单词字符,如点号句号等。   

\b   单词锁定符,如: '\bgrep\b'只匹配grep。  

POSIX字符:

为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是[A-Za-z0-9]的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。

[:alnum:]   文字数字字符。   

[:alpha:]   文字字符。   

[:digit:]   数字字符。   

[:graph:]   非空字符(非空格、控制字符)。   

[:lower:]   小写字符。   

[:cntrl:]   控制字符。   

[:print:]   非空字符(包括空格)。   

[:punct:]   标点符号。   

[:space:]   所有空白字符(新行,空格,制表符)。   

[:upper:]   大写字符。   

[:xdigit:]   十六进制数字(0-9,a-f,A-F)。  
⑤常用范例

例一:查找指定进程

命令:ps -ef|grep server

查找server的进程。除最后一条记录是查找出的进程;最后一条结果是grep进程本身,并非真正要找的进程。

[root@localhost ~]# ps -ef|grep server
root        3046    2888  0 10:50 ?        00:00:00 /usr/libexec/gnome-shell-calendar-server
root        3164    3138  0 10:50 ?        00:00:00 /usr/libexec/evolution-calendar-factory-subprocess --factory all --bus-name org.gnome.evolution.dataserver.Subprocess.Backend.Calendarx3138x2 --own-path /org/gnome/evolution/dataserver/Subprocess/Backend/Calendar/3138/2
root        3260    3193  0 10:50 ?        00:00:00 /usr/libexec/evolution-addressbook-factory-subprocess --factory all --bus-name org.gnome.evolution.dataserver.Subprocess.Backend.AddressBookx3193x2 --own-path /org/gnome/evolution/dataserver/Subprocess/Backend/AddressBook/3193/2
root        3447    2888  1 10:51 ?        00:00:01 /usr/libexec/gnome-terminal-server
root        3584    3452  0 10:53 pts/0    00:00:00 grep --color=auto server

例二:查找指定进程个数

命令: ps -ef|grep server -cps -ef|grep -c server

[root@localhost ~]# ps -ef|grep server -c
5
[root@localhost ~]# ps -ef|grep -c server
5

例三:从文件中读取关键词进行搜索

命令: cat log.txt | grep -f log1.txt

输出log.txt文件中含有从log1.txt文件中读取出的关键词的内容行

[root@localhost test]# cat log.txt
hnlinux
ubuntu
ubuntu linux
redhat
Redhat
linuxmint
[root@localhost test]# cat log1.txt 
linux
Redhat
[root@localhost test]# cat log.txt | grep -f log1.txt 
hnlinux
ubuntu linux
Redhat
linuxmint

例四:从文件中读取关键词进行搜索且显示行号

命令: cat log.txt | grep -nf log1.txt

输出log.txt文件中含有从log1.txt文件中读取出的关键词的内容行,并显示每一行的行号

[root@localhost test]# cat log.txt
hnlinux
ubuntu
ubuntu linux
redhat
Redhat
linuxmint
[root@localhost test]# cat log1.txt 
linux
Redhat
[root@localhost test]# cat log.txt | grep -nf log1.txt 
1:hnlinux
3:ubuntu linux
5:Redhat
6:linuxmint

例五:从文件中查找关键词

命令: grep 'linux' log.txt

[root@localhost test]# grep 'linux' log.txt 
hnlinux
ubuntu linux
linuxmint

例六:从多个文件中查找关键词

命令: grep 'linux' log.txt log1.txt

多文件时,输出查询到的信息内容行时,会把文件的命名在行最前面输出并且加上":"作为标识符。

[root@localhost test]# grep 'linux' log.txt log1.txt 
log.txt:hnlinux
log.txt:ubuntu linux
log.txt:linuxmint
log1.txt:linux

例七:grep不显示本身进程

命令: ps -ef | grep server | grep -v "grep"

[root@localhost test]# ps -ef | grep server
root        3046    2888  0 10:50 ?        00:00:00 /usr/libexec/gnome-shell-calendar-server
root        3164    3138  0 10:50 ?        00:00:00 /usr/libexec/evolution-calendar-factory-subprocess --factory all --bus-name org.gnome.evolution.dataserver.Subprocess.Backend.Calendarx3138x2 --own-path /org/gnome/evolution/dataserver/Subprocess/Backend/Calendar/3138/2
root        3260    3193  0 10:50 ?        00:00:00 /usr/libexec/evolution-addressbook-factory-subprocess --factory all --bus-name org.gnome.evolution.dataserver.Subprocess.Backend.AddressBookx3193x2 --own-path /org/gnome/evolution/dataserver/Subprocess/Backend/AddressBook/3193/2
root        3447    2888  0 10:51 ?        00:00:02 /usr/libexec/gnome-terminal-server
root        4086    3452  0 11:21 pts/0    00:00:00 grep --color=auto server
[root@localhost test]# ps -ef | grep server | grep -v "grep"
root        3046    2888  0 10:50 ?        00:00:00 /usr/libexec/gnome-shell-calendar-server
root        3164    3138  0 10:50 ?        00:00:00 /usr/libexec/evolution-calendar-factory-subprocess --factory all --bus-name org.gnome.evolution.dataserver.Subprocess.Backend.Calendarx3138x2 --own-path /org/gnome/evolution/dataserver/Subprocess/Backend/Calendar/3138/2
root        3260    3193  0 10:50 ?        00:00:00 /usr/libexec/evolution-addressbook-factory-subprocess --factory all --bus-name org.gnome.evolution.dataserver.Subprocess.Backend.AddressBookx3193x2 --own-path /org/gnome/evolution/dataserver/Subprocess/Backend/AddressBook/3193/2
root        3447    2888  0 10:51 ?        00:00:02 /usr/libexec/gnome-terminal-server

例八:找出以u开头的行内容

命令: cat log.txt | grep ^u

[root@localhost test]# cat log
log1.txt  log2.txt  log3.txt  log.txt   
[root@localhost test]# cat log
log1.txt  log2.txt  log3.txt  log.txt   
[root@localhost test]# cat log.txt 
hnlinux
ubuntu
ubuntu linux
redhat
Redhat
linuxmint
[root@localhost test]# cat log.txt | grep ^u
ubuntu
ubuntu linux

例九:找出不是以u开头的行内容

命令: cat log.txt | grep ^[^u]cat log.txt | grep -v ^u

[root@localhost test]# cat log.txt 
hnlinux
ubuntu
ubuntu linux
redhat
Redhat
linuxmint
[root@localhost test]# cat log.txt | grep ^[^u]
hnlinux
redhat
Redhat
linuxmint

[root@localhost test]# cat log.txt | grep -v ^u
hnlinux
redhat
Redhat
linuxmint

例十:找出输以hat结尾的行内容

命令: cat log.txt | grep hat$

[root@localhost test]# cat log.txt 
hnlinux
ubuntu
ubuntu linux
redhat
Redhat
linuxmint
[root@localhost test]# cat log.txt | grep hat$
redhat
Redhat

例十一:包含ed或者nl字符的内容行

命令: cat log.txt | grep -E "ed|nl"

[root@localhost test]# cat log.txt 
hnlinux
ubuntu
ubuntu linux
redhat
Redhat
linuxmint
[root@localhost test]# cat log.txt | grep -E "ed|nl"
hnlinux
redhat
Redhat

例十二:当前目录下面以.txt 结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行

命令: grep '[a-z]\{7\}' *.txt

[root@localhost test]# grep '[a-z]\{7\}' *.txt
log2.txt:Directory does not exist for read/write [F:\OracleServer\product\11.2.0\dbhome_1\log] [F:\OracleServer\product\11.2.0\dbhome_1\log\diag]
log2.txt:Directory does not exist for read/write [f:\oracleclient\log] []
log2.txt:Directory does not exist for read/write [F:\OracleServer\product\11.2.0\dbhome_1\log] [F:\OracleServer\product\11.2.0\dbhome_1\log\diag\clients]
log2.txt:Directory does not exist for read/write [F:\OracleServer\product\11.2.0\dbhome_1\log] [F:\OracleServer\product\11.2.0\dbhome_1\log\diag\clients]
log3.txt:Directory does not exist for read/write [F:\OracleServer\product\11.2.0\dbhome_1\log] [F:\OracleServer\product\11.2.0\dbhome_1\log\diag\clients]
log3.txt:Directory does not exist for read/write [F:\OracleServer\product\11.2.0\dbhome_1\log] [F:\OracleServer\product\11.2.0\dbhome_1\log\diag\clients]
log3.txt:Directory does not exist for read/write [F:\OracleServer\product\11.2.0\dbhome_1\log] [F:\OracleServer\product\11.2.0\dbhome_1\log\diag\clients]
log3.txt:Directory does not exist for read/write [F:\OracleServer\product\11.2.0\dbhome_1\log] [F:\OracleServer\product\11.2.0\dbhome_1\log\diag\clients]
log.txt:hnlinux
log.txt:linuxmint

例十三:grep -r(有目录) “查找的内容” 搜索的路径

命令:grep -r -n "hello world" ./ n ------显示行号

命令:grep -r -i -n "HELLO world" ./ -------忽略大小小查找

3.复制、删除和移动文件的命令

3.1cp命令

cp 是copy的缩写,Linux中 cp命令用来复制文件或者目录。一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数。但是如果是在shell脚本中执行cp时,没有-i参数时不会询问是否覆盖。这说明命令行和shell脚本的执行方式有些不同。

①语法

cp [选项]... [-T] 源文件 目标文件

cp [选项]... 源文件... 目录

cp [选项]... -t 目录 源文件...

②功能

将源文件复制至目标文件,或将多个源文件复制至目标目录。如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,而最后的目的地并非是一个已存在的目录,则会出现错误信息。

③参数
-a或--archive  此参数的效果和同时指定"-dpR"或"-dR --preserve=all"参数相同。用于复制整个目录,包括目录中的子目录等都递归的复制,而且还要保持文件的访问模式,所有者、时间戳等属性与原文件一样。
-b或--backup  删除覆盖目标文件之前的备份,创建备份,备份文件会在字尾加上一个备份字符串。 
-d或--no-dereference  当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录。 
-f或--force  强行复制文件或目录,不论目标文件或目录是否已存在。 如果目标文件无法打开则将其移除并重试(当-n 选项存在时则不需再选此项)。
-i或--interactive  覆盖既有文件之前先询问用户(使前面的 -n 选项失效)。
-l或--link  对源文件建立硬连接,而非复制文件。 
-p或--preserve  保留源文件或目录的属性。 
-P或--parents  保留源文件或目录的路径即不跟随源文件中的符号链接。 
-r  递归处理,将指定目录下的文件与子目录一并处理。 
-R或--recursive  递归处理,将指定目录下的所有文件与子目录一并处理。 
-s或--symbolic-link  对源文件建立符号连接,而非复制文件。 
-S<备份字尾字符串>或--suffix=<备份字尾字符串>  用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字尾字符串是符号"~"。 
-u或--update  使用这项参数后只会在源文件的更改时间较目标文件更新时或是 名称相互对应的目标文件并不存在,才复制文件。 
-v或--verbose  显示指令执行过程。 
-V<备份方式>或--version-control=<备份方式>  用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这字符串不仅可用"-S"参数变更,当使用"-V"参数指定不同备份方式时,也会产生不同字尾的备份字串。  
-x或--one-file-system  复制的文件或目录存放的文件系统,必须与cp指令执行时所处的文件系统相同,否则不予复制。 
--sparse=<使用时机>  设置保存稀疏文件的时机。  
--help   在线帮助。查看该命令功能和可带参数等。
④常用范例

例一:复制单个文件到目标目录

命令:cp log1.txt test1

文件在目标文件中不存在时,直接复制过去。
在没有带-a参数时,两个文件的时间是不一样的。在带了-a参数时,两个文件的时间是一致的。

[root@localhost test]# ll
总用量 0
-rw-r--r--. 1 root root 0 5月  14 15:21 log1.txt
-rw-r--r--. 1 root root 0 5月  14 15:21 log2.txt
drwxr-xr-x. 2 root root 6 5月  14 15:23 test1
drwxr-xr-x. 2 root root 6 5月  14 15:21 test2
[root@localhost test]# cd test1
[root@localhost test1]# ll
总用量 0
[root@localhost test1]# cd ../
[root@localhost test]# cp log1.txt test1
[root@localhost test]# ll
总用量 0
-rw-r--r--. 1 root root  0 5月  14 15:21 log1.txt
-rw-r--r--. 1 root root  0 5月  14 15:21 log2.txt
drwxr-xr-x. 2 root root 22 5月  14 15:24 test1
drwxr-xr-x. 2 root root  6 5月  14 15:21 test2
[root@localhost test]# cd test1
[root@localhost test1]# ll
总用量 0
-rw-r--r--. 1 root root 0 5月  14 15:24 log1.txt

命令:cp log1.txt test1

目标文件存在时,会询问是否覆盖。这是因为cp是cp -i的别名。目标文件存在时,即使加了-f标志,也还会询问是否覆盖。

[root@localhost test]# ll
总用量 0
-rw-r--r--. 1 root root  0 5月  14 15:21 log1.txt
-rw-r--r--. 1 root root  0 5月  14 15:21 log2.txt
drwxr-xr-x. 2 root root 22 5月  14 15:24 test1
drwxr-xr-x. 2 root root  6 5月  14 15:21 test2
[root@localhost test]# cd test1
[root@localhost test1]# ll
总用量 0
-rw-r--r--. 1 root root 0 5月  14 15:24 log1.txt
[root@localhost test1]# cd ../
[root@localhost test]# cp log1.txt test1
cp:是否覆盖'test1/log1.txt'? y

例二:复制整个目录

命令:cp -a test1 test2

目标目录存在时,整个源目录被复制到目标目录里面。

[root@localhost test]# ll
总用量 0
-rw-r--r--. 1 root root  0 5月  14 15:21 log1.txt
-rw-r--r--. 1 root root  0 5月  14 15:21 log2.txt
drwxr-xr-x. 2 root root 22 5月  14 15:24 test1
drwxr-xr-x. 2 root root  6 5月  14 15:21 test2
[root@localhost test]# cd test2
[root@localhost test2]# ll
总用量 0
[root@localhost test2]# cd ../
[root@localhost test]# cp -a test1 test2
[root@localhost test]# cd test2
[root@localhost test2]# ll
总用量 0
drwxr-xr-x. 2 root root 22 5月  14 15:24 test1

命令:cp -a test1 test3

目标目录不存在时,会创建该目录,将整个源目录下的所有文件复制到目标目录里面。

[root@localhost test]# ll
总用量 0
-rw-r--r--. 1 root root  0 5月  14 15:21 log1.txt
-rw-r--r--. 1 root root  0 5月  14 15:21 log2.txt
drwxr-xr-x. 2 root root 22 5月  14 15:24 test1
drwxr-xr-x. 3 root root 19 5月  14 15:33 test2
[root@localhost test]# cp -a test1 test3
[root@localhost test]# ll
总用量 0
-rw-r--r--. 1 root root  0 5月  14 15:21 log1.txt
-rw-r--r--. 1 root root  0 5月  14 15:21 log2.txt
drwxr-xr-x. 2 root root 22 5月  14 15:24 test1
drwxr-xr-x. 3 root root 19 5月  14 15:33 test2
drwxr-xr-x. 2 root root 22 5月  14 15:24 test3
[root@localhost test]# cd test3
[root@localhost test3]# ll
总用量 0
-rw-r--r--. 1 root root 0 5月  14 15:28 log1.txt

例三:其他复制操作

1 cp file1 file2 (不存在)
要拷贝的文件file1复制一份重命名为file2
 
2 cp file1 file2 (存在) 
要拷贝的文件file1覆盖file2

3 cp file dir(必须存在)
将要拷贝的文件file拷贝到dir目录下
例子:cp aa.log mydir

4 cp -r dir1 dir2(不存在)
将一个目录拷贝到另一个目录中,目标目录不存在的话复制一份

5 cp -r dir1 dir2(存在)
将一个目录拷贝到另一个目录中,目标目录存在的话将dir1复制一份到dir2子目录

3.2rm命令

rm 是remove 的缩写,Linux中 rm 命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是删除了链接,原有文件均保持不变。rm是一个危险的命令,使用的时候要特别当心,在执行rm之前最好先确认一下在哪个目录,到底要删除什么东西。

①语法

rm [选项] 目录名称

②功能

删除一个目录中的一个或多个文件或目录,如欲删除目录必须加上参数"-r",否则预设仅会删除文件。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。

③参数
-d或--directory  直接把欲删除的目录的硬连接数据删成0,删除该目录。 
-f或--force  强制删除文件或目录,忽略不存在的文件,不提示确认。 
-i或--interactive  删除既有文件或目录之前先询问用户。 
-I   在删除超过三个文件或者递归删除前要求确认。此选项比-i 提示内容更少,但同样可以阻止大多数错误发生。
-r或-R或--recursive  递归删除,将指定目录下的所有文件及子目录一并删除。 
-v或--verbose  显示指令执行过程。 
--help   在线帮助。查看该命令功能和可带参数等。
④常用范例

例一:删除文件系统会先询问是否删除

命令:rm 文件名

输入rm test.txt命令后,系统会询问是否删除,输入y后就会删除文件,不想删除则数据n。

[root@localhost games]# ll
总用量 0
-rw-r--r--. 1 root root 0 5月  13 11:19 test.txt
[root@localhost games]# rm test.txt 
rm:是否删除普通空文件 'test.txt'?y
[root@localhost games]# ll
总用量 0

例二:强行删除文件系统不再提示

命令:rm -f 文件名

[root@localhost games]# ll
总用量 0
-rw-r--r--. 1 root root 0 5月  13 11:23 test1.txt
[root@localhost games]# rm -f test1.txt 
[root@localhost games]# ll
总用量 0

例三:删除任何.text文件并删除前逐一询问确认

命令: rm -i *.txt

[root@localhost games]# ll
总用量 0
-rw-r--r--. 1 root root 0 5月  13 11:25 test1.txt
-rw-r--r--. 1 root root 0 5月  13 11:25 test2.txt
[root@localhost games]# rm -i *.txt
rm:是否删除普通空文件 'test1.txt'?y
rm:是否删除普通空文件 'test2.txt'?y
[root@localhost games]# ll
总用量 0

例四:将 test1子目录及子目录中所有档案删除

命令: rm -r test1

执行 rm -r命令如果该目录里面有文件,会先进入该目录,把文件删除在删除该目录。rm -rf 命令则不会一一确认。

[root@localhost test]# ll
总用量 0
drwxr-xr-x. 2 root root 23 5月  13 14:06 test1
drwxr-xr-x. 2 root root  6 5月  13 14:06 test2
[root@localhost test]# rm -r test1
rm:是否进入目录'test1'? y
rm:是否删除普通空文件 'test1/test1.txt'?y
rm:是否删除目录 'test1'?y
[root@localhost test]# ll
总用量 0
drwxr-xr-x. 2 root root 6 5月  13 14:06 test2

例五:删除以 t 开头的文件

命令: rm -- t

[root@localhost test]# ll t*
-rw-r--r--. 1 root root 0 5月  13 14:15 t
-rw-r--r--. 1 root root 0 5月  13 14:16 t1

test2:
总用量 0
[root@localhost test]# rm -- t*
rm:是否删除普通空文件 't'?y
rm:是否删除普通空文件 't1'?y
rm: 无法删除'test2': 是一个目录

命令:rm ./t

[root@localhost test]# ll t*
-rw-r--r--. 1 root root 0 5月  13 14:20 t2
-rw-r--r--. 1 root root 0 5月  13 14:20 t3

test2:
总用量 0
[root@localhost test]# rm ./t*
rm:是否删除普通空文件 './t2'?y
rm:是否删除普通空文件 './t3'?y
rm: 无法删除'./test2': 是一个目录
[root@localhost test]# ll t*
总用量 0

3.3mv命令

mv 是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),Linux中 mv 命令经常用来备份文件或者目录。

①语法

mv [选项] 源文件或目录 目标文件或目录

②功能

mv命令中第二个参数类型不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。即mv可移动文件或目录,或是更改文件或目录的名称。

③参数
-b或--backup  若需覆盖文件,则覆盖前先行备份。 
-f或--force  若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录且不会询问。 
-i或--interactive  覆盖前先行询问用户。 
-n或--no-clobber  不覆盖已存在文件,如果您指定了-i、-f、-n 中的多个,仅最后一个生效。
-S<附加字尾>或--suffix=<附加字尾>  与-b参数一并使用,可指定备份文件的所要附加的字尾,即替换备份文件后缀。
-t或--target-directory=DIRECTORY   将所有参数指定的源文件或目录移动至指定目录。
-T或--no-target-directory   将目标文件视作普通文件处理。
-u或--update  在移动或更改文件名时,若目标文件已存在,且其文件日期比源文件新,则不覆盖目标文件。 
-v或--verbose  执行时显示详细的信息。 
-V=<方法>或--version-control=<方法>  与-b参数一并使用,可指定备份的方法。 
--help   在线帮助。查看该命令功能和可带参数等。
④常用范例

例一:文件改名

命令:mv test.log test1.txt

将文件test.log重命名为test1.txt

[root@localhost test]# ll
总用量 0
drwxr-xr-x. 2 root root 6 5月  14 10:40 test11
-rw-r--r--. 1 root root 0 5月  14 10:40 test.log
[root@localhost test]# mv test
test11/   test.log  
[root@localhost test]# mv test.log test1.txt
[root@localhost test]# ll
总用量 0
drwxr-xr-x. 2 root root 6 5月  14 10:40 test11
-rw-r--r--. 1 root root 0 5月  14 10:40 test1.txt

例二:移动文件

命令:mv test1.txt test11

将test1.txt文件移到目录test11中

[root@localhost test]# ll
总用量 0
drwxr-xr-x. 2 root root 6 5月  14 10:40 test11
-rw-r--r--. 1 root root 0 5月  14 10:40 test1.txt
[root@localhost test]# mv test1.txt test11
[root@localhost test]# ll
总用量 0
drwxr-xr-x. 2 root root 23 5月  14 10:43 test11
[root@localhost test]# cd test11/
[root@localhost test11]# ll
总用量 0
-rw-r--r--. 1 root root 0 5月  14 10:40 test1.txt

例三:将多个文件移动到指定目录

命令:mv log1.txt log2.txt log3.txt test22

将log1.txt ,log2.txt, log3.txt 三个文件移到 test22目录中去

[root@localhost test]# ll
总用量 0
-rw-r--r--. 1 root root  0 5月  14 10:57 log1.txt
-rw-r--r--. 1 root root  0 5月  14 10:57 log2.txt
-rw-r--r--. 1 root root  0 5月  14 10:58 log3.txt
drwxr-xr-x. 2 root root 23 5月  14 10:43 test11
drwxr-xr-x. 2 root root  6 5月  14 10:58 test22
[root@localhost test]# mv log1.txt log2.txt log3.txt test22
[root@localhost test]# ll
总用量 0
drwxr-xr-x. 2 root root 23 5月  14 10:43 test11
drwxr-xr-x. 2 root root 54 5月  14 11:00 test22
[root@localhost test]# cd test22/
[root@localhost test22]# ll
总用量 0
-rw-r--r--. 1 root root 0 5月  14 10:57 log1.txt
-rw-r--r--. 1 root root 0 5月  14 10:57 log2.txt
-rw-r--r--. 1 root root 0 5月  14 10:58 log3.txt

命令:mv -t /usr/game/test/ log1.txt log2.txt log3.txt

将三个文件移动到test目录中去。

[root@localhost test22]# ll
总用量 0
-rw-r--r--. 1 root root 0 5月  14 10:57 log1.txt
-rw-r--r--. 1 root root 0 5月  14 10:57 log2.txt
-rw-r--r--. 1 root root 0 5月  14 10:58 log3.txt
[root@localhost test22]# mv -t /usr/games/test/ log1.txt log2.txt log3.txt 
[root@localhost test22]# cd ../
[root@localhost test]# ll
总用量 0
-rw-r--r--. 1 root root  0 5月  14 10:57 log1.txt
-rw-r--r--. 1 root root  0 5月  14 10:57 log2.txt
-rw-r--r--. 1 root root  0 5月  14 10:58 log3.txt
drwxr-xr-x. 2 root root 23 5月  14 10:43 test11
drwxr-xr-x. 2 root root  6 5月  14 11:07 test22

例四:将文件log1.txt改名为log2.txt

命令:mv -i log1.txt log2.txt

如果log2.txt已经存在,则询问是否覆盖

[root@localhost test]# ll
总用量 0
-rw-r--r--. 1 root root  0 5月  14 10:57 log1.txt
-rw-r--r--. 1 root root  0 5月  14 10:57 log2.txt
-rw-r--r--. 1 root root  0 5月  14 10:58 log3.txt
drwxr-xr-x. 2 root root 23 5月  14 10:43 test11
drwxr-xr-x. 2 root root  6 5月  14 11:07 test22
[root@localhost test]# mv -i log1.txt log2.txt
mv:是否覆盖'log2.txt'? y
[root@localhost test]# ll
总用量 0
-rw-r--r--. 1 root root  0 5月  14 10:57 log2.txt
-rw-r--r--. 1 root root  0 5月  14 10:58 log3.txt
drwxr-xr-x. 2 root root 23 5月  14 10:43 test11
drwxr-xr-x. 2 root root  6 5月  14 11:07 test22

命令:mv -f log3.txt log2.txt

即使log2.txt存在,也是直接覆盖掉。-f 这是个危险的选项,使用的时候一定要保持头脑清晰,一般情况下最好不用加上它

[root@localhost test]# ll
总用量 0
-rw-r--r--. 1 root root  0 5月  14 10:57 log2.txt
-rw-r--r--. 1 root root  0 5月  14 10:58 log3.txt
drwxr-xr-x. 2 root root 23 5月  14 10:43 test11
drwxr-xr-x. 2 root root  6 5月  14 11:07 test22 
[root@localhost test]# mv -f log3.txt log2.txt 
[root@localhost test]# ll
总用量 0
-rw-r--r--. 1 root root  0 5月  14 10:58 log2.txt
drwxr-xr-x. 2 root root 23 5月  14 10:43 test11
drwxr-xr-x. 2 root root  6 5月  14 11:07 test22

例五:目录的移动

命令:mv test22 test11

如果目录test11不存在,将目录test22改名为test11;否则,将test22移动到test11中

[root@localhost test]# ll
总用量 0
-rw-r--r--. 1 root root  0 5月  14 10:58 log2.txt
drwxr-xr-x. 2 root root 23 5月  14 10:43 test11
drwxr-xr-x. 2 root root  6 5月  14 11:07 test22
[root@localhost test]# mv test22 test11
[root@localhost test]# ll
总用量 0
-rw-r--r--. 1 root root  0 5月  14 10:58 log2.txt
drwxr-xr-x. 3 root root 37 5月  14 11:29 test11
[root@localhost test]# cd test11/
[root@localhost test11]# ll
总用量 0
-rw-r--r--. 1 root root 0 5月  14 10:40 test1.txt
drwxr-xr-x. 2 root root 6 5月  14 11:07 test22

命令:mv test11 test1

[root@localhost test]# ll
总用量 0
-rw-r--r--. 1 root root  0 5月  14 10:58 log2.txt
drwxr-xr-x. 3 root root 37 5月  14 11:29 test11
[root@localhost test]# mv test11 test1
[root@localhost test]# ll
总用量 0
-rw-r--r--. 1 root root  0 5月  14 10:58 log2.txt
drwxr-xr-x. 3 root root 37 5月  14 11:29 test1
[root@localhost test]# cd test1/
[root@localhost test1]# ll
总用量 0
-rw-r--r--. 1 root root 0 5月  14 10:40 test1.txt
drwxr-xr-x. 2 root root 6 5月  14 11:07 test22

例五:移动当前文件夹下的所有文件到上一级目录

命令:mv * ../

[root@localhost games]# ll
总用量 0
drwxr-xr-x. 3 root root 35 5月  14 11:31 test
[root@localhost games]# cd test/
[root@localhost test]# ll
总用量 0
-rw-r--r--. 1 root root  0 5月  14 10:58 log2.txt
drwxr-xr-x. 3 root root 37 5月  14 11:29 test1
[root@localhost test]# mv * ../
[root@localhost test]# ll
总用量 0
[root@localhost test]# cd ../
[root@localhost games]# ll
总用量 0
-rw-r--r--. 1 root root  0 5月  14 10:58 log2.txt
drwxr-xr-x. 2 root root  6 5月  14 14:16 test
drwxr-xr-x. 3 root root 37 5月  14 11:29 test1

例六:把当前目录的一个子目录里的文件移动到另一个子目录里

命令:mv test1/*.txt test

将test1下面以txt结尾的文件移动到test里面。

[root@localhost games]# ll
总用量 0
-rw-r--r--. 1 root root  0 5月  14 10:58 log2.txt
drwxr-xr-x. 2 root root  6 5月  14 14:16 test
drwxr-xr-x. 3 root root 37 5月  14 11:29 test1
[root@localhost games]# cd test
[root@localhost test]# ll
总用量 0
[root@localhost test]# cd ../
[root@localhost games]# cd test1
[root@localhost test1]# ll
总用量 0
-rw-r--r--. 1 root root 0 5月  14 10:40 test1.txt
drwxr-xr-x. 2 root root 6 5月  14 11:07 test22
[root@localhost test1]# cd ../
[root@localhost games]# mv test1/*.txt test
[root@localhost games]# cd test
[root@localhost test]# ll
总用量 0
-rw-r--r--. 1 root root 0 5月  14 10:40 test1.txt
[root@localhost test]# cd ../
[root@localhost games]# cd test1
[root@localhost test1]# ll
总用量 0
drwxr-xr-x. 2 root root 6 5月  14 11:07 test22

例七:文件被覆盖前做简单备份

命令:mv log2.txt -b log1.txt

-b 不接受参数,mv会去读取环境变量VERSION_CONTROL来作为备份策略。

-b该选项指定如果目标文件存在时的动作,共有四种备份策略:

1.CONTROL=none或off : 不备份。

2.CONTROL=numbered或t:数字编号的备份

3.CONTROL=existing或nil:如果存在以数字编号的备份,则继续编号备份m+1…n:
执行mv操作前已存在以数字编号的文件log2.txt.1,那么再次执行将产生log2.txt2,以次类推。如果之前没有以数字编号的文件,则使用下面讲到的简单备份。

4.CONTROL=simple或never:使用简单备份:在被覆盖前进行了简单备份,简单备份只能有一份,再次被覆盖时,简单备份也会被覆盖。

[root@localhost games]# ll
总用量 0
-rw-r--r--. 1 root root  0 5月  14 14:29 log1.txt
-rw-r--r--. 1 root root  0 5月  14 10:58 log2.txt
drwxr-xr-x. 2 root root 23 5月  14 14:22 test
drwxr-xr-x. 3 root root 20 5月  14 14:22 test1
[root@localhost games]# mv log2.txt -b log1.txt
mv:是否覆盖'log1.txt'? y
[root@localhost games]# ll
总用量 0
-rw-r--r--. 1 root root  0 5月  14 10:58 log1.txt
-rw-r--r--. 1 root root  0 5月  14 14:29 log1.txt~
drwxr-xr-x. 2 root root 23 5月  14 14:22 test
drwxr-xr-x. 3 root root 20 5月  14 14:22 test1

常用操作

mv命令: mv 源文件  目标文件    
 	改名:
		1 mv file1 file2(不存在)  
		2 mv file1 file2(存在)
		3 mv dir1 dir2(不存在)
	移动:
		4 mv file dir (必须存在)
		5 mv dir1 dir2(存在) 

4.文件内容统计命令

4.1wc命令

在 Linux中,wc (word count)命令常用于计算文件的行数、字数和字节数,日常操作以及脚本编程中经常使用到。本篇文章将结合实例对 wc 命令进行详细介绍。

(1)语法格式
wc [OPTION]... [FILE]...

FILE 可以包含多个,每个文件对应输出一行,如果没有文件或文件为 “-” 时,从标准输入读取数据。

(2)常用参数
-l , --lines : 显示行数;

-w , --words : 显示字数;

-m , --chars : 显示字符数;

-c , --bytes : 显示字节数;

-L , --max-line-length : 显示最长行的长度;

这里先简单的说明参数的含义,下面通过实例具体分析。

(3)实例

下面的实例以 /etc/passwd 的前 10 行为例进行讲解,文件 passwd-10 如下所示:

daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
①不带参数

命令直接执行,输出包含四项,分别代表:行数、字数、字节数、文件。

为什么字数输出 10 呢?

字是指以空格、tab、换行分隔的非零长度字符。例子中每行属于一个字,所以输出10。

接下来看多个文件的情况:

linuxy@linuxy:~$ wc /home/linuxy/passwd-10 /etc/passwd
  10   10  444 /home/linuxy/passwd-10
  47   82 2787 /etc/passwd
  57   92 3231 总用量
linuxy@linuxy:~$

如果计算多个文件,每个文件输出一行,最后一行代表每一项的总量。

②计算行数
linuxy@linuxy:~$ wc -l /home/linuxy/passwd-10 
10 /home/linuxy/passwd-10
linuxy@linuxy:~$

输出有两项,分别是行数和文件。

③计算字数
linuxy@linuxy:~$ wc -w /home/linuxy/passwd-10 
10 /home/linuxy/passwd-10
linuxy@linuxy:~$

这里输出 10 是因为每行代表一个字,字是指以空格、tab、换行分隔的非零长度字符。

④计算字符数
linuxy@linuxy:~$ wc -m /home/linuxy/passwd-10 
444 /home/linuxy/passwd-10
linuxy@linuxy:~$

输出包含两项,分别是字符数和文件。

⑤计算字节数
linuxy@linuxy:~$ wc -c /home/linuxy/passwd-10 
444 /home/linuxy/passwd-10
linuxy@linuxy:~$

输出包含两项,分别是字节数和文件,这里一个字节存储一个字符,故计算出的字节数等于字符数,注意:一个汉字通常使用两个字节存储。

⑥计算最长行长度
linuxy@linuxy:~$ wc -L /home/linuxy/passwd-10 
51 /home/linuxy/passwd-10
linuxy@linuxy:~$ 

输出包含两项:最长行的字符数和文件。

(4)总结

看完上面的知识点,你就掌握了 wc 命令的基本操作了。当然还有更深入的使用,比如:与管道一块使用,从标准输入读取数据等,这些放到下一篇文章中讲解。

5.查找文件和目录命令

5.1find命令

Linux中 find 命令在目录结构中搜索文件,并执行指定的操作。find命令提供了相当多的查找条件,功能很强大。即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。 在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。

①语法

find [搜索范围] [参数]

②功能

用于在文件树种查找文件,并作出相应的处理。任何位于参数之前的字符串都将被视为欲查找的目录。

③参数
-amin<分钟>  查找在指定时间曾被存取过的文件或目录,单位以分钟计算。 
-anewer<参考文件或目录>  查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录。 
-atime<24小时数>  查找在指定时间曾被存取过的文件或目录,单位以24小时计算。 
-cmin<分钟>  查找在指定时间之时被更改的文件或目录。 
-cnewer<参考文件或目录>  查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录。 
-ctime<24小时数>  查找在指定时间之时被更改的文件或目录,单位以24小时计算。 
-daystart  从本日开始计算时间。 
-depth  从指定目录下最深层的子目录开始查找。 
-expty  寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录。 
-exec<执行指令>  假设find指令的回传值为True,就执行该指令。 
-false  将find指令的回传值皆设为False。 
-fls<列表文件>  此参数的效果和指定"-ls"参数类似,但会把结果保存为指定的列表文件。 
-follow  排除符号连接。 
-fprint<列表文件>  此参数的效果和指定"-print"参数类似,但会把结果保存成指定的列表文件。 
-fprint0<列表文件>  此参数的效果和指定"-print0"参数类似,但会把结果保存成指定的列表文件。 
-fprintf<列表文件><输出格式>  此参数的效果和指定"-printf"参数类似,但会把结果保存成指定的列表文件。 
-fstype<文件系统类型>  只寻找该文件系统类型下的文件或目录。 
-gid<群组识别码>  查找符合指定之群组识别码的文件或目录。 
-group<群组名称>  查找符合指定之群组名称的文件或目录。 
-help或--help  在线帮助。 
-ilname<范本样式>  此参数的效果和指定"-lname"参数类似,但忽略字符大小写的差别。 
-iname<范本样式>  此参数的效果和指定"-name"参数类似,但忽略字符大小写的差别。 
-inum<inode编号>  查找符合指定的inode编号的文件或目录。 
-ipath<范本样式>  此参数的效果和指定"-ipath"参数类似,但忽略字符大小写的差别。 
-iregex<范本样式>  此参数的效果和指定"-regexe"参数类似,但忽略字符大小写的差别。 
-links<连接数目>  查找符合指定的硬连接数目的文件或目录。 
-iname<范本样式>  指定字符串作为寻找符号连接的范本样式。 
-ls  假设find指令的回传值为True,就将文件或目录名称列出到标准输出。 
-maxdepth<目录层级>  设置最大目录层级。 
-mindepth<目录层级>  设置最小目录层级。 
-mmin<分钟>  查找在指定时间曾被更改过的文件或目录,单位以分钟计算。 
-mount  此参数的效果和指定"-xdev"相同。 
-mtime<24小时数>  查找在指定时间曾被更改过的文件或目录,单位以24小时计算。 
-name<范本样式>  指定字符串作为寻找文件或目录的范本样式。 
-newer<参考文件或目录>  查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录。 
-nogroup  找出不属于本地主机群组识别码的文件或目录。 
-noleaf  不去考虑目录至少需拥有两个硬连接存在。 
-nouser  找出不属于本地主机用户识别码的文件或目录。 
-ok<执行指令>  此参数的效果和指定"-exec"参数类似,但在执行指令之前会先询问用户,若回答"y"或"Y",则放弃执行指令。 
-path<范本样式>  指定字符串作为寻找目录的范本样式。 
-perm<权限数值>  查找符合指定的权限数值的文件或目录。 
-print  假设find指令的回传值为True,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称之前皆有"./"字符串。 
-print0  假设find指令的回传值为True,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行。 
-printf<输出格式>  假设find指令的回传值为True,就将文件或目录名称列出到标准输出。格式可以自行指定。 
-prune  不寻找字符串作为寻找文件或目录的范本样式。 
-regex<范本样式>  指定字符串作为寻找文件或目录的范本样式。 
-size<文件大小>  查找符合指定的文件大小的文件。 
-true  将find指令的回传值皆设为True。 
-typ<文件类型>  只寻找符合指定的文件类型的文件。 
	b: 块设备文件。
	d:目录。
	c:字符设备文件。
	p:管道文件。
	l:符号链接文件。
	f:普通文件。
-uid<用户识别码>  查找符合指定的用户识别码的文件或目录。 
-used<日数>  查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算。 
-user<拥有者名称>  查找符合指定的拥有者名称的文件或目录。 
-version或--version  显示版本信息。 
-xdev  将范围局限在先行的文件系统中。 
-xtype<文件类型>  此参数的效果和指定"-type"参数类似,差别在于它针对符号连接检查。
④常用范例

例一:查找指定时间内修改过的文件

命令:find -atime -2

查找48小时内修改过的文件 。

[root@localhost ~]# find -atime -2
.
./.bash_profile
./.bashrc
./.cache/libgweather
./.cache/evolution/addressbook
./.cache/evolution/addressbook/trash
./.cache/evolution/calendar
./.cache/evolution/calendar/trash
./.cache/evolution/mail
./.cache/evolution/mail/trash
./.cache/evolution/memos

例二:根据关键字查找

命令: find . -name "*.txt"

在当前目录查找 以.txt结尾的文件。 ". "代表当前目录 。

[root@localhost ~]# find . -name "*.txt"
./.cache/tracker/db-version.txt
./.cache/tracker/db-locale.txt
./.cache/tracker/parser-version.txt
./.cache/tracker/locale-for-miner-apps.txt
./.cache/tracker/last-crawl.txt
./.cache/tracker/first-index.txt

例三:按照目录或文件的权限来查找文件

命令: find /usr/games/test/ -perm 744

查找/usr/games/test/目录下 权限为 744的文件,即权限为文件属主为读写执行权限、文件属主同组用户为读权限、其他用户为读权限。

[root@localhost test]# find /usr/games/test/ -perm 744
/usr/games/test/lncolor
/usr/games/test/color.sh
/usr/games/test/log.txt

例四:按类型查找

命令: find . -type f -name "*.txt"

查找当目录以.txt结尾的普通文件

[root@localhost test]# find . -type f -name "*.txt"
./log2.txt
./log3.txt
./log.txt
./log1.txt

例五:查找当前所有目录并排序

命令: find . -type d | sort

[root@localhost games]# find . -type d | sort
.
./test

例六:按大小查找文件

命令: find . -size +20c -print

查找当前目录大于0.02K的文件 。+n表示大于,-n表示小于,n表示等于。

[root@localhost test]# find . -size +20c -print
.
./log2.txt
./log3.txt
./lncolor
./color.sh
./log.txt
./log1.txt  

find命令

  • 按文件名查询:使用参数 -name

 ■命令:find 路径 -name "文件名"

 ■示例:find /home -name "*.c"

  • 按文件类型查询:使用参数 -type

 ■命令:find 路径 -type 类型

  □类型

   ▶普通文件类型用f表示而不是 -

   ▶d -> 目录

   ▶l -> 符号链接

   ▶b -> 块设备文件

   ▶c -> 字符设备文件

   ▶s -> socket文件

   ▶p -> 管道文件

 ■查找指定目录下的普通文件: find 路径 -type f

  • 按文件大小查询:使用参数 -size

 ■命令:find 路径 -size 范围

  □范围

   ▶大于:+表示 -- +100k

   ▶小于:-表示 -- -100k

   ▶等于: 不需要添加符号 -- 100k

  □大小

   ▶M 必须大写(10M)

   ▶k 必须小写(20k)

   ▶C 表示字节数

 ■例子: 查询目录为家目录

  □等于100k的文件: find ~/ -size 100k

  □大于100k的文件: find ~/ -size +100k

  □大于50k,小于100k的文件:find ~/ -size +50k -size -100k

  • 按文件日期

 ■创建日期:-ctime -n/+ n

  □-n: n天以内

  □+n: n天以外

  □修改日期:-mtime -n/+n

  □访问日期:-atime -n/+n

  • 按深度

 ■-maxdepth n(层数)

  □搜索n层以下的目录,搜索的层数不超过n层

 ■-mindepth n(层数)

  □搜搜n层以上的目录,搜索的层数不能小于n层

  • 高级查找

 ■例:查找指定目录下所有目录,并列出目录中文件详细信息

  □find ./ -type d -exec shell命令 {} ;

   find ./ -type d -exec ls -l {} ;

  □find ./ -type d -ok shell命令 {} ;

   find ./ -type d -ok ls -l {} ;

  ▶注意: {}中间不能有空格

ok比较安全,特别是在执行rm删除文件的时候。

  □find ./ -type d | xargs shell命令

find ./ -type d | xargs ls -l

6.文件的压缩和备份

6.1gzip 命令

Linux中 gzip 命令可以对文件进行压缩。gzip不仅可以用来压缩大的、较少使用的文件以节省磁盘空间,还可以和tar命令一起构成Linux操作系统中比较流行的压缩文件格式。据统计,gzip命令对文本文件有60%~70%的压缩率。

①语法

gzip [参数] [文件或者目录]

②功能

使用广泛的压缩程序,文件经它压缩过后,其名称后面会多出".gz"的扩展名。

③参数
-a或--ascii  使用ASCII文字模式。 
-c或--stdout或--to-stdout  把压缩后的文件输出到标准输出设备,不去更动原始文件。 
-d或--decompress或----uncompress  解开压缩文件。 
-f或--force  强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接。 
-h或--help  在线帮助。 
-l或--list  列出压缩文件的相关信息。 
-L或--license  显示版本与版权信息。 
-n或--no-name  压缩文件时,不保存原来的文件名称及时间戳记。 
-N或--name  压缩文件时,保存原来的文件名称及时间戳记。 
-q或--quiet  不显示警告信息。 
-r或--recursive  递归处理,将指定目录下的所有文件及子目录一并处理。 
-S<压缩字尾字符串>或----suffix<压缩字尾字符串>  更改压缩字尾字符串。 
-t或--test  测试压缩文件是否正确无误。 
-v或--verbose  显示指令执行过程。 
-V或--version  显示版本信息。 
-<压缩效率>  压缩效率是一个介于1-9的数值,预设值为"6",指定愈大的数值,压缩效率就会愈高。 
--best  此参数的效果和指定"-9"参数相同,表示最慢压缩方法(高压缩比)。 
--fast  此参数的效果和指定"-1"参数相同,表示最快压缩方法(低压缩比)。
⑤常用范例

例一:把test目录下的每个文件压缩成.gz文件

命令:gzip *

gzip压缩文件时不会保留原来的文件。

[root@localhost test]# ll
总用量 24
-rwxr--r--. 1 root root  96 5月  18 15:27 color.sh
-rwxr--r--. 1 root root  96 5月  18 10:15 lncolor
---xr--r--. 1 root root  13 5月  25 10:58 log1.txt
-rwxrw-r-x. 1 root root 592 5月  14 17:00 log2.txt
-rwxr-x--x. 1 root root 655 5月  14 17:06 log3.txt
-rwxr--r--. 1 root root  52 5月  25 10:58 log.txt
[root@localhost test]# gzip *
[root@localhost test]# ll
总用量 24
-rwxr--r--. 1 root root  78 5月  18 15:27 color.sh.gz
-rwxr--r--. 1 root root  77 5月  18 10:15 lncolor.gz
---xr--r--. 1 root root  42 5月  25 10:58 log1.txt.gz
-rwxrw-r-x. 1 root root 188 5月  14 17:00 log2.txt.gz
-rwxr-x--x. 1 root root 164 5月  14 17:06 log3.txt.gz
-rwxr--r--. 1 root root  63 5月  25 10:58 log.txt.gz

例二:显示压缩文件的信息

命令: gzip -l *

[root@localhost test]# gzip -l *
         compressed        uncompressed  ratio uncompressed_name
                 78                  96  46.9% color.sh
                 77                  96  46.9% lncolor
                 42                  13 -15.4% log1.txt
                188                 592  72.8% log2.txt
                164                 655  79.1% log3.txt
                 63                  52  28.8% log.txt
                612                1504  61.0% (totals)

例三:把每个压缩的文件解压并列出详细的信息

命令: gzip -dv *

[root@localhost test]# ll
总用量 24
-rwxr--r--. 1 root root  78 5月  18 15:27 color.sh.gz
-rwxr--r--. 1 root root  77 5月  18 10:15 lncolor.gz
---xr--r--. 1 root root  42 5月  25 10:58 log1.txt.gz
-rwxrw-r-x. 1 root root 188 5月  14 17:00 log2.txt.gz
-rwxr-x--x. 1 root root 164 5月  14 17:06 log3.txt.gz
-rwxr--r--. 1 root root  63 5月  25 10:58 log.txt.gz
[root@localhost test]# gzip -dv *
color.sh.gz:	 46.9% -- replaced with color.sh
lncolor.gz:	 46.9% -- replaced with lncolor
log1.txt.gz:	-15.4% -- replaced with log1.txt
log2.txt.gz:	 72.8% -- replaced with log2.txt
log3.txt.gz:	 79.1% -- replaced with log3.txt
log.txt.gz:	 28.8% -- replaced with log.txt
[root@localhost test]# ll
总用量 24
-rwxr--r--. 1 root root  96 5月  18 15:27 color.sh
-rwxr--r--. 1 root root  96 5月  18 10:15 lncolor
---xr--r--. 1 root root  13 5月  25 10:58 log1.txt
-rwxrw-r-x. 1 root root 592 5月  14 17:00 log2.txt
-rwxr-x--x. 1 root root 655 5月  14 17:06 log3.txt
-rwxr--r--. 1 root root  52 5月  25 10:58 log.txt

例四:递归的压缩目录

命令: gzip -rv test

所有test下面的文件都变成了.gz,目录依然存在只是目录里面的文件相应变成了.gz,这就是压缩,和打包不同。因为是对目录操作,所以需要加上-r选项,这样也可以对子目录进行递归了。

[root@localhost test]# ll
总用量 24
-rwxr--r--. 1 root root  96 5月  18 15:27 color.sh
-rwxr--r--. 1 root root  96 5月  18 10:15 lncolor
---xr--r--. 1 root root  13 5月  25 10:58 log1.txt
-rwxrw-r-x. 1 root root 592 5月  14 17:00 log2.txt
-rwxr-x--x. 1 root root 655 5月  14 17:06 log3.txt
-rwxr--r--. 1 root root  52 5月  25 10:58 log.txt
[root@localhost test]# cd ../
[root@localhost games]# gzip -rv test
test/color.sh:	 46.9% -- replaced with test/color.sh.gz
test/lncolor:	 46.9% -- replaced with test/lncolor.gz
test/log1.txt:	-15.4% -- replaced with test/log1.txt.gz
test/log2.txt:	 72.8% -- replaced with test/log2.txt.gz
test/log3.txt:	 79.1% -- replaced with test/log3.txt.gz
test/log.txt:	 28.8% -- replaced with test/log.txt.gz
[root@localhost games]# cd test/
[root@localhost test]# ll
总用量 24
-rwxr--r--. 1 root root  78 5月  18 15:27 color.sh.gz
-rwxr--r--. 1 root root  77 5月  18 10:15 lncolor.gz
---xr--r--. 1 root root  42 5月  25 10:58 log1.txt.gz
-rwxrw-r-x. 1 root root 188 5月  14 17:00 log2.txt.gz
-rwxr-x--x. 1 root root 164 5月  14 17:06 log3.txt.gz
-rwxr--r--. 1 root root  63 5月  25 10:58 log.txt.gz
[root@localhost test]# cd ../
[root@localhost games]# ll
总用量 0
drwxr-xr-x. 2 root root 118 5月  25 14:52 test

例五:递归的解压目录

命令: gzip -dr test

[root@localhost test]# ll
总用量 24
-rwxr--r--. 1 root root  78 5月  18 15:27 color.sh.gz
-rwxr--r--. 1 root root  77 5月  18 10:15 lncolor.gz
---xr--r--. 1 root root  42 5月  25 10:58 log1.txt.gz
-rwxrw-r-x. 1 root root 188 5月  14 17:00 log2.txt.gz
-rwxr-x--x. 1 root root 164 5月  14 17:06 log3.txt.gz
-rwxr--r--. 1 root root  63 5月  25 10:58 log.txt.gz
[root@localhost test]# cd ../
[root@localhost games]# gzip -dr test
[root@localhost games]# cd test/
[root@localhost test]# ll
总用量 24
-rwxr--r--. 1 root root  96 5月  18 15:27 color.sh
-rwxr--r--. 1 root root  96 5月  18 10:15 lncolor
---xr--r--. 1 root root  13 5月  25 10:58 log1.txt
-rwxrw-r-x. 1 root root 592 5月  14 17:00 log2.txt
-rwxr-x--x. 1 root root 655 5月  14 17:06 log3.txt
-rwxr--r--. 1 root root  52 5月  25 10:58 log.txt

参考:Linux命令 - gzip命令

6.2tar命令

Linux中 tar 命令可以为linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
  首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
  Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。
  linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就可以用其它的程序来进行压缩。

①语法

tar [参数] [文件]

②功能

用来压缩和解压文件。tar本身不具有压缩功能,他是调用压缩功能实现的。

③参数
-A或--catenate   新增温暖件到已存在的备份文件。
-b<区块数目>或--blocking-factor=<区块数目>   设置每笔记录的区块数目,每个区块大小为12Bytes。
-B或--read-full-records   读取数据时重设区块大小。
-c或--create   建立新的备份文件。
-C<目的目录>或--directory=<目的目录>   切换到指定的目录。
-d或--diff或--compare   对比备份文件内和文件系统上的文件的差异。
-f<备份文件>或--file=<备份文件>   指定备份文件。
-F<Script文件>或--info-script=<Script文件>   每次更换磁带时,就执行指定的Script文件。
-g或--listed-incremental   处理GNU格式的大量备份。
-G或--incremental   处理旧的GNU格式的大量备份。
-h或--dereference   不建立符号连接,直接复制该连接所指向的原始文件。
-i或--ignore-zeros   忽略备份文件中的0 Byte区块,也就是EOF。
-j   支持bzip2解压文件。
-k或--keep-old-files   解开备份文件时,不覆盖已有的文件。
-K<文件>或--starting-file=<文件>   从指定的文件开始还原。
-l或--one-file-system   复制的文件或目录存放的文件系统,必须与tar指令执行时所处的文件系统相同,否则不予复制。
-L<媒体容量>或-tape-length=<媒体容量>   设置存放每体的容量,单位以1024 Bytes计算。
-m或--modification-time   还原文件时,不变更文件的更改时间。
-M或--multi-volume   在建立,还原备份文件或列出其中的内容时,采用多卷册模式。
-N<日期格式>或--newer=<日期时间>   只将较指定日期更新的文件保存到备份文件里。
-o或--old-archive或--portability   将资料写入备份文件时使用V7格式。
-O或--stdout   把从备份文件里还原的文件输出到标准输出设备。
-p或--same-permissions   用原来的文件权限还原文件。
-P或--absolute-names   文件名使用绝对名称,不移除文件名称前的"/"号。
-r或--append   新增文件到已存在的备份文件的结尾部分。
-R或--block-number   列出每个信息在备份文件中的区块编号。
-s或--same-order   还原文件的顺序和备份文件内的存放顺序相同。
-S或--sparse   倘若一个文件内含大量的连续0字节,则将此文件存成稀疏文件。
-t或--list   列出备份文件的内容。
-T<范本文件>或--files-from=<范本文件>   指定范本文件,其内含有一个或多个范本样式,让tar解开或建立符合设置条件的文件。
-u或--update   仅置换较备份文件内的文件更新的文件。
-U或--unlink-first   解开压缩文件还原文件之前,先解除文件的连接。
-v或--verbose   显示指令执行过程。
-V<卷册名称>或--label=<卷册名称>   建立使用指定的卷册名称的备份文件。
-w或--interactive   遭遇问题时先询问用户。
-W或--verify   写入备份文件后,确认文件正确无误。
-x或--extract或--get  从备份文件中还原文件。
-X<范本文件>或--exclude-from=<范本文件>  指定范本文件,其内含有一个或多个范本样式,让ar排除符合设置条件的文件。
-z或--gzip或--ungzip   通过gzip指令处理备份文件。
-Z或--compress或--uncompress   通过compress指令处理备份文件。
-<设备编号><存储密度>   设置备份用的外围设备编号及存放数据的密度。
--after-date=<日期时间>   此参数的效果和指定"-N"参数相同。
--atime-preserve   不变更文件的存取时间。
--backup=<备份方式>或--backup   移除文件前先进行备份。
--checkpoint   读取备份文件时列出目录名称。
--concatenate   此参数的效果和指定"-A"参数相同。
--confirmation   此参数的效果和指定"-w"参数相同。
--delete   从备份文件中删除指定的文件。
--exclude=<范本样式>   排除符合范本样式的问家。
--group=<群组名称>   把加入设备文件中的文件的所属群组设成指定的群组。
--help   在线帮助。
--ignore-failed-read   忽略数据读取错误,不中断程序的执行。
--new-volume-script=<Script文件>   此参数的效果和指定"-F"参数相同。
--newer-mtime   只保存更改过的文件。
--no-recursion   不做递归处理,也就是指定目录下的所有文件及子目录不予处理。
--null   从null设备读取文件名称。
--numeric-owner   以用户识别码及群组识别码取代用户名称和群组名称。
--owner=<用户名称>   把加入备份文件中的文件的拥有者设成指定的用户。
--posix   将数据写入备份文件时使用POSIX格式。
--preserve      此参数的效果和指定"-ps"参数相同。
--preserve-order      此参数的效果和指定"-A"参数相同。
--preserve-permissions      此参数的效果和指定"-p"参数相同。
--record-size=<区块数目>      此参数的效果和指定"-b"参数相同。
--recursive-unlink   解开压缩文件还原目录之前,先解除整个目录下所有文件的连接。
--remove-files   文件加入备份文件后,就将其删除。
--rsh-command=<执行指令>   设置要在远端主机上执行的指令,以取代rsh指令。
--same-owner   尝试以相同的文件拥有者还原问家你。
--suffix=<备份字尾字符串>   移除文件前先行备份。
--totals   备份文件建立后,列出文件大小。
--use-compress-program=<执行指令>   通过指定的指令处理备份文件。
--version   显示版本信息。
--volno-file=<编号文件>   使用指定文件内的编号取代预设的卷册编号。 
④常用范例

例一:将文件打包成tar包

在参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。 如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar包; 如果加 j 参数,则以 .tar.bz2 来作为tar包名

命令:tar -cvf log.tar log.txt

仅打包,不压缩。

[root@localhost test]# ll
总用量 24
-rwxr--r--. 1 root root  52 5月  25 10:58 log.txt
[root@localhost test]# tar -cvf log.tar log.txt 
log.txt
[root@localhost test]# ll
总用量 36
-rw-r--r--. 1 root root 10240 5月  27 14:14 log.tar
-rwxr--r--. 1 root root    52 5月  25 10:58 log.txt

命令:tar -zcvf log.tar.gz log.txt

打包后,以 gzip 压缩。

[root@localhost test]# ll
总用量 36
-rwxr--r--. 1 root root    52 5月  25 10:58 log.txt
[root@localhost test]# tar -zcvf log.tar.gz log.txt 
log.txt
[root@localhost test]# ll
总用量 40
-rw-r--r--. 1 root root   151 5月  27 14:16 log.tar.gz
-rwxr--r--. 1 root root    52 5月  25 10:58 log.txt

命令:tar -jcvf log.tar.bz2 log.txt

打包后,以 bzip2 压缩。

[root@localhost test]# ll
总用量 40
-rwxr--r--. 1 root root    52 5月  25 10:58 log.txt
[root@localhost test]# tar -jcvf log.tar.bz2 log.txt 
log.txt
[root@localhost test]# ll
总用量 44
-rw-r--r--. 1 root root   151 5月  27 14:17 log.tar.bz2
-rwxr--r--. 1 root root    52 5月  25 10:58 log.txt

例二:查阅 tar包内有哪些文件

命令:tar -ztvf log.tar.gz

由于我们使用 gzip 压缩的log.tar.gz,所以要查阅log.tar.gz包内的文件时,就得要加上 z 这个参数了。

[root@localhost test]# tar -ztvf log.tar.gz
-rwxr--r-- root/root        52 2021-05-25 10:58 log.txt

例三:将tar 包解压

命令: tar -zxvf /usr/games/test/log.tar.gz

在预设的情况下,我们可以将压缩档在任何地方解开的。

[root@localhost games]# ll
总用量 0
drwxr-xr-x. 2 root root 152 5月  27 14:17 test
[root@localhost games]# tar -zxvf /usr/games/test/log.tar.gz 
log.txt
[root@localhost games]# ll
总用量 4
-rwxr--r--. 1 root root  52 5月  25 10:58 log.txt
drwxr-xr-x. 2 root root 152 5月  27 14:17 test

例四:只将打包内的部分文件解压出来

命令: tar -zxvf /usr/games/test/logz.tar.gz log.txt log1.txt

可以透过 tar -ztvf 来查阅 tar 包内的文件名称,如果单只要一个文件,就可以透过 tar -zxvf这个方式来解压部分文件。

[root@localhost test]# tar zcvf logz.tar.gz log.txt log1.txt log2.txt log3.txt 
log.txt
log1.txt
log2.txt
log3.txt
[root@localhost test]# cd ../
[root@localhost games]# ll
总用量 0
drwxr-xr-x. 2 root root 171 5月  27 14:28 test
[root@localhost games]# tar -zxvf /usr/games/test/logz.tar.gz log.txt log1.txt 
log.txt
log1.txt
[root@localhost games]# ll
总用量 8
---xr--r--. 1 root root  13 5月  25 10:58 log1.txt
-rwxr--r--. 1 root root  52 5月  25 10:58 log.txt
drwxr-xr-x. 2 root root 171 5月  27 14:28 test

例五:文件备份并且保存其权限

命令: tar -zxvpf /usr/games/test/color.tar.gz

-p 的属性是当你要保留原本文件的属性时。

[root@localhost test]# tar -zcvpf color.tar.gz color.sh lncolor 
color.sh
lncolor
[root@localhost test]# cd ../
[root@localhost games]# ll
总用量 0
drwxr-xr-x. 2 root root 191 5月  27 14:35 test
[root@localhost games]# tar -zxvpf /usr/games/test/color.tar.gz 
color.sh
lncolor
[root@localhost games]# ll
总用量 8
-rw-r--r--. 1 root root  96 5月  25 15:10 color.sh
-rwxr--r--. 1 root root  96 5月  18 10:15 lncolor
drwxr-xr-x. 2 root root 191 5月  27 14:35 test

例六:在文件夹当中,比某个日期新的文件才备份

命令: tar -N "2021-5-28" -zcvf new.tar.gz test

[root@localhost test]# ll
总用量 24
-rw-r--r--. 1 root root  96 5月  25 15:10 color.sh
-rwxr--r--. 1 root root  96 5月  18 10:15 lncolor
---xr--r--. 1 root root  13 5月  25 10:58 log1.txt
-rwxrw-r-x. 1 root root 592 5月  14 17:00 log2.txt
-rwxr-x--x. 1 root root 655 5月  14 17:06 log3.txt
-rwxr--r--. 1 root root  52 5月  25 10:58 log.txt
[root@localhost games]# tar -N "2021-5-28" -zcvf new.tar.gz test
tar: 选项 --after-date: 将日期 ‘2021-5-28’ 当作 2021-05-28 00:00:00
test/
tar: test/color.sh: 文件未改变;未输出
tar: test/lncolor: 文件未改变;未输出
tar: test/log1.txt: 文件未改变;未输出
tar: test/log2.txt: 文件未改变;未输出
tar: test/log3.txt: 文件未改变;未输出
tar: test/log.txt: 文件未改变;未输出
[root@localhost games]# tar -ztvf new.tar.gz
drwxr-xr-x root/root         0 2021-05-27 14:43 test/

例七:备份文件夹内容是排除部分文件

命令: tar --exclude scf/lib/service -zcvf scf.tar.gz scf/*

[root@localhost test]# tree scf/
scf/
├── bin
└── lib
    ├── deploy
    │   ├── info
    │   └── prodouct
    └── service

6 directories, 0 files
[root@localhost test]# tar --exclude scf/lib/service -zcvf scf.tar.gz scf/*
scf/bin/
scf/lib/
scf/lib/deploy/
scf/lib/deploy/info/
scf/lib/deploy/prodouct/

2.目录操作命令

1.切换工作目录和显示目录内容的命令

1.1cd命令

cd命令可以说是Linux中最基本的命令语句。

①语法

cd [目的目录]

②功能

可让用户在不同的目录间切换,但该用户必须拥有足够的权限进入目的目录。

③参数
  <绝对路径>或<相对路径>   切换路径。
  ~或空白   回到自己的家目录。
  -   回到上一次所在目录。
  ../   回到当前目录的上一级目录。
  ./   当前目录
  -P   跳转到实际物理路径,而非快捷方式路径。
  /   快速进入根目录。
④常用范例

例一:进入系统根目录

命令:cd /
  上面命令执行完后用ls命令看一下,当前目录已经到系统根目录了。

命令:cd .. 或者 cd .. //

可以使用“ cd … ”或者 “cd … //”一直退,就可以到达根目录 。

命令:cd ../..//
  进入当前目录的父目录的父目录。如果有三层则使用命令"cd …/…/…//"

[root@localhost /]# ll
总用量 28
lrwxrwxrwx.   1 root root    7 11月  3 2020 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 5月  12 14:25 boot
drwxr-xr-x.  20 root root 3200 5月  12 14:25 dev
drwxr-xr-x. 139 root root 8192 5月  12 14:29 etc
drwxr-xr-x.   3 root root   20 5月  12 14:23 home
lrwxrwxrwx.   1 root root    7 11月  3 2020 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 11月  3 2020 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6 11月  3 2020 media
drwxr-xr-x.   3 root root   18 5月  12 14:19 mnt
drwxr-xr-x.   2 root root    6 11月  3 2020 opt
dr-xr-xr-x. 271 root root    0 5月  12 14:25 proc
dr-xr-x---.  15 root root 4096 5月  12 14:32 root
drwxr-xr-x.  45 root root 1280 5月  12 14:57 run
lrwxrwxrwx.   1 root root    8 11月  3 2020 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 11月  3 2020 srv
dr-xr-xr-x.  13 root root    0 5月  12 14:25 sys
drwxrwxrwt.  16 root root 4096 5月  12 14:57 tmp
drwxr-xr-x.  12 root root  144 5月  12 14:16 usr
drwxr-xr-x.  21 root root 4096 5月  12 14:25 var

例二:进入当前用户主目录

命令:cd 或者cd ~

[root@localhost ~]# ll
总用量 8
drwxr-xr-x. 2 root root    6 5月  12 14:29 公共
drwxr-xr-x. 2 root root    6 5月  12 14:29 模板
drwxr-xr-x. 2 root root    6 5月  12 14:29 视频
drwxr-xr-x. 2 root root    6 5月  12 14:29 图片
drwxr-xr-x. 2 root root    6 5月  12 14:29 文档
drwxr-xr-x. 2 root root    6 5月  12 14:29 下载
drwxr-xr-x. 2 root root    6 5月  12 14:29 音乐
drwxr-xr-x. 2 root root    6 5月  12 14:29 桌面
-rw-------. 1 root root 1247 5月  12 14:24 anaconda-ks.cfg
-rw-r--r--. 1 root root 1526 5月  12 14:29 initial-setup-ks.cfg

例三:跳转到指定目录

命令: cd /usr/lib/udev/
  跳转到指定目录,从根目录开始,目录名称前加 / ,当前目录内的子目录直接写名称即可。可以发现方括号[]最后显示的是当前目录。

[root@localhost ~]# cd /usr/lib/udev/
[root@localhost udev]# 

如果不知道具体在哪个目录,也可以一层一层的进入目录然后通过命令"ll"查看有哪些。

[root@localhost ~]# cd /usr/
[root@localhost usr]# cd lib/
[root@localhost lib]# cd udev/
[root@localhost udev]# 

例四:返回进入此目录之前所在的目录

命令: cd -

[root@localhost ~]# cd /usr/lib/udev/
[root@localhost udev]# cd -
/root
[root@localhost ~]# cd -
/usr/lib/udev

例五:把上个命令的参数作为cd参数使用

命令: cd !$

[root@localhost ~]# cd /usr/lib/udev/
[root@localhost udev]# cd -
/root
[root@localhost ~]# cd !$
cd -
/usr/lib/udev

参考:Linux命令 - cd命令

1.2pwd命令

pwd是print working directory的缩写,Linux中用 pwd 命令来查看”当前工作目录“的完整路径。 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录。

①语法

pwd [选项]

②功能

查看”当前工作目录“的完整路径。可以得知目前所在的工作目录的绝对路径名称。

③参数
-L	打印 $PWD 变量的值,如果它包含了当前的工作目录。默认情况下,`pwd' 的行为和带 `-L' 选项一致。
-P	打印当前的物理路径,不带有任何的符号链接
--help   在线帮助。查看该命令功能和可带参数等。
④常用范例

例一:查看默认工作目录的完整路径

命令:pwd

[root@localhost ~]# pwd
/root

例二:查看指定文件夹

命令:pwd

[root@localhost ~]# cd /usr/lib
[root@localhost lib]# pwd
/usr/lib

例三:目录连接链接时,显示连接路径

命令: pwd -P
  pwd -P 显示出实际路径,而非使用连接(link)路径

[root@localhost soft]# cd /etc/init.d 
[root@localhost init.d]# pwd
/etc/init.d
[root@localhost init.d]# pwd -P
/etc/rc.d/init.d

例四:当前目录被删除了,而pwd命令仍然显示那个目录

[root@localhost test]# cd /usr/games/
[root@localhost games]# ll
总用量 0
[root@localhost games]# mkdir test
[root@localhost games]# ll
总用量 0
drwxr-xr-x. 2 root root 6 5月  12 17:07 test
[root@localhost games]# cd test/
[root@localhost test]# pwd
/usr/games/test
[root@localhost test]# rm -rf /usr/games/test/
[root@localhost test]# pwd
/usr/games/test
[root@localhost test]# cd /usr/games/
[root@localhost games]# ll
总用量 0

1.3ls命令

ls命令是linux下最常用的命令。ls命令就是list的缩写,用来打印出当前目录的清单。如果ls指定其他目录,那么就会显示指定目录里的文件及文件夹清单。 通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限)查看目录信息等等。

①语法

ls [选项] [目录或者文件]

②功能

列出目录的内容,包括文件和子目录的名称。

③参数
  -1   每列仅显示一个文件或目录名称。
  -a或--all   列出目录下所有文件和目录,包括以 . 开头的隐含文件。
  -A或--almost-all   显示所有文件和目录,但不显示现行目录(当前目录)和上层目录(当前目录的父目录)。
  -b或--escape   显示脱离字符,即以八进制溢出序列表示不可打印的字符。
  -B或--ignore-backups   忽略备份文件和目录,即不列出任何以"~"字符结束的项目。
  -c   以更改时间排序,显示文件和目录。
  -C   以又上至下,从左到右的直行方式显示文件和目录名称。
  -d或--directory   显示目录名称而非其内容。
  -D或--dired   用Emacs的模式产生文件和目录列表。
  -f   对输出的文件不进行排序,-aU 选项生效,-lst 选项失效。
  -F或--classify   在执行文件,目录,Socket,符号连接,管道名称后面,各自加上"*","/","=","@","|"号。
  -g   次参数将忽略不予处理,即类似 -l,但不列出所有者。
  -G或--no-group   不显示群组名称。
  -h或--human-readable   用"K","M","G"来显示文件和目录的大小。
  -H或--si   此参数的效果和指定"-h"参数类似,但计算单位是1000Bytes而非1024Bytes。
  -i或--inode   显示文件和目录的inode编号。
  -I<范本样式>或--ignore=<范本样式>   不显示符合范本样式的文件或目录名称。
  -k或--kilobytes   此参数的效果和指定"block-size=1024"参数相同。
  -l   使用详细格式列表,除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来。ls -l 等于 ll
  -L或--dereference   如遇到性质为符号连接的文件或目录,直接列出该连接所指向的原始文件或目录。
  -m   用","号区隔每个文件和目录的名称。
  -n或--numeric-uid-gid   以用户识别码和群组识别码替代其名称。
  -N或--literal   直接列出文件和目录名称,包括控制字符。
  -o   此参数的效果和指定"-l" 参数类似,但不列出群组名称或识别码。
  -p或--file-type   此参数的效果和指定"-F"参数类似,但不会在执行文件名称后面加上"*"号。
  -q或--hide-control-chars   用"?"号取代控制字符,列出文件和目录名称。
  -Q或--quote-name   把文件和目录名称以""号标示起来。
  -r或--reverse   反向排序。
  -R或--recursive   递归处理,将指定目录下的所有文件及子目录一并处理。
  -s或--size   显示文件和目录的大小,以区块为单位。
  -S   用文件和目录的大小排序。
  -t   用文件和目录的更改时间排序。
  -T<跳格字符>或--tabsize=<跳格字数>   设置跳格字符所对应的空白字符数。
  -u   以最后存取时间排序,显示文件和目录。
       同-lt 一起使用:按照访问时间排序并显示。
	   同-l一起使用:显示访问时间并按文件名排序。
	   其他:按照访问时间排序。
  -U   列出文件和目录名称时不予排序,以文件系统原有的次序列出项目。
  -v   文件和目录的名称列表以版本进行排序。
  -w<每列字符数>或--width=<每列字符数>   设置每列的最大字符数。
  -x   以从左到右,由上至下的横列方式显示文件和目录名称。
  -X   以文件和目录的最后一个扩展名排序。
  --block-size=<区块大小>   指定存放文件的区块大小。
  --color=<列表格式>   培植文件和目录的列表格式。
  --full-time   列出完整的日期与时间。
  --help   在线帮助。
  --indicator-style=<标注样式>   在文件和目录等名称后面加上标注,易于辨识该名称所属的类型。
  --quoting-syte=<引号样式>   把文件和目录名称以指定的引号样式标示起来。
  --show-control-chars   在文件和目录列表时,使用控制字符。
  --sort=<排序方式>   配置文件和目录列表的排序方式。
  --time=<时间戳记>   用指定的时间戳记取代更改时间。
  --version   显示版本信息。
④显示说明

每行列出的信息依次是: 文件类型与权限  链接数  文件属主  文件属组  文件大小用byte来表示   建立或最近修改的时间  名字

⑤常用范例

例一: 列出/home/peidachang文件夹下的所有文件和目录的详细资料

命令:ls -l -R /home/peidachang

在使用 ls 命令时要注意命令的格式,在命令提示符后,首先是命令的关键字,接下来是命令参数,在命令参数之前要有一短横线“-”或者两个短横线“–”,所有的命令参数都有特定的作用,自己可以根据需要选用一个或者多个参数,在命令参数的后面是命令的操作对象。比如在以上这条命令“ ls -l -R /home/peidachang”中,“ls” 是命令关键字,“-l -R”是参数,“ /home/peidachang”是命令的操作对象。在这条命令中,使用到了两个参数,分别为“l”和“R”,当然,你也可以把他们放在一起使用,如下所示:

命令:ls -lR /home/peidachang

这种形式和上面的命令形式执行的结果是完全一样的。另外,如果命令的操作对象位于当前目录中,可以直接对操作对象进行操作,ls -l 或者 ll;如果不在当前目录则需要给出操作对象的完整路径,例如上面的例子中,我的当前文件夹是peidachang文件夹,我想对home文件夹下的peidachang文件进行操作,我可以直接输入 ls -lR peidachang,也可以用 ls -lR /home/peidachang。

例二:列出当前目录中所有以“t”开头的目录的详细内容

命令:ls -l t*

可以查看当前目录下文件名以“t”开头的所有文件的信息。其实,在命令格式中,方括号内的内容都是可以省略的,对于命令ls而言,如果省略命令参数和操作对象,直接输入“ ls ”,则将会列出当前工作目录的内容清单。

[root@localhost /]# ls -l t*
总用量 16
-rw-r--r--. 1 root root 1663 5月  12 14:29 anaconda.log
-rw-r--r--. 1 root root 2286 5月  12 14:25 dbus.log
-rwx------. 1 root root  701 5月  12 14:24 ks-script-chn3kk2k
-rw-r--r--. 1 root root    0 5月  12 14:25 packaging.log
-rw-r--r--. 1 root root  131 5月  12 14:25 program.log
-rw-r--r--. 1 root root    0 5月  12 14:25 sensitive-info.log
drwx------. 3 root root   17 5月  12 14:25 systemd-private-c5d0377e4a8d40a884a8a99ea769deed-chronyd.service-qvwwMa
drwx------. 3 root root   17 5月  12 14:29 systemd-private-c5d0377e4a8d40a884a8a99ea769deed-colord.service-EnggMp
drwx------. 3 root root   17 5月  12 14:30 systemd-private-c5d0377e4a8d40a884a8a99ea769deed-fwupd.service-S3ALd4
drwx------. 3 root root   17 5月  12 14:25 systemd-private-c5d0377e4a8d40a884a8a99ea769deed-ModemManager.service-GT8a2G
drwx------. 3 root root   17 5月  12 14:25 systemd-private-c5d0377e4a8d40a884a8a99ea769deed-rtkit-daemon.service-sx5yWE
drwx------. 2 root root    6 5月  12 14:30 tracker-extract-files.0
drwx------. 2 root root    6 5月  12 14:25 vmware-root_922-2722632355

例三:只列出文件下的子目录

命令:ls -F //usr/lib |grep /$

列出 /usr/lib 文件下面的子目录

[root@localhost /]# ls -F /usr/lib |grep /$
alsa/
binfmt.d/
cups/
debug/
dracut/
environment.d/
firewalld/
firmware/
fontconfig/
games/
grub/
kbd/
kdump/
kernel/
locale/
mdadm/
modprobe.d/
modules/
modules-load.d/
mozilla/
NetworkManager/
ostree/
polkit-1/
python3.6/
realmd/
rpm/
sse2/
sysctl.d/
sysimage/
systemd/
sysusers.d/
tmpfiles.d/
tuned/
udev/

命令:ls -l /usr/lib | grep "^d"

列出 /usr/lib 文件下面的子目录详细情况

[root@localhost /]# ls -l /usr/lib | grep "^d"
drwxr-xr-x.  3 root root    18 5月  12 14:18 alsa
drwxr-xr-x.  2 root root     6 9月   2 2020 binfmt.d
drwxr-xr-x.  9 root root   109 5月  12 14:19 cups
drwxr-xr-x.  4 root root    76 5月  12 14:16 debug
drwxr-xr-x.  4 root root   236 5月  12 14:17 dracut
drwxr-xr-x.  2 root root    33 5月  12 14:17 environment.d
drwxr-xr-x.  7 root root    81 5月  12 14:16 firewalld
drwxr-xr-x. 84 root root 12288 5月  12 14:20 firmware
drwxr-xr-x.  3 root root    19 5月  12 14:17 fontconfig
dr-xr-xr-x.  2 root root     6 11月  3 2020 games
drwxr-xr-x.  3 root root    21 5月  12 14:16 grub
drwxr-xr-x.  6 root root    76 5月  12 14:16 kbd
drwxr-xr-x.  2 root root    56 5月  12 14:19 kdump
drwxr-xr-x.  3 root root    23 9月   2 2020 kernel
drwxr-xr-x. 50 root root  4096 5月  12 14:16 locale
drwxr-xr-x.  2 root root    26 5月  12 14:19 mdadm
drwxr-xr-x.  2 root root    95 5月  12 14:17 modprobe.d
drwxr-xr-x.  4 root root    64 5月  12 14:17 modules
drwxr-xr-x.  2 root root    32 5月  12 14:19 modules-load.d
drwxr-xr-x.  4 root root    39 5月  12 14:16 mozilla
drwxr-xr-x.  6 root root    77 5月  12 14:17 NetworkManager
drwxr-xr-x.  2 root root    55 5月  12 14:17 ostree
drwxr-xr-x.  2 root root    50 5月  12 14:17 polkit-1
drwxr-xr-x.  3 root root    27 8月  25 2020 python3.6
drwxr-xr-x.  2 root root    74 5月  12 14:19 realmd
drwxr-xr-x.  5 root root  4096 5月  12 14:18 rpm
dr-xr-xr-x.  2 root root     6 11月  3 2020 sse2
drwxr-xr-x.  2 root root   169 5月  12 14:19 sysctl.d
drwxr-xr-x.  2 root root     6 11月  3 2020 sysimage
drwxr-xr-x. 16 root root  4096 5月  12 14:19 systemd
drwxr-xr-x.  2 root root    81 5月  12 14:19 sysusers.d
drwxr-xr-x.  2 root root  4096 5月  12 14:19 tmpfiles.d
drwxr-xr-x. 16 root root  4096 5月  12 14:19 tuned
drwxr-xr-x.  4 root root  4096 5月  12 14:19 udev

例四:列出目前工作目录下所有名称是s 开头的档案,越新的排最后面

命令:ls -ltr s*

[root@localhost /]# ls -ltr s*
lrwxrwxrwx.  1 root root 8 11月  3 2020 sbin -> usr/sbin

srv:
总用量 0

sys:
总用量 0
drwxr-xr-x. 175 root root 0 5月  12 14:25 module
drwxr-xr-x.  14 root root 0 5月  12 14:25 kernel
drwxr-xr-x.   8 root root 0 5月  12 14:25 fs
drwxr-xr-x.  16 root root 0 5月  12 14:25 devices
drwxr-xr-x.  58 root root 0 5月  12 14:25 class
drwxr-xr-x.   6 root root 0 5月  12 14:25 firmware
drwxr-xr-x.  35 root root 0 5月  12 14:25 bus
drwxr-xr-x.   4 root root 0 5月  12 14:25 dev
drwxr-xr-x.   2 root root 0 5月  12 14:25 block
drwxr-xr-x.   2 root root 0 5月  12 14:25 power
drwxr-xr-x.   2 root root 0 5月  12 14:25 hypervisor

例五:列出目前工作目录下所有档案及目录;目录于名称后加"/", 可执行档于名称后加"*"

命令:ls -AF

[root@localhost /]# ls -AF
bin@   dev/  home/  lib64@  mnt/  proc/  run/   srv/  tmp/  var/
boot/  etc/  lib@   media/  opt/  root/  sbin@  sys/  usr/

例六:计算当前目录下的文件数和目录数

命令:ls -l * |grep "^-"|wc -l
  文件个数

[root@localhost /]# ls -l * |grep "^-"|wc -l
181

例七: 在ls中列出文件的绝对路径

命令:ls | sed "s:^:pwd/:"

[root@localhost usr]# ls | sed "s:^:`pwd`/:"
/usr/bin
/usr/games
/usr/include
/usr/lib
/usr/lib64
/usr/libexec
/usr/local
/usr/sbin
/usr/share
/usr/src
/usr/tmp

例八:列出当前目录下的所有文件(包括隐藏文件)的绝对路径, 对目录不做递归

命令:find $PWD -maxdepth 1 | xargs ls -ld

[root@localhost usr]# find $PWD -maxdepth 1 | xargs ls -ld
drwxr-xr-x.  12 root root   144 5月  12 14:16 /usr
dr-xr-xr-x.   2 root root 45056 5月  12 14:20 /usr/bin
drwxr-xr-x.   2 root root     6 11月  3 2020 /usr/games
drwxr-xr-x.   4 root root    43 5月  12 14:19 /usr/include
dr-xr-xr-x.  37 root root  4096 5月  12 14:19 /usr/lib
dr-xr-xr-x. 126 root root 81920 5月  12 14:23 /usr/lib64
drwxr-xr-x.  49 root root 12288 5月  12 14:20 /usr/libexec
drwxr-xr-x.  12 root root   131 5月  12 14:16 /usr/local
dr-xr-xr-x.   2 root root 20480 5月  12 14:20 /usr/sbin
drwxr-xr-x. 223 root root  8192 5月  12 14:19 /usr/share
drwxr-xr-x.   4 root root    34 5月  12 14:16 /usr/src
lrwxrwxrwx.   1 root root    10 11月  3 2020 /usr/tmp -> ../var/tmp

例九:递归列出当前目录下的所有文件(包括隐藏文件)的绝对路径

命令: find $PWD | xargs ls -ld

例十:指定文件时间输出格式

命令: ls -tl --time-style=full-iso

[root@localhost usr]# ls -tl --time-style=full-iso
总用量 244
dr-xr-xr-x. 126 root root 81920 2021-05-12 14:23:01.371736631 +0800 lib64
dr-xr-xr-x.   2 root root 45056 2021-05-12 14:20:00.291608936 +0800 bin
dr-xr-xr-x.   2 root root 20480 2021-05-12 14:20:00.270609052 +0800 sbin
drwxr-xr-x.  49 root root 12288 2021-05-12 14:20:00.198609449 +0800 libexec
drwxr-xr-x. 223 root root  8192 2021-05-12 14:19:58.132620848 +0800 share
drwxr-xr-x.   4 root root    43 2021-05-12 14:19:35.774744194 +0800 include
dr-xr-xr-x.  37 root root  4096 2021-05-12 14:19:35.338746599 +0800 lib
drwxr-xr-x.   4 root root    34 2021-05-12 14:16:35.496611746 +0800 src
drwxr-xr-x.  12 root root   131 2021-05-12 14:16:35.359612023 +0800 local
drwxr-xr-x.   2 root root     6 2020-11-03 23:22:25.000000000 +0800 games
lrwxrwxrwx.   1 root root    10 2020-11-03 23:22:25.000000000 +0800 tmp -> ../var/tmp

命令:ls -ctl --time-style=long-iso

[root@localhost usr]# ls -ctl --time-style=long-iso
总用量 244
dr-xr-xr-x. 126 root root 81920 2021-05-12 14:23 lib64
dr-xr-xr-x.   2 root root 45056 2021-05-12 14:20 bin
dr-xr-xr-x.   2 root root 20480 2021-05-12 14:20 sbin
drwxr-xr-x.  49 root root 12288 2021-05-12 14:20 libexec
drwxr-xr-x. 223 root root  8192 2021-05-12 14:19 share
drwxr-xr-x.   4 root root    43 2021-05-12 14:19 include
dr-xr-xr-x.  37 root root  4096 2021-05-12 14:19 lib
drwxr-xr-x.   4 root root    34 2021-05-12 14:16 src
lrwxrwxrwx.   1 root root    10 2021-05-12 14:16 tmp -> ../var/tmp
drwxr-xr-x.  12 root root   131 2021-05-12 14:16 local
drwxr-xr-x.   2 root root     6 2021-05-12 14:16 games
⑥扩展
  • 显示彩色目录列表

打开/etc/bashrc, 加入如下一行:

alias ls="ls --color"

下次启动bash时就可以像在Slackware里那样显示彩色的目录列表了, 其中颜色的含义如下:

1. 蓝色-->目录

2. 绿色-->可执行文件

3. 红色-->压缩文件

4. 浅蓝色-->链接文件

5. 灰色-->其他文件

2.创建和删除目录命令

2.1mkdir命令

mkdir是make directory的缩写,Linux中 mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录。

①语法

mkdir [选项] 目录名称

②功能

通过 mkdir 命令可以实现在指定位置创建以 指定的文件名 命名的文件夹或目录。要创建文件夹或目录的用户必须对所创建的文件夹的父文件夹具有写权限。并且所创建的文件夹(目录)不能与其父目录(即父文件夹)中的文件名重名,即同一个目录下不能有同名的(区分大小写)。还可以设置目录的权限。
  文件或目录的权限又分为3种:只读、只写、可执行。

权限 权限数值 二进制 具体作用
r 4 00000100 read,读取。当前用户可以读取文件内容,当前用户可以浏览目录。
w 2 00000010 write,写入。当前用户可以新增或修改文件内容,当前用户可以删除、移动目录或目录内文件。
x 1 00000001 execute,执行。当前用户可以执行文件,当前用户可以进入目录。

依照上面的表格,权限组合就是对应权限值求和,如下:
7 = 4 + 2 + 1 读写运行权限
5 = 4 + 1 读和运行权限
4 = 4 只读权限

③参数
-m<目录属性>或--mode<目录属性>   建立目录时同时设置目录的权限。类似chmod,而不是rwxrwxrwx 减umask。
-p或--parents   若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录,即使这些目录已存在也不当作错误处理。
-v或--verbose   每次创建新目录时显示详细的信息。
-Z或--context=CTX   将每个创建的目录的SELinux 安全环境设置为CTX。
--help   在线帮助。查看该命令功能和可带参数等。
④常用范例

例一:创建一个空目录

命令:mkdir test

[root@localhost ~]# cd /usr/games/
[root@localhost games]# ll
总用量 0
[root@localhost games]# mkdir test
[root@localhost games]# ll
总用量 0
drwxr-xr-x. 2 root root 6 5月  13 10:41 test

例二:递归创建多个目录

命令:mkdir -p test2/test22

[root@localhost games]# ll
总用量 0
drwxr-xr-x. 2 root root 6 5月  13 10:41 test
[root@localhost games]# mkdir -p test2/test22
[root@localhost games]# ll
总用量 0
drwxr-xr-x. 2 root root  6 5月  13 10:41 test
drwxr-xr-x. 3 root root 20 5月  13 10:44 test2
[root@localhost games]# cd test2/
[root@localhost test2]# ll
总用量 0
drwxr-xr-x. 2 root root 6 5月  13 10:44 test22

例三:创建权限为777的目录

命令: mkdir -m 777 test3

test3 的权限为rwxrwxrwx

[root@localhost games]# mkdir -m 777 test3
[root@localhost games]# ll
总用量 0
drwxr-xr-x. 2 root root  6 5月  13 10:41 test
drwxr-xr-x. 3 root root 20 5月  13 10:44 test2
drwxrwxrwx. 2 root root  6 5月  13 10:50 test3

例四:创建新目录都显示信息

命令: mkdir -v test4

[root@localhost games]# mkdir -v test4
mkdir: 已创建目录 'test4'

例五:一个命令创建项目的目录结构

命令: mkdir -vp scf/{lib/,bin/,doc/{info,product},logs/{info,product},service/deploy/{info,product}}

[root@localhost games]# mkdir -vp scf/{lib/,bin/,doc/{info,product},logs/{info,product},service/deploy/{info,product}}
mkdir: 已创建目录 'scf'
mkdir: 已创建目录 'scf/lib/'
mkdir: 已创建目录 'scf/bin/'
mkdir: 已创建目录 'scf/doc'
mkdir: 已创建目录 'scf/doc/info'
mkdir: 已创建目录 'scf/doc/product'
mkdir: 已创建目录 'scf/logs'
mkdir: 已创建目录 'scf/logs/info'
mkdir: 已创建目录 'scf/logs/product'
mkdir: 已创建目录 'scf/service'
mkdir: 已创建目录 'scf/service/deploy'
mkdir: 已创建目录 'scf/service/deploy/info'
mkdir: 已创建目录 'scf/service/deploy/product'

2.2rmdir命令

rmdir 是remove directory的缩写,Linux中 rmdir 命令的功能是删除空目录,一个目录被删除之前必须是空的。(注意:rm - r dir 命令可代替rmdir,但是有很大危险性)删除某目录时也必须具有对父目录的写权限。

①语法

rmdir [选项] 目录名称

②功能

从一个目录中删除一个或多个子目录项即有空目录要删除,删除某目录时也必须具有对父目录的写权限。

③参数
-p或--parents   删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除。
--ignore-fail-on-non-empty   忽略非空目录的错误信息。
-v或--verbose   显示指令执行过程。
--help   在线帮助。查看该命令功能和可带参数等。
④常用范例

例一:删除一个空的文件夹

命令:rmdir 目录名

该命令不能直接删除非空目录。

[root@localhost games]# tree
.
├── test
│   ├── -f
│   ├── test11
│   └── test22
└── test1

4 directories, 1 file
[root@localhost games]# rmdir test
rmdir: 删除 'test' 失败: 目录非空
[root@localhost games]# rmdir test1
[root@localhost games]# tree
.
└── test
    ├── -f
    ├── test11
    └── test22

3 directories, 1 file

例二:删除多个文件夹

命令:rmdir -p目录名

当子目录被删除后使父目录也成为空目录的话,则会一并删除 。

[root@localhost games]# tree
.
└── test
    └── test11

2 directories, 0 files
[root@localhost games]# rmdir -p test/test11/
[root@localhost games]# tree
.

0 directories, 0 files

3.改变文件或目录存取权限命令

3.1chmod

Linux中 chmod 命令用于改变linux系统文件或目录的访问权限。用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法,另一种是包含数字的数字设定法。
  Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。
  文件或目录的访问权限分为只读,只写和可执行三种。以文件为例,只读权限表示只允许读其内容,而禁止对其做任何的更改操作。可执行权限表示允许将该文件作为一个程序执行。文件被创建时,文件所有者自动拥有对该文件的读、写和可执行权限,以便于对文件的阅读和修改。用户也可根据需要把访问权限设置为需要的任何组合。
  有三种不同类型的用户可对文件或目录进行访问:文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。所有者一般是文件的创建者。所有者可以允许同组用户有权访问文件,还可以将文件的访问权限赋予系统中的其他用户。在这种情况下,系统中每一位用户都能访问该用户拥有的文件或目录。
  每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。当用ls -l命令显示文件或目录的详细信息时,最左边的一列为文件的访问权限。

①文件属性

只有文件所有者和超级用户可以修改文件或目录的权限。可以使用绝对模式(八进制数字模式),符号模式指定文件的权限。如果没有权限,就会出现减号[ - ]。

所有者的权限用数字表达:属主的那三个权限位的数字加起来的总和。如rwx ,也就是4+2+1 ,应该是7。
用户组的权限用数字表达:属组的那个权限位数字的相加的总和。如r-x ,也就是4+0+1 ,应该是5。
其它用户的权限数字表达:其它用户权限位的数字相加的总和。如r-- ,也就是4+0+0 ,应该是4。

1)首位表示类型
在Linux中第一个字符代表这个文件是目录、文件或链接文件。
-代表文件
d代表目录
l代表链接文档(link file)

2)第2-4位确定属主
该文件的所有者拥有该文件的权限。—User

3)第5-7位确定属组
所有者的同组用户拥有该文件的权限,—Group

4)第8-10位确定其他用户
其他用户拥有该文件的权限 —Other

rxw作用文件和目录的不同解释:

1)作用到文件:
[ r ]代表可读(read): 可以读取,查看。
[ w ]代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件。
[ x ]代表可执行(execute):可以被系统执行。

2)作用到目录:
[ r ]代表可读(read): 可以读取,ls查看目录内容。
[ w ]代表可写(write): 可以修改,目录内创建+删除+重命名目录。
[ x ]代表可执行(execute):可以进入该目录。

-rw- r-- r–解释:

表示是一个普通文件,属主有读写权限,与属主同组的用户只有读权限,其他用户也只有读权限。

②语法

chmod [参数] [文件或目录]

③功能

用于改变文件或目录的访问权限,用它控制文件或目录的访问权限。

④参数
-c或--changes  效果类似"-v"参数,但仅回报更改的部分。 
-f或--quiet或--silent  不显示错误信息。 
-R或--recursive  递归处理,将指定目录下的所有文件及子目录一并处理。 
-v或--verbose  运行时显示详细处理信息。 
--reference=<参考文件或目录>  把指定文件或目录的权限全部设成和参考文件或目录的权限相同 
<权限范围>+<权限设置>  开启权限范围的文件或目录的该项权限设置。 
<权限范围>-<权限设置>  关闭权限范围的文件或目录的该项权限设置。 
<权限范围>=<权限设置>  指定权限范围的文件或目录的该项权限设置。

权限范围:
u :目录或者文件的当前的用户。
g :目录或者文件的当前的群组。
o :除了目录或者文件的当前用户或群组之外的用户或者群组。
a :所有的用户及群组。

权限代号:
r:读权限,用数字4表示。
w:写权限,用数字2表示。
x:执行权限,用数字1表示。
-:删除权限,用数字0表示。
s:特殊权限,变更文件或目录的权限。

⑤常用范例

例一:增加文件所有用户组可执行权限

命令:chmod a+x log1.txt

设定文件log1.txt的属性为:文件属主(u) 增加执行权限;与文件属主同组用户(g) 增加执行权限;其他用户(o) 增加执行权限。

[root@localhost test]# ll log1.txt 
-rw-r--r--. 1 root root 156 5月  19 11:17 log1.txt
[root@localhost test]# chmod a+x log1.txt 
[root@localhost test]# ll log1.txt 
-rwxr-xr-x. 1 root root 156 5月  19 11:17 log1.txt

例二:同时修改不同用户权限

命令: chmod ug+w,o+x log2.txt

设定文件log2.txt的属性为:文件属主(u) 增加写权限;与文件属主同组用户(g) 增加写权限;其他用户(o) 删除执行权限。

[root@localhost test]# ll log2.txt 
-rw-r--r--. 1 root root 592 5月  14 17:00 log2.txt
[root@localhost test]# chmod ug+w,o+x log2.txt 
[root@localhost test]# ll log2.txt 
-rw-rw-r-x. 1 root root 592 5月  14 17:00 log2.txt

例三:删除文件权限

命令: chmod a-x log1.txt

删除所有用户的可执行权限。

[root@localhost test]# ll log1.txt 
-rwxr-xr-x. 1 root root 156 5月  19 11:17 log1.txt
[root@localhost test]# chmod a-x log1.txt 
[root@localhost test]# ll log1.txt 
-rw-r--r--. 1 root root 156 5月  19 11:17 log1.txt

例四:指定用户权限

命令: chmod u=x log1.txt

撤销原来文件属主(u) 的所有权限,然后使文件属主(u) 具有可执行权限。

[root@localhost test]# ll log1.txt 
-rw-r--r--. 1 root root 156 5月  19 11:17 log1.txt
[root@localhost test]# chmod u=x log1.txt 
[root@localhost test]# ll log1.txt 
---xr--r--. 1 root root 156 5月  19 11:17 log1.txt

**例五:对一个目录及其子目录所有文件添加权限 **

命令: chmod -R u+x test

递归地给test目录下所有文件和子目录的属主分配执行权限。

[root@localhost test]# ll
总用量 24
-rw-r--r--. 1 root root  96 5月  18 15:27 color.sh
-rw-r--r--. 1 root root  96 5月  18 10:15 lncolor
---xr--r--. 1 root root 156 5月  19 11:17 log1.txt
-rw-rw-r-x. 1 root root 592 5月  14 17:00 log2.txt
-rw-r--r--. 1 root root 655 5月  14 17:06 log3.txt
-rw-r--r--. 1 root root 272 5月  19 10:51 log.txt
[root@localhost test]# cd ../
[root@localhost games]# ll
总用量 0
drwxr-xr-x. 2 root root 100 5月  19 11:17 test
[root@localhost games]# chmod -R u+x test
[root@localhost games]# cd test/
[root@localhost test]# ll
总用量 24
-rwxr--r--. 1 root root  96 5月  18 15:27 color.sh
-rwxr--r--. 1 root root  96 5月  18 10:15 lncolor
---xr--r--. 1 root root 156 5月  19 11:17 log1.txt
-rwxrw-r-x. 1 root root 592 5月  14 17:00 log2.txt
-rwxr--r--. 1 root root 655 5月  14 17:06 log3.txt
-rwxr--r--. 1 root root 272 5月  19 10:51 log.txt

**例六:数字设定权限 **

命令: chmod 751 log3.txt

给log3.txt的属主分配读、写、执行(7)的权限,给log3.txt的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限。

[root@localhost test]# ll log3.txt 
-rwxr--r--. 1 root root 655 5月  14 17:06 log3.txt
[root@localhost test]# chmod 751 log3.txt 
[root@localhost test]# ll log3.txt 
-rwxr-x--x. 1 root root 655 5月  14 17:06 log3.txt

修改文件权限chmod

linux是通过权限对文件进行控制的, 通过使用chmod命令可以修改文件相关的权限.

  • 文字设定法

命令:chmod [who] [+|-|=] [mode] 文件名

 ■操作对象【who】

  ▷ u -- 用户(user)

  ▷ g -- 同组用户(group)

  ▷ o -- 其他用户(other)

  ▷ a -- 所用用户(all)【默认】

 ■操作符【+-=】

  ▷ + -- 添加权限

  ▷ - -- 取消权限

  ▷ = -- 赋予给定权限并取消其他权限

 ■权限【mode】

  ▷ r -- 读

  ▷ w -- 写

  ▷ x -- 执行

 ■ 示例:给文件file.txt的所有者和所属组添加读写权限

 ■chmod ug+wr file.txt

  • 数字设定法

 ■ 命令:chmod [+|-|=][mode] 文件名

  ▷ 操作符【+-=】

   ◇ + -- 添加权限

   ◇ - -- 取消权限

   ◇ = -- 赋予给定权限并取消其他权限 (默认为=)

  ▷ 数字表示的含义

   ◇ 0 -- 没有权限(-)

   ◇ 1 -- 执行权限(x)

   ◇ 2 -- 写权限(w)

   ◇ 4 -- 读权限(r)

 ■ 例:给file.txt文件设置 rw-rw-r--

  ▷ chmod 664 file.txt

注意点: 使用数字设定法, 一定要使用3位的8进制数: 如:066

修改文件所有者和所属组

  • 修改文件所有者chown

 ■ 用法:chown 文件所有者 文件名

  ▷ sudo chown mytest file.txt

  • 修改文件所有者和所属组chown

 ■ 用法:chown 文件所有者:文件所属组 文件名

 ■sudo chown mytest:mytest file.txt

 ■sudo chown mytest.mytest file.txt

  • 注意:普通用户需要使用管理员用户权限执行该命令

  • 注意: 若系统没有其他用户, 可以使用sudo adduser 用户名 创建一个新用户。

修改文件所属组

  • chgrp命令

 ■ 使用方法:chgrp 用户组 文件或目录名

  ▷示例:修改文件所属组为mytest

sudo chgrp mytest file.txt
  • 普通用户需要使用管理员权限执行该命令。

chmod
	   	文字设定法: chmod ug+wx file.log
	   	数字设定法: chmod 777  file.log
	   	
chown:
   		sudo chown mytest:mytest aa.log
   		sudo chown mytest.mytest aa.log
   		sudo chown :mytest aa.log
   		sudo chown .mytest aa.log

4.改变用户组和文件主的命令

4.1chgrp命令

chgrp是change group的缩写,在Linux中 chgrp 命令可以变更文件与目录所属群组,设置方式采用群组名称或群组识别码都可以,但是要被改变的组名必须要在/etc/group文件内存在才行。

①语法

chgrp [选项] [组] [文件]

②功能

可采用群组名称或群组识别码的方式改变文件或目录的所属群组,使用权限是超级用户。

③参数
-c或--changes  效果类似"-v"参数,但仅回显更改的部分。 
-f或--quiet或--silent  不显示错误信息。 
-h或--no-dereference  只对符号连接的文件作修改,而不更动其他任何相关文件。 
-R或--recursive  递归处理,将指定目录下的所有文件及子目录一并处理。、 
-v或--verbose  显示指令执行过程。 
--reference=<参考文件或目录>  把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同。 
--dereference   作用于符号链接的指向,而不是符号链接本身。
④常用范例

例一:改变文件的群组属性

命令:chgrp -v bin log1.txt

将log1.txt文件由root群组改为bin群组 。

[root@localhost test]# ll log1.txt 
---xr--r--. 1 root root 156 5月  19 11:17 log1.txt
[root@localhost test]# chgrp -v bin log1.txt 
'log1.txt' 的所属组已从 root 更改为 bin
[root@localhost test]# ll log1.txt 
---xr--r--. 1 root bin 156 5月  19 11:17 log1.txt

例二:根据指定文件改变文件的群组属性

命令: chgrp --reference=log1.txt log2.txt

改变文件log2.txt的群组属性,使得文件log2.txt的群组属性和参考文件log1.txt的群组属性相同。

[root@localhost test]# ll log1.txt log2.txt 
---xr--r--. 1 root bin  156 5月  19 11:17 log1.txt
-rwxrw-r-x. 1 root root 592 5月  14 17:00 log2.txt
[root@localhost test]# chgrp --reference=log1.txt log2.txt
[root@localhost test]# ll log1.txt log2.txt 
---xr--r--. 1 root bin 156 5月  19 11:17 log1.txt
-rwxrw-r-x. 1 root bin 592 5月  14 17:00 log2.txt

例三:改变指定目录以及其子目录下的所有文件的群组属性

命令: chgrp -R bin test

[root@localhost test]# ll
总用量 24
-rwxr--r--. 1 root root  96 5月  18 15:27 color.sh
-rwxr--r--. 1 root root  96 5月  18 10:15 lncolor
---xr--r--. 1 root bin  156 5月  19 11:17 log1.txt
-rwxrw-r-x. 1 root bin  592 5月  14 17:00 log2.txt
-rwxr-x--x. 1 root root 655 5月  14 17:06 log3.txt
-rwxr--r--. 1 root root 272 5月  19 10:51 log.txt
[root@localhost test]# cd ../
[root@localhost games]# ll
总用量 0
drwxr-xr-x. 2 root root 100 5月  19 11:17 test
[root@localhost games]# chgrp -R bin test
[root@localhost games]# cd test/
[root@localhost test]# ll
总用量 24
-rwxr--r--. 1 root bin  96 5月  18 15:27 color.sh
-rwxr--r--. 1 root bin  96 5月  18 10:15 lncolor
---xr--r--. 1 root bin 156 5月  19 11:17 log1.txt
-rwxrw-r-x. 1 root bin 592 5月  14 17:00 log2.txt
-rwxr-x--x. 1 root bin 655 5月  14 17:06 log3.txt
-rwxr--r--. 1 root bin 272 5月  19 10:51 log.txt
[root@localhost test]# cd ../
[root@localhost games]# ll
总用量 0
drwxr-xr-x. 2 root bin 100 5月  19 11:17 test

例四:通过群组识别码改变文件群组属性

命令: chgrp -R 1000 test

通过群组识别码改变文件群组属性,1000为esther群组的识别码,具体群组和群组识别码可以去/etc/group文件中查看。

[root@localhost ~]# cat /etc/group
bin:x:1:
esther:x:1000:

[root@localhost games]# chgrp -R 1000 test
[root@localhost games]# ll
总用量 0
drwxr-xr-x. 2 root esther 100 5月  19 11:17 test
[root@localhost games]# cd test/
[root@localhost test]# ll
总用量 24
-rwxr--r--. 1 root esther  96 5月  18 15:27 color.sh
-rwxr--r--. 1 root esther  96 5月  18 10:15 lncolor
---xr--r--. 1 root esther 156 5月  19 11:17 log1.txt
-rwxrw-r-x. 1 root esther 592 5月  14 17:00 log2.txt
-rwxr-x--x. 1 root esther 655 5月  14 17:06 log3.txt
-rwxr--r--. 1 root esther 272 5月  19 10:51 log.txt

5.链接文件的命令

5.1ln

ln是link的缩写,在Linux中 ln 命令的功能是为某一个文件在另外一个位置建立一个同步的链接,当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接它就可以,不必重复的占用磁盘空间。

(1)语法

ln [参数] [源文件或目录] [目标文件或目录]

(2)功能

连接文件或目录。Linux文件系统中,有所谓的链接(link),我们可以将其视为档案的别名,而链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。

软链接:

①软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式

②软链接可以 跨文件系统 ,硬链接不可以

③软链接可以对一个不存在的文件名进行链接

④软链接可以对目录进行链接

ln -s aa.log aa.log.s
aa.log.s -> aa.log 

注意点: 创建软连接源文件一定要使用绝对路径,否则,当软连接文件移动位置之后,就会找不到指向的文件了。

硬链接:

①硬链接,以文件副本的形式存在。但不占用实际空间。

②不允许给目录创建硬链接

③硬链接只有在同一个文件系统中才能创建

  • ln 文件名 硬链接的名字

 ■ln test.log test.log.hard

  • 使用硬链接应注意事项

 ■硬链接不能建在目录上

 ■硬连接对绝对路径没有要求

 ■硬连接不能跨文件系统

硬链接文件和源文件的inode是相同的,文件系统的inode要求唯一,跨文件系统可能会使inode不同,所以硬链接不能跨文件系统

  • 硬链接的本质

 ■硬连接的本质是不同的文件名所在的inode节点是相同的,相同的inode节点指向了相同的数据块,所以他们的文件内容是一样的,文件内容会同步。

 ■ls -i 文件名 ------>可以查看文件的i节点

 ■stat 文件名 --->可以查看i节点信息

 ■如下图,file.hard是file的硬链接, 这个两个文件指向了同一个inode,同一个inode指向了相同的数据块(文件内容)。

  ▷当新创建了一个文件,硬链接计数为1

  ▷给文件创建了一个硬链接后,硬链接计数加1

  ▷删除一个硬链接后,硬链接计数减1

  ▷如果删除硬链接后,硬链接计数为0,则该文件会删除

  • 硬链接应用场合

 ■可以起到同步文件的作用

修改file的内容,会在其余三个硬链接文件上同步。

 ■可以起到保护文件的作用

删除文件的时候,只要硬链接计数不为0,不会真正删除,起到保护文件的作用。

硬链接计数为0,文件就删除了

创建

有相同i节点,指向相同的数据块,对file文件进行修改,file.hard能看到修改

硬链接:
ln soucefile desfile
硬链接不能建立在目录上
创建一个硬链接文件,硬链接计数+1,删除一个则-1;

ls -li: 可以查看文件的inode

作用: 
	1 可以起到同步文件的作用
	2 可以起到保护文件的作用

硬链接文件和源文件的inode是相同的,文件系统的inode要求唯一,跨文件系统可能会使inode不同,所以硬链接不能跨文件系统

注意:

①ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;

②ln的链接又分软链接和硬链接两种,软链接就是ln –s 源文件 目标文件,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接 ln 源文件 目标文件,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。

③ln指令用在链接文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,且最后的目的地并非是一个已存在的目录,则会出现错误信息。

④通过ll可以查看,列表属性第1位是l,尾部会有位置指向的是软连接。

(3)参数
-b或--backup   删除,覆盖目标文件之前的备份。 
-d或-F或--directory   建立目录的硬连接。 
-f或--force  强行建立文件或目录的连接,不论文件或目录是否存在。 
-i或--interactive  覆盖既有文件之前先询问用户。 
-n或--no-dereference  把符号连接的目的目录视为一般文件。 
-s或--symbolic  对源文件建立软链接(符号连接),而非硬连接。 
-S<字尾备份字符串>或--suffix=<字尾备份字符串>  用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的字尾备份字符串是符号"~",可通过"-S"参数来改变它。 
-v或--verbose  显示指令执行过程。 
-V<备份方式>或--version-control=<备份方式>  用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这个字符串不仅可用"-S"参数变更,当使用"-V"参数<备份方式>指定不同备份方式时,也会产生不同字尾的备份字符串。 
(4)常用范例

例一:给文件创建软链接

命令:ln -s color.sh linkcolor

为color.sh文件创建软链接linkcolor,如果color.sh丢失,linkcolor将失效。

[root@localhost test]# ll
总用量 24
-rw-r--r--. 1 root root  96 5月  18 10:15 color.sh
-rw-r--r--. 1 root root 156 5月  14 17:00 log1.txt
-rw-r--r--. 1 root root 592 5月  14 17:00 log2.txt
-rw-r--r--. 1 root root 655 5月  14 17:06 log3.txt
-rw-r--r--. 1 root root 156 5月  18 14:32 log4.txt
-rw-r--r--. 1 root root 272 5月  18 14:28 log.txt
[root@localhost test]# ln -s color.sh linkcolor
[root@localhost test]# ll
总用量 24
-rw-r--r--. 1 root root  96 5月  18 10:15 color.sh
lrwxrwxrwx. 1 root root   8 5月  18 14:57 linkcolor -> color.sh
-rw-r--r--. 1 root root 156 5月  14 17:00 log1.txt
-rw-r--r--. 1 root root 592 5月  14 17:00 log2.txt
-rw-r--r--. 1 root root 655 5月  14 17:06 log3.txt
-rw-r--r--. 1 root root 156 5月  18 14:32 log4.txt
-rw-r--r--. 1 root root 272 5月  18 14:28 log.txt

例二:给文件创建硬链接

命令:ln color.sh lncolor

为color.sh创建硬链接lncolor,color.sh与lncolor的各项属性相同。

[root@localhost test]# ll
总用量 24
-rw-r--r--. 1 root root  96 5月  18 10:15 color.sh
lrwxrwxrwx. 1 root root   8 5月  18 14:57 linkcolor -> color.sh
-rw-r--r--. 1 root root 156 5月  14 17:00 log1.txt
-rw-r--r--. 1 root root 592 5月  14 17:00 log2.txt
-rw-r--r--. 1 root root 655 5月  14 17:06 log3.txt
-rw-r--r--. 1 root root 156 5月  18 14:32 log4.txt
-rw-r--r--. 1 root root 272 5月  18 14:28 log.txt
[root@localhost test]# ln color.sh lncolor
[root@localhost test]# ll
总用量 28
-rw-r--r--. 2 root root  96 5月  18 10:15 color.sh
lrwxrwxrwx. 1 root root   8 5月  18 14:57 linkcolor -> color.sh
-rw-r--r--. 2 root root  96 5月  18 10:15 lncolor
-rw-r--r--. 1 root root 156 5月  14 17:00 log1.txt
-rw-r--r--. 1 root root 592 5月  14 17:00 log2.txt
-rw-r--r--. 1 root root 655 5月  14 17:06 log3.txt
-rw-r--r--. 1 root root 156 5月  18 14:32 log4.txt
-rw-r--r--. 1 root root 272 5月  18 14:28 log.txt

例三:删除和重建链接原文件

命令:删除连接原文件 rm -rf color.sh
   重建连接原文件 touch color.sh

源文件被删除后,并没有影响硬链接文件;软链接文件在centos系统下不断的闪烁,提示源文件已经不存在。
  重建源文件后,软链接不在闪烁提示,说明已经链接成功,找到了链接文件系统;重建后,硬链接文件并没有受到源文件影响,硬链接文件的内容还是保留了删除前源文件的内容,说明硬链接已经失效。

[root@localhost test]# ll
总用量 28
-rw-r--r--. 2 root root  96 5月  18 10:15 color.sh
lrwxrwxrwx. 1 root root   8 5月  18 14:57 linkcolor -> color.sh
-rw-r--r--. 2 root root  96 5月  18 10:15 lncolor
-rw-r--r--. 1 root root 156 5月  14 17:00 log1.txt
-rw-r--r--. 1 root root 592 5月  14 17:00 log2.txt
-rw-r--r--. 1 root root 655 5月  14 17:06 log3.txt
-rw-r--r--. 1 root root 156 5月  18 14:32 log4.txt
-rw-r--r--. 1 root root 272 5月  18 14:28 log.txt
[root@localhost test]# rm -rf color.sh 
[root@localhost test]# ll
总用量 24
lrwxrwxrwx. 1 root root   8 5月  18 14:57 linkcolor -> color.sh
-rw-r--r--. 1 root root  96 5月  18 10:15 lncolor
-rw-r--r--. 1 root root 156 5月  14 17:00 log1.txt
-rw-r--r--. 1 root root 592 5月  14 17:00 log2.txt
-rw-r--r--. 1 root root 655 5月  14 17:06 log3.txt
-rw-r--r--. 1 root root 156 5月  18 14:32 log4.txt
-rw-r--r--. 1 root root 272 5月  18 14:28 log.txt
[root@localhost test]# touch color.sh
[root@localhost test]# ll
总用量 24
-rw-r--r--. 1 root root   0 5月  18 15:15 color.sh
lrwxrwxrwx. 1 root root   8 5月  18 14:57 linkcolor -> color.sh
-rw-r--r--. 1 root root  96 5月  18 10:15 lncolor
-rw-r--r--. 1 root root 156 5月  14 17:00 log1.txt
-rw-r--r--. 1 root root 592 5月  14 17:00 log2.txt
-rw-r--r--. 1 root root 655 5月  14 17:06 log3.txt
-rw-r--r--. 1 root root 156 5月  18 14:32 log4.txt
-rw-r--r--. 1 root root 272 5月  18 14:28 log.txt
[root@localhost test]# cat linkcolor 
[root@localhost test]# cat lncolor 
echo -e "\033[35mHello World\033[0m"
echo -e "\033[46;37mHello World\033[0m"
echo "Hello World"

例四:给目录创建软链接

命令:ln color.sh test1

在test1目录中创建了color.sh的硬链接,修改test1目录中的color.sh文件,同时也会同步到源文件。

[root@localhost test]# ll
总用量 24
-rw-r--r--. 1 root root   0 5月  18 15:15 color.sh
lrwxrwxrwx. 1 root root   8 5月  18 14:57 linkcolor -> color.sh
-rw-r--r--. 1 root root  96 5月  18 10:15 lncolor
-rw-r--r--. 1 root root 156 5月  14 17:00 log1.txt
-rw-r--r--. 1 root root 592 5月  14 17:00 log2.txt
-rw-r--r--. 1 root root 655 5月  14 17:06 log3.txt
-rw-r--r--. 1 root root 156 5月  18 14:32 log4.txt
-rw-r--r--. 1 root root 272 5月  18 14:28 log.txt
drwxr-xr-x. 2 root root   6 5月  18 15:24 test1
[root@localhost test]# ln color.sh test1
[root@localhost test]# cd test1/
[root@localhost test1]# ll
总用量 0
-rw-r--r--. 2 root root 0 5月  18 15:15 color.sh
[root@localhost test1]# vi color.sh 
[root@localhost test1]# cat color.sh 
echo -e "\033[35mHello World\033[0m"
echo -e "\033[46;37mHello World\033[0m"
echo "Hello World"
[root@localhost test1]# cd ../
[root@localhost test]# cat color.sh 
echo -e "\033[35mHello World\033[0m"
echo -e "\033[46;37mHello World\033[0m"
echo "Hello World"

例五:给目录创建软链接

命令:ln -sv /usr/games/test/test/test1 /usr/games/test/test/test2

目录只能创建软链接。
  目录创建链接必须用绝对路径,相对路径创建会不成功,会提示"符号连接的层数过多"这样的错误。
  在链接目标目录中修改文件都会在源文件目录中同步变化。

[root@localhost test]# ll
总用量 0
drwxr-xr-x. 2 root root 6 5月  18 15:37 test1
drwxr-xr-x. 2 root root 6 5月  18 15:37 test2
[root@localhost test]# ln -sv /usr/games/test/test/test1 /usr/games/test/test/test2
'/usr/games/test/test/test2/test1' -> '/usr/games/test/test/test1'
[root@localhost test]# cd test2
[root@localhost test2]# ll
总用量 0
lrwxrwxrwx. 1 root root 26 5月  18 15:42 test1 -> /usr/games/test/test/test1

参考:

南北两

EstherLty

posted @ 2023-08-05 16:17  CodeMagicianT  阅读(43)  评论(0编辑  收藏  举报