目录与路径

目录的相关操作

  1. 切换目录
  2. cd [相对路径或绝对路径]
  1. 显示当前目录
  2. pwd [-P]
  3. -P: 显示当前路径, 而非使用连接的路径

image.png

  1. 新建目录
  2. mkdir [-mp] 目录名称
  3. -m: 设置文件权限
  4. -p: 递归创建目录(包含上层目录)

image.png

  1. 删除目录
  2. rmdir [-p] 目录名称
  3. -p: 连同上层空的目录也一起删除
  4. 但注意, 该命令只能删除空的目录

关于执行路径的变量: $PATH

  • 当执行一个命令如ls时, 系统会按照环境变量PATH的设置去每个PATH定义的目录下查询文件名为ls的可执行文件, 如果在PATH定义的目录中含有多个文件名为ls的可执行文件, 那么先查询到的同名命令会先被执行

    1. root@DESKTOP-LMORNNS:~# echo $PATH
    2. /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/c/ProgramData/Oracle/Java/javapath:/mnt/c/Java/jdk1.8.0_40/bin:/mnt/c/Java/jdk1.8.0_40/jre/bin:/mnt/c/apache-maven-3.6.1/bin:/mnt/c/WINDOWS/system32:/mnt/c/WINDOWS:/mnt/c/WINDOWS/System32/Wbem:/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/:/mnt/c/WINDOWS/System32/OpenSSH/:/mnt/c/Program Files/nodejs/:/mnt/d/soft/mysql-8.0.20-winx64/bin:/mnt/c/Program Files (x86)/Intel/Intel(R) Management Engine Components/DAL:/mnt/c/Program Files/Intel/Intel(R) Management Engine Components/DAL:/mnt/c/Program Files/Git/cmd:/mnt/c/Program Files/Docker/Docker/resources/bin:/mnt/c/ProgramData/DockerDesktop/version-bin:/mnt/c/Users/Administrator/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/Administrator/AppData/Local/Programs/Microsoft VS Code/bin:/mnt/d/DEVELOP/node_global:/mnt/c/Users/Administrator/AppData/Local/Programs/oh-my-posh/bin:/snap/bin
  • PATH变量的内容由一堆目录组成, 每个目录中间以:隔开, 目录有顺序之分

  • 添加PATH

image.png


文件与目录管理

查看文件与目录: ls

  1. ls [-aAdfFhilnrRSt] 目录名称
  2. ls [--color={never,auto,always}] 目录名称
  3. ls [--full-time] 目录名称
  4. -a: 列出全部文件, 包括隐藏文件
  5. -A: 列出全部文件, 包括隐藏文件, 但不包括. ..
  6. -d: 仅列出目录本身, 而不是列出目录内的文件数据
  7. -f: 直接列出结果, 而不进行排序(默认会以文件名排序)
  8. -F: 根据文件, 目录等信息给予附加数据结构,
  9. 如:*代表可执行文件; /代表目录; =代表socket文件; l代表FIFO文件
  10. -h: 将文件容量以人类易读的方式列出来
  11. -i: 列出inode号码
  12. -l: 列出长数据串, 包含文件的属性与权限等数据
  13. -n: 列出UIDGID, 而非用户与用户组的名称
  14. -r: 将排序结果反向输出, 如原本文件名由小到大, 反向则为由大到小
  15. -R: 连通及目录内容一起列出来, 等于该目录下所有文件都会显示出来
  16. -S: 以文件容量大小排序, 而不是用文件名排序
  17. -t: 以时间排序, 而不是用文件名
  18. --color=never: 不要依据文件特性给予颜色显示
  19. --color=always: 显示颜色
  20. --color=auto: 让系统自行依据设置来判断是否给予颜色
  21. --full-time: 以完成时间格式, 包含年, 月, 日, 时, 分输出
  22. --time={atime, ctime}: 输出访问时间或改变权限属性时间(ctime)而非内容更改时间

复制, 删除与移动: cp, rm , mv

  1. 复制文件或目录
  2. cp [-adfilprsu] 源文件 目标文件
  3. cp [options] source1 source2.... directory
  4. -a: 相当于-pdr
  5. -d: 若源文件为连接文件的属性(link file), 则复制连接文件属性而非文件本身
  6. -f: 强制, 若目标文件已经存在且无法开启, 则删除后再尝试一次
  7. -i: 若目标文件已经存在, 在覆盖时会先询问操作的进行
  8. -l: 进行硬连接的链接文件创建, 而非复制文件本身
  9. -p: 连同文件的属性一起复制过去, 而非使用默认属性(备份常用)
  10. -r: 递归持续复制
  11. -s: 复制称为符号连接文件, 即快捷方式文件
  12. -u: 若目标比源旧才更新目标
  13. 最后注意, 如果源文件有两个以上, 那最后的目的文件一定要为目录才行
  • 在默认条件中, cp的源文件与目的文件中的权限是不同的, 目的文件的所有者通常会是命令操作者本身, 因此在备份时, 要注意特殊权限文件, 必须加上-a或-p等完整复制文件权限的参数才行, 以及将文件复制给到其他用户, 也需注意文件的权限
  • 复制文件创建连接例子如下

image.png

  • 上例子补充, 默认情况cp复制的是源文件, 而非连接的属性, 要复制连接文件的属性, 需要加-d
  1. 移除文件或目录
  2. rm [-fir] 文件或目录
  3. -f: 强制, 忽略不存在的文件
  4. -i: 互动模式
  5. -r: 递归删除

image.png

  1. 移动文件与目录, 或更名
  2. mv [-fiu] 目标
  3. mv [-options] source1 source2 .... directory
  4. -f: 强制, 若目标文件存在, 会直接覆盖
  5. -i: 交互模式
  6. -u: 若目标文件已经存在, source比较新, 才会更新

image.png

取得路径的文件名与目录名称

image.png


文件内容查阅

  1. cat: 由第一行开始显示文件内容
  2. tac: 从最后一行开始显示, tactac的倒写形式
  3. nl: 显示的时候, 顺便输出行号
  4. more: 一页一页的显示文件内容
  5. less: more类似, 但是比more更好的是, 可以往前翻页
  6. head: 只看头几行
  7. tail: 只看结尾几行
  8. od: 以二进制的方式读取文件内容

直接查看文件内容

  • cat ```shell cat [-AbEnTv]

-A: 相当于-vET的整合参数, 可列出一些特殊字符, 而不是空白而已 -b: 列出行号, 仅针对非空白行做行号显示, 空白行不标行号 -E: 将结尾的断行字符$显示出来 -n: 打印出行号, 连同空白行也会有行号 -T: 将[Tab]按键以^I显示出来 -v: 列出一些看不出来的特殊字符

  1. - tac反向列示: 先展示最后一行
  2. - nl添加行号打印: 可以将行号做较多的显示设计, 包括位数与是否自动补0等功能
  3. ```shell
  4. nl [-bnw] 文件
  5. -b: 指定行号指定的方式, -b a 表示不论空行同样列出行号, -b t 空行不列出行号, 也是默认值
  6. -n: 指定列出行号的表示方法, 有ln, rn, rz三种选项
  7. -w: 行号字段占用的位数, 默认6位

可翻页查看

  • more(一页一页翻动)

image.png

  • less(一页一页翻动)

image.png

数据选取

  • head: 取出前几行 ```shell head [-n number] 文件

-n: 后接数字, 代表显示几行, 默认10行, 也可以接负数 示例: head -n -100 /etc/man.config 假设man.config有141行, 则会列出前41行, 后100行不会打印

  1. - tail(取出后面几行)
  2. ```shell
  3. tail [-n number] 文件
  4. -n: 后接数字, 表示显示几行
  5. -f: 表示持续检测

image.png

非纯文本文件: od

由于执行文件通常是二进制文件, 使用上述命令会乱码, 可以利用od来读取
image.png

修改文件时间或创建新文件: touch

image.png

  1. touch [-acdmt] 文件
  2. -a: 仅修改访问时间
  3. -c: 仅修改文件的时间, 若该文件不存在则不创建新文件
  4. -d: 后面可以接欲修改的日期而不用目前的时间, 也可以使用--date="日期或时间"
  5. -m: 仅修改mtime
  6. -t: 后面可以接欲修改的时间而不用当前的时间, 格式为[YYYYMMDDhhmm]
  7. 常用于创建一个空文件或者将文件日期修改为当前日期(mtimeatime)

文件与目录的默认权限与隐藏权限

文件默认权限: umask

image.png
image.png
image.png

文件隐藏属性chattr, lsattr

image.png

文件特殊权限: SUID, SGID, SBIT

image.png
image.png
image.pngimage.png

查看文件类型: file

image.png


命令与文件的查询

脚本文件名的查询

  • which(寻找执行文件) ```shell which [-a] command

-a: 将所有由PATH目录中可以找到的命令均列出, 而不只是第一个被找到的命令名称 注意: which 是根据用户设置的环境变量PATH内的目录去查找可执行文件的, 不是root用户可能没有找不到

  1. <a name="vdQ6x"></a>
  2. ### 文件名的查找
  3. 通常先使用whereis 或locate 来检查, 还找不到才使用find<br />find会查找硬盘比较慢, whereis和locate会查询数据库, linux会将系统内的所有文件都记录在一个数据库文件中
  4. - whereis(寻找特定文件)
  5. ```shell
  6. whereis [-bmsu] 文件或目录名
  7. -b: 只找二进制格式的文件
  8. -m: 只找在说明文件manual路径下的文件
  9. -s: 只找source源文件
  10. -u: 会查找不在上述3个选项当中的其他特殊文件
  11. 示例:
  12. root@DESKTOP-LMORNNS:/etc# whereis -b java
  13. java: /usr/share/java /mnt/c/ProgramData/Oracle/Java/javapath/java.exe /mnt/c/Java/jdk1.8.0_40/bin/java.exe /mnt/c/Java/jdk1.8.0_40/jre/bin/java.dll /mnt/c/Java/jdk1.8.0_40/jre/bin/java.exe
  • locate: 依据/var/lib/mlocate内的数据库记载, 找出用户输入的关键字文件名, 由于数据库一天更新一次, 可以手动执行 updatedb 更新 ```shell locate [-ir] keyword

-i: 忽略大小写的差异 -r: 后面可接正则表达式的显示方式

  1. - find
  2. ```shell
  3. find [PATH] [option] [action]

image.png
image.png
image.png


权限与命令间的关系

image.png


重点回顾

image.png