Linux文件查找查看

文件类型区分

即文件权限的第一个,如:-rw-r--r--,则该文件属于普通文件

-            普通文件
d            目录
c            字符设备文件,终端就是一个典型
b            块设备文件,u盘,硬盘
s            套接字文件,本机和其他主机进程和进程通信
p            管道,本机进程和进程间通信
l            符号链接文件,小写L(软连接)

find -- 查找文件

可以使用通配符:*,?,[],{}

# 语法
find 路径 选项 [-exec -ok 执行操作 {} \];
-exec属于可选项,针对查找到的文件执行某种操作,如使用-exec,则最后的{} \;属于固定写法
-ok配合-exec使用,不加直接执行,加上则是对查找到的每个文件执行动作前先询问

# 选项
-name        名称
-type        类型
-size        大小
-user        属主
-perm        权限
-atime       访问时间,单位/天
-mtime       内容修改时间,单位/天
-ctime       属性修改时间,单位/天
-amin        访问时间,单位/分钟
-cmin        属性修改时间,单位/分钟
-mmin        内容修改时间,单位/分钟

# 示例
find /tmp/ -type f         # 查找/tmp目录下所有的普通文件
find / -size +1G           # 全盘查找大于1G的文件
find / -perm -4000         # 全盘查找有suid权限的文件
find /tmp -mtime 1         # 查找/tmp目录下1天前修改过内容的文件

# 可以使用条件判断,默认and,多个条件联合使用
# -o 等同 or ,! 等同 not
find / -size +1G -o -name "*.iso"         # 查找/下大于1G或者名称为*.iso的文件
find /tmp ! -type d                       # 查找/tmp下非目录文件

# 对查找的文件执行删除操作
find / -name a.txt -exec rm -rf {} \;

cat -- 查看文件内容,查看小文件时使用

# 选项
-n        # 查看文件时打印行号
-b        # 和 -n 相似,只不过对于空白行不编号
-s        # 当遇到有连续两行以上的空白行,就代换为一行的空白行

head -- 查看文件的开头部分

head /etc/passwd        # 默认查看文件的前10行
head -3 /etc/passwd     # 只查看文件的前3行

tail -- 查看文件的结尾部分

tail /etc/passwd        # 默认查看文件的末尾10行
tail -2 /etc/passwd     # 只查看文件的末尾2行
tail -f uwsgi.log       # 动态查看文件末尾10行,实时更新

wc -- 过滤、统计文件内容

wc -l        # 统计行数
wc -c        # 统计字符数

sort -- 排序

默认情况下按每行的第一个字符进行排序

# 选项
-n            # 按照数值升序排列,默认是字符
-t            # 指定分隔符 一般和-k结合使用
-k            # 使用分隔符分隔的第几列
-r            # 降序排列,默认升序
-u            # 去掉连续的重复行
-R            # 随机排序

# 示例,指定 : 为分隔符,以第2列的数值从大到小排序
cat test.txt |sort -t: -k2 -rn

uniq -- 去重,去掉连续的重复行

该命令只会统计连续重复的行,有空行或其它行分隔,不算重复项

# 选项
-c             # 去重后统计重复的行数,将数字显示在每行的前面
-u             # 不打印连续重复的行,即只打印出现过一次的行
-d             # 只显示连续重复的行

cut -- 列截取

用于显示每行从开头算起 num1 到 num2 的文字

# 选项
-c            # 以字符为单位进行分割。
-d            # 自定义分隔符,默认为制表符。
-f            # 与-d一起使用,指定显示哪个区域。
注1:使用空格作为分隔符,' ' 引号内空一格就好了,只能设置一个,cut只允许间隔符是一个字符,多个空格连续,会以每个空格为一列截取;
注2:cut命令默认的分隔符就是制表符,不是空格,如果使用默认分隔,则不适用-d选项,直接-f指定截取列即可

# 示例
# 以字符为单位,截取第3列
cut -c3 test.txt 
# 以 : 为分隔符,截取第1,3-5列
cut -d':' -f 1,3-5 /etc/passwd

tr -- 转换或删除文件中的字符

# 语法
tr [选项] [指定字符] [替换字符]

# 选项
-s      # 替换重复的字符,用指定的字符来替换对应的重复字符
        # 示例,连续字符去重,跨字符或跨行不算重复:
        echo "aaabbbaacccfddd" | tr -s [abcdf]        # 结果:abacfd
        # 删除空行,这里不行使用-d选项,-d选项删除回车符后所有行都会并一行了
        cat b.txt | tr -s ["\n"]
        
-d      # 删除字符,除指定的所有字符,不转换
        # 示例,删除全部大小写字母
        echo "a12HJ13fdaADff" | tr -d "[a-z][A-Z]"
        # 删除指定字母
        echo "a1213fdasf" | tr -d [adfs]
        
-t     # 字符替换,指定字符用对应位置的替换字符进行替换,一般缺省为-t
        # 示例
        echo 'a1b2c3' | tr -t [abc] [efg]        # 结果:e1f2g3
        # 全部字母小写改大写,反之亦然
        echo "Hello World I Love You" |tr -t [a-z] [A-Z]        # 结果:HELLO WORLD I LOVE YOU
        
-c    	# 字符补集替换,用替换字符替换指定字符中没有包含的字符
# 示例
# cat test.txt
Monday     09:00
Tuesday    09:10
Wednesday  10:11
Thursday   11:30
Friday     08:00
Saturday   07:40
Sunday     10:00
# 先将除字母外的所有字符都使用-c替换成换行符,然后使用-s删除空行
# cat test.txt|tr -cs  "[a-z][A-Z]" "\n"
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

# 统计一个字符串的某个字符出现次数,-cd一起使用,只保留.其余字符全部删除
# echo 172.16.30.141|tr -cd .|wc -c
3

column -- 输出对齐

# 选项
-t    # 将输出以空格对齐
-s    # 指定分隔符,实际是去掉了这个分隔符再输出以空格排列

# 示例:mount的输出是很杂乱的,这里查看前10行
# mount | head
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,size=485868k,nr_inodes=121467,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)

# 使用column对齐后
# mount | head |column -t
sysfs       on  /sys                    type  sysfs       (rw,nosuid,nodev,noexec,relatime)
proc        on  /proc                   type  proc        (rw,nosuid,nodev,noexec,relatime)
devtmpfs    on  /dev                    type  devtmpfs    (rw,nosuid,size=485868k,nr_inodes=121467,mode=755)
securityfs  on  /sys/kernel/security    type  securityfs  (rw,nosuid,nodev,noexec,relatime)
tmpfs       on  /dev/shm                type  tmpfs       (rw,nosuid,nodev)
devpts      on  /dev/pts                type  devpts      (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs       on  /run                    type  tmpfs       (rw,nosuid,nodev,mode=755)
tmpfs       on  /sys/fs/cgroup          type  tmpfs       (ro,nosuid,nodev,noexec,mode=755)
cgroup      on  /sys/fs/cgroup/systemd  type  cgroup      (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore      on  /sys/fs/pstore          type  pstore      (rw,nosuid,nodev,noexec,relatime)

more -- 分页查看

# 类似于cat,但是会分页查看文件,通过指令翻页,与more类似的还有less命令
# 选项
-num         # 一屏显示的行数,示例:more -5 /etc/passwd,结果是每5行一屏
+num         # 从第 num 行开始显示
-s           # 如有连续两行以上空白行则以一行空白行显示
-p           # 不以滚动的方式显示每一页,而是先清除屏幕后再显示内容
-f           # 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)

# 处于more命令查看时的操作命令
Enter             # 向下n行,需要定义。默认为1行
Ctrl+F            # 向下滚动一屏
空格键             # 向下滚动一屏
Ctrl+B            # 返回上一屏
=                 # 输出当前行的行号(一屏的最下面那行)
:f                # 输出文件名和当前行的行号
V                 # 调用vi编辑器
!命令              # 调用Shell,并执行命令
q                 # 退出more
posted @ 2022-12-28 11:23  待满茶杯  阅读(395)  评论(0编辑  收藏  举报