- su 切换用户身份
- 例子
- 基础文本处理命令
- wc ,word counter
- wc *
- option开关
- sort 排序
- option
- uniq 去重和分组求和
- cut命令,截取 substring 类似
- xargs 交换变量
- 例子
- 重定向
- 输出重定向
- >
- >>
- /dev/null 空设备,永远只有0字节,主要配合重定向。
- () 合并流
- find 命令
- option 开关
- tr 替换,压缩,删除字符
- 练习
- 1. 如何将/etc目录下所有.conf文件的内容合并输出?
- 2. 如何查找/var/log目录下大于100MB的日志文件?
- 4. 如何将find命令查找到的文件批量复制到/tmp/backup目录?
- 7. 如何删除当前目录下7天前创建的临时文件(.tmp后缀)?
- 8. 如何将命令的标准输出和错误输出都重定向到同一个文件?
- 10. 如何将当前目录下所有文件名中的空格替换为下划线?
su 切换用户身份
从一个用户直接切换另外一个身份
root切换到任何人的身份不需要密码
普通人切换到其他人都需要密码
例子
su - # 后面没有用户名,默认到root
su后面如果横杠,表示完全切换,我们用横杠。
su yanf ,这个也可以,但是我不用,永远使用 su - yanf
基础文本处理命令
wc ,word counter
字母计数
[yan@192 ~]$ wc services
11176 61033 670293 services
第一列: 行数
第二列:单词书
第三列: 字符数
wc *
分别数并求和
[yan@192 ~]$ ll
total 668
-rw-r--r--. 1 yan yunwei 5171 May 24 09:22 man_db.conf
-rw-r--r--. 1 yan yunwei 1106 May 24 09:22 mke2fs.conf
-rw-r--r--. 1 yan yunwei 670293 May 24 09:19 services
[yan@192 ~]$ wc *
131 723 5171 man_db.conf
58 143 1106 mke2fs.conf
11176 61033 670293 services
11365 61899 676570 total
[yan@192 ~]$
option开关
- -l: line
- -c :character
- -w :word
sort 排序
排序可以按照某列排序,可以按照字符大小,数字大小排序。
option
- -n : 按照数字排序,默认按照字母排序。
- -k : 按照第几个个字段排,-k2n , -k1nr
- -r: 倒排序
- -u: unique,唯一
yan@192 ~]$ cat ab.txt
apple
banana
apple
orange
orange
apple
apple
banana
[yan@192 ~]$ sort -u ab.txt
apple
banana
- -t:分隔符,默认tab键作为分隔符。-t, -t: -t, -t’,’
uniq 去重和分组求和
** uniq去重之前,必须对先进行排序,因此,使用uniq,不能够对未排序的文件进行操作
默认是求唯一值
- -c: 分组求和
cut命令,截取 substring 类似
- -d:分隔符,默认以tab作为分隔符, -d, -d’,’ -d,
- -f: 取得第几个字段,一般和-d联合使用, -f1 , -f1,2
- -b : 取得一些字符 -b1-4, -b2-9,中文要使用 -n,不分割东亚字体
xargs 交换变量
xargs是把他接受管道里面的内容交给他后面的命令去处理,如果前面给了10行,那么他分别把每行数据交给后面命令,内容的位置放在他调用那个命令的最后。
ls -1 *conf | xargs rm -f
ls -1 *conf | cat #列出文件名称
ls -1 *conf | xargs cat # cat 1.conf ,cat 2.conf
例子
0009.csv
yan@192 ~]$ head /tmp/bak/000009.csv
日期,股票代码,名称,收盘价,最高价,最低价,开盘价,前收盘,涨跌额,涨跌幅,换手率,成交量,成交金额,总市值,流通市值
2020-12-02,'000009,中国宝安,7.21,7.43,7.18,7.43,7.47,-0.26,-3.4806,2.6076,66605662,485056159.35,18596132687.7,18416362902.5
2020-12-01,'000009,中国宝安,7.47,7.51,7.35,7.41,7.44,0.03,0.4032,1.0352,26441001,196774110.76,19266728318.5,19080475850.4
求出每个股票名称总共交易了多少天。
tail -n +2 000009.csv | cut -d, -f3 | sort | uniq -c
删除当前目录下最大的10个文件
ls -1Sr |tail | xargs rm -fr
##管道 |
管道是把前面一个命令的正确输出作为后面命令的输入
cmd1 | cmd2
接受管道命令一般是文本处理命令,wc,uniq,sort,head,less,more,tail ,cat ,tee,tr,nl,文件操作命令 mv,rm ,cp ,pwd,ls
ls -1 *conf | xargs rm -f
ls -1 *conf | cat #列出文件名称
ls -1 *conf | xargs cat # cat 1.conf ,cat 2.conf
重定向
输出重定向
输出重定向中,1代表正确,2代表错误。
>
如果文件已经存在,就清空,否则创建创建。
cat a.txt >b.txt
>b,txt cat a.txt
>>
如果文件就存在,就追加内容,否则创建。
cat a.txt >>b.txt
>>b,txt cat a.txt
/dev/null 空设备,永远只有0字节,主要配合重定向。
####合并输出流 fd1 >& fd2
cat /etc/*conf >/dev/null 2>&1
cat /etc/*conf 2>/dev/null >&2
>& /dev/null cat /etc/*conf
cat /etc/*conf >& /dev/null
cat /etc/*conf &< /dev/null
cat /etc/*conf >confs.txt 2>/dev/null
() 合并流
find 命令
option 开关
-type: 文件类型
f:普通文件
d:目录
l:链接
p: 进程文件
c: 字符设备
s: 通信文件-name: 文件名称,支持通配符, * ,? ,[ab] [a-z0-9]
-size: 文件大小
+5k,大于5k -5k,小于5k 5M, 5k: n-1,nk ,
-delete: 把找到的文件都删除。
-empty: 找出所有字节为0的文件
-ok
printf
逻辑运算
- -o: 或者
- -a: 并且
- !: 不是。
时间相关
-ctime :创建时间 ,以天为单位, +28,28天之前 -28 28天之内
-atime : 访问时间
-mtime: 修改时间
-amin: 访问时间,以分钟为单位: +60,1小时之前,-60 60分钟以内, +72 3天之前,因为没小时的开关,小时用分钟*60表示
-cmin: 创建时间
-mmin: 修改时间
668 (find /etc -type f -name "*conf" | xargs cat |wc -l ) 2>/dev/null
669 (find /etc -type f -name "*conf" | cat |wc -l ) 2>/dev/null
670 (find /etc -type f -name "*conf" |wc -l ) 2>/dev/null
671 find /etc /var -name "*conf" -o -name "*log" -type f 2>/dev/null
672 find /etc /var -name "*conf" -a -name "*log" -type f 2>/dev/null
673 clear
674 find /etc /var -name "*conf" -a -name "*log" -type f 2>/dev/null
675 find /etc /var ! -name "*conf" -type f 2>/dev/null
复制大于5k的conf文件到/tmp目录下[yan@192 ~]$ find /etc -type f -name "*conf" -size +5k 2>/dev/null | xargs cp -t /tmp
把当前目录下conf文件做一个备份find . -type f -name "*conf" | xargs -i cp {} {}.bak
把当前目录下conf.bak文件都删除find . -type f -name "*.conf.bak" | xargs rm -f
find . -type f -name "*.mp4" -size +500M -ctime +365 | xargs -i cp {} /mnt/usb
把20分钟之内的文件都删除find . -type f -cmin -20 -delete
find . -type f -cmin -30 -empty -delete
- -exec 处理找到的文件
find . -type f -exec rm -f {} \;
find . -type f -exec cat {} \; |wc -l
find . -type f -exec mv -t /tmp {} +
tr 替换,压缩,删除字符
tr -d ‘ ‘ 删除所有空格
tr -s ‘ ‘ 把多个空格压缩成一个空格 cut处理。
tr ‘[a-z]’ ‘[A-Z]’ a.txt 小写替换成大写
练习
/etc 目录下大于10k的文件,以conf结尾,总共有多少行。
1. 如何将/etc目录下所有.conf文件的内容合并输出?
find /etc -type f -name “*conf” -exec cat {} ; 2>/dev/null
2. 如何查找/var/log目录下大于100MB的日志文件?
find /var/log -type f -size +100M
4. 如何将find命令查找到的文件批量复制到/tmp/backup目录?
find . -exec cp {} /tmp/backup ;
find . -exec cp -t /tmp/backup {} +
7. 如何删除当前目录下7天前创建的临时文件(.tmp后缀)?
find . -type f -ctime +7 -name “*.tmp” -delete
8. 如何将命令的标准输出和错误输出都重定向到同一个文件?
>& samefile
10. 如何将当前目录下所有文件名中的空格替换为下划线?
find . -type f
最后编辑:admin 更新时间:2025-05-29 13:26