UpDate 2018-09-29 1538230612
Author unnam3d
Mail indv.zhang@foxmail.com
Tip Please feel free to contact me via mail above for any confusion or suggestions
command list:
writting order: function, description, option, example, tricks
touch -c,--no-create -a -m -t
rm -i -f -r
cp -a -R,-r,--recursive -i,--interactive -f,--force -p -d -P,--no-dereference -L,--dereference
mv -i -f -t
install -d -m -t
cat -n,--number -E,--show-ends -T,--show-tabs -v,--show-nonprinting -A,--show-all
more&less
head -n
tail -n -f
cut -d -f
sort -n -r -t -k -u -f,--ignore-case
uniq -d -D -c
wc -l -w -c -m -L
tr -d
tee
touch
-
function:
change file timestamps -
description:
主要目的用于改变文件的时间戳,只是在文件不存在的情况下会自动创建文件; -
option:
-c, --no-create, do not create any files - 改变文件的时间戳,文件不存在的情况下不再创建文件;
-a, change only the access time - 只改变文件的访问时间戳;
-m, change only the modification time - 只改变文件的修改时间戳;
-t STAMP, use [[CC]YY]MMDDhhmm[.ss] instead of current time - 指定时间为修改后的时间戳; -
example:
-
no option
$touch file
explanation: 文件 file 若不存在,自动创建文件 file,时间戳为均当前时间;文件 file 若存在,时间戳均自动更新为当前时间; -
-c
$touch -c file
explanation: 文件 file 若不存在,则不再创建文件 file; 文件 file 若存在,时间戳均自动更新为当前时间; -
-a
$touch -a file
explanation: 文件 file 若不存在,则创建文件 file;文件 file 若存在,则修改文件 file 的访问时间戳为当前时间,同时 file 的改变时间戳也将一并更新为当前时间; -
-m
$touch -m file
explanation: 文件 file 若不存在,则创建文件 file;文件 file 若存在,则修改文件 file 的修改时间戳为当前时间,同时 file 的改变时间戳也将一并更新为当前时间; -
-t -m
$touch -m -t 201804281556.27 file
explanation: 文件 file 若不存在,则创建文件 file;文件 file 若存在,则修改文件 file 的修改时间戳为指定时间2018年4月28日15点56分27秒,但同时 file 的改变时间戳将更新为当前时间;
-
-
tricks:
touch
可以改变文件的访问时间戳、修改时间戳,但没有 option 指定改变文件的改变时间戳,这是因为 touch 对文件的操作,已经使得文件产生了改变,文件的改变时间戳自然已经改变;
touch -t
用于改变文件的访问时间戳和修改时间戳为指定时间时,文件的改变时间戳将更新为当前时间,这是因为改变时间戳表示文件的元数据(metadata, 即文件的属性信息)变更时间,touch 对文件时间戳的更改属于此类,因此改变时间戳将自动更新为当前时间;
rm
-
function:
delete files or directory -
option:
-i - 删除文件时提示是否删除文件
-f - 删除文件时使能 不提示是否删除文件 的要求
-r - 删除目录,且递归删除该目录下的所有文件 -
example:
-
no option
#rm file
explanation: root 用户将收到是否删除文件的确认信息,输入 y 确认,输入 n 否认;
$rm file
explanation: 普通用户将直接删除文件,无确认信息出现; -
-i
$rm -i file
explanation: 普通用户删除文件时,出现是否删除文件的确认信息; -
-f
#rm -f file
explanation: root 用户将不会收到是否删除文件的确认信息,直接删除;
$rm -f file
explanation: 普通用户将直接删除文件,无确认信息出现; -
-r
$rm -r file/
explanation: 删除 file 目录,同时递归删除 file 目录下的所有文件;
-
-
tricks:
redhat,centos这些Linux发行版中,root用户的 rm 命令是rm -i
命令的别名,每次都要提示root用户是否确认删除,这是为了防止root用户误操作,普通用户的 rm 命令为原始的,没有误操作的顾虑;
-f 的功能可以覆盖掉 -i 的功能;
命令的别名可以使用\
符号将别名的功能取消掉,例如root用户的rm
将提示确认信息,但\rm
将不提示;
cp
-
function
copy files and directories -
description
对于copy来讲,通常最后一个是 DEST,此前的所有文件都是 SRC,这就意味着copy不允许一个SRC到多个DEST,也不允许多个SRC多个DEST,
只允许多个SRC到一个DEST。而多个文件是不能复制到一个文件的,那么多个SRC对应到一个DEST其实可以理解为多个文件复制到一个目录。
总的来说,cp可以实现:一个文件到一个文件,多个文件到一个目录。 -
option
-a, --archive same as -dR --preserve=<u>all</u> - 保留文件所有原来的属性,归档复制,常用于备份;
-R, -r, --recursive copy directories recursively - 递归复制一个目录及其目录内的所有文件到目标目录下;
-i, --interactive prompt before overwrite - 覆盖文件的时候进行交互式的询问;
-f, --force - 不问缘由,强制执行复制;
-p - 保留文件的属主属组权限及时间戳;
-d same as --no-dereference --preserve=<u>links</u> - 若来源文件为链接文件,则复制链接文件属性而非档案本身;
-P, --no-dereference 保持链接,如果文件是链接,那就把文件复制为链接;
-L, --dereference 总是追踪符号链接,如果文件是链接,那就复制链接指向的文件; -
example
- 一个文件到一个目录
#cp /etc/passwd /tmp/
将 /etc/passwd 文件复制到目录 /tmp/ 下,文件名不变仍是 passwd;即,如果目标是一个目录并且存在,这就意味着将源文件放在目标目录下并保持源文件名不变。 - 多个文件到一个目录
#cp /etc/{passwd,inittab,rc.d/rc.sysinit} /tmp/
- 一个目录到一个目录
#cp -r /etc/init.d/ /tmp/
cp命令默认不复制目录,只复制文件,要复制目录,就要使用option -r,如果不使用就会出现cp: omiting directory `/etc/init.d/` 的提示
;
#cp -r /etc/init.d /tmp/hello
如果hello不存在,就把init.d复制过去并重命名为hello
如果hello存在,把init.d复制到hello下并保持原来的名字 - 一个文件到一个文件
#cp /etc/passwd /tmp/hello
如果目标hello不存在,这就意味着把passwd复制到tmp下并重命名为hello
如果目标hello存在,则提示我们是否覆盖掉这个文件,这就意味着把原来的hello删掉,并把passwd复制到tmp下并重命名为hello - 多个文件到一个文件
不能被执行,会出现cp: target `/tmp/hello` is not a directory
的提示 - 一个目录到一个文件
#cp -r /etc/init.d /tmp/hello
会出现提示信息cp: overwrite `/tmp/hello`?
,输入yes或者y,然后查看一下hello,就创建了一个链接文件,而且该链接文件指向该目录下一个不存在的文件,所有这是个错误文件;
- 一个文件到一个目录
mv
- function
move (rename) files - option
-i - 如果目标存在,会提示覆盖
-f - 如果目标存在,会强制覆盖
-t - 该参数后跟DEST的路径位置 - examples
- 一个文件移动到指定目录
$mv /tmp/root.inittab /var/tmp/
将root.inittab移动到 /var/tmp/ 目录下并保留原来的名称
$mv /tmp/root.inittab /var/tmp/abc
(abc不存在)
将root.inittab移动到 /var/tmp/ 目录下并重命名为 abc
$mv /tmp/root.inittab /var/tmp/abc
(abc存在,且为文件)
将root.inittab移动到 /var/tmp/ 目录下并重命名为 abc 原文件abc被覆盖掉
$mv /tmp/root.inittab /var/tmp/abc
(abc存在,且为目录)
将root.inittab移动到 /var/tmp/abc 目录下并保留原来的名称 - 一个目录移动到指定目录
$mv /tmp/hello/ /var/tmp/
将hello/移动到 /var/tmp/ 目录下并保留原来的名称 hello/
$mv /tmp/hello/ /var/tmp/abc
(abc不存在)
移动hello目录到 /var/tmp/ 下面并重命名为目录 abc
$mv /tmp/hello/ /var/tmp/abc
(abc 存在,且为文件)
会出现提示信息:mv: cannot overwrite non-directory/var/tmp/abc
with directory/tmp/hello/
$mv /tmp/hello/ /var/tmp/abc
(abc存在,是个目录)
那就是把 hello/ 移动到 /var/tmp/abc/ 下面并保留原来的名称 hello/ - 重命名
$mv abc mn
把当前目录下的abc剪切到当前目录下并且叫mn,即实现了重命名的功能,重命名不关心是文件还是目录,只要在同目录下,就是重命名。 - 多个源一个目标
$mv file1 file2 dir1 dir2 dest
$mv -t dest file1 file2 dir1 dir2
$mv file1 file2 -t dest dir1 dir2
如果dest是目录,则将file1 file2 dir1 dir2移动到dest目录下,如果dest是文件,则提示dest为非目录,且操作无法执行。
- 一个文件移动到指定目录
- tricks
无论copy还是move,默认情况下,只有最后一个是目标,此前的都是源。
install
- function
copy files and set attributes - description
install 只是针对文件的操作,可以复制文件,创建目录,在制作rpm包的时候比较常用。 - option
-d - 创建目录
-m, --mode=MODE set permission mode(as in chmod), instead of rwxr-xr-x - install执行后的文件默认权限为rwxr-xr-x,这一选项可以更换文件的权限。
-t - 指定目录路径 - example
$install -d /tmp/{install.1,install.2}
创建了两个目录 install.1 和 install.2
$install /etc/passwd /var/tmp/install.file1
复制文件 passwd 到 /var/tmp/install.file1,复制过来的文件install.file1的权限为rwxr-xr-x,这是install的默认权限,可以使用-m来指定权限。
$install /etc/rc.d/ /var/tmp/
会提示install:omitting directory/etc/rc.d/
,因为install不对目录进行操作。
cat
- function
concatenate files and print on the standard output - description
常用option为-n, -E
,可以实现连接并显示,会将用户给的文件参数一个一个连接起来并显示,比如$cat /etc/issue /etc/fstab
这个命令就可以把/etc/issue
的所有内容打印到屏幕上之后,马上换下一行就把/etc/fstab
所有的内容打印到屏幕上,这就叫连接并显示。 - option
-n, --number - number all output lines 可以显示行号
-E, --show-ends - display $ at end of each line 显示行尾
-T, --show-tabs - display TAB characters as ^I
-v, --show-nonprinting - use ^ and M- notation, except for LFD and TAB 可以显示其他的非打印字符,比方说回车符,行首控制符等等;
-A, --show-all - equivalent to -vET 显示所有字符 - examples
$cat -n /etc/issue
在显示/etc/issue
内容的时候,将内容的行进行编号显示
$cat -E /etc/issue
在显示/etc/issue
内容的时候,在行尾显示$
作为终止符 - tricks
对Linux而言,文本文件的行结束符是和回车(\n,即换行符)一起;所以把Linux中的文件放到Windows中打开,会通通显示一行,就是因为Linux中的文件没有换行符做结束符号;
cat 是从首行到行末这样遍历显示的,但如果我们把cat倒过来写,用tac进行查看文件,文本的内容就是从行末到首行来遍历显示的;
我们标准输出到屏幕上的内容可以使用Shift+PgUp/PgDn组合快捷键来进行查看;
more&less
- description
都可以用来查看文件 - tricks
空格键
向后翻一屏
B
向前翻一屏
回车
一行一行向后翻
K
more不支持,less一行一行向前翻
/
more不支持,less搜索
q
退出
more 默认情况下只支持向后翻,不支持向前翻;用户翻页到文件尾部就直接退出了,不会让你向前翻了(缺点)
man其实就是使用less来进行文档的查看的,所以man里能用的less里都可以用
head
- function
output the first part of files - description
查看文件的前n行,默认n=10 - option
-n - 显示的行数 - examples
$head -2 /etc/inittab
直接显示文件/etc/inittab
的前两行内容
tail
- function
output the last part of files - description
查看文件的后n行,默认n=10 - option
-n - 显示的行数
-f, --follow - output appended data as the file grows, 也就是输出文件中即时更新的内容 - examples
tail -5 /etc/inittab
直接显示文件/etc/inittab
的后五行内容
tail -f /tmp/inittab
显示完文件尾部之后不会退出,还是一直等待该文件追加进来的后续内容; - tricks
tail -f
这条指令可以用在查看实时日志中去,这样就不会遗漏掉任何一条写入的日志,对于日志的分析起到了很好的辅助作用
cut
-
function
remove sections from each line of files -
option
-d - 指定字段分隔符,默认是一个空格
-f filed, 指定要显示的字段
-f 1 显示第一个字段
-f 1,3 显示第一个和第三个字段
-f 1-3 显示第一个到第三个字段 -
examples
cut -d: -f1 /etc/passwd
直接在标准输出上显示/etc/passwd
文件中以:
为分隔符的第一个字段 -
tricks
用于数据库,关系型数据库,表,行与列,二维表的时候就很舒服
sort
- function
sort lines of text files - description
用于实现文本排序,sort的排序结果不影响源文件,仅仅是对于输出显示的内容进行处理,此外,sort的默认排序是根据升序进行的,根据一个字符在ASCII码中的次序升序后向后进行排序的,而不是按照数值大小 - option
-n - 数值排序,按照数值的大小进行排序
-r - 逆序排序,也就是降序排序
-t - 字段分隔符
-k - 指定以哪个字段为关键字进行排序
-u - 排序后相同的行只显示一次
-f,--ignore-case - 忽略/不区分字符大小写 - examples
sort -t: -k3 -nr /etc/passwd
在对文件/etc/passwd
进行排序输出的时候,由于文件中的分隔符为:
,因此这里使用-t:
来指定字段分隔符,我们打算按照第三个字段的用户UID进行数值上的降序排序,而不是ASCII码的次序排序,因此这里又使用了-k3
指定第三个字段,以及-nr
指定数值上的降序排序
uniq
- function
report or omit repeated lines - description
报告或者忽略重复的行,但uniq只忽略相邻一模一样的行,如果两个行不相邻,即使一模一样也不会忽略掉。 - option
-d,--repeated - 只显示重复的行
-D - 显示所有重复的行
-c - 它会把重复的行显示出来并打印出重复了几次,即显示文件中行重复的次数 - examples
uniq -d test.txt
显示在终端的内容会自动忽略不重复的行,且重复的行只显示一行
uniq -D test.txt
显示在终端的内容会自动忽略不重复的行,且重复的行有几行就显示几行
uniq -c test.txt
显示在终端的内容会显示所有行,但重复的行只显示一行,且行的左端会显示该行的重复次数
wc
-
function
print newline, word, and byte counts for each file -
description
wc可以统计一个文件中一共有多少行,有多少个单词,以及有多少个字符(空白也是字符,空白行当中只要有空格键,那就算是字符。) -
option
-l - 只显示行
-w - 只显示单词数
-c - 只显示字节数
-m - 只显示字符数
-L - 最长的一行包含多少个字符 -
example
$wc /etc/fstab
将会显示/etc/fstab
的行数、单词数、字符数(字节数)
$wc -l /etc/fstab
只会显示/etc/fstab
的行数
$wc -w /etc/fstab
只会显示/etc/fstab
的单词数
$wc -c /etc/fstab
只会显示/etc/fstab
的字节数
$wc -m /etc/fstab
只会显示/etc/fstab
的字符数
$wc -L /etc/fstab
只会显示/etc/fstab
中最长的一行包含的字符数效果如下:
$wc /etc/fstab
8 48 608 /etc/fstab
$wc -l /etc/fstab
8 /etc/fstab
$wc -w /etc/fstab
48 /etc/fstab
$wc -c /etc/fstab
608 /etc/fstab
$wc -m /etc/fstab
608 /etc/fstab
$wc -L /etc/fstab
75 /etc/fstab
tr
-
function
translate or delete characters -
description
转换或删除字符 -
option
-d - 删除出现在字符集中的所有字符 -
examples
$tr 'ab' 'AB'
这个命令运行之后会自动把你标准输入的内容里的字符'ab'全都转换为'AB',而且,其转换机制是逐个字符比较,并不是把'ab'作为整体转换为'AB',出现单个字符'a'和'b'都可以对应的转换为字符'A'和'B'
$tr 'ab' 'AB' < /etc/passwd
这个命令是把文件/etc/passwd
作为输入,然后将文件的内容打印出来,只是在打印的过程中,会自动将字符'A'转换为'a',将字符'B'转换为'b',但,文件本身的内容不进行改变。
$tr 'a-z' 'A-Z' < /etc/passwd' 这个命令是将文件中的小写字符全部转换为大写字符
$tr -d 'ab'
这个命令运行之后会自动把你标准输入的内容理的字符'ab'全都删除掉。效果如下:
$tr 'ab' 'AB'
something
something
angelbaby
AngleBABy
^c
$tr -d 'ab'
something
something
angelbaby
ngely
^c
tee
-
function
read from standard input and write to standard output and files
-
description
一个输入,两个输出。从标准输入读取数据并且发送至标准输出和文件。它就可以实现将数据既保存在文件中一份,又输出在屏幕上一份。
-
examples
$ echo "Hello, World." | tee /tmp/hello.out Hello, World. $ cat /tmp/hello.out Hello, World.
这样就实现了既将内容打印到屏幕上,又将内容保存在了文件
hello.out
中去。
update log
- 2018-09-29 首次发布 包含命令:touch, rm, cp, mv, install, cat, more&less, head, tail, cut, sort, uniq, wc, tr
- 2018-10-06 添加命令:tee
网友评论