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 后才执行命令
on it road .com

读取文件的一部分

通常,我们不想查看整个文件。
我们可能想要浏览文件的开头以确定它是否正确,或者查看文件的末尾以查看文件中最后输入的内容。

Linux 中的文件访问命令 - find, sort, head, tail

以下文件访问命令是 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
日期:2020-09-17 00:14:23 来源:oir作者:oir