Linux文件与目录管理

一、目录的相关操作

特殊的目录

. 代表当前目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表“目前用户身份”所在的主文件
~account 代表account这个用户的主文件夹(account是用户名)

下面我们就来谈一谈几个常见的处理目录的命令:

cd :切换目录(change direcotry)
pwd :显示当前目录(print working directory)
mkdir :新建一个新的目录(make directory)
rmdir :删除一个空目录

pwd [-P]
-P :显示出当前路径,而非使用连接(link)路径。
mkdir [-mp] 目录名称
-m :配置文件的权限,直接设置,不需要看默认权限(umask)
-p :帮助你直接将所需要的目录(包含上层目录)递归创建。

[root@localhost tmp]# mkdir -p test1/test2/test3
[root@localhost tmp]# mkdir-m 777 test
[root@localhost tmp]# ls -l
drwxrwxrwx. 2 root root 4096 7月 28 16:51 test
drwxr-xr-x. 3 root root 4096 7月 28 16:51 test1

rmdir [-p] 目录名称
-p :连同上层空的目录也一起删除

[root@localhost tmp]# rmdir test
[root@localhost tmp]# rmdir test1
rmdir: 删除 “test1” 失败: 目录非空
[root@localhost tmp]# rmdir -p test1/test2/test3

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

1、cp 复制文件或目录

cp [-adfilprsu] 源文件 目标文件
cp [options] source1 source2 source3 … directory

-a :相当于-pdr的意思(常用)
-d :若源文件为连接文件的属性(link file),复制连接文件的属性而非文件本身;
-f :为强制(force)的意思,若目标文件已经存在且无法开启,则删除后再尝试一次;
-i :若目标文件已经存在,在覆盖时会进询问(常用)
-l :进行硬连接(hard link)的连接文件创建,而非复制文件本身;
-p :连同文件的属性一起复制过去,而非使用默认属性(备份常用)
-r :递归持续复制,,用于目录的复制(常用)
-s :复制成符号连接文件(symbolic link),即“快捷方式”文件;
-u :若destination比source旧才更新destination。
【注意:如果源文件有两个以上,则最后一个目的文件一定要是目录才行

在不加任何参数的情况下,文件的某些属性、权限会改变,连文件的建立时间也不一样了。如果你想把文件的所有属性都一起复制过来,可以加上 -a。在默认的条件中,cp的源文件与目的文件的权限是不同的,目的文件的所有者通常是命令操作者本身。

[root@localhost tmp]# cp /var/log/wtmp . //复制到当前目录,最后的“.”不要忘了
[root@localhost tmp]# ls -l /var/log/wtmp wtmp //注意文件属性的变化
-rw-rw-r–. 1 root utmp 50688 7月 28 16:49 /var/log/wtmp
-rw-r–r–. 1 root root 50688 7月 28 20:22 wtmp

如果是目录则不能直接复制,要加上-r 参数。 -r 是可以复制目录,但是,文件与目录的权限可能会被改变, 所以,也可以用“cp -a /etc/ /tmp” 来执行命令,尤其是在备份的情况下。

[root@localhost tmp]# cp -r /etc/ /tmp

创建连接文件

[root@localhost tmp]# ll bashrc //先看一下文件的情况
-rw-r–r–. 1 root root 176 7月 28 20:46 bashrc
[root@localhost tmp]# cp -s bashrc bashrc_slink
[root@localhost tmp]# cp -l bashrc bashrc_hlink
[root@localhost tmp]# ll bashrc*
-rw-r–r–. 2 root root 176 7月 28 20:46 bashrc
-rw-r–r–. 2 root root 176 7月 28 20:46 bashrc_hlink
lrwxrwxrwx. 1 root root 6 7月 28 20:47 bashrc_slink -> bashrc

若 ~/.bashrc 比 /tmp/bashrc 新才复制过来

[root@localhost tmp]# cp -u ~/.bashrc /tmp/.bashrc
这个 -u 的特性是在目标文件与源文件有差异时才会复制的,所以,比较常用于备份中。

将上面生成的bashrc_slink复制成bashrc_slink1与bashrc_slink2

[root@localhost tmp]# cp bashrc_slink bashrc_slink1
[root@localhost tmp]# cp -d bashrc_slink bashrc_slink2
[root@localhost tmp]# ll bashrc bashrc_slink*
-rw-r–r–. 2 root root 176 7月 28 20:46 bashrc
lrwxrwxrwx. 1 root root 6 7月 28 20:47 bashrc_slink -> bashrc
-rw-r–r–. 1 root root 176 7月 29 14:48 bashrc_slink1 //与源文件相同
lrwxrwxrwx. 1 root root 6 7月 29 14:48 bashrc_slink2 -> bashrc //是连接文件
原本复制的是连接文件,但却将连接文件的实际文件复制过来了,也就是说,如果没有加上任何参数时,cp复制的是源文件,而非连接文件的属性。

能否使用corly的身份,完整复制/var/log/wtmp 文件到 /tmp 下面,并更名为corly_wtmp呢?

[corly@localhost tmp]$ cp -a /var/log/wtmp /tmp/corly_wtmp
[corly@localhost tmp]$ ll /var/log/wtmp /tmp/corly_wtmp
-rw-rw-r–. 1 corly corly 53376 7月 29 09:26 /tmp/corly_wtmp
-rw-rw-r–. 1 root utmp 53376 7月 29 09:26 /var/log/wtmp

由于corly的身份并不能随意修改文件的所有者与用户组,因此虽然能够复制wtmp的相关权限与时间等属性,但与所有者、用户组相关的,corly的身份是无法进行操作的,即使加上**-a**参数,也是无法完整复制权限。

2、rm 移出文件或目录

rm [-fir] 文件或目录
-f :就是force的意思,忽略不存在的文件,不会出现警告信息;
-i :互动模式在删除前会询问用户是否操作;
-r :递归删除。

3、mv 移动文件与目录或更名

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

欢迎关注我的其它发布渠道