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 的特性!
参考文档: