Linux下操作文件及文件夹大多是通过命令来实现的。这里列出一些常用的操作。

首先了解一下一些特殊的目录名。

.         代表此层目录
..        代表上一层目录
-         代表前一个工作目录
~         代表『目前使用者身份』所在的家目录
~account  代表 account 這個使用者的家目录(account是個账户名称)

这里有个问题就是根目录下有没有上层目录(..) 存在? 答案是有,而且与根目录自身(.)是一个目录。

目录的一些基本操作:

cd:更换目录(change directory)
pwd:显示目前的目录
mkdir:建立一个新的目录
rmdir:刪除一个空的目录

一些实例:

//# 先切换身份成為 root 看看!
[dmtsai@study ~]$ su -  
[root@study ~]# cd [相对路径或者绝对路径]
# 最重要的就是目录的相对路径或者绝对路径,还有一些特殊目录的符号!
[root@study ~]# cd ~dmtsai
# 代表去到 dmtsai 這个使用者的家目录,亦即 /home/dmtsai
[root@study dmtsai]# cd ~
# 表示回到自己的家目錄,也就是 /root 这个目录
[root@study ~]# cd
# 沒有加上任何路径,也还是代表回到自己家目录的意思!
[root@study ~]# cd ..
# 表示去到目前的上层目录,也即是 /root 的上层目录的意思;
[root@study /]# cd -
# 表示回到刚刚的那个目录,也就是 /root ~
[root@study ~]# cd /var/spool/mail
# 这个就是绝对路径!直接指定要去的完整路径名称!
[root@study mail]# cd ../postfix
# 这个是相对路径的写法,我们由/var/spool/mail 去到/var/spool/postfix 就这样写!

创建目录的写法

如何创建一个目录?mkdir folder

如何同时创建多个目录

mkdir folder1/subfolder2/subfolder3  
这样是不行的,因为创建subfolder3时subfloder2和folder1都还没有创建! 
需要通过option -p来实现: 
mkdir -p folder1/subfolder2/subfolder3

如何创建目录的同时给它设置权限?

mkdir -m 711 myfolder
如果没有-m选项来设置权限的话,该folder的默认权限由系统预先定义的权限来设置新建的文件夹
这个系统预先设置的权限由umask来设置的
umash 033 
表示将usergroup和others的写和执行权限删除。
umask 的分數指的是『该预设的值需要减掉的权限!』因為 r、w、x 分別是 4、2、1 分

如何列出目录下的所有子目录和文件?

[root@study ~]# ls [-aAdfFhilnrRSt] 文件名或目录名称..
[root@study ~]# ls [--color={never,auto,always}] 文件名或目录名称..
[root@study ~]# ls [--full-time] 文件名或目录名称.
选项和参数:
-a  :全部的文档,连同隐藏文件( 开头为 . 的文档) 一起列出来(常用)
-A  :全部的文档,连同隐藏文档,但不包括 . 与 .. 这两个文档
-d  :仅列出目录本身,而不是列出目录内的文档资料(常用)
-f  :直接列出結果,而不进行排序 (ls 默认会以文件名排序)
-F  :根据文件、目录等信息,給予附加资料排序,例如:
      *:代表可執行檔; /:代表目錄; =:代表 socket 檔案; |:代表 FIFO 檔案;
-h  :将文档容量以人力可读的方式(例如 GB, KB 等等)列出來;
-i  :列出 inode 号码;
-l  :长资料串列出,包含文档的属性和权限等等信息;(常用)
-n  :列出 UID 與 GID 而非使用者與群組的名稱 (UID與GID會在帳號管理提到!)
-r  :將排序結果反向輸出,例如:原本檔名由小到大,反向則為由大到小;
-R  :連同子目錄內容一起列出來,等於該目錄下的所有檔案都會顯示出來;
-S  :以檔案容量大小排序,而不是用檔名排序;
-t  :依時間排序,而不是用檔名。
--color=never  :不要依據檔案特性給予顏色顯示;
--color=always :顯示顏色
--color=auto   :讓系統自行依據設定來判斷是否給予顏色
--full-time    :以完整時間模式 (包含年、月、日、時、分) 輸出
--time={atime,ctime} :輸出 access 時間或改變權限屬性時間 (ctime) 
                       而非內容變更時間 (modification time)

如何复制文件和目录?有哪些注意事项?

[root@study ~]# cp [-adfilprsu] 源文件(source) 目标文件或目录(destination)
[root@study ~]# cp [options] source1 source2 source3 .... directory
选项和参数:
-a  :相当于-dr --preserve=all 的意思 (常用)
-d  :若源文件为(link file),则复制连接文档属性而非文件本身;
-f  :为強制(force)的意思,若目标文件已经存在且无法打开,则移除后再尝试一次;
-i  :若(destination)已存在,在覆盖时会先咨询是否继续(常用)
-l  :进行(hard link)的連結檔建立,而非复制文件本身;
-p  :连同文件的属性(权限、用戶、時間)一起复制,而非使用默认的属性(备份常用);
-r  :循环复制,用于文件夹的复制;(常用)
-s  :复制成为 (symbolic link),亦即『快捷键』文件;
-u  :destination 比 source 旧才更新 destination,或 destination 不存在的情況下才复制。
--preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了。
最后需要注意的,如果源文件有两个以上,则最后一个目的文件一定要是『目錄』才行!

复制这个指令非常重要,不同的人来执行复制操作结果可能不同。尤其是-p -a这两个选项对于不同身份的人来说差异很大。

示例一:用root身份,将家目录下的 .bashrc 复制到 /tmp 下,并更名为 bashrc
[root@study ~]# cp ~/.bashrc /tmp/bashrc
[root@study ~]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite `/tmp/bashrc'? n  <==n不覆盖,y為覆盖
# 重複作两次操作,由于 /tmp 底下已存在 bashrc 了,加上 -i 选项后,
# 则在覆盖前会询问使用者是否确认!可以按下 n 或者 y 來二次确认

示例二:更换目录到/tmp,并将/var/log/wtmp复制到/tmp且观察属性:
[root@study ~]# cd /tmp
[root@study tmp]# cp /var/log/wtmp . <==想要复制到目前的目录,最后的.不要忘
[root@study tmp]# ls -l /var/log/wtmp wtmp
-rw-rw-r--. 1 root utmp 28416 Jun 11 18:56 /var/log/wtmp
-rw-r--r--. 1 root root 28416 Jun 11 19:01 wtmp
# 在不加任何选项的情況下,文件的某些属性/权限会改变;
# 这是个很重要的特性!要注意!还有文件建立的时间也不一样了!
# 那如果你想要将文件的所有特性都一起复制过来该怎么办?可以加上 -a !如下所示:

[root@study tmp]# cp -a /var/log/wtmp wtmp_2
[root@study tmp]# ls -l /var/log/wtmp wtmp_2
-rw-rw-r--. 1 root utmp 28416 Jun 11 18:56 /var/log/wtmp
-rw-rw-r--. 1 root utmp 28416 Jun 11 18:56 wtmp_2
# 整个文件属性完全一模一样!这就是 -a 的特性!

参考文档:

  • http://linux.vbird.org/linux_basic/0220filemanager.php

发表评论