(四)Linux文件和目录
深入理解2
路径
- 相对路径
顾名思义,相对与本层路径的路径,使用../
回到上一层目录
- 绝对路径
路径从根目录写起
操作目录
1 | . 代表此层目录 |
每个目录下都有.
、..
这两个目录
根目录的..
就是它自己
处理目录的指令
cd(change directory)
pwd(Print working directory)
- 使用
pwd -p
可显示链接文件的完整目录
- 使用
mkdir(make directory)
-m创建目录时设定权限,默认权限与umask有关
如
mkdir -m 711 test
-p递归创建目录
如
mkdir -p 1/2/3/4
rmdir(remove directory)
- 仅删除空目录(empty directory)
-r
不管有没有文件和目录都删除,有点危险-p
递归删除,也要空目录才行
路径变量$PATH
使用的指令是可执行文件,例如ls
在/bin/ls,为什么在任何地方都可以执行这个指令呢?这就是环境变量PATH
的原因
查看一下PATH
1 | [root@study /]# echo $PATH |
由一堆目录组成,每个目录用:隔开
添加目录:
PATH="${PATH}:目录"
不同身份的PATH不同,指令也不同,例如root和普通用户
.
目录建议别加入PATH,防止被有心人执行恶意指令
文件和目录管理
ls
- 显示目录和文件,默认显示操作目录
- 常用
l
(显示权限)、a
(显示隐藏文件)、d
ll
表示ls -l
1 | -C 多列输出,纵向排序。 |
cp
cp [选项] 源文件 目标文件/目录
cp [选项] 目录 目标路径
- 复制时注意文件属性,比如备份注意
-a
,-p
,复制给其他用户时要注意文件权限- 用户若没有权限更改某些属性,使用-a也没用
- 使用
-l
创建硬链接(hard link),-s
创建符号链接(symbolic link),符号连接有->
符号 - 当文件更新才复制使用
-u
- 如果源文件两个以上,则最后一个一定要是目录
1 | -a, --archive |
rm
-f
(force),忽略不存在的文件,不警告-i
,删除有提示,防止删错-r
,递归删除,删除这个目录下的所有东西,不提示
我逛酷安时看到一老哥手机变砖求助,一小伙子正经的说在终端输入rm -rf /,最牛逼的是这老哥还真试了,然后emmm(笑哭)
- 要注意若文件名与指令重合,使用
./
mv
- 用于移动文件或者重命名
-f
,存在不会提示-i
,存在提示是否覆盖-u
,文件较新才会更新- 可以移动多个文件
mv t1 t2 t3 目录
改名字
1 | mv test1 test2 |
- 使用
rename
可以批量修改文件名
获取文件名和目录名
basename
dirname
显示文件内容
cat(concatenate)
- 将文件的内容连续打印在屏幕上
-A
可以显示一些特殊字符,比如TAB
是^I
,换行是$
-n
可以打印行号
tac
- 是cat的反序,意思就是从最后一行打印到第一行
nl
- 添加行号打印
-b a
不管是否有空行,都打印行号,-b t
不打印空行(默认值)-n ln
行号在最左边显示,-n rn
在右边显示行号,不补齐0,-n nz
补齐0(默认6位)-w
可以设置补齐位数
1 | [root@study ~]# nl -b a -n rz -w 4 /etc/issue |
more
1 | [root@study ~]# more /etc/man_db.conf |
- 可以一页一页的翻动,而不是像cat那样全部显示出来
space
:向下翻页enter
:向下翻一行/string
:搜索字符串,n向下搜索:f
:显示文件名和当前行数q
:离开moreb
或ctrl+b
:往回翻页,对文件有效,对管道无效
less
- 比more功能更多
space、PD
:向下翻页PU
:向上翻页/string
?string
n
N
g
:回到开头G
:结尾q
:离开
数据截取
head
- 显示前几行,默认10行
- -n num可以显示num行
- num是负数表示的意思是后面num行不显示
tail
- 显示后面几行
-n num
-n +num
表示文件会从num行后加载出来
-f
表示刷新显示这个文件,ctrl+c
停止
如何显示中间的5-6行?
1 head -n 6 file | tail -n 2
|
是一个管道指令,表示前面的信息交由后面的指令执行如何显示5-6行的行号?
1 cat -n file | head -n 6 | tail -n 2
非纯文本文件
od
od [-t TYPE]
TYPE
- a:named character, ignoring high-order bit,默认字符输出
- c:ASCII输出
- d[size]:利用十进制(
decimal
)输出数据,每个数据占size字节 - f[size]:利用浮点数值(
floating
)输出数据,每个数据占size字节 - o[size]:利用八进制(
octal
)输出数据,每个数据占size字节 - x[size]:利用十六进制(
hexadecimal
)输出数据,每个数据占size字节
size可以用整数或者大写字母
C
(sizeof(char)),S
(sizeof(shot)),I
(sizeof(int)),L
(sizeof(long))官方文献
If TYPE is f, SIZE may also be F for sizeof(float),
D for sizeof(double) or L for sizeof(long double).
实践在数据若没有到高四位时,使用
0011
填充,按1字节从低位向高位填充
1
2
3
4
5
6
7
8
9 例如
[root@study ~]# echo 0123 |od -t dCc
0000000 48 49 50 51 10
0 1 2 3 \n
0000005
[root@study ~]# echo 0123 | od -t dSc
0000000 12592 13106 10
0 1 2 3 \n
0000005
修改文件时间或创建新文件
三个时间参数
- modification time,mtime
- 修改时间
- 当文件的内容改动时就会更新这个时间
- status time,ctime
- 状态时间
- 文件的状态,也就是文件的属性、权限
- access time,atime
- 读取时间
- 文件被读取,这个时间就会被更新
1 | [root@study ~]# date;ll /etc/man_db.conf ;ll --time=atime /etc/man_db.conf ;ll --time=ctime /etc/man_db.conf |
touch
touch [-acdmt] 文件
-a
:自定义access time-c
:若没有这个文件则不建立新文件- -
d
:后面接自定义的时间,同–date=”日期或时间” -m
:修改modification time-t
:使用自定义时间,格式[YYYYMMDDhhmm]
一般用法:
- 创建空文件
- 修改问文件时间atime和mtime
默认权限umask
umask用来指定用户在创建文件的权限的默认值
两种方式查看umask
1 | [root@study ~]# umask |
- 文件属性默认666
1 | -rw-rw-rw- |
- 目录属性777
1 | drwxrwxrwx |
umask代表拿掉权限,只看后面3个数字
1 | 建立文件:(-rw-rw-rw-)-(-----w--w-)==>-rw--r--r-- |
设置umask
umask 002
文件隐藏属性
隐藏属性对于系统安全(Security)是很有帮助的
chattr配置隐藏属性
chattr [+-=][ASacdistu] file/dir
只能在ext2、ext3、ext4的Linux传统文件系统上完整生效
xfs只支持
AadiS
参数+
添加属性-
=
直接配置属性A
atime不能被修改S
一般是非同步写入磁盘,加上后,任何修改都会同步写入磁盘a
只能添加数据,不能删除和修改,root才能设置c
将文件压缩,读取会自动解压缩d
当dump程序执行时,可以不被dump备份i
可以让一个文件不能被删、改名、添加数据,roots
使文件可以被完全删除,无法恢复u
删除可以恢复
lsattr显示文件隐藏属性
lsattr [-adR]
-a
将隐藏文件的属性也显示出来-d
如果是目录,仅列出目录本身属性而非目录的文件名-R
连同子目录的数据也一并列出来
文件的特殊权限
Set UID
1 | [root@study tmp]# ll /usr/bin/passwd |
- SUID仅对二进制程序(binary program)有效
- 执行者需要对该程序有x权限
- 本权限在执行过程中有效
- 执行者将具有该程序的拥有者权限(owner)
需要注意的是SUID不能用在shell脚本和目录上
Set GID
1 | [root@study tmp]# ll /usr/bin/locate |
与SUID不同,SGID针对文件和目录
对于文件
- SGID对二进制程序有用
- 执行需要x权限
- 执行者在执行过程中会获得程序用户组的支持
对于目录
- 用户对该目录有r、x权限才能进入该目录
- 用户在目录下的有效用户组将会变成该目录的用户组
- 用途:若用户有w权限,则用户创建的新文件的用户组与该目录的用户组相同
Sticky Bit
1 | [root@study tmp]# ll -d /tmp/ |
SBIT只对目录有效
- 当用户具有wx权限
- 当用户建立文件或目录时,仅root和用户才有权利删除
权限的设置
数字
- SUID=4
- SGID=2
- SBIT=1
chmod 4755 file
即表示-rwsrw-rw-
符号
- SUID=u+s
- SGID=g+s
- SBIT=o+t
-rwSrwSrwT表示没有x权限,小写才有x权限
观察文件类型
使用file 文件名
可以简单的判断文件的格式
查找命令和文件
查找脚本文件
which [-a] command
- 会根据PATH变量区查,重点在于找出可执行文件
文件的查找
where
whereis [-bmsu] filename/dir
- 这个指令只会在特定的目录查找
- 使用
where -l
可以查看它查找的目录
locate/updatedb
locate [-iclSr] keyword
- 会查找有关键字的文件
- locate查找的数据是已建立的数据库/var/lib/mlocate
- 而这个数据库每天自动更新一次
- 使用updatedb可以根据/etc/updatedb.conf配置文件去更新数据库
find
- 功能强调,比较费磁盘资源,不得已不用
- 可以寻找某段时间参数的文件
- 查找某个人、某个群组的文件,还可以查找一些孤魂文件
- 支持通配符(如`-name “*keyword**”`,测试单双引号或无引号都行)
- 查找某类型的文件(普通f,设备bc,目录d。。)
- 文件大小范围查找,权限范围查找(包括特殊权限)
- 此外find特殊的就是支持额外的action
1 | [root@study /]# find / -perm /7000 -exec ls -l {} \; |
- 至于怎么操作,man吧
参考《鸟哥的Linux私房菜 基础学习篇》
(四)Linux文件和目录