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 09:32
最后编辑:admin  更新时间:2025-05-29 13:26