目录
重定向
重定向符:
&符号的用法
输入重定向
命令搜索
whereis命令
which命令
locate命令
find查找
文本排序统计
cut命令
uniq命令
sort命令
tr命令
wc命令
压缩和解压缩
zip和unzip命令
gzip和gunzip命令
bzip2和bunzip命令
xz和unxz命令
Linux重定向:主要指的是输入重定向和输出重定向,系统中默认标准输出是指将输出结果展现在屏幕上,标准输入是从键盘上输入。但是在Linux中还有另外一种输出方式,即标准错误输出,是将错误的输出结果输出到屏幕上(仅表示错误的时候)。
标准输入:stdin,文件描述符为0。
标准输出:stdout,文件描述符为1。
标准错误输出:stderr,文件描述符为2。
输出重定向符: ">",覆盖重定向 ">>",追加重定向 输入重定向符: "<",指的是从文件读入 "<<",指的是从命令行读入
使用形式 | 功能 |
---|---|
命令>文件或者:命令 1> 文件 | 将命令执行后的输出信息不在默认的屏幕上显示,二十一覆盖的方式写入到指定的文件中,若指定的文件不存在,则自动创建该文件 |
命令 2> 文件 | 将命令执行后所产生的错误信息不在默认的屏幕上显示,而是以覆盖的凡是写入到指定文件中,若指定文件不存在,则自动创建该文件 |
命令 &> 文件 | 将命令执行后的输出信息和错误信息不在默认的屏幕上显示,而是以覆盖的方式写入到指定文件中,若指定的文件不存在,则自动创建该文件 |
命令 2> /dev/null | 将命令执行后所产生的错误信息不在默认的屏幕上显示,而是写入到空设备文件中,即将输出的错误信息丢弃 |
命令 >> 文件 | 将命令执行后的输出信息以追加的方式写入到指定的文件中 |
命令 < 文件 | 使命令从指定的文件中读取输入数据 |
命令 << 结束表示字符串 | 读取命令行输入,直到遇到输入行为指定的结束标识字符串 |
示例:
[root@localhost ~]# echo "123" > text.txt # 表示将原先要输出到屏幕上的"123",重定向到text.txt文件中。 [root@localhost link_test]# ls text2.txt ls: cannot access 'text2.txt': No such file or directory # 执行出错,将错误的结果输出到屏幕上。 [root@localhost link_test]# ls text2.txt > text.txt # 表示将原先输出到屏幕上的错误结果重定向到text.txt文件中。 [root@localhost link_test]# cat text.txt ls: cannot access 'text2.txt': No such file or directory
[root@localhost link_test]# ls www.txt &> redirect.txt[root@localhost link_test]# ls www.txt >& redirect.txt [root@localhost link_test]# ls -l >& redirect.txt cat data.txt www.txt > redirect.txt 2>&1 # ("data.txt"是已存在文件,"www.txt"是错误文件)表示将标准输出重定向到"redirect.txt"文件中,将标准错误输出重定向到标准输出(输出到"redirect.txt"文件中)。 cat data.txt www.txt 2> redirect.txt 1>&2 # ("data.txt"是已存在文件,"www.txt"是错误文件)表示将标准错误输出重定向到"redirecct.txt"文件中,将标准输出重定向到标准错误输出(输出到"redirect.txt"文件中)。1>&2 :将标准输出重定向到标准错误输出 2>&1 :将标准错误输出重定向到标准输出 &> :将标准输出和标准错误输出同时重定向到文件中
< :从文件读入
# 把原先标注输入,重定向从文件输入 [root@localhost link_test]# cat < data.txt [root@localhost link_test]# cat 0< data.txt
<< :从命令行读入,输入指定的结束字符串后结束
[root@localhost link_test]# cat <123 > 123 > 456 > EOF 123 123 456 # cat <
whereis命令使搜索系统命令的命令,该命令不能搜索普通文件。
示例:
[root@localhost ~]# whereis ls ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz [root@localhost ~]# whereis pwd pwd: /usr/bin/pwd /usr/share/man/man1/pwd.1.gz /usr/share/man/man1p/pwd.1p.gz
which命令也是搜索系统命令的命令。
which命令与whereis命令的区别:
whereis命令可以查找到二进制的命令的同时,可以查找到帮助文档的位置;
which命令在查找到二进制命令的同时,若该被查找的命令有别名,还可以找到别名命令;
示例:
[root@localhost ~]# which locate /usr/bin/locate [root@localhost ~]# which whereis /usr/bin/whereis
locate命令是可以按照文件名搜索普通文件的命令。
优点:按照数据搜索,搜索速度快,消耗资源小。数据库位置/var/lib/mlocate/mlocate.db,可以使用updatedb命令强制更新数据库。
缺点:只能按照文件名来搜索文件,而不能执行更复杂的搜索,比如按照权限、大小、修改时间等搜索文件。
示例:
[root@localhost ~]# locate whereis /usr/bin/whereis /usr/share/bash-completion/completions/whereis /usr/share/man/man1/whereis.1.gz
使用find命令进行全盘搜索虽然准确,但是效率有点低,如果我们仅仅是想找一些常见的、又知道大概名称的文件,不如试试locale命令的功能。locate命令是将一些常用的目录做成一个索引库文件,一般是叫做"var/lib/mlocate/mlocate.db",后续在搜索文件的时候就是根据这个数据库中所包含的路径进行查找,速度会快很多。
命令格式:find [查找路径] 寻找条件 操作
功能:按照指定条件在路径中搜索,搜索完成之后可以执行某些操作。
参数及作用:
参数 | 作用 |
---|---|
-name | 匹配名称 |
-perm | 匹配权限(mode为完全匹配,-mode为包含即可) |
-user | 匹配所有者 |
-group | 匹配所有组 |
-mtime -n +n | 匹配修改内容的时间(-n指n天以内,+n指n天以前) |
-atime -n +n | 匹配访问文件的时间(-n指n天以内,+n指n天以前) |
-ctime -n +n | 匹配修改文件权限的时间(-n指n天以内,+n指n天以前) |
-nouser | 匹配无所有者的文件 |
-nogroup | 匹配无所有组的文件 |
-newer f1 !f2 | 匹配比文件f1新但比f2旧的文件 |
--type b/d/c/p/l/f | 匹配文件类型(后面的字母参数以此表示块设备、目录、字符设备、管道、链接文件、文本文件) |
-size | 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件) |
-prune | 忽略某个目录 |
-exec …… {} \ ; | 后面可跟用于进一步处理搜索结果的命令 |
示例:
1、-name 根据文件名称(精准匹配,除非加了通配符 *)
[root@localhost link_test]# find . -name "data*" [root@localhost link_test]# find . -iname "data*" # -iname 忽略大小写 [root@localhost link_test]# find . -inum 3325088 # -inum: 根据inode号来搜索 ./data.txt
2、-size 根据文件大小后面可以跟+|-,+代表大于,-代表小于
`c' for bytes `w' for two-byte words `k' for Kilobytes (units of 1024 bytes) `M' for Megabytes (units of 1048576 bytes) `G' for Gigabytes (units of 1073741824 bytes) [root@rhcsa link_test]# find . -size -10c
3、-mtime:-mtime n,n表示n
+|-:以当前时间为基准,在多少天以内,以及在多少天以前 -mtime +1: >1天的,最少是两天以前修改的 -mtime -1:在1*24小时之内修改的 -mtime 1: 1*24h小时之内修改的, 4: 代表的是4-5天之内 [root@localhost link_test]# ls -l text.txt -rw-r--r--. 1 root root 57 Mar 26 00:00 text.txt [root@localhost link_test]# find . -mtime 1 ./text.txt [root@localhost link_test]# touch -d 20220319 link_file [root@localhost link_test]# ls -l link_file -rw-r--r--. 3 root root 0 Mar 19 00:00 link_file [root@localhost link_test]# find . -mtime +1 ./link_file ./hard_link ./symb_link -newer file:
4、-newer file:比file文件新的文件
[root@localhost link_test]# find . -newer 2 . ./newer
5、-perm:
-: 代表的是包含 /: g=w:只有这种权限 755
6、-type:文件类型
命令格式:find . -type f: 普通文件 d:目录 b: 块设备 c: 字符设备 l: 链接文件 p: 管道文件 s: 套接字文件
7、-exec:即execute,执行的意思
在查找到信息之后,去执行某些操作。(会在shell脚本中经常出现)
-print:每行打印一条
-print0:Linux中的空字符"\0"分隔每一个内容
[root@rhcsa link_test]# find . -name "ml*" ./ml.txt ./ml2.txt ./ml3.txt # 找到之后,删除这三个文件 rm -f ml.txt rm -f ml2.tx rm -f ml3.txt find . -name "ml*" -exec rm -f {} \; #按上面操作:rm 执行了几次 rm -f ml.txt ml2.txt ml3.txt rm -f ml.txt rm -f ml2.txt rm -f ml3.txt
cut命令是按列提取文本内容。
命令格式:cut [选项] 文件
参数:
-d:指定分隔符,按列提取内容的时候,就根据分隔符来进行分割 -f:多列文本内容时,可以任取一列
示例:
root@localhost link_test]# cut -d":" -f7 /etc/passwd | head -2 /bin/bash /sbin/nologin [root@localhost link_test]# cut -d":" -f5,7 /etc/passwd | head -2 # 取不连续的列 root:/bin/bash bin:/sbin/nologin [root@localhost link_test]# cut -d":" -f5-7 /etc/passwd | head -2 # 取连续列 root:/root:/bin/bash bin:/bin:/sbin/nologin
uniq命令,英文全称"unique"用于去除文本中连续重复行。(着重注意:去的是连续重复行)
格式:uniq [参数] 文件名称
示例:
[root@localhost ~]# cut -d":" -f7 /etc/passwd | uniq /bin/bash /sbin/nologin /bin/sync /sbin/shutdown /sbin/halt /sbin/nologin /bin/bash # 上面并完全去重,因为行不连续
sort命令用于对文本内容进行排序。
格式:sort [参数] 文件名称
参数及作用:
参数 | 作用 |
---|---|
-f | 忽略大小写 |
-b | 忽略缩进与空格 |
-n | 以数值型排序 |
-r | 反向排序 |
-u | 去除重复行 |
-t | 指定间隔符 |
-k | 设置字段范围 |
示例:
-n,按数字进行排序(1111和123,如果按照字符串排序:1111,123;如果按照数字排序:123,1111。)
[root@localhost link_test]# sort num.txt 111 1111 123 221 222 333 444 456 678 [root@localhost link_test]# sort -n num.txt 111 123 221 222 333 444 456 678 1111
-t和-k:-t,指定分隔符,-k,分割的字段
[root@localhost link_test]# cat student.txt 1:Haier:f:18 4:ang:m:20 3:Li:m:22 [root@localhost link_test]# sort -t":" -k1 student.txt 1:Haier:f:18 3:Li:m:22 4:ang:m:20 [root@localhost link_test]# sort -t":" -k2 student.txt 4:ang:m:20 1:Haier:f:18 3:Li:m:22 [root@localhost link_test]# sort -t":" -k4 student.txt 1:Haier:f:18 4:ang:m:20 3:Li:m:22
在linux中tr命令用于删除或转换文件中的字符。
语法格式:tr [选项] SET1 SET2
替换功能:就是将SET1和SET2对于其拉力进行替换,SET1和SET2是两个集合
SET1=SET2 =》 SET1可以和SET2一一对应上
SET1 SET1>SET2 => SET1中元素多,SET2的元素少 用SET2中的字符去替换SET1中字符,一一对应去替换 参数: 示例: wc命令用于统计指定文本文件的行树、字数或字节数。 语法格式:wc [参数] 文件名称 参数及作用: 示例: zip和unzip命令主要是对文件的压缩和解压缩,并且还可以压缩目录。 格式:zip/unzip [选项] 文件名称 参数及作用: 示例: -r:连同目录一起压缩 -m:向压缩文件中添加另一个文件 -d:删除压缩文件中的文件 -x:压缩文件时排除某个文件 解压缩文件 -v:查看压缩文件目录,但不解压 注意:gzip压缩文件之后,原文件将不存在;gunzip解压缩文件之后,原压缩文件也将不存在。 示例: gzip压缩文件: gzip压缩目录下文件: bzip2、bunzip2是更新的Linux压缩工具,比gzip有着更高的压缩率。 示例: 压缩文件: 压缩dir1目录下文件 查看压缩文件内容: 解压缩: 解压缩目录dir1下文件
-c,--complement:反选设定字符。符合SET1的部分不做处理,不符合的剩余部分才进行转换
-d,--delete:删除指定字符。
-s,--squeeze-repeats:缩减连续重复的字符成指定的单个字符。
-t,--truncate-set1:削减SET1指定范围,使之与SET2设定长度相等。
--help:显示程序用法信息。
--version:显示程序本身的版本信息。
[root@localhost link_test]# cat tr_data
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
# 需要一个替换的功能:tr SET1 SET2
[root@localhost link_test]# cat tr_data | tr 'A-Z' 'a-z'
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
# SET1和SET2可以一一对应的情况
# SET1如果小于SET2的情况
# 所以只替换SET1指定的字符,其他字符不动
[root@localhost link_test]# cat tr_data | tr 'A-L' 'a-z'
abcdefghijklMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
#SET1如果大于SET2的情况
#先按照SET2中字符去一一替换,然后剩余字符使用set2的最后一个字符来代替
[root@localhost link_test]# cat tr_data | tr 'A-Z' 'a-l'
abcdefghijklllllllllllllll
abcdefghijklmnopqrstuvwxyz
wc命令
参数
作用
-l
只显示行数
-w
只显示单词数
-c
只显示字节数
[root@localhost ~]# wc -l /etc/passwd
45 /etc/passwd
压缩和解压缩
zip和unzip命令
-r:连同目录一起压缩
-m:向压缩文件中添加另一个文件
-d:删除压缩文件中的文件
-x:压缩文件时排除某个文件
-v:查看压缩文件目录但不解压
[root@localhost test]# zip -r dir1.zip dir1/
adding: dir1/ (stored 0%)
adding: dir1/fstab (deflated 44%)
[root@localhost test]# ls dir1*
dir1.zip
[root@localhost test]# zip -m test1.zip test2.txt
adding: test2.txt (stored 0%)
[root@localhost test]# zip -d test1.zip test2.txt
deleting: test2.txt
[root@localhost test]# zip test.zip *.txt -x test1.txt
adding: test3.txt (stored 0%)
adding: test4.txt (stored 0%)
adding: test5.txt (stored 0%)
[root@localhost test]# unzip test2.zip
unzip: cannot find or open test2.zip, test2.zip.zip or test2.zip.ZIP.
[root@localhost test]# unzip -v test.zip
Archive: test.zip
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ----
0 Stored 0 0% 04-17-2022 10:19 00000000 test3.txt
0 Stored 0 0% 04-17-2022 10:19 00000000 test4.txt
0 Stored 0 0% 04-17-2022 10:19 00000000 test5.txt
-------- ------- --- -------
0 0 0% 3 files
gzip和gunzip命令
[root@localhost test]# gzip test1.txt
[root@localhost test]# ls test1*
test1.txt.gz test1.zip
[root@localhost test]# gzip -r dir1/
[root@localhost test]# ls dir1
fstab.gz
bzip2和bunzip命令
xz和unxz命令
[root@localhost test]# xz test1.txt
[root@localhost test]# ls test1.txt.xz
test1.txt.xz
[root@localhost test]# xz dir1/*
[root@localhost test]# ls dir1
fstab.xz test3.txt.xz test4.txt.xz test5.txt.xz
[root@localhost test]# xzcat test1.txt.xz
test1
[root@localhost test]# unxz test1.txt.xz
[root@localhost test]# xz -d dir1/*
[root@localhost test]# ls dir1
fstab test3.txt test4.txt test5.txt