目录与路径


相对路径与绝对路径

目录的相关操作:
-代表前一个工作目录
cd, pwd, mkdir, rm

执行文件路径的变量:$PATH

文件与目录管理


文件与目录的查看


[ ls ]
选项:

  1. ls [-aAdfFhilnrRst] 文件或目录
  2. ls [--color={never, auto, always}] 文件或目录
  3. ls [--full-time] 文件或目录

复制, 删除与移动


[ cp ]
复制文件或目录
语法:

cp [-adfilprsu] 源文件(source) 目标文件(destination)
cp [options] source1 source2 ... directory

常用选项:

  • -a : 相当于-dr —preserve=all, 保留文件的所有属性(包括时间)
  • -r : 递归复制
  • -i : 目标文件存在时询问
  • -p : 保留文件的所有属性

[ rm ]
删除文件或目录
语法:

rm [-fir] 文件或目录

选项:

  • -f : force
  • -r : 递归
  • -i : 交互

[ mv ]
移动文件或目录
语法:

mv [-fiu] source destination
mv [options] source1 source2 ... directory

选项:

  • -f : force强制,
  • -i : 存在询问
  • -u : source比较新则更新

获取路径文件名和目录名称


basename dir

dirname dir

文件内容查看


cat, tac, nl, more, less, head, tail, od

直接查看文件内容


[ cat ]
语法:

cat [-AbEnTv]
# -A : 相当于-vET
# -b : 列出行号, 空白行不列出
# -n : 列出行号, 空白行也显示
# -E :结尾换行符显示$
# -v : 列出看不出的特殊字符
# -T : tab以^I显示

[ tac ] 反向序列
[ nl ] 显示行号

可翻页查看


[ more ]
more使用的快捷键:

  • 空格键 : 向下翻页
  • Enter : 向下翻一行
  • / : 查找
  • :f : 显示文件名和当前行数
  • q : 离开
  • b : 操作文件有效, 对管道无效, 向上翻页

[ less ]
快捷键:;

  • 空格键: 向下翻动一页
  • [pagedown] : 向下翻动一页
  • [pageup] : 向上翻动一页
  • / : 查找
  • ? : 向上查找
  • n : 下一个查找
  • N : 上一个查找
  • g : 第一行
  • G : 最后一行
  • q : 离开

数据截取


[ head ]
取出前几行数据
语法:

head [-n number] 文件

示例:

head /etc/man_db.conf # 默认前十行
head -n 20 /etc/man_db.conf
head -n -100 /etc/man_db.conf # 不包括后面100行

[ tail ]
取出后几行数据
语法:

tail [ -n number ] 文件
# -f 持续刷新, ctrl+f终止

示例:

tail /etc/man_db.conf
tail -n 20 /etc/man_db.conf
tail -n +100 /etc/man_db.conf # 列出100行以后的数据

非纯文本文件: od


[ od ]
语法:

od -t [TYPE] 文件

选项:
-t 参数

  • a : 利用默认的字符来输出
  • c : 使用ASCII字符输出
  • d[size] : 十进制输出. 每个整数占size Bytes
  • f[size] : 浮点数值输出
  • o[size]:八进制输出
  • x[size] : 16进制输出

示例:

od -t -oCc /etc/issue

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


文件的时间参数:

  • 修改时间(mtime) : 文件内容修改
  • 状态时间(ctime) : 状态修改
  • 读取时间(atime) : 文件的内容被读取时

示例:

ll --time=atime /etc/man_db.conf
ll --time=ctime /etc/man_db.conf

语法:

touch [-acdmt] 文件
# -a : 自定义access time
# -c : 仅修改文件的时间, 文件不存在则创建
# -d : 自定义日期 --date="日期"
# -m : 仅修改mtime
# -t : 接收自定义时间[YYYYMMDDhhmm]

示例:

touch -d "2 days ago" file
touch -t  202101200303 file

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


文件默认权限 : umask

文件的默认权限 : -rw-rw-rw-
目录的默认权限: drwxrwxrwx

文件实际的权限 = 文件的默认权限 - umask

查看umask

[root@kuaicdn tmp]# umask
0022

修改umask

[root@kuaicdn tmp]# umask 002
[root@kuaicdn tmp]# umask
0002

示例:

  1. 查看新建立的文件与目录的默认权限

    [root@kuaicdn tmp]# touch test1
    [root@kuaicdn tmp]# mkdir test2
    [root@kuaicdn tmp]# ll test1; ll -d test2
    -rw-r--r-- 1 root root 0 10月 27 19:18 test1
    drwxr-xr-x 2 root root 6 10月 27 19:18 test2
    
  2. umask用途: 课题制作, 多个用户可同时编写该文件, 修改umask即可.

文件隐藏属性


文件隐藏属性操作与chattr命令有关, 完整的chattr命令只在ext2, ext3, ext4的Linux传统文件系统上面生效.

[ chattr ]
配置文件隐藏属性
语法:

chattr [+-=][ASacdistu] 文件或目录名称
# 选项
# + 增加一个参数
# - 删除一个参数
# = 设置参数
# S 一般文件是非同步写入磁盘的, 加上S会同步写入磁盘
# a 设置a后 改文件只能增加数据, 不能删除或修改数据, 只有root可以设置
# i 文件不能进行任何操作, 只能查看

示例:

[root@kuaicdn tmp]# touch attrtest
[root@kuaicdn tmp]# chattr +i attrtest
[root@kuaicdn tmp]# rm -f attrtest
rm: 无法删除"attrtest": 不允许的操作

[ lsattr ]
查看文件属性
语法:

lsattr [-adR] 文件或目录

示例:

[root@kuaicdn tmp]# lsattr attrtest
----i----------- attrtest

文件特殊权限: SUID SGID SBIT


先查看两个文件/tmp和/usr/bin/passwd属性

[root@kuaicdn tmp]# ll -d /tmp; ll /usr/bin/passwd
drwxrwxrwt. 19 root root 4096 10月 27 19:25 /tmp
-rwsr-xr-x. 1 root root 27856 4月   1 2020 /usr/bin/passwd

其中的[ s ]和[ t ]权限就是文件的特殊权限.

SUID
当[ s ]位于文件拥有者上面就称为SUID权限.
SUID功能:

  • SUID权限仅对二进制程序有效
  • 执行者对于该程序需要具有x的可执行权限
  • 本权限仅在执行该程序的过程中有效
  • 执行者将具有该程序拥有者的权限

说明 : 就把用户修改密码作为说明, 用户的密码保存在/etc/passwd文件中, 该文件只有root用户才可修改; 用户修改密码时需要执行passwd命令, 此时用户本来应该无法修改/etc/passwd文件, 因为用户具有passwd的x权限,所以用户可以暂时以root身份执行该程序修改/etc/passwd文件.

SGID
当[ s ]位于文件用户组上面称为SGID权限. SGID可以作用域文件或目录上.

SGID作用于文件:

  • SGID仅对二进制程序有用
  • 程序执行者对该程序需要x的权限
  • 执行者执行时暂时获取用户组的权限

SGID作用于目录:

  • 用于对该目录具有[ rx ]权限可以进入该目录
  • 执行者在该目录下的有效用户组变为该目录的用户组
  • 用途 : 用户在该目录下具有w权限时新建立的文件的用户组与目录的用户组相同.

SBIT
[ t ], 该权限只针对目录有效.

  • 当用户对该目录具有[ wx ]权限
  • 用户在该目录下建立的文件或目录仅有自己与root才有权力删除文件

SUID/SGID/SBIT权限设置
使用chmod可以修改文件或目录权限
SUID : 4 u+s
SGID : 2 g+s
SBIT : 1 o+t
示例:

chmod 4755 1.txt

观察文件类型: file


观察文件基本信息使用file命令
示例:

[root@kuaicdn tmp]# file /usr/bin/passwd 
/usr/bin/passwd: setuid ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=dee1b9ab6618c6bfb84a14f85ba258c742cf4aec, stripped

命令与文件的查找


脚本文件的查找


查找借助与which和type命令

which
查找可执行文件, 通过PATH环境变量所规范的路径查找执行文件的文件名.
语法:

which [-a] command

示例:

[root@kuaicdn tmp]# which ifconfig
/usr/sbin/ifconfig
[root@kuaicdn tmp]# which which
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
    /usr/bin/alias
    /usr/bin/which

文件的查找


  • find : 不是很常用, 速度比较慢但比较全
  • whereis : 在系统特定目录下进行查找
  • locate : 利用数据库查找文件名

whereis
在特定目录下查找文件
语法:

whereis [-bmsu] 文件或目录名
# 选项或参数
# m : 只找在说明文件manual路径下的文件

示例:

[root@kuaicdn tmp]# whereis ifconfig
ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
您在 /var/spool/mail/root 中有新邮件
[root@kuaicdn tmp]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz
[root@kuaicdn tmp]# whereis -m passwd
passwd: /usr/share/man/man1/passwd.1.gz

[root@kuaicdn tmp]# whereis -l
# 查找的目录
bin: /usr/bin
bin: /usr/sbin
bin: /usr/lib
bin: /usr/lib64
bin: /etc
bin: /usr/etc
bin: /usr/games
bin: /usr/local/bin
bin: /usr/local/sbin
bin: /usr/local/etc
bin: /usr/local/lib
bin: /usr/local/games
bin: /usr/include
bin: /usr/local
bin: /usr/libexec
bin: /usr/share
bin: /opt/containerd/bin

locate
安装:

yum install mlocate -y

更新数据库:

updatedb
# 根据/etc/updatedb.conf的设置查找系统硬盘内的文件并更新/var/lib/mlocate/内的数据库文件

根据/var/lib/mlocate/内的数据库记录, 找出用户输入关键词的文件名

语法:

locate [-ir] keyword
# 选项与参数
# -l num : 仅输出num行
# -S : 输出locate使用的数据库信息

示例:

[root@kuaicdn tmp]# locate -l 5 passwd
/data/docker-root/overlay2/18e286623933fd7353659585ddfd65f9b2c0e1e759d9888a733ae65adb411ecb/diff/etc/passwd
/data/docker-root/overlay2/18e286623933fd7353659585ddfd65f9b2c0e1e759d9888a733ae65adb411ecb/diff/etc/passwd-
/data/docker-root/overlay2/18e286623933fd7353659585ddfd65f9b2c0e1e759d9888a733ae65adb411ecb/diff/etc/cron.daily/passwd
/data/docker-root/overlay2/18e286623933fd7353659585ddfd65f9b2c0e1e759d9888a733ae65adb411ecb/diff/etc/pam.d/chpasswd
/data/docker-root/overlay2/18e286623933fd7353659585ddfd65f9b2c0e1e759d9888a733ae65adb411ecb/diff/etc/pam.d/passwd
[root@kuaicdn tmp]# loccate -S
-bash: loccate: 未找到命令
[root@kuaicdn tmp]# locate -S
数据库 /var/lib/mlocate/mlocate.db:
    41,680 文件夹
    291,885 文件
    34,764,680 文件名中的字节数
    9,810,575 字节用于存储数据库

find
语法:

find [PATH] [option] [action]
# 选项与参数
1. 与时间相关选项 -atime -mtime -ctime
    -mtime n : n天之前的一天之内被修改过内容的文件
  -mtime +n : 列出在n天之前,不包括n天本身被修改过内容的文件
  -mtime -n : n天之内(包含n天本身)被修改过内容的文件
  -newer file : 列出比file新的文件
2. 与使用者或用户组名称相关的参数:
    -uid n : n为数字,用户的uid
  -gid n
  -user name
  -group name
  -nouser : 查找文件的拥有者不在/etc/passwd中
  -nogroup

3. 与文件权限机名称相关的参数:
    -name filename : 查找文件名称
  -size [+-] SIZE : 查找比文件还要大或者小的文件, c代表Bytes, k代表1024Bytes
  -type TYPE
  -perm mode : 权限刚好等于mode
  -perm -mode : 权限要包括mode
  -perm /mode : 查找文件权限包含任一mode权限的文件

4. 额外可进行的操作:
    -exec command : 执行command命令
  -print : 将结果打印到屏幕上, 默认

时间标识:
image.png

示例:

[root@kuaicdn tmp]# find / -mtime 0 | wc -l
find: ‘/proc/14204/task/14204/fd/5’: 没有那个文件或目录
find: ‘/proc/14204/task/14204/fdinfo/5’: 没有那个文件或目录
find: ‘/proc/14204/fd/6’: 没有那个文件或目录
find: ‘/proc/14204/fdinfo/6’: 没有那个文件或目录
4191
[root@kuaicdn tmp]# find /etc -newer /etc/passwd | wc -l
95

[root@kuaicdn tmp]# find /home -user root
/home
[root@kuaicdn tmp]# find / -nouser | wc -l
find: ‘/proc/14710/task/14710/fd/5’: 没有那个文件或目录
find: ‘/proc/14710/task/14710/fdinfo/5’: 没有那个文件或目录
find: ‘/proc/14710/fd/6’: 没有那个文件或目录
find: ‘/proc/14710/fdinfo/6’: 没有那个文件或目录
1369

[root@kuaicdn tmp]# find / -name passwd | wc -l
38
[root@kuaicdn tmp]# find /run -type s | wc -l
20
[root@kuaicdn tmp]# find / -perm /7000 | wc -l
find: ‘/proc/15754/task/15754/fd/5’: 没有那个文件或目录
find: ‘/proc/15754/task/15754/fdinfo/5’: 没有那个文件或目录
find: ‘/proc/15754/fd/6’: 没有那个文件或目录
find: ‘/proc/15754/fdinfo/6’: 没有那个文件或目录
246

[root@kuaicdn tmp]# find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \;
# 其中-exec \;为固定格式, {}表示查找到的内容
-r-xr-sr-x. 1 root tty 15344 6月  10 2014 /usr/bin/wall
-rws--x--x. 1 root root 23968 2月   3 2021 /usr/bin/chfn
-rws--x--x. 1 root root 23880 2月   3 2021 /usr/bin/chsh
-rwsr-xr-x. 1 root root 73888 8月   9 2019 /usr/bin/chage
-rwsr-xr-x. 1 root root 78408 8月   9 2019 /usr/bin/gpasswd
-rwsr-xr-x. 1 root root 41936 8月   9 2019 /usr/bin/newgrp
-rwsr-xr-x. 1 root root 44264 2月   3 2021 /usr/bin/mount
-rwsr-xr-x. 1 root root 32128 2月   3 2021 /usr/bin/su
---s--x--x. 1 root root 147336 1月  27 2021 /usr/bin/sudo
-rwsr-xr-x. 1 root root 31984 2月   3 2021 /usr/bin/umount

权限与命令间的关系


  1. 用户进入某目录成为可工作目录的基本权限是什么?

可使用的命令 : cd等变换工作目录的命令;
目录所需权限 : 用户对这个目录至少需要具有x的权限;
额外需求: 用户想要执行ls需要r权限.

  1. 用户在目录读取文件的基本权限?

目录所需权限: x
文件所需权限 : r

  1. 用户修改一个文件的基本权限是什么?

目录所需权限 : x
文件所需权限 : rw

  1. 用户建立文件的基本权限?

目录: wx

  1. 用户进入目录执行目录下某个命令的基本权限?

目录: x
文件: x

重点


  • touch的目的在修改文件的时间参数, 但也可以用来建立空文件
  • 一个文件记录的时间参数有三种, 分别是读取时间(atimem), 状态时间(ctime), 修改时间(mtime). ls默认显示的是mtime.
  • 除了传统的rwx权限之外, 在ext2, ext3, ext4, xfs文件系统中, 还可以使用chattr与lsattr设置及观察隐藏属性, 常见的有只能新增数据的+a与完全不能修改文件的+i属性.
  • 新建文件/目录时, 新文件的默认权限使用umask规范, 默认目录的完全权限为drwxrwxrwx, 文件则为-rw-rw-rw-
  • 文件具有SUID的特殊权限时, 代表用户执行二进制程序时用户会暂时具有程序拥有者的权限.
  • 目录具有SGID的特殊权限时, 代表用户在这个目录下面新建的文件的用户组都会与该目录的组名相同.
  • 目录具有SBIT的特殊权限时, 代表用户在该目录下用户建立的文件只有自己与root能删除.
  • 观察文件的类型可以使用file命令查看.
  • 查找命令的完整文件名可用which或type, 这两个命令都是通过PATH变量来查找文件名.
  • 查找文件的完整文件名可以使用whereis找特定目录或locate到数据库去查找,而不实际查找文件系统.
  • 利用find加入选项直接查询文件系统.