Linux sort命令
文件(例如密码文件)通常是通过在文件末尾添加新用户来构建的。
该文件没有任何特定的顺序;但是,当我们在文件中查找某物或者某人时,如果文件按某种顺序排序会很有帮助。
sort 命令提供了一种对文件进行排序的方法。
一些更常用的排序选项是:
- -r - 以相反的顺序排序(z 到 a,而不是 a 到 z)
- -n - 按数字对字段进行排序,而不仅仅是美国信息交换标准代码 (ASCII) 字符串
- -t [ch] - 设置字段分隔符
- num - 设置开始排序的字段编号(字段从 0 [零] 开始编号)
- num - 设置字段编号之前停止排序(这是不考虑排序的第一个字段)
- -b - 忽略前导空格(它们通常被认为是键控排序期间指定的字段的一部分)
- -r - 以相反的顺序排序(z 到 a,而不是 a 到 z)
- -o - file 设置用于保存排序输出的文件(可能是包含原始输入的同一个文件)
# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin ...
要按登录名对文件进行排序,请使用以下命令:
# sort /etc/passwd adm:x:3:4:adm:/var/adm:/sbin/nologin apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin cloud_user:x:1002:1003::/home/cloud_user:/bin/bash colord:x:997:995:User for colord:/var/lib/colord:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin gdm:x:42:42::/var/lib/gdm:/sbin/nologin geoclue:x:994:990:User for geoclue:/var/lib/geoclue:/sbin/nologin halt:x:7:0:halt:/sbin:/sbin/halt ...
要按第 5 个字段(注释)对文件进行排序,其中字段由冒号分隔,请使用以下命令:
# sort -t: -k5 /etc/passwd tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin halt:x:7:0:halt:/sbin:/sbin/halt ...
我们可以将排序的输出放入文件中。
我们甚至可以将排序输出到原始文件中;例如:
# cat names Big Ape 415 Roger Rabbit 408 Jessica Rabbit 510 Easter Rabbit 408 Doctor Doom 415 Easter Rabbit 408 Peter Wolf 510 Roger Rabbit 408 Peter Rabbit 510
# sort names -o names
再次验证文件:
# cat names Big Ape 415 Doctor Doom 415 Easter Rabbit 408 Easter Rabbit 408 Jessica Rabbit 510 Peter Rabbit 510 Peter Wolf 510 Roger Rabbit 408 Roger Rabbit 408
如果我们有多个已排序的文件要合并到一个文件中,请使用以下命令:
# sort file1 file2 file3 -o file4
合并文件可能会给我们重复的条目。
要仅输出文件的唯一行,请使用以下命令:
# sort -u names Big Ape 415 Doctor Doom 415 Easter Rabbit 408 Jessica Rabbit 510 Peter Rabbit 510 Peter Wolf 510 Roger Rabbit 408
Linux head命令
要查看文件的开头,请使用 head 命令:
# head -5 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
Linux find 命令
find 命令允许我们搜索文件和目录并在这些文件上执行命令。
find 命令的语法具有三个通用参数部分。
路径部分是要搜索的路径名(目录)列表。
search_criteria 部分是被视为布尔(真或者假)表达式的选项列表。
依次测试每个选项(条件),如果结果为真,则采取指示的操作。
一些可能的搜索条件是:
- -name - 如果文件名匹配
- -user - 如果文件属于用户(登录名)
- -atime - 如果文件在指定天数前被访问过
- -mtime - 如果文件在指定的天数前最后一次修改
- -size - 如果文件是特定的块大小
一些可能的操作是:
- -print - 显示文件的路径名
- -exec - 执行命令
- -ok - 仅在从 stdin 接收到 y 后才执行命令
读取文件的一部分
通常,我们不想查看整个文件。
我们可能想要浏览文件的开头以确定它是否正确,或者查看文件的末尾以查看文件中最后输入的内容。
以下文件访问命令是 UNIX 命令,而不是特定的 shell 命令。
Command | 说明 |
---|---|
find | 查找文件的位置 |
sort | 读取文件并对输出进行排序 |
hear or tail | 只查看文件的开头或者结尾 |
使用 find 命令的示例
我们无需知道文件的完整名称即可找到它。
例如,日志文件往往增长得相当快。
作为系统管理员,我们可能希望查看日志文件的大小。
要搜索管理日志文件(/var/log 目录中的文件),请使用以下命令:
# find /var/log -name "*.log" -print /var/log/audit/audit.log /var/log/tuned/tuned.log /var/log/cloud-init.log /var/log/pm-powersave.log /var/log/awslogs-agent-setup.log /var/log/awslogs.log
作为文件系统清理的一部分,我们可能希望搜索核心文件并将其删除。
以下两个命令查找任何名为 core.txt 的文件。
第一个命令在没有运算符输入的情况下执行 rm 命令。
第二个命令打印 rm 命令并需要运算符输入。
$ find / -name core -exec rm -f {} \; $ find / -name core -ok rm -f {} \;
要查找大于 1000 个块的文件,请使用以下命令:
$ find / -size +1000 -print
Linux tail命令
查看日志文件时,我们可能只对该文件的最后几个条目感兴趣。
我们可以使用 tail 命令查看文件的末尾。
# tail -5 /etc/passwd systemd-network:x:995:991:systemd Network Management:/:/sbin/nologin geoclue:x:994:990:User for geoclue:/var/lib/geoclue:/sbin/nologin cloud_user:x:1002:1003::/home/cloud_user:/bin/bash ssm-user:x:1003:1004::/home/ssm-user:/bin/bash apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin