Linux文件与目录管理

一、目录与路径

1.1、目录的相关操作
特殊目录

.	代表此层目录
..	代表上一层目录
-	代表前一个工作目录
~	代表目前使用者身份所在的家目录

常见的处理目录的命令

cd		切换目录
pwd		显示当前目录
		-P:显示出真正的路径,而非使用链接(link)路径
mkdir	建立一个新目录
		-m:设置目录的权限。直接设置,不使用默认权限(umask)
		-p: 直接将所需的目录(包含上传目录)递归创建
rmdir	删除一个空目录
		-p:连同上层“空的”目录也一起删除

1.2、文件与目录管理
文件与目录的查看:ls
ls -l 等同于ll

ls [-aAdhilnrRSt] [--color={
     never,auto,always}] [--full-time] 文件名或目录名称
-a:全部的文件,连同隐藏文件一起列出来(常用);
-A:全部的文件,连同隐藏文件,但不包括.与..这两个目录;
-d:仅列出目录本身,而不是列出目录内的文件数据(常用);
-h:将文件容量以人类较易读的方式(例如GB、KB等)列出来;
-i:列出inode号码;
-l:详细信息显示,包含文件的属性与权限等数据(常用);
-n:列出UID与GID而非使用者与用户组的名称;
-r:将排序结果反向输出,例如:原本文件名由小到大,反向则为由大到小;
-R:连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来;
-S:以文件容量大小排序,而不是用文件名排序;
-t:依时间排序,而不是用文件名
--full-time:以完整时间模式(包含年、月、日、时、分)输出

1.3、复制、删除与移动:cp、rm、mv

复制文件或目录

cp [-aipr] 源文件 目标文件
-a:相当于-dr --preserve=all的意思(常用),完全复制;
-i:若目标文件已经存在时,在覆盖时会先询问操作的进行(常用);
-p:连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用);
-r:递归复制,用于目录的复制操作(常用)

删除文件或目录
特殊文件名称,可以前加./进行删除。例如,rm ./-aaa-

rm [-fir] 文件或目录
-f:就是force的意思,忽略不存在的文件,不会出现警告信息;
-i:交互模式,在删除前会询问使用者是否操作;
-r:递归删除,最常用于目录的删除,这是非常危险的选项。

移动文件与目录,或重命名

mv [-fiu] source destination
mv [options] srouce1 source2 source3 ... directory
-f:force强制的意思, 如果目标文件已经存在,不会询问而直接覆盖;
-i:若目标文件已经存在时,就会询问是否覆盖;
-u:若目标文件已经存在,且source比较新,才会更新。

1.4、获取路径的文件名与目录名称

basename 	获取路径中的文件名
dirname		获取路径中的目录名

Linux文件与目录管理_第1张图片

二、文件内容查看

cat由第一行开始显示文件内容
tac从最后一行开始显示,可以看出tac是cat的倒着写
nl显示的时候,同时输出行号
more一页一页地显示文件内容
less与more类似,但是比more更好的是,它可以往前翻页
head只看前面几行
tail只看后面几行
od以二进制的方式读取文件内容

2.1、直接查看文件内容
直接查看一个文件的内容可以使用cat/tac/nl 这几个命令

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

行号打印

nl [-bnw] 文件
-b:指定行号指定的方式,主要有两种
	-b a:表示不论是否为空行,也同样列出行号
	-b t:如果有空行,空的那一行不要列出行号(默认)
-n:列出行号表示的方法,主要有三种:
	-n	ln:行号在屏幕的最左方显示
	-n	rn:行号在自己栏位的最右方显示,且不加0
	-n	rz:行号在自己栏位的最右方显示,且加0
-w:行号栏位的占用的字符数

翻页查看

more(一页一页翻动)
常用的快捷键:
空格键(space):代表向下翻一页
Enter:代表向下翻一行
/字符串:代表在这个显示的内容中,向下查找字符串这个关键词
:f:立刻显示出文件名以及目前显示的行数
q: 代表立刻离开more,不再显示该文件内容
b或[ctrl]-b:代表往回翻页,不过这个操作只对文件有用,对管道无用
less(一页一页翻动)
空格键:向下翻动一页
[pagedown]:向下翻动一页
[pageup]:向上翻动一页
/字符串:向下查找字符串的功能
?字符串:向上查找字符串的功能
n:重复前一个查找(与/或?有关)
N:反向的重复前一个查找(与/或?有关)
g:前进到这个数据的第一行
G:前进到这个数据的最后一行去(注意大小写)
q:离开less这个程序

2.2、数据截取
head(取出前面几行)

head [-n number] 文件
-n:后面接数字,代表显示几行的意思

tail(取出后面几行)

tail [-n number] 文件
-n:后面接数字,代表显示几行的意思
-f:表示持续刷新显示后面所接文件中的内容,要等到按下[ctrl]-c才会结束

2.3、修改文件时间或创建新文件
修改时间(mtime)
当文件的【内容数据】变更时,就会更新这个时间,内容数据指的是文件的内容,而不是文件的属性或权限。

状态时间(ctime)
当文件的【状态(status)】改变时,就会更新这个时间。比如权限与属性改变时。

读取时间(atime)
当【该文件的内容被读取】时,就会更新这个读取时间。

touch [-am] 文件
-a:仅定义access time
-m:仅修改mtime

默认情况下,ls显示出来的是该文件的mtime,touch创建,默认三个时间(atime/ctime/mtime)都会更新为目前的时间。

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

3.1、文件默认权限:umask

文件默认权限:umask,umask的数字指的是该默认值需要减掉的权限。
文件默认权限:-rw-rw-rw-
目录默认权限:drwxrwxrwx

建立文件时:(-rw-rw-rw-) - (-----w–w-) => -rw-r–r--
建立目录时:(drwxrwxrwx) - (d----w–w-) ==> drwxr-xr-x

3.2、文件隐藏属性

配置文件隐藏属性
chattr 命令只能在etx2、etx3、etx4的Linux传统文件系统上面完整生效,其他的文件系统可能就无法完整的支持这个命令。

chattr [+-=] [ASacdistu] 文件或目录名称
选项与参数:
+:增加某一个特殊参数,其他原本存在参数则不动
-:删除某一个特殊参数,其他原本存在参数则不动
=:直接设置参数,且仅有后面接的参数
A:当设置了A这个属性时,若你在存取此文件(或目录)时,它的存取时间atime将不会被修改,可避免I/O较慢的机器过度的读写磁盘。(目前建议使用文件系统外挂参数处理这个项目)
S:一般文件时非同步写入磁盘的,如果加上S这个属性时,当你进行任何文件的修改,该修改会【同步】写入磁盘中。
a:当设置a之后,这个文件将只能增加数据,而不能删除也不能额修改数据,只有root才能设置这个属性。
c:这个属性设置之后,将会自动的将此文件【压缩】,在读取的时候将会自动解压缩;但在存储的时候,将会先进行压缩后在存储(对于大文件似乎蛮有用)。
d:当dump程序被执行的时候,设置d属性将可使该文件(或目录)不会被dump备份。
i:可以让一个文件【不能被删除、改名、设置链接也无法写入或新增数据】。对于系统安全性有相当大的助益,只有root能设置此属性。
s:当文件设置了s属性时,如该文件被删除,它将会被完全的从硬盘删除,所以如果误删,完全无法恢复
u:与s相反的,当使用u来配置文件时,如果该文件被删除了,则数据内容其实还存在硬盘中,可以使用来恢复该文件。
注意:
1、属性设置常见的是a与i的设置值,而且很多设置值必须要是root才能设置;
2、xfs文件系统仅支持AadiS而已

Linux文件与目录管理_第2张图片
显示文件隐藏属性

lsattr [-adR] 文件或目录
选项与参数
-a:将隐藏文件的属性也显示出来
-d:如果接的是目录,仅列出目录本身的属性而非目录内的文件名
-R:连同子目录的数据也一并列出来

在这里插入图片描述

3.3、文件特殊权限:SUID、SGID、SBIT

SUID的限制与功能
当s这个标志出现在文件拥有者的x权限上,被称为SUID特殊权限。

1、SUID权限仅对二进制程序(binary program)有效;
2、执行者对于该程序需要具有x的可执行权限;
3、本权限仅在执行该程序的过程中有效(run-time);
4、执行者将具有该程序拥有者(owner)的权限。

注意:SUID对于目录是无效的

在这里插入图片描述
SGID的功能
当s出现在用户组的x权限上,被称为SGID特殊权限。
与SUID不同的是,SGID可以针对文件或目录来设置

针对文件,有如下功能:
1、SGID对二进制程序有用;
2、程序执行者对于该程序来说,需具备x的权限;
3、执行者在执行的过程中将会获得该程序用户组的支持。

针对目录,有如下功能:
1、用户若对于此目录具有r与x的权限时,该用户能够进入此目录;
2、用户在此目录下的有效用户组将会变成该目录的用户组;
3、用途:若用户在此目录下具有w权限(可以新建文件),则用户所建立的新文件,该新文件的用户组与此目录的用户组相同

在这里插入图片描述
SBIT的功能
目前只针对目录有效,对于文件已经没有效果了。
当用户对于目录具有用户组或其他人的身份,并且拥有该目录的w的权限,这表示用户对该目录内任何人建立的目录或文件均可进行删除、更名、移动等权限。

对于目录的作用:
1、当用户对于此目录具有w、x权限,即具有写入的权限;
2、当用户在该目录建立文件或目录时,仅有自己与root才有权力删除该文件。

SUID/SGID/SBIT权限设置

SUID - 4
SGID - 2
SBIT - 1

使用数字增加权限
在这里插入图片描述
使用符号增加权限
在这里插入图片描述

3.4、观察文件类型:file

简单判断文件的格式,包括tar包使用的是哪一种压缩方式

[root@VM_0_8_centos tmp]# file ~/.bashrc 
/root/.bashrc: ASCII text  <== ASCII纯文本文件
[root@VM_0_8_centos 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]=471dad50eb96512f90dd9394adbd7513ae60f072, stripped
[root@VM_0_8_centos tmp]# file /var/lib/mlocate/mlocate.db 
/var/lib/mlocate/mlocate.db: data
[root@VM_0_8_centos tmp]# 

四、命令与文件的查找

4.1、脚本文件查找

which:查找可执行文件
这个命令是根据【PATH】这个环境变量所规范的路径,去查找执行文件的文件名。

which [-a] command
-a:将所有由PATH目录中可以找到的命令均列出,而不止第一个被找到的命令名称
[root@VM_0_8_centos tmp]# which ifconfig
/usr/sbin/ifconfig

[root@VM_0_8_centos tmp]# which which
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
	/usr/bin/alias
	/usr/bin/which
# alias是别名,输入which会等于后面接的那一串命令

[root@VM_0_8_centos tmp]# which history
/usr/bin/which: no history in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/python3/bin:/usr/local/mysql/bin:/root/bin)
# history是bash内的命令,而which默认是找PATH内所设置的目录。可以通过type命令查找到
[root@VM_0_8_centos tmp]# type history
history is a shell builtin

4.2、文件的查找

find不是很常用,除速度慢外,也影响硬盘性能。
一般都是先使用whereis或是locate来检查,如果真的找不到,才以find来查找。
whereis只找系统中某些特定目录下面的文件而已,locate则是利用数据库来查找文件名,因为没有实际查找硬盘内的文件系统状态,所以比较省时间。

whereis:由一些特定的目录中查找文件

whereis [-lbmsu] 文件或目录名
选项与参数:
-l:可以列出whereis会去查寻的几个主要目录;
-b:只找binary(二进制)格式的文件
-m:只找在说明文件manual路径下的文件;
-s:只找source源文件;
-u:查找不在上述三个项目当中的其他特殊文件。

示例

[root@VM_0_8_centos tmp]# whereis ifconfig
ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
[root@VM_0_8_centos tmp]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz
[root@VM_0_8_centos tmp]# whereis -m passwd
passwd: /usr/share/man/man1/passwd.1.gz
[root@VM_0_8_centos tmp]# whereis -b passwd
passwd: /usr/bin/passwd /etc/passwd
[root@VM_0_8_centos tmp]# whereis -s passwd
passwd:[root@VM_0_8_centos tmp]# whereis -u passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz

locate:数据库中查找文件名
updatedb:根据/etc/updatedb.conf的设置去查找系统硬盘内的文件,并更新/var/lib/mlocate内的数据库文件,更新时间较久会等待几分钟;
locate:依据/var/lib/mlocate内的数据库记录,找出用户所输入关键词的文件名。

注意:数据库文件信息每天自动更新一次,如果新建立的文件还没更新到数据库中,使用locate命令是找不到文件的。

locate [-iclSr] keyword

选项与参数:
-i:忽略大小写的差异;
-c:不输出文件名,仅计算找到的文件数量;
-l:仅输出几行的意思,例如输出五行则是 -l 5;
-S:输出locate所使用的数据库文件的相关信息,包括该数据库记录的文件/目录数量等;
-r:后面可接正则表达式的显示方式

示例

[root@VM_0_8_centos ~]# locate -l 5 passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/home/Python-3.6.9/Lib/test/keycert.passwd.pem
[root@VM_0_8_centos ~]# locate -S
Database /var/lib/mlocate/mlocate.db:
	11,998 directories
	98,131 files
	5,493,718 bytes in file names
	2,300,816 bytes used to store database
[root@VM_0_8_centos ~]# locate -c passwd
133

find:硬盘中查找文件

find [PATH] [option] [action]

选项与参数:
1、与时间相关的选项:共有-actime、-ctime、mtime
	-mtime n:n为数字,意义为在n天之前的【一天之内】被修改过内容的文件;
	-mtime +n:列出在n天之前(不含n天本身)被修改过内容的文件;
	-mtime -n:列出在n天之内(含n天本身)被修改过内容的文件;
	-newer file:file为一个存在的文件,列出比file还要新的文件。

示例:
1、查询24小时内有修改过内容(mtime)的文件列出
[root@VM_0_8_centos ~]# find / -mtime 0  <==  0代表目前的时间,从现在开始到24小时前
/sys/fs/ext4
/sys/fs/ext4/vda1

2、列出3天前那一天的24小时内文件内容被修改过的文件
[root@VM_0_8_centos ~]# find / -mtime 3
/usr/local/qcloud/YunJing/log/vul_scan.log.2021-05-04
/usr/local/qcloud/YunJing/log/ydservice.20210503.log

3、寻找/etc下面的文件,如果文件日期比/etc/passwd新就列出
[root@VM_0_8_centos ~]# find /etc -newer /etc/passwd
/etc
/etc/group
/etc/sysconfig

find相关的时间参数意义
Linux文件与目录管理_第3张图片
最右边为目前的时间,越往左边代表越早之前的时间轴:

  • +4代表大于等于5天前的文件:find /var -mtime +4
  • -4代表小于等于4天内的文件:find /var -mtime -4
  • 4代表4-5那一天的文件:find /var -mtime 4
2、与使用者或用户组名称有关的参数
	-uid n:n为数字,这个数字是使用者的账号ID,亦即UID,这个UID是记录在/etc/passwd文件中;
	-gid n:n为数字,这个数字是用户组名称的ID,亦即GID,这个GID记录在/etc/group文件中;
	-user name:name为使用者账号名称,例如cjw;
	-group name:name为用户组名称,例如users;
	-nouser:查找文件的拥有者不在/etc/passwd中;
	-nogroup:查找文件的拥有用户组不存在于/etc/group的文件;
当自行安装软件时,很可能该软件的属性当中并没有文件拥有者。

示例
1、查找/home下面属于mysql的文件
[root@VM_0_8_centos ~]# find /home -user mysql
/home/mysql/.bashrc
/home/mysql/.bash_logout

2、查找系统中不属于任何人的文件
[root@VM_0_8_centos ~]# find / -nouser
/home/Python-3.6.9
/home/Python-3.6.9/Parser
3、与文件权限及名称有关的参数
	-name filename:查找文件名称为filename的文件;
	-size [+-] SIZE:查找比SIZE还要大(+)或小(-)的文件。SIZE的规格:
					 c:代表Bytes,k:代表1024Bytes,查找比50kb还要大的文件:【-size +50k】
	-type Type:查找文件类型为Type的,类型主要有:f:一般正规文件,b,c:设备文件,d:目录,l:链接文件,s:Socket,p:FIFO
	-perm mode: 查找文件权限【刚好等于】mode的文件。mode的权限类似于chmod的属性值,例如-rwsr-xr-x的属性为4755
	-perm -mode:查找文件权限【必须要全部囊括mode的权限】的文件;
	-perm /mode:查找文件权限【包含任一mode的权限】的文件;


示例:
1、查找文件名为passwd这个文件
[root@VM_0_8_centos ~]# find / -name passwd
/etc/passwd
/usr/bin/passwd

2、查找文件名包含了passwd这个关键字的文件
[root@VM_0_8_centos ~]# find / -name "*passwd*"
/etc/passwd
/etc/security/opasswd
/etc/pam.d/passwd
/etc/passwd-

3、查找/run目录下,文件类型为socket的文件
[root@VM_0_8_centos ~]# find /run -type s
/run/lsm/ipc/simc
/run/lvm/lvmpolld.socket

4、查找文件当中含有SGID、SUID或SBIT属性的文件
[root@VM_0_8_centos ~]# find / -perm /7000
/usr/lib/polkit-1/polkit-agent-helper-1
/usr/bin/umount

5、查找/usr/bin、/usr/sbin这个两个目录下,具有SUID或SGID权限的文件
[root@VM_0_8_centos ~]# find /usr/bin /usr/sbin -perm /6000 
/usr/bin/pkexec
/usr/sbin/usernetctl
4、额外可进行的操作
	-exec command:command为其他命令,-exec后面可再接额外的命令【不支持命令别名】来处理查找到的结果;
	-print:将结果打印到屏幕上,这个操作是默认操作。

示例
1、查找/usr/bin、/usr/sbin这个两个目录下,具有SUID或SGID权限的文件,并使用ls -l命令列出查找到的文件详细信息
[root@VM_0_8_centos ~]# find /usr/bin /usr/sbin -perm /6000 -exec ls -l {} \;
-rwsr-xr-x 1 root root 23576 Sep 14  2019 /usr/bin/pkexec
-rwx--s--x. 1 root slocate 40520 Apr 11  2018 /usr/bin/locate
-rwsr-xr-x 1 root root 44264 Dec  3  2019 /usr/bin/mount
-rwsr-xr-x 1 root root 27856 Aug  9  2019 /usr/bin/passwd

2、查找系统中,大于1MB的文件
[root@VM_0_8_centos ~]# find / -size +1M   <== 大于1GB使用 +1G
/sys/devices/pci0000:00/0000:00:02.0/resource0_wc
/etc/selinux/targeted/policy/policy.31

示例1中的命令 {}以及; 还有-exec这个关键字的意义:

  • {}代表的是由find找到的内容;
  • -exec一直到 \;是关键词,代表find额外操作的开始(-exec)到结束( \; ),在这中间的就是find命令内的额外操作。本例中就是【ls -l {}】
  • [;]在bash环境下是有特殊意义的,因此利用反斜杠来转义。

鸟哥的Linux私房菜-基础学习篇(第四版)

你可能感兴趣的:(Linux,linux)