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地址  
posted @ 2022-01-25 17:12  终究还是避免不了遗憾  阅读(67)  评论(0编辑  收藏  举报