Linux的文件与目录管理
1.目录与路径
1.1.绝对路径与相对路径
在目录的切换之前,需求了解绝对路径与相对路径的区别。这个概念还是比较好懂的。举个例子,假设我当前的目录如下所示:
zhangsan@Aliyun:~$
那么我的绝对目录就是**/home/zhangsan**这个目录。假设我的/home目录下还存在用户名为zhengxianjun的用户,当我需要切换目录时,我可以采用两种方式:
zhangsan@Aliyun:~$ cd /home/zhengxianjun(第一种绝对路径)
zhangsan@Aliyun:~$ cd . . /zhengxianjun(第二种相对路径)
在相对路径中,“.” 代表了当前的目录,“. .” 代表了上一级的目录。我们新建一个文件夹,并在文件夹下放置目录,如下所示:
我们可以看到,虽然我只创建了一个文件夹,但其显示了当前文件夹与上一级的文件夹。
1.2. 目录的相关操作
有几个比较重要的命令
- . 代表了当前的目录
- … 代表了上一层的目录
- -代表了前一个工作目录(可以用来切换的)
- ~ 代表了用户的家目录
几个常见的处理目录的命令
- cd命令(Change Directory)
zhangsan@Aliyun:~$ cd ~zhengxianjun(回到zhengxianjun的家目录)
zhangsan@Aliyun:~$ cd ~ (表示回到主文件夹)
zhangsan@Aliyun:~$ cd … (表示回到上层目录)
- pwd 显示当前的文件夹(print working directory)
- mkdir创建文件夹的命令
- rmdir删除文件夹的命令
zhangsan@Aliyun:~$ mkdir -p test/test1/test1(创建多级)
zhangsan@Aliyun:~$ mkdir -m 777 test (设置权限)
1.3.执行文件的路径变量
linux上存在环境变量PATH,可以帮助查找命令所在的文件夹位置,当用root用户登陆Linux时,可以查看并更改用户的环境变量。首先,打印环境变量
zhangsan@Aliyun:~$ echo $ PATH ($ 代表的是一个变量)
zhangsan@Aliyun:~$ PATH="$PATH": /root (给环境变量增加一个文件夹)
需要注意的几点内容
- 在默认状态下,不同的用户的PATH目录是不同的
- PATH是可以修改的
- 使用绝对路径或者相对路径执行某个命令会比PATH更有效
- 命令要放到正确的路径中
- 对于本目录(.),不要放到PATH中
1.4. 复制删除与移动 cp ,rm ,mv
- cp (copy)除了单纯的复制外,可以创建连接文件,对比文件的新旧程度以更新,复制整个目录等功能。这里只涉及cp命令的调用。
zhangsan@Aliyun:~$ cp [-adfilprsu] 源文件(source) 目标文件(destination)
zhangsan@Aliyun:~$ cp [options] source1 source2 source3… direction
- rm (remove) 删除文件
zhangsan@Aliyun:~$ cp [-fir] 文件或者目录
- mv (move)移动文件与目录,或者更名
zhangsan@Aliyun:~$ mv [-fiu] source destination
zhangsan@Aliyun:~$ mv [-fiu] source1 source2 source3… directory
1.5.获取文件的某个路径
zhangsan@Aliyun:~$ basename /etc/sysconfig/network 取得最后的文件名
zhangsan@Aliyun:~$ dirname /etc/sysconfig/network 取得目录名
2.文件内容查阅
2.1.直接查看文件的内容
- 使用cat(Concatenate)
zhangsan@Aliyun:~$ cat /etc/issue
- 使用tac(与cat相反,反向输出)
zhangsan@Aliyun:~$ tac /etc/issue
- 使用nl(添加行号打印)
zhangsan@Aliyun:~$ nl /etc/issue
2.2.可翻页查看
- 使用more(一页一页翻动)
zhangsan@Aliyun:~$ more /etc/man.config
- 使用less(一页一页翻动,可以向前翻动)
zhangsan@Aliyun:~$ less /etc/man.config
2.3.数据选择
- 使用head(取出前面的几行)
zhangsan@Aliyun:~$ head /etc/man.config
- 使用tail(打印后面几行)
zhangsan@Aliyun:~$ tail /etc/man.config
2.4. 修改文件时间或创建新文件
在Linux系统下,每个文件记录着多个时间,并且这个时间是可以修改的。每种时间对文件都比较重要。
- modification time (mtime)
在文件的内容被修改时候,这个时间会被更新,因此,对于一个文件来说,其modification time还是非常重要的。我们可以用下列方式来查看,并修改文件的modification time。
zhangsan@Aliyun:~$ ll -l /etc/man.config
zhangsan@Aliyun:~$ touch -mt 1209090909 /etc/man.config
- status time (ctime)
当文件的属性和权限被更改时,这个时间会被更新。我们可用下列命令来访问和修改这个时间。
zhangsan@Aliyun:~$ ll -l --time=ctime /etc/man.config
zhangsan@Aliyun:~$ touch -ct 1209090909 /etc/man.config
- access time (atime)
当文件的内容被取用时,这个时间会被更新。比如当我们读取某个文件时,这个时间就会被更新。我们可用下列命令来访问和修改这个时间。
zhangsan@Aliyun:~$ ll -l --time=atime /etc/man.config
zhangsan@Aliyun:~$ touch -at 1209090909 /etc/man.config
3.文件的默认权限与隐藏权限
3.1文件的默认权限umask
umask是指用户在新建文件或者目录时的权限的默认值,其相当于一个过滤器。umask的值是可以查看和修改的。
zhangsan@Aliyun:~$ umask
zhangsan@Aliyun:~$ #查看umask值
zhangsan@Aliyun:~$ umask -S
zhangsan@Aliyun:~$ #查看umask值,用权限的方式
zhangsan@Aliyun:~$ umask 0002
zhangsan@Aliyun:~$ #修umask的数值
在默认情况下,一个文件具有rw权限即可,其不需要执行(x)权限。而对于目录来说,执行属性非常重要,因此,对于一个目录文件来说,其需要rwx三个权限。下图可以说明umask是如何实现权限的过滤的
3.2.文件隐藏属性
文件的特定属性能够让文件的所有者也不能够删除文件,在系统安全上这点非常重要。利用chattr可以给文件添加隐藏的属性,同时,利用lsattr能够显示文件的隐藏属性。
zhangsan@Aliyun:~$ chattr [+ - =][ASacdistu]
zhangsan@Aliyun:~$ lsattr [-adR]
3.3. 文件的特殊权限SUID,SGID,SBIT
3.3.1. SUID
在文件的权限中,除了r、w、x之外,还有很多的权限,比如s与t。简单来说,当s出现在文件的所有者的x权限上时,文件的权限变更为"rwsr-xr-x",那么,执行者对该文件有执行权限,同时,执行者拥有该文件的所有者的权限,该命设置在password这里使用。
- SUID对于目录是无效的
3.3.2. SGID
拥有SGID的权限,可以有以下功能:
- 对于文件:
SGID对二进制程序有用
程序执行者对该程序来说,需具备x的权限
执行者在执行过程中将获得该程序用户组的支持 - 对于目录:
若用户对目录具有r与x权限,该用户能够进入此目录
若用户在此目录下具有w权限(可以新建文件),则用户所创建的新文件的用户组与此目录的用户组相同。
3.3.3. SBIT
针对于目录的权限设置。若目录设置了SBIT权限,在该目录下,只有root与自身能够对自己创建的文件进行删除、重命名、移动等操作。
3.3.4. 使用方式
该命令的使用方式为:
zhangsan@Aliyun:~$ chmod 7777 ~/Musics
即在权限前+数字。数字代表的命令为:
- 4代表SUID
- 2代表SGID
- 1代表SBIT
3.4 查看文件的类型
如果想要知道某个文件的基本类型数据,例如是属于ASCII或者是data文件等,使用的命令为:
zhangsan@Aliyun:~$ file ~/Videos
5. 命令与文件的查询
5.1脚本文件的查询
zhangsan@Aliyun:~$ which ls
这个命令是根据PATH这个环境变量规范的路径去查询“执行文件”的位置的
5.2文件名查找
- whereis (寻找特定的文件)
- locate (关键词的查找)
zhangsan@Aliyun:~$ whereis [-bmsu] 文件或者目录
zhangsan@Aliyun:~$ locate [-ir] keyword
值得注意的是,这两个命令都会通过查找自己所建立的数据库/var/lib/mlocate,而不通过硬盘查找。但是数据库的数据是一天更新一次的,可以手动更新数据库。updatedb
- find
zhangsan@Aliyun:~$ find [PATH] [option] [action]
zhangsan@Aliyun:~$ find /var -mtime +4
#代表4天以前的的文件(第5天开始)
zhangsan@Aliyun:~$ find /var -mtime -4
#代表小于等于4天的文件
zhangsan@Aliyun:~$ find /var -mtime +4
#代表4~5 天的文件
6. 权限与命令之间的关系
-
让用户能够进入某目录成为"可工作目录"的基本权限是什么?
- 可使用的命令:例如cd
- 目录所需要的权限: 至少需要具有x权限
- 额外权限:如果需要对该目录下的文件的名称进行查找,需要r权限
-
用户在某个目录内读取一个文件的基本权限是什么
- 可使用的命令,cat,less,more
- 对该目录需要有可执行的权限x
- 对目录下的文件具有可度权限r
-
让用户修改一个文件的基本权限是什么
- 可使用的命令,如nano
- 对该目录具有可执行权限
- 对该文件具有w与r权限
-
让一个用户可以创建一个文件的基本权限
- 对目录所需的权限为w与x权限
-
让用户进入 某个目录并执行该目录下的 某个命令 的基本权限
- 对于目录需要有执行权限x
- 对于文件需要有执行权限x