文件处理是*nix最基本的操作,本文示范如何在*nix上进行最基本的文件夹操作。
版权声明
Copyright 2016-2016 Program Dog
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled 'GNU Free Documentation License.
第8章 文件夹
这一章会对最常用的命令做一些简介:pwd,cd,ls,mkdir,rmdir。这些命令为任何Linux或Unix所共有。
同时,这一章也会涉及到bash中的绝对和相对路径以及路径补全。
8.1. pwd
pwd可以给出你当前所在的路径(工作目录)。现在打开一个终端(terminal),键入pwd,看看你的当前路径。
paul@debian8:~$ pwd
/home/paul
8.2. cd
你可以通过cd命令改变当前路径(切换目录)。
paul@debian8$ cd /etc
paul@debian8$ pwd
/etc
paul@debian8$ cd /bin
paul@debian8$ pwd
/bin
paul@debian8$ cd /home/paul (注:这条命令不要照抄。)
paul@debian8$ pwd
/home/paul
8.2.1. cd ~
cd有一个切换到home目录的快捷方式,就是cd命令本身,或者cd ~。
paul@debian8$ cd /etc
paul@debian8$ pwd
/etc
paul@debian8$ cd
paul@debian8$ pwd
/home/paul
paul@debian8$ cd ~
paul@debian8$ pwd
/home/paul
8.2.2. cd ..
回到上一层目录:cd ..
paul@debian8$ pwd
/usr/share
paul@debian8$ cd ..
paul@debian8$ pwd
/usr
注:此处例子有修改。
cd到当前目录,cd . :-),我们一会儿还会用点.代替当前目录。
8.2.3. cd -
另一个有用的快捷方式是cd - 回到刚刚访问过的目录。
paul@debian8$
/home/paul
paul@debian8$ cd /etc
paul@debian8$ pwd
/etc
paul@debian8$ cd -
/home/paul
paul@debian8$ cd -
/etc
8.3. 绝对和相对路径
注意绝对路径和相对路径的区别。斜杠/代表根目录(root),以根目录开头的路径就是绝对路径,反之就是相对路径。
注:此处翻译有修改。
如果你在目录/home/paul下,想要切换到/home,得用cd /home而不能用cd home。
paul@debian8$ pwd
/home/paul
paul@debian8$ cd home
bash: cd: home: No such file or directory
paul@debian8$ cd /home
paul@debian8$ pwd
/home
但如果你在根目录/下,那么用cd /home或者cd home皆可。
paul@debian8$ pwd
/
paul@debian8$ cd home
paul@debian8$ pwd
/home
paul@debian8$ cd /
paul@debian8$ cd /home
paul@debian8$ pwd
/home
本书会不停提及当前目录这个概念。后面介绍如何配置shell变量$PS1时也会用到当前目录这个概念。
8.4. 路径补全
键tab可以自动补全路径。尝试 cd /et,然后敲击tab,路径会被补全为cd /etc。但是输入cd /Et然后敲击tab,就不会起作用,因为根本不存在/Et开头的路径。
用tab既省力,又可保证输入正确。
8.5. ls
可以通过ls列出当前文件夹下面的内容。
paul@debian8:~$ ls
allfiles.txt dmesg.txt services stuff summer.txt
paul@debian8:~$
8.5.1. ls -a
-a 参数经常被用于列出隐藏文件。linux系统中隐藏文件是以点(.)开头的文件。通常,隐藏文件是被隐藏的。
paul@debian8:~$ ls
allfiles.txt dmesg.txt services stuff summer.txt
paul@debian8:~$ ls -a
. allfiles.txt .bash_profile dmesg.txt .lesshst stuff
.. .bash_history .bashrc services .ssh summer.txt
8.5.2. ls -l
ls可以按照一定的格式列出文件。如ls -l(字母l,不是数字1)会列出文件详细信息。
注:此处翻译有修改。
paul@debian8:~$ ls -l
total 17296
-rw-r--r-- 1 paul paul 17584442 Sep 17 00:03 allfiles.txt
-rw-r--r-- 1 paul paul 96650 Sep 17 00:03 dmesg.txt
-rw-r--r-- 1 paul paul 19558 Sep 17 00:04 services
drwxr-xr-x 2 paul paul 4096 Sep 17 00:04 stuff
-rw-r--r-- 1 paul paul 0 Sep 17 00:04 summer.txt
8.5.3. ls -lh
另一个常用的参数是-h,以人类可读的方式列出文件大小。可以这样用,我们稍后解释这些结果的细节。
paul@debian8:~$ ls -l -h
total 17M
-rw-r--r-- 1 paul paul 17M Sep 17 00:03 allfiles.txt
-rw-r--r-- 1 paul paul 95K Sep 17 00:03 dmesg.txt
-rw-r--r-- 1 paul paul 20K Sep 17 00:04 services
drwxr-xr-x 2 paul paul 4.0K Sep 17 00:04 stuff
-rw-r--r-- 1 paul paul 0 Sep 17 00:04 summer.txt
paul@debian8:~$ ls -lh
total 17M
-rw-r--r-- 1 paul paul 17M Sep 17 00:03 allfiles.txt
-rw-r--r-- 1 paul paul 95K Sep 17 00:03 dmesg.txt
-rw-r--r-- 1 paul paul 20K Sep 17 00:04 services
drwxr-xr-x 2 paul paul 4.0K Sep 17 00:04 stuff
-rw-r--r-- 1 paul paul 0 Sep 17 00:04 summer.txt
paul@debian8:~$ ls -hl
total 17M
-rw-r--r-- 1 paul paul 17M Sep 17 00:03 allfiles.txt
-rw-r--r-- 1 paul paul 95K Sep 17 00:03 dmesg.txt
-rw-r--r-- 1 paul paul 20K Sep 17 00:04 services
drwxr-xr-x 2 paul paul 4.0K Sep 17 00:04 stuff
-rw-r--r-- 1 paul paul 0 Sep 17 00:04 summer.txt
paul@debian8:~$ ls -h -l
total 17M
-rw-r--r-- 1 paul paul 17M Sep 17 00:03 allfiles.txt
-rw-r--r-- 1 paul paul 95K Sep 17 00:03 dmesg.txt
-rw-r--r-- 1 paul paul 20K Sep 17 00:04 services
drwxr-xr-x 2 paul paul 4.0K Sep 17 00:04 stuff
-rw-r--r-- 1 paul paul 0 Sep 17 00:04 summer.txt
paul@debian8:~$
8.6. mkdir
浏览Unix文件树固然有趣,创建自己的文件夹则更有意思,那就用命令mkdir。mkdir后面至少跟着一个参数,就是新文件夹的名字。mkdir后面跟/开头的文件夹的时候请三思(注:有可能遇到权限问题,最好先通过cd命令切换到你的home目录)。
paul@debian8:~$ mkdir mydir
paul@debian8:~$ cd mydir
paul@debian8:~/mydir$ ls -al
total 8
drwxr-xr-x 2 paul paul 4096 Sep 17 00:07 .
drwxr-xr-x 48 paul paul 4096 Sep 17 00:07 ..
paul@debian8:~/mydir$ mkdir stuff
paul@debian8:~/mydir$ mkdir otherstuff
paul@debian8:~/mydir$ ls -l
total 8
drwxr-xr-x 2 paul paul 4096 Sep 17 00:08 otherstuff
drwxr-xr-x 2 paul paul 4096 Sep 17 00:08 stuff
paul@debian8:~/mydir$
8.6.1. mkdir -p
由于threedirsdeep的父文件夹并不存在,下面的命令会执行失败。
paul@debian8:~$ mkdir mydir2/mysubdir2/threedirsdeep
mkdir: cannot create directory ‘mydir2/mysubdir2/threedirsdeep’: No such file or directory
但是mkdir加上-p参数能确保同时创建父文件夹。
paul@debian8:~$ mkdir -p mydir2/mysubdir2/threedirsdeep
paul@debian8:~$ cd mydir2
paul@debian8:~/mydir2$ ls -l
total 4
drwxr-xr-x 3 paul paul 4096 Sep 17 00:11 mysubdir2
paul@debian8:~/mydir2$ cd mysubdir2
paul@debian8:~/mydir2/mysubdir2$ ls -l
total 4
drwxr-xr-x 2 paul paul 4096 Sep 17 00:11 threedirsdeep
paul@debian8:~/mydir2/mysubdir2$ cd threedirsdeep/
paul@debian8:~/mydir2/mysubdir2/threedirsdeep$ pwd
/home/paul/mydir2/mysubdir2/threedirsdeep
8.7. rmdir
rmdir可以移除一个空文件夹。
paul@debian8:~/mydir$ ls -l
total 8
drwxr-xr-x 2 paul paul 4096 Sep 17 00:08 otherstuff
drwxr-xr-x 2 paul paul 4096 Sep 17 00:08 stuff
paul@debian8:~/mydir$ rmdir otherstuff
paul@debian8:~/mydir$ cd ..
paul@debian8:~$ rmdir mydir
rmdir: failed to remove ‘mydir’: Directory not empty
paul@debian8:~$ rmdir mydir/stuff
paul@debian8:~$ rmdir mydir
paul@debian8:~$
8.7.1. rmdir -p
如命令mkdir的-p参数,可以一次性创建多层文件夹,rmdir -p则可以一次性移除多层文件夹。
paul@debian8:~$ mkdir -p test42/subdir
paul@debian8:~$ rmdir -p test42/subdir
paul@debian8:~$
8.8. 练习:文件夹
1.打出你当前文件夹路径。
2.切换到/etc目录下。
3.敲击键盘3下,切换到你的home目录。
4.敲击键盘11下切换到/boot/grub。
5.切换到当前目录父目录。
6.切换到根目录。
7.列出根目录下面的内容。
8.列出根目录下面的详细信息。
9.待在根目录,列出/etc下的内容。
10.待在根目录,列出/bin和/sbin下的内容。
11.待在根目录,列出~下面的内容。
12.列出home目录下面的所有文件(包括隐藏文件)。
13.以人类可读的形式列出/boot下的内容。
14.在你的home下创建文件夹testdir。
15.切换到/etc,然后在你的home下创建一个新文件夹。
16.一个命令创建三层文件夹~/dir1/dir2/dir3。
17.移除之前穿件的文件夹testdir。
18.如果时间充裕(或者你在等其他的学生完成练习),学会使用命令pushd和popd。man bash可以获得相关信息。
8.9. 答案:文件夹
1.打出你当前文件夹路径。
pwd
2.切换到/etc目录下。
cd /etc
3.敲击键盘3下,切换到你的home目录。
cd (and the enter key)
4.敲击键盘11下切换到/boot/grub。
cd /boot/grub (use the tab key)
5.切换到当前目录父目录。
cd .. (with space between cd and ..)
6.切换到根目录。
cd /
7.列出根目录下面的内容。
ls
8.列出根目录下面的详细信息。
ls -l
9.待在根目录,列出/etc下的内容。
ls /etc
10.待在根目录,列出/bin和/sbin下的内容。
ls /bin /sbin
11.待在根目录,列出~下面的内容。
ls ~
12.列出home目录下面的所有文件(包括隐藏文件)。
ls -al ~
13.以人类可读的形式列出/boot下的内容。
ls -lh /boot
14.在你的home下创建文件夹testdir。
mkdir ~/testdir
15.切换到/etc,然后在你的home下创建一个新文件夹。
cd /etc ; mkdir ~/newdir
16.一个命令创建三层文件夹~/dir1/dir2/dir3。
mkdir -p ~/dir1/dir2/dir3
17.移除之前穿件的文件夹testdir。
rmdir testdir
18.如果时间充裕(或者你在等其他的学生完成练习),学会使用命令pushd和popd。man bash可以获得相关信息。
man bash # opens the manual
/pushd # searches for pushd
n # next (do this two/three times)
bash有两个内建的命令pushd和popd。这两个命令维护一个共同的下压栈。pushd添加一个文件夹到栈里面,并且切换到添加的文件夹下面。popd则从栈上移除最后被添加的文件夹,然后切换到被移除的文件夹下面。
paul@debian7:/etc$ cd /bin
paul@debian7:/bin$ pushd /lib
/lib /bin
paul@debian7:/lib$ pushd /proc
/proc /lib /bin
paul@debian7:/proc$ popd
/lib /bin
paul@debian7:/lib$ popd
/bin
注:
1.本文由Program Dog翻译自 http://linux-training.be
2.本文原始链接:https://program-dog.blogspot.com/2016/11/linux-fun-char08-working-with-directories.html
博主好用心啊!这些确实是基础中的基础。非常适合初学者,支持支持!
回复删除承蒙夸奖:)
删除