Linux命令-文件管理
我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /。
其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。
在开始本教程前我们需要先知道什么是绝对路径与相对路径。
绝对路径: 是由/开头的 可以使用在任何场景 一定是可以找到该文件的
相对路径: 不会以/开头 ./passwd 例如这个就是相对路径
. 当前目录
.. 上级目录
- 几个常见的处理目录的命令
- * ls(英文全拼:list files): 列出目录及文件名
- * cd(英文全拼:change directory):切换目录
- * pwd(英文全拼:print work directory):显示目前的目录
- * mkdir(英文全拼:make directory):创建一个新的目录
- * rmdir(英文全拼:remove directory):删除一个空的目录 可以用 rm -rf代替
- * cp(英文全拼:copy file): 复制文件或目录
- * rm(英文全拼:remove): 删除文件或目录
- * mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称
- 文本文件查看工具
- cat 内容抓取 可以支持同时多内容抓取
- cat 123.txt 1234.txt 一次查看两个文件
- -n 可以显示行数
- more 可以翻页 按q退出
- more 123.txt
less 首先是可以使用命令 /查找内容 如果输入v 就是进入vi模式 可以直接编辑 然后wq保存 保存完会退出到less的界面 需要q才能退出
man帮助这个功能 就是通过less来显示的 因为可以查找内容
head head -n 10 /etc/passwd 用来查看文件头部内容来判断文件
- tail tail -n 20 /var/log/messages
- 通常用来做日志监控
- 文本筛选工具
- grep linux三剑客之一
grep 用来打印匹配的文件和标准输入的
-i 忽略大小写
-n 打印匹配的行号
-o 只显示匹配的内容
-v 打印不匹配
文本处理工具:
cut 提取工具 用来提取文本中的字段
-d 分隔符 以什么为分割
-f 打印分隔好的列数
-c 按指定的字符提取
cut -d : -f 3
cat /etc/passwd | grep bash |cut -d: -f1
可以查到系统中所有可以登录shell用户的名字
文本排序工具sort
-r 执行降序
-n 以数字排序
-f 忽略大小写
-u 在输出中删掉重复行
sort -nfu /wh/test.txt
diff 文本区分工具 可以对两个文件进行区分比较
- 管道符 | 可以把 管道符之前的内容 作为管道符之后内容的输入
- cat /etc/passwd /wh/123.txt /etc/group /etc/shadow |grep redhat
- ll | grep etc
- tail -n 20 /var/log/messages | grep -i network
- [root@rhel8-server sch]# cat /etc/passwd | grep /bin/bash | cut -d : -f1
- root
- sch
- admin
- test
- 正则表达式
- ^ 代表一个行的开头 ^ro 表示以ro开头
- $ 代表一个行的结尾 login\$ 表示以login结尾
. 匹配一个任意字符 ro.t 字符串为ro.t 可以匹配 root rokt ro0t
* 标识匹配之前内容的0次或无数次 roo\*t
能匹配 rot rooot roooooot rooooooooot
- 例子:
- grep ^ro /etc/passwd
- cat /etc/passwd /etc/shadow /etc/group |grep login\$
- grep ro*t test.txt
- grep ro.t test.txt
- 转义字符 \
- 一般在linux系统当中 \ 会用来转义 $ * 让其变成本身字符意思 而不是shell当中的意思
- locate find
用于查找符合条件的文件,他会去保存文件和目录名称的数据库内,查找合乎范本样式条件的文件或目录
- 在使用locate之前,需要更新一下数据库,因为locate只会在数据库中查找文件所在的位置,所以locate查找速度极快,缺点就是数据库更新并不是实时的,更新数据库有两种方式:
- 手动更新 updatedb
- 自动更新默认情况下,updatedb每天执行一次
- locate passwd 查找passwd文件所在位置
- locate
- -c:只输出找到的数量
- -n:至多显示 n个输出
- -i:忽略大小写
- -r:使用基本正则表达式
- -d DBPATH:使用 DBPATH 指定的数据库,而不是默认数据库 /var/lib/mlocate/mlocate.db
- 用正则表达式来查找网卡位置
- locate -r ens160\$
- /etc/sysconfig/network-scripts/ifcfg-ens160
- find 实时查找工具,通过遍历指定路径下的文件系统完成文件查找
- 特点 1.查找速度略慢
- 2.精确查找
- 3.实时查找
- 4.满足多条件匹配
- find [选项] [路径] [查找条件 + 处理动作]
- 查找路径:指定具体目录路径,默认是当前文件夹
- 查找条件:指定的查找标准(文件名/大小/类型/权限等),默认是找出所有文件
- 处理动作:对符合条件的文件做什么操作,默认输出屏幕
- 按文件名查找:
- find /etc -name "ifcfg-ens160"
- find /etc -iname "IfCfg-ens160"
- find /etc/ -name "ifcfg*"
- 根据文件大小查找
- find /etc/ -size +5M 查找大于5M
- find /etc/ -size -5M 查找小于5M
- find /etc/ -size 5M 查找等于5M
- find /etc/ -size +5M -ls 查找出的内容并且执行 ls命令
- find /etc/ -size +5M -a -name "ifcfg-ens160" -a 与 同时满足两个条件
- find /etc/ -size +5M -o -name "ifcfg-ens160" -o 或 两个条件满足其一即可
- 指定查找目录深度
- find / -maxdepth 4 -a -name "ifcfg-ens160" 指定查找深度为4 且名字是ifcfg-ens160的
- 按时间查找
- find /etc/ -mtime +5 查找文件修改时间5天以外的
- find /etc/ -mtime 5 查找文件修改时间为5天的
- find /etc/ -mtime -5 查找文件修改时间小于5天的
- 查找文件属主 和属组
- find /home -user redhat # 属主是redhat的文件
- find /home -group redhat
- find /home -user redhat -group redhat
- find /home -user root -a -group root
- find /home -user root -o -group root
- find /home -nouser # 没有属主的文件
- find /home -nogroup # 没有属组的文件
- 按文件类型
- find /dev -type d 查找/dev下文件类型是目录的文件
- 按文件权限查找
- find / -perm 644 -ls 权限等于644的
- find / -perm -644 -ls # 权限高于644的
- find / -perm 4000 -ls 查找特殊权限SUID 且权限刚好是000 基本查不出东西
- find / -perm -4000 -ls 查找特殊权限SUID 且权限高于000
- 按正则表达式:
- find /etc -regex '.*ifcfg-ens[0-9][0-9][0-9]'
- # .* 任意多个字符
- # [0-9] 任意一个数字
- 条件组合
- -a 多个条件and并列
- -o 多个条件or并列
- -not 条件相反. find /etc/ -not -size +5M
- 处理动作
- -print 默认 显示至屏幕
- -ls 对于查找到的文件 执行 ls -l 命令
- -delete 删除查找到的文件
- - exec command 执行其他复合命令
- find /etc/ -name "*.conf" -exec cp -r {} /wh/ \; \;表示复合命令结束了 {} 无具体意义
- find /wh/ -name "*.conf" -delete 删除刚刚这些文件
- find /tmp/* -mtime +7 -user root -delete 清理tmp目录下 修改时间大于7天的 且属主是root的文件
find /wh/ -perm 777 -exec chmod o-x {} \; 在目录中查找权限为777的文件,将其他人的x权限删除
- 实例
- 查找/var目录下属主为root,且属组为mail的所有文件或目录
- [root@localhost ~]# find /var ‐user root ‐group mail
- 查找/usr目录下不属于root,bin或Hadoop的所有文件或目录
- [root@localhost ~]# find /usr ‐not ‐user root ‐a ‐not ‐user bin ‐a ‐not ‐user Hadoop
- [root@localhost ~]# find /usr ‐not \(‐user root ‐o ‐user bin ‐o ‐user hadoop\)
- 查找/etc目录下最近一周内容曾被修改过的文件或目录
- [root@localhost ~]# find /etc/ ‐mtime ‐7
- 查找当前系统上没有属主或属组,且最近一周内曾被访问过的文件或目录
- [root@localhost ~]# find / \(‐nouser ‐o ‐nogroup\) ‐a ‐atime ‐7
- 查找/etc目录下大于1M且类型为普通文件的所有文件或目录
- [root@localhost ~]# find /etc ‐size +1M ‐type f
- 查找/etc目录下所有用户都没有写权限的文件
- [root@localhost ~]# find /etc ‐not ‐perm 222
- 查找/etc目录下至少一类用户没有执行权限的文件
- [root@localhost ~]# find /etc ‐not ‐perm ‐111
- 查找/etc/init.d目录下,所有用户都执行权限,且其它用户写权限的文件
- [root@localhost ~]#find /etc/init.d ‐perm ‐113
- linux三剑客 : grep sed awk
sed 流编辑器 读取内容到内存中,所有操作都在内存里面运行 不会影响源文件
选项 -n 输出模式空间内容比如打印多少到多少行
-i 直接编辑文件 会对文件造成影响
-e 可以使用多个命令操作
-r 可以使用正则表达式
命令:
p 打印行空间内容
d 删除匹配行
a \text 标识匹配到行的追加内容
i \text 之后追加
c \text 替换整行
-I 不区分大小写
s 替换内容
sed -n 5p /etc/passwd 打印文件第五行的内容
sed -n '1,5p' /etc/passwd 打印1到5行内容
sed -n '/123/p' /test/passwd 打印有字符串123的行
sed 's/123/456/' /wh/123.txt 替换123的内容为456 源文件并没有替换
sed -i 's/123/456/' /wh/123.txt 源文件已经替换
awk 排版工具 可以将文本内用户感兴趣的内容提取 再排版
- ip addr |grep ens160 |grep inet | awk '{print $2}'
- 使用awk查找本机ip地址
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~