1、sort排序

原理:sort 将文件的每一行作为一个单位,相互比较,比较原则默认情况是从首字符向后,依次按 ASCII 码值进行比较, 后将他们按升序输出。
语法sort [OPTION]... [FILE]…
选项说明

  • -t:指定以什么作为列分割
  • -k:用来制定利用那列进行排序,通常-t-k配合使用
  • -r:降序输出(默认升序,不加-r即升序)
  • -n以数组来进行排序(会讲分割后的列作为数组,排序默认是单个字符的ASCII比较,例如99会大于1001。加入-n后会做自然排序,1000大于99)
  • -f:忽略大小写字母
  • -u:取消重复的行

    1. # 以:分割文件,以第3列排序,-r降序,-n以数组因子排序
    2. [root@VM-0-17-centos shell]# sort -t: -k3 -n -r /etc/passwd
    3. www:x:1002:1002::/home/www:/sbin/nologin
    4. mysql:x:1001:1001::/home/mysql:/sbin/nologin
    5. zhangl:x:1000:1000::/home/zhangl:/bin/bash
    6. systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
    7. systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
    8. polkitd:x:997:995:User for polkitd:/:/sbin/nologin
    9. libstoragemgmt:x:996:994:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
    10. chrony:x:995:993::/var/lib/chrony:/sbin/nologin
    11. syslog:x:994:992::/home/syslog:/bin/false
    12. saslauth:x:993:76:Saslauthd user:/run/saslauthd:/sbin/nologin
    13. abrt:x:173:173::/etc/abrt:/sbin/nologin
    14. avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
    15. nobody:x:99:99:Nobody:/:/sbin/nologin

    2、uniq去重

    语法uniq [OPTION]... [INPUT [OUTPUT]]
    选项说明

  • -c: 打印出现的次数,只能统计相邻的;

  • -d: 只打印重复行;
  • -u: 只打印不重复行;
  • -D: 只打印重复行,并且把所有重复行打印出来

    1. # 以:分割文件,统计文件中最后一列出现的次数,降序排列
    2. [root@VM-0-17-centos shell]# awk -F: '{print $NF}' /etc/passwd | sort | uniq -c | sort -nr
    3. 26 /sbin/nologin
    4. 2 /bin/bash
    5. 1 /sbin/shutdown
    6. 1 /sbin/halt
    7. 1 /bin/sync
    8. 1 /bin/false

    3、find命令

    语法find path -option [ -print ] [ -exec -ok command ] {} \;
    原理:find 根据option在指定的系统路径中查找文件,如果查找到与对应的exec命令,则执行对应的command。

  • print: find 命令将匹配的文件输出到标准输出;

  • exec: find 命令对匹配的文件执行该参数所给出的 shell 命令。相应命令的形式为 ‘command’ {} ;,注意 {} 和 \;之间的空格;
  • ok: 和 - exec 的作用相同,只不过以一种更为安全的模式来执行该参数所给出的 shell 命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行;

选项说明

  1. - -name filename #查找名为 filename 的文件
  2. - -perm #按执行权限来查找
  3. - -user username #按文件属主来查找
  4. - -group groupname #按组来查找
  5. - -mtime -n +n #按文件更改时间来查找文件,-n 指 n 天以内,+n 指 n 天以前
  6. - -atime -n +n #按文件访问时间来查 GIN: 0px">
  7. - -ctime -n +n #按文件创建时间来查找文件,-n 指 n 天以内,+n 指 n 天以前
  8. - -type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
  9. - -size n [c] #查长度为 n 块 [或 n 字节] 的文件
  10. - -depth #使查找在进入子目录前先行查找完本目录
  11. - -prune   #通常和 -path 一起使用,用于将特定目录排除在搜索条件之外。过滤条件写在其他条件前面。
  1. # 在当前目录寻找文件名称以.txt结尾的文件并打印出来
  2. [root@VM-0-17-centos shell]# find ~ -name "*.txt"
  3. /root/.phpstorm_helpers/build.txt
  4. /root/oneinstack/versions.txt
  5. # 查找指定目录下,大于10M的文件,并打印文件大小
  6. [root@VM-0-17-centos shell]# find /usr/bin -size +10000k -exec ls -ld {} \;
  7. -rwxr-xr-x 1 root root 5204272 Nov 5 2016 /usr/bin/ctest
  8. -rwxr-xr-x 1 root root 4084352 Nov 5 2016 /usr/bin/cmake
  9. -rwxr-xr-x 1 root root 19719152 Mar 9 06:56 /usr/bin/runc
  10. # 查找当前目录下644权限的文件
  11. [root@VM-0-17-centos shell]# find . -perm 644 -print;
  12. ./nginx_log.sh
  13. ./until.sh

find /usr/bin -size +1000k -exec ls -ld {} \; 命令结尾处,\;不能有空格,否则报错

4、date日期时间

date 可以用来显示或设定系统的日期与时间

  1. -d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;
  2. -s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;
  3. -u:显示GMT

时间格式:

  1. %Y -- 年份
  2. %m -- 月份
  3. %d -- 当月第几天
  4. %t -- Tab 跳格
  5. %H -- 小时,24 小时格式 (0~23)
  6. %I -- 小时,12 小时格式 (0~12)
  7. %M -- 分钟 (00~59)
  8. %S -- (00~59)
  9. %j -- 今年中的第几天
  10. %Z -- 以字符串形式输出当前时区
  11. %z -- 以数字形式输出当前时区
  12. %F -- 文件时间格式 same as % Y-% m-% d
  13. %T -- 24 小时制时间表示 (hh:mm:ss)
  1. # 打印命令耗时
  2. start=$(date +%s)
  3. echo "$(date +%F" "%T) 任务开始执行..."
  4. sleep 5
  5. echo "$(date +%F" "%T) 任务执行结束..."
  6. end=$(date +%s)
  7. difference=$(( end - start))
  8. echo "命令耗时:${difference} secounds."

5、xargs 转换参数

将标准输入转换为命令行参数
linux 命令行中经常要使用到管道符连接不同的命令,但是有些命令不支持标准输入,此时就需要使用 xargs 将标准输入转换为参数,
语法stdin_input | xargs [option] cmd
原理:xargs 一般是通过管道符接受标准输入并将其转换为命令行参数传递给 cmd。

  1. # 打印1~6,默认每次输出一行
  2. [root@VM-0-17-centos shell]# seq 1 6
  3. 1
  4. 2
  5. 3
  6. 4
  7. 5
  8. 6
  9. # 每行输出3个参数
  10. [root@VM-0-17-centos shell]# seq 1 6 | xargs -n 3
  11. 1 2 3
  12. 4 5 6
  13. # 删除日志文件
  14. ls *.log |xargs rm -r f {}
  15. # 查找 /home/data 下权限为 644 的文件修改权限为 600
  16. find /home/data -perm 644 | xargs chmod 600
  17. # 查找 jpg 文件并打包
  18. find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz