目录结构

8OD@~Y_AE(`~PUBD781CE@C.png

路径 功能
bin 普通用户使用的命令
boot 系统启动相关文件
dev 设备文件
etc 各个软件的配置文件
home 普通用户的家目录
root root用户的家目录
run 临时文件系统,存储系统启动以来的信息
sbin 管理员使用的命令
tmp 临时文件(进程产生的文件)
usr(unix shared resources) 系统文件,类似于C:/Windows
usr/bin,普通用户使用的应用程序
usr/sbin,管理员使用的应用程序
usr/local,软件安装的位置,类似C:/ProgramFiles
var 存储的一些变化的文件,如日志、数据库、邮件
media 移动设备默认挂载点
mnt 手工设备挂载点

文件路径

绝对路径:从/开始的路径
相对路径:从当前路径开始的路径

  • 例:test1在/home/zhangsan目录下,test2在root目录下,当前位置在/root。分别用绝对路径和相对路径查看两个文件。

绝对路径:cat /root/test2
相对路径:cat test2
绝对路径:cat /home/zhangsan/test1
相对路径:cat ../home/zhangsan/test1
注:./表示当前目录,../表示上一层目录。

文件管理

创建

文件

  1. [root@localhost ~]# touch file1.txt # 无则创建,有则修改时间
  2. [root@localhost ~]# touch file3 file4
  3. [root@localhost ~]# touch /home/file10.txt
  4. [root@localhost ~]# touch /home/{maomao,gougou}
  5. [root@localhost ~]# touch file{1..20}
  6. [root@localhost ~]# touch file{a..c}
  7. [root@localhost ~]# touch file{old,new} # {}集合,等价touch fileold filenew

目录

  1. [root@localhost ~]# mkdir dir1
  2. [root@localhost ~]# mkdir /home/dir2 /home/dir3
  3. [root@localhost ~]# mkdir /home/{dir4,dir5}
  4. [root@localhost ~]# mkdir -v /home/{dir6,dir7} # 显示操作的消息
  5. [root@localhost ~]# mkdir -v /home/dir8/111/22
  6. [root@localhost ~]# mkdir -pv /home/dir8/111/22 # 创建目录和其所有父层目录
  7. [root@localhost ~]# mkdir -pv /home/{abc/{dir1,111},efg}

复制

cp SRC DEST

  • SRC为单个文件:
    • DEST不存在,创建DEST文件并写入
    • DEST存在,覆盖DEST文件
  • SRC为多个文件:

    • 此时DEST必须为目录,若DEST为文件则报错。SRC为目录要使用选项-r(意为递归复制)
    • DEST不存在时,创建同名目录和一样的文件
    • DEST存在时,创建一样的文件
      1. [root@localhost ~]# mkdir /home/dir{1,2}
      2. [root@localhos ~]# touch install.log
      3. [root@localhos ~]# cp -v install.log /home/dir1
      4. [root@localhos ~]# cp -v install.log /home/dir1/abc.txt
      5. [root@localhos ~]# cp -rv /etc /home/dir1
      6. [root@localhos ~]# cp -v install.log /home/dir88 # 没有/home/dir88
      7. [root@localhos ~]# cp -v install.log /home/dir2
      8. [root@localhos ~]# cp -v anaconda-ks.cfg !$
      9. [root@localhos ~]# cp -rv /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/passwd
      10. /etc/hostname /home/dir2
      11. # 将多个文件复制到同一个目录
      12. [root@localhos ~]# cp -rv /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/passwd
      13. /etc/hostname .
      14. [root@localhos ~]# type -a cp
      15. #cp 是 'cp -i' 的别名
      16. #cp 是 /usr/bin/cp
      17. [root@localhos ~]# cp -rv /etc/sysconfig/network-scripts/ifcfg-ens33
      18. /etc/sysconfig/network-scripts/ifcfg-ens33.bak
      19. [root@localhos ~]# cp -rv /etc/sysconfig/network-scripts/{ifcfg-ens33,ifcfgens33.bak}
      20. [root@localhos ~]# cp -rv /etc/sysconfig/network-scripts/ifcfg-ens33{,-old}

      移动

      1. [root@localhost ~]# mv file1 /home/dir3 # 将file1移动到/home/dir3
      2. [root@localhost ~]# mv file2 /home/dir3/file20 # 将file2移动到/home/dir3,并且改名
      3. file20
      4. [root@localhost ~]# mv file4 file5 # 将file4改名为file5

      删除

      rm file
      -r:递归删除
      -f:强制删除
      1. [root@localhost ~]# mkdir /home/dir10
      2. [root@localhost ~]# touch /home/dir10/{file2,file3,.file4}
      3. [root@localhost ~]# rm -rf /home/dir10/*
      4. [root@localhost ~]# ls /home/dir10/ -a # 隐藏文件没有被删除
      5. [root@localhost ~]# rm -rf *.pdf

      查看文件内容

  • cat

    • -n:显示行号
    • -A:输出包括控制字符(换行符、制表符等)

![)[%)8[_G]UIM%OL~BEV7UK.png

  • more less

more 命令类似 cat ,不过会以一页一页的形式显示。按空格下一页,按b往回一页。按q退出。

less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。
-f:强制打开文件
/ 字符串:向下检索字符串
?字符串:向上检索字符串
Q:退出
回车:往下一行
空格:往下一页
b:往回一页

  • head

head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。
查看文件开头前5行:head -n 5 man.test.config
![5)Q~Z{TRB{8U9K0XWWLNYD.png
显示文件前20个字节:head -c 20 man.test.config

  • tail

tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件
tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。

  • -f:循环读取
  • -n:显示文件尾部n行内容

    • grep

    针对文件内容进行过滤

    1. [root@localhost ~]# grep 'bash$' /etc/passwd
    2. [root@localhost ~]# grep 'failure' /var/log/secure

文件时间

最近访问:2019-08-25 11:11:32.275876888 +0800 atime查看内容
最近更改:2019-08-25 11:11:29.170856671 +0800 mtime修改内容
最近改动:2019-08-25 11:11:29.170856671 +0800 ctime文件属性,比如权限

atime:Access time,

是在读取文件或者执行文件时更改,即文件最后一次被读取的时间。

mtime:Modified time,

是在写入文件时随文件内容的更改而更改,是指文件内容最后一次被修改的时间。

ctime:Change time,

是在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改,即文件状态最后一次被改变的时间。

查看Linux文件类型

Linux文件是没有扩展名的,还有注意通过颜色判断文件类型不一定正确。

方法一:ls -l

ls -l 文件名 //看第一个字符
-:普通文件(文本文档、二进制、压缩文件、电影、图片)
d:目录文件(蓝色)
b:设备文件(block块设备)存储硬盘,U盘 /dev/sda,/dev/sda1
c:设备文件(char字符设备)打印机,终端 /dev/tty1,/dev/zero
s:套接字文件
p:管道文件
l:链接文件(淡蓝色)

方法二:file

file 文件名

  1. [root@localhost ~]# file /etc/hosts
  2. /etc/hosts: ASCII text
  3. [root@localhost ~]# file /bin/ls
  4. /bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=ceaf496f3aec08afced234f4f36330d3d13a657b, stripped
  5. [root@localhost ~]# file /home
  6. /home: directory
  7. [root@localhost ~]# file /dev/tty1
  8. /dev/tty1: character special

方法三:stat

stat 文件名
可以显示文件类型

  1. [root@localhost ~]# stat /etc/hosts
  2. 文件:"/etc/hosts"
  3. 大小:158 块:8 IO 块:4096 普通文件
  4. 设备:fd00h/64768d Inode17003212 硬链接:1
  5. 权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
  6. 环境:system_u:object_r:net_conf_t:s0
  7. 最近访问:2021-01-26 14:41:39.267325896 +0800
  8. 最近更改:2013-06-07 22:31:32.000000000 +0800
  9. 最近改动:2020-12-20 15:35:21.552326163 +0800
  10. 创建时间:-

查找文件

which

which指令会在环境变量 $PATH 设置的目录里查找符合条件的文件。

  1. [root@localhost ~]# which poweroff
  2. /usr/sbin/poweroff

locate(知道即可)

locate 要搜索的文件或目录名,非实时的从数据库里快速搜索文件或目录。

  1. [root@localhost ~]# yum -y install mlocate # 安装locate
  2. [root@localhost ~]# updatedb # 更新数据库
  3. [root@localhost ~]# locate hosts # 查找hosts文件名的文件
  4. [root@localhost ~]# locate /etc/sh # 查找/etc目录下所有以

find

  • 实时查找工具,通过遍历指定路径下的文件系统完成文件查找
  • 特点:
    • 查找速度慢
    • 精确查找
    • 实时查找

      find [选项] [路径] [查找条件 + 处理动作] 查找路径:指定具体目录路径,默认是当前文件夹 查找条件:指定的查找标准(文件名/大小/类型/权限等),默认是找出所有文件 处理动作:对符合条件的文件做什么操作,默认输出屏幕

查找条件

  • 根据文件名查找

    1. [root@localhost ~]# find /etc -name "ifcfg-ens33"
    2. [root@localhost ~]# find /etc -iname "ifcfg-ens33" # 不区分大小写
    3. [root@localhost ~]# find /etc -iname "ifcfg*"
  • 根据文件大小查找

    1. [root@localhost ~]# find /etc -size +5M # 大于5M
    2. [root@localhost ~]# find /etc -size 5M # 等于5M
    3. [root@localhost ~]# find /etc -size -5M # 小于5M
    4. [root@localhost ~]# find /etc -size +5M -ls # 找到的处理动作-ls
  • 指定查找的目录深度

    1. [root@localhost ~]# find / -maxdepth 3 -a -name "ifcfg-ens33" # 最大查找深度
    2. # -a是同时满足,-o是或
    3. [root@localhost ~]# find / -mindepth 3 -a -name "ifcfg-ens33" # 最小查找深度
  • 按时间找

    1. [root@localhost ~]# find /etc -mtime +5 # 修改时间超过5天
    2. [root@localhost ~]# find /etc -mtime 5 # 修改时间等于5天
    3. [root@localhost ~]# find /etc -mtime -5 # 修改时间5天以内
  • 按文件属主、属组找

    1. [root@localhost ~]# find /home -user xwz # 属主是xwz的文件
    2. [root@localhost ~]# find /home -group xwz
    3. [root@localhost ~]# find /home -user xwz -group xwz
    4. [root@localhost ~]# find /home -user xwz -a -group root # -a表示且
    5. [root@localhost ~]# find /home -user xwz -o -group root # -o表示或
    6. [root@localhost ~]# find /home -nouser
    7. [root@localhost ~]# find /home -nogroup
  • 按文件类型找

    1. [root@localhost ~]# find /dev -type d
  • 按权限找

数字的部分是rwxrwxrwx,分别是所有者,用户组,其他人的权限,用二进制表示成数字,如r-xr—r—表示为544

  1. [root@localhost ~]# find / -perm 644 -ls # 所有用户有都该权限
  2. [root@localhost ~]# find / -perm -644 -ls # 任何一个用户有该权限,例:至少有一类用户有某某权限
  3. [root@localhost ~]# find / -perm 4000 -ls
  4. [root@localhost ~]# find / -perm -4000 -ls
  • 按正则表达式查找
    1. [root@localhost ~]# find /etc -regex '.*ifcfg-ens[0-9][0-9]'
    2. # .* 任意多个字符
    3. # [0-9] 任意一个数字

    处理动作

    -print:默认的处理动作,显示至屏幕
    -ls:类型于对查找到的文件执行“ls -l”命令
    -delete:删除查找到的文件
    -fls /path/to/somefile:查找到的所有文件的长格式信息保存至指定文件中
    -ok COMMAND {}\:对查找到的每个文件执行由COMMAND指定的命令
    对于每个文件执行命令之前,都会交换式要求用户确认
    -exec COMMAND {} \:对查找到的每个文件执行由COMMAND指定的命令
    {}:用于引用查找到的文件名称自身
    注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令;另
    一种方式可规避此问题
    find | xargs COMMAND

    练习题

  1. 查找/var目录下属主为root,且属组为mail的所有文件或目录
    2. 查找/usr目录下不属于root,bin或Hadoop的所有文件或目录
    3. 查找/etc目录下最近一周内容曾被访问过的文件或目录
    4. 查找当前系统上没有属主或属组,且最近一周内曾被访问过的文件或目录
    5. 查找/etc目录下大于1M且类型为普通文件的所有文件或目录
    6. 查找/etc目录下所有用户都没有写权限的文件
    7. 查找/etc目录下至少一类用户没有执行权限的文件
    8. 查找/etc/init.d目录下,所有用户都执行权限,且其它用户写权限的文件
    1. [root@localhost ~]# find /var -user root -group mail
    2. [root@localhost ~]# find /var -not -user root -a -not -user bin -a -not -user hadoop
    3. [root@localhost ~]# find /etc -atime -7
    4. [root@localhost ~]# find / -nouser -o -nogroup -a -atime -7
    5. [root@localhost ~]# find /etc -size +1M -a -type f
    6. [root@localhost ~]# find /etc -not -perm /222
    7. [root@localhost ~]# find /etc -not -perm -111
    8. [root@localhost ~]# find /etc/init.d -perm /113