linux文件与目录管理
1.对目录的代表:
.代表此层目录
..代表上层目录
-代表一个工作目录
~代表当前用户身份,也就是当前登录的用户的默认主文件夹
~account代表 account这个用户的主文件夹
2.目录的操作
cd:切换目录
pwd:显示当前目录 - print working directory,连接文件(目录),显示的是当前连接文件目录,如果pwd -P 显示的是连接文件连接到的文件目录。
mkdir:新建一个目录 mkdir -p /www/ddd/eee ,如果ddd不存在,那么新建eee的时候会报错:cannot create directory,加上参数p就不会报错了。
rmdir:删除一个空的目录,如果目录非空,就会报错,如果多个目录嵌套,而且为空,那么rmdir -p 一次清空所有空目录。
3
切换目录 cd - change directory的缩写
目录需要x的可执行权限
4
执行文件路径的变量$PATH
显示变量值 echo $PATH
注意:文件路径变量,是和用户对应的,不同的用户对应的$PATH变量的值是不同的。
可以通过su切换用户试试。
如果一个命令在PATH中存在2个,那么先执行优先查到的那个,所以会有一定的不准确性,使用绝对路径执行是最准确的。
例子;添加$PATH(把/www添加到$PATH中):
PATH="$PATH":/www
5
查看文件和目录:ls
5.1参数 :
-a:列出全部文件,包括隐藏文件(开头为.的文件)
-d:仅列出目录,不包含目录内的文件数据
-l:列出长数据串,包含文件的属性和权限等数据。
5.2
ls --color
5.3显示全名
ls --full-name 目录名称
6
目录文件的操作:复制,删除,移动(cp,rm,mv)
6.1
cp 源文件 目标文件
-a 相当于pdr三个参数的组合,作用:复制连接文件属性而非文件本身,复制文件连同属性一起复制过去,而非使用默认属性(备份常用),递归持续复制。
-f 强制复制
-u 目标文件和源文件有差异后才复制。
把/www 复制到当前目录
cp /www .
默认情况下,cp的源文件和目标文件的权限是不同的,目标文件的所有者通常会使命令操作者本身,
因此在复制的时候,对于一些特殊权限文件,例如密码文件和一些特殊配置文件,一定要加上-a
6.2
rm
-f force
-r 递归
-i 互动删除
对于-开头的文件,譬如 rm -aaa-,会报错,系统会认为这是一个错误参数,正确方法:rm ./-aaa-
6.3
mv - 移动文件与目录,或者更名
mv 源文件 目标文件
-f 强制
-i 若目标文件存在,就会询问是否覆盖
-u 若目标文件存在,而且source比较新,才会更新。
7 取得路径的文件名与目录名称
取得文件名:basename /www/etc =>etc
取得目录名:dirname /www/etc =>/www
8 文件内容检阅
最常使用的显示文件内容的目录cat more less
cat:由第一行开始显示文件内容
tac:由最后一行开始显示文件内容
nl:显示的时候输出行号
more:一页一页的显示文件内容
less:与more类似,但是比more更好的是,它可以向前翻译
head:只看头几行
tail:只看结尾几行
od:以二进制的方式读取文件内容
9 修改文件时间或创建新文件 touch
文件的三个参数:
modification time(mtime)当文件的内容修改了就会更新这个时间,内容是表示这个文件的内容数据,而不是文件的属性或权限
status time (ctime)当文件的权限和属性更改后就会更新这个时间,也就是文件的状态更改时间
access time (atime)当这个文件的内容被取用时,就会更新这个时间。
在ls的时候,显示的默认为mtime
ls -l --time=atime /etc/man.config
ls -l 的缩写命令 ll
多个文件显示可以:ll ba; ll bb; ll cc;
--------------
设计到文件的移动等操作:1.操作文件 2.操作文件所有者, 3设置权限,4设置隐藏权限
10 文件和目录的默认权限和隐藏权限
10.1文件的默认权限umask
umask就是 当前用户在新建文件或目录时的权限默认值。
得知umask
#umask
0022
#umask -S
u=rwx,g=rx,o=rx
umask是默认值需要减去的权限,r,w,x 分别为4,2,1,也就是说输入2就是拿掉写的权限,如果输入4就是拿掉读的权限,输入1就是拿掉执行的权限,
用户创建文件默认没有可执行的权限,也就是666 -rw-rw-rw-
新建文件的默认是777 drwxrwxrwx
如果umask的默认值为022,那么
新建文件时:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r-- 也就是644
新建目录时:(-rwxrwxrwx)- (-----w--w-) ==> -rwxr-xr-x 也就是 755
直接相减是不行的 譬如666 - 003 =663 ,实际是662,因为一开始x的权限已经去掉了,这里有一个方法快速计算,结果值如果是奇数,那么减一即可,因为4,2,1只有执行是奇数
所以这个是多余的,直接去掉即可。
11
文件隐藏属性 chattr lsattr
设置文件的隐藏属性chattr
chattr 文件或目录名称
-a 设置a后,这个文件只能增加数据,不能删除和修改,只有root才能设置这个属性,一般用来log日志文件
-i 设置i后,这个文件不能一个文件不能删除,改名设置连接也无法写入或添加数据,对系统安全有很大帮助,只有root才能设置这个属性
-d 设置这个属性后,当程序dump时可以不被执行
-s 设置这个属性后,如果这个文件删除,就完全从磁盘空间中删除
-u 这个和s相反,如果删除后,还是可以删除的
-A 设置这个属性后,若访问这个文件和目录,他的访问时间atime不会修改,可以避免I/O较慢的机器过度访问磁盘,对速度较慢的计算机有帮助,
-S 一般文件都是一步写入磁盘的,如果架上S这个属性时,进行的任何对文件的修改,都会同步到磁盘中
-c设置属性设置后,文件都会先压缩后存储,读取的时候都会自动解压缩
加上i 属性
chattr +i attrtest
取消i属性
chattr -i attrtest
查看属性
lsattr attrtest
12
文件的特殊权限:SUID,SGID,SBIT
SetUID:SUID
当文件的所有者的x位置为s的时候,此时就成为Set UID,简称SUID的特殊权限,SUID的权限对于一个文件的特殊功能是:
SUID仅对二进制文件有效,(binary file)
执行者对该文件具有x的权限
执行者仅在执行该程序的过程中有效
执行者将具有程序所有者的权限(owner)
譬如:root新建的二进制文件权限为:-rwsr-xr-x ,那么其他用户在执行这个二进制文件时具有x的权限,而且执行这个文件的时候相当于owner为root
SetGID:SGID
和SetUID差不多,获取的是用户组的身份。
SBIT - Sticky Bit 只针对目录有效,SBIT对目录的作用是:
当加上SBIT属性后,在该目录下的文件,只有文件所有人对文件或目录进行删除,重命名,移动,而无法操作其他人的文件。
SUID/SGID/SBIT的权限设置:
SUID 4
SGID 2
SBIT 1
13
查看文件类型
file 例如查看文件属于ASCII 或者是data文件,或者是binary,且其中有没有使用到动态数据库等信息,可以用file这个命令查看
file ~/.bashrc
结果:/root/.bashrc:ASCII text 告诉我们是ASCII的纯文本文件
file /usr/bin/passwd
file /var/lib/mlocate
通过这个命令可以判断文件是那种类型。
14
命令与文件的查询
14.1:脚本文件名的查询
which 寻找执行文件
-a 将所有由PATH目录中可以找到的命令均列出,而不止第一个找到的命令名称。
有一些命令是找不到的,譬如bash内置的命令cd等,这些命令不需要写到path中,因此,用which是找不到的
14.2
文件名的查找 whereis 寻找特定文件
-b 只找二进制的文件
-m 只找在说明文件manual路径下的文件
-s只找source源文件
-u查找不在上述三个选项当中的其他特殊文件
whereis和locate都是查找命令,
locate
-i 忽略大小写的差异
-r 后面可接正则表达式的显式方式。
locate寻找的数据是由以创建的数据库 /var/lib/mlocate里面的数据所查找到的,所以速度快,但是存在延迟
手动更新数据库的命令updatedb,updatedb这个命令会读取/etc/updatedb.conf这个配置文件的配置,再去硬盘进行查找文件名的操作,然后更新整个数据库文件,
14.3
find
1.与时间有关的参数:共有 -atime,-ctime,-mtime下面以-mtime说明, find / -mtime 0 那个0是重点,也就是现在到24小时之前的时间
-mtime n 为数字,代表在N天之前的一天之内被更改过的文件
-mtime +n为n天之前被更改过的文件
-mtime -n为n天之内被修改的的文件
2.与用户和用户组有关的参数, -uid n :n为参数,这个数字为账户的id,即UID,这个uid记录在/etc/passwd里面与账号名称对应的数字,
-gid n n为数字,这个n是用户组名的id,即GID,这个GID记录在/etc/group中,
-user name:name为账户名称
-group name:name为用户组名,
-nouser 寻找文件的所有者不存在于 /etc/passwd的人
-nogroup寻找文件的所有用户组
3.与文件权限及名称有关的参数
-name 查找文件名为filename文件
-size [+-]查找比size大(+)或小(-)的文件,这个size的规格有c:代表byte,k代表kb
-type TYPE 查找文件类型为TYPE的,类型主要有:一般正规文件(f),设备文件(b,c),目录(d),连接文件(l),socket(s),以及FIFO(p)属性
-perm mode查找文件权限刚好等于mode的文件,这个mode为类似chmod的属性值
-perm -mode查找文件权限“必须要全部包含mode的权限”的文件也就是值要比这个大
-perm +mode查找文件权限“包含任一mode权限文件”
4.其他可以进行的操作:
-exec command
-print 将结果打印到屏幕上,这个操作时默认操作。
findde 特殊功能就是可以做额外的事情,
例子:
find / -perm +7000 -exec ls -l {}\;
解释:{}代表由find找到的内容,find的额外命令的开始(-exec)到“\;”结束, 因为;在bash是有特殊含义的,所有用\转义。
1.对目录的代表:
.代表此层目录
..代表上层目录
-代表一个工作目录
~代表当前用户身份,也就是当前登录的用户的默认主文件夹
~account代表 account这个用户的主文件夹
2.目录的操作
cd:切换目录
pwd:显示当前目录 - print working directory,连接文件(目录),显示的是当前连接文件目录,如果pwd -P 显示的是连接文件连接到的文件目录。
mkdir:新建一个目录 mkdir -p /www/ddd/eee ,如果ddd不存在,那么新建eee的时候会报错:cannot create directory,加上参数p就不会报错了。
rmdir:删除一个空的目录,如果目录非空,就会报错,如果多个目录嵌套,而且为空,那么rmdir -p 一次清空所有空目录。
3
切换目录 cd - change directory的缩写
目录需要x的可执行权限
4
执行文件路径的变量$PATH
显示变量值 echo $PATH
注意:文件路径变量,是和用户对应的,不同的用户对应的$PATH变量的值是不同的。
可以通过su切换用户试试。
如果一个命令在PATH中存在2个,那么先执行优先查到的那个,所以会有一定的不准确性,使用绝对路径执行是最准确的。
例子;添加$PATH(把/www添加到$PATH中):
PATH="$PATH":/www
5
查看文件和目录:ls
5.1参数 :
-a:列出全部文件,包括隐藏文件(开头为.的文件)
-d:仅列出目录,不包含目录内的文件数据
-l:列出长数据串,包含文件的属性和权限等数据。
5.2
ls --color
5.3显示全名
ls --full-name 目录名称
6
目录文件的操作:复制,删除,移动(cp,rm,mv)
6.1
cp 源文件 目标文件
-a 相当于pdr三个参数的组合,作用:复制连接文件属性而非文件本身,复制文件连同属性一起复制过去,而非使用默认属性(备份常用),递归持续复制。
-f 强制复制
-u 目标文件和源文件有差异后才复制。
把/www 复制到当前目录
cp /www .
默认情况下,cp的源文件和目标文件的权限是不同的,目标文件的所有者通常会使命令操作者本身,
因此在复制的时候,对于一些特殊权限文件,例如密码文件和一些特殊配置文件,一定要加上-a
6.2
rm
-f force
-r 递归
-i 互动删除
对于-开头的文件,譬如 rm -aaa-,会报错,系统会认为这是一个错误参数,正确方法:rm ./-aaa-
6.3
mv - 移动文件与目录,或者更名
mv 源文件 目标文件
-f 强制
-i 若目标文件存在,就会询问是否覆盖
-u 若目标文件存在,而且source比较新,才会更新。
7 取得路径的文件名与目录名称
取得文件名:basename /www/etc =>etc
取得目录名:dirname /www/etc =>/www
8 文件内容检阅
最常使用的显示文件内容的目录cat more less
cat:由第一行开始显示文件内容
tac:由最后一行开始显示文件内容
nl:显示的时候输出行号
more:一页一页的显示文件内容
less:与more类似,但是比more更好的是,它可以向前翻译
head:只看头几行
tail:只看结尾几行
od:以二进制的方式读取文件内容
9 修改文件时间或创建新文件 touch
文件的三个参数:
modification time(mtime)当文件的内容修改了就会更新这个时间,内容是表示这个文件的内容数据,而不是文件的属性或权限
status time (ctime)当文件的权限和属性更改后就会更新这个时间,也就是文件的状态更改时间
access time (atime)当这个文件的内容被取用时,就会更新这个时间。
在ls的时候,显示的默认为mtime
ls -l --time=atime /etc/man.config
ls -l 的缩写命令 ll
多个文件显示可以:ll ba; ll bb; ll cc;
--------------
设计到文件的移动等操作:1.操作文件 2.操作文件所有者, 3设置权限,4设置隐藏权限
10 文件和目录的默认权限和隐藏权限
10.1文件的默认权限umask
umask就是 当前用户在新建文件或目录时的权限默认值。
得知umask
#umask
0022
#umask -S
u=rwx,g=rx,o=rx
umask是默认值需要减去的权限,r,w,x 分别为4,2,1,也就是说输入2就是拿掉写的权限,如果输入4就是拿掉读的权限,输入1就是拿掉执行的权限,
用户创建文件默认没有可执行的权限,也就是666 -rw-rw-rw-
新建文件的默认是777 drwxrwxrwx
如果umask的默认值为022,那么
新建文件时:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r-- 也就是644
新建目录时:(-rwxrwxrwx)- (-----w--w-) ==> -rwxr-xr-x 也就是 755
直接相减是不行的 譬如666 - 003 =663 ,实际是662,因为一开始x的权限已经去掉了,这里有一个方法快速计算,结果值如果是奇数,那么减一即可,因为4,2,1只有执行是奇数
所以这个是多余的,直接去掉即可。
11
文件隐藏属性 chattr lsattr
设置文件的隐藏属性chattr
chattr 文件或目录名称
-a 设置a后,这个文件只能增加数据,不能删除和修改,只有root才能设置这个属性,一般用来log日志文件
-i 设置i后,这个文件不能一个文件不能删除,改名设置连接也无法写入或添加数据,对系统安全有很大帮助,只有root才能设置这个属性
-d 设置这个属性后,当程序dump时可以不被执行
-s 设置这个属性后,如果这个文件删除,就完全从磁盘空间中删除
-u 这个和s相反,如果删除后,还是可以删除的
-A 设置这个属性后,若访问这个文件和目录,他的访问时间atime不会修改,可以避免I/O较慢的机器过度访问磁盘,对速度较慢的计算机有帮助,
-S 一般文件都是一步写入磁盘的,如果架上S这个属性时,进行的任何对文件的修改,都会同步到磁盘中
-c设置属性设置后,文件都会先压缩后存储,读取的时候都会自动解压缩
加上i 属性
chattr +i attrtest
取消i属性
chattr -i attrtest
查看属性
lsattr attrtest
12
文件的特殊权限:SUID,SGID,SBIT
SetUID:SUID
当文件的所有者的x位置为s的时候,此时就成为Set UID,简称SUID的特殊权限,SUID的权限对于一个文件的特殊功能是:
SUID仅对二进制文件有效,(binary file)
执行者对该文件具有x的权限
执行者仅在执行该程序的过程中有效
执行者将具有程序所有者的权限(owner)
譬如:root新建的二进制文件权限为:-rwsr-xr-x ,那么其他用户在执行这个二进制文件时具有x的权限,而且执行这个文件的时候相当于owner为root
SetGID:SGID
和SetUID差不多,获取的是用户组的身份。
SBIT - Sticky Bit 只针对目录有效,SBIT对目录的作用是:
当加上SBIT属性后,在该目录下的文件,只有文件所有人对文件或目录进行删除,重命名,移动,而无法操作其他人的文件。
SUID/SGID/SBIT的权限设置:
SUID 4
SGID 2
SBIT 1
13
查看文件类型
file 例如查看文件属于ASCII 或者是data文件,或者是binary,且其中有没有使用到动态数据库等信息,可以用file这个命令查看
file ~/.bashrc
结果:/root/.bashrc:ASCII text 告诉我们是ASCII的纯文本文件
file /usr/bin/passwd
file /var/lib/mlocate
通过这个命令可以判断文件是那种类型。
14
命令与文件的查询
14.1:脚本文件名的查询
which 寻找执行文件
-a 将所有由PATH目录中可以找到的命令均列出,而不止第一个找到的命令名称。
有一些命令是找不到的,譬如bash内置的命令cd等,这些命令不需要写到path中,因此,用which是找不到的
14.2
文件名的查找 whereis 寻找特定文件
-b 只找二进制的文件
-m 只找在说明文件manual路径下的文件
-s只找source源文件
-u查找不在上述三个选项当中的其他特殊文件
whereis和locate都是查找命令,
locate
-i 忽略大小写的差异
-r 后面可接正则表达式的显式方式。
locate寻找的数据是由以创建的数据库 /var/lib/mlocate里面的数据所查找到的,所以速度快,但是存在延迟
手动更新数据库的命令updatedb,updatedb这个命令会读取/etc/updatedb.conf这个配置文件的配置,再去硬盘进行查找文件名的操作,然后更新整个数据库文件,
14.3
find
1.与时间有关的参数:共有 -atime,-ctime,-mtime下面以-mtime说明, find / -mtime 0 那个0是重点,也就是现在到24小时之前的时间
-mtime n 为数字,代表在N天之前的一天之内被更改过的文件
-mtime +n为n天之前被更改过的文件
-mtime -n为n天之内被修改的的文件
2.与用户和用户组有关的参数, -uid n :n为参数,这个数字为账户的id,即UID,这个uid记录在/etc/passwd里面与账号名称对应的数字,
-gid n n为数字,这个n是用户组名的id,即GID,这个GID记录在/etc/group中,
-user name:name为账户名称
-group name:name为用户组名,
-nouser 寻找文件的所有者不存在于 /etc/passwd的人
-nogroup寻找文件的所有用户组
3.与文件权限及名称有关的参数
-name 查找文件名为filename文件
-size [+-]查找比size大(+)或小(-)的文件,这个size的规格有c:代表byte,k代表kb
-type TYPE 查找文件类型为TYPE的,类型主要有:一般正规文件(f),设备文件(b,c),目录(d),连接文件(l),socket(s),以及FIFO(p)属性
-perm mode查找文件权限刚好等于mode的文件,这个mode为类似chmod的属性值
-perm -mode查找文件权限“必须要全部包含mode的权限”的文件也就是值要比这个大
-perm +mode查找文件权限“包含任一mode权限文件”
4.其他可以进行的操作:
-exec command
-print 将结果打印到屏幕上,这个操作时默认操作。
findde 特殊功能就是可以做额外的事情,
例子:
find / -perm +7000 -exec ls -l {}\;
解释:{}代表由find找到的内容,find的额外命令的开始(-exec)到“\;”结束, 因为;在bash是有特殊含义的,所有用\转义。