文件和目录的管理上,无非就是显示属性,复制,删除,还有移动这几个,不过看似简单,其实需要注意的地方很多,难得并不是这个操作有多么困难,而是这个文件的存放位置的规划,最好自己心理很明确,再去操作,毕竟和Windows相比较而言,Linux的人机界面并没有那么友好
这篇只讨论关于文件和目录的基础管理知识
首先是查看
查看,无非就是ls这个命令
格式 ls 参数 目录名称
常用的是ls -alh 目录,参数的意思分别是a:列出全部文件,包括隐藏文件,l:列出长数据串,包括权限属性这些信息,h:将文件容量用易读的如KB,GB这种单位列出来
[root@localhost ~]# ls -alh ~
总用量 52K
dr-xr-x---. 16 root root 4.0K 9月 26 16:47 .
dr-xr-xr-x. 18 root root 236 6月 19 04:34 ..
-rw-------. 1 root root 2.2K 6月 17 18:47 anaconda-ks.cfg
-rw-------. 1 root root 1.7K 9月 25 23:46 .bash_history
-rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 12月 29 2013 .bashrc
drwx------. 11 root root 221 6月 17 20:08 .cache
ls --color=never/auto/always 目录,这个是设置是否显示颜色的,auto是根据系统设置自行判定,可与上面的参数共用
另外有的时候会有需要看具体创建时间的,可以在参数后面再加个--full-time
ls 的参数很多,最常用的就是-l,所以很多时候ll就意味着ls -al,这个比较省心
复制,cp(copy),这个命令还可以创建连接文件,也就是快捷方式,也可以对比两个文件的新旧而予以更相信,以及复制整个目录
要复制一个文件,首先就要有read权限
cp 参数 源文件 目标文件 或者 cp 参数 源文件1 源文件2 源文件3 目标目录,同时复制多个文件目标一定是个目录
-a:包括所有者所有组等信息全部复制
-d:若文件是连接文件,则复制链接文件属性而非文件本身
-f:意思是强制,如果目标文件已经存在且无法开启,则删除后尝试一次
-i:若目标文件已经存在,则覆盖时会先进行询问确认
-l:进行硬链接的链接文件创建,而非复制文件本身
-p:连同文件属性一起复制过去,而不是使用默认属性,这个是在备份的时候常用
-r:递归持续复制,用于目录的复制行为
-s:复制为软连接文件,也就是常见的快捷方式
-u:目标文件比源文件旧才更新目标文件
不同身份的执行者执行这个命令会有不同的结果产生,下面做几个演示
[root@localhost ~]# cp ~/.bashrc /tmp/bashrc
[root@localhost ~]# cp -i ~/.bashrc /tmp/bashrc
cp:是否覆盖"/tmp/bashrc"? y #这里就可以看到会询问一下
[root@localhost ~]# cd /tmp
[root@localhost tmp]# cp /var/log/wtmp . #这个‘.’是复制到当前目录的意思,前面讲过路径
[root@localhost tmp]# ls -l /var/log/wtmp wtmp
-rw-rw-r--. 1 root utmp 11520 9月 26 17:45 /var/log/wtmp
-rw-r--r--. 1 root root 11520 9月 26 21:05 wtmp #可以看到复制的文件属性不够全面
[root@localhost tmp]# cp -a /var/log/wtmp wtmp_2
[root@localhost tmp]# ls -l /var/log/wtmp wtmp_2
-rw-rw-r--. 1 root utmp 11520 9月 26 17:45 /var/log/wtmp
-rw-rw-r--. 1 root utmp 11520 9月 26 17:45 wtmp_2 #这样就是全部属性都复制过来了
一般我们复制一个文件的时候自然是希望这个文件复制成我们自己的,所以在默认的情况下,源文件和目标文件的特性是不同的,目标文件的所有者一般会是命令操作者本身,所以在演示中可以看到复制过来以后文件特性都变了
由于具有这个特性,当我们在进行备份的时候,有些特殊权限的文件比如/etc/shadow,还有一些配置文件,我们就不希望直接以cp进行复制,而必须加上-a或者-p等权限,以把所有的文件特性一起复制,另外要复制文件给其他用户,也必须要注意文件的各个权限
复制目录与文件只有一个-r的差别,目录是不能直接复制的而-l和-s这两个比较需要注意下,主要硬链接和软连接的概念,我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。下图展示了程序通过文件名获取文件内容的过程。
为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。若一个 inode 号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名,软连接也就是一个快捷方式,所以在ls -al的时候,输出第二列就是连接数,而如果我们为一个文件创建一个软连接,我们会看到一个->符号,如果我们创建一个硬链接,那么他的文件属性会完全相同,而且文件链接数会加一
删除文件:rm
命令简单的不行,-f,强制执行,-r递归删除,用于目录,只有-i正常一点,删除前询问一下
那么rm -rf /*呢?
所以文件名不能以-开头,要不然删除的时候还以为是参数,而且,rm最好带上-i,冷静最好
移动文件:mv 参数 源文件 目的文件 或者 mv 参数 源文件1 源文件2····· 目标目录
-f :强制执行,如果目标文件已经存在,直接强制覆盖
-i:若目标文件已经存在 ,会询问一下是否覆盖
-u:目标文件已经存在,且源文件更新,才会进行覆盖(可以用来进行比对更新)
比较常用的还有一个功能
mv 原文件名 新文件名:重命名操作