LGCB

基本文件和目录操作

这集里我们开始真正的在 Linux 里留下我们的痕迹了,自己动手对文件进行拷贝,移动,删除,修改等各项操作。

先看一下这一集的主要内容,首先走马观花,浏览一下都有哪些日常使用的命令,过程中穿插一些实际演示,讲一些好玩的点。第二步,介绍通配符的使用,这里就看出使用命令行的优势来了,用鼠标只能一个一个的处理,用命令行可以批处理。最后,聊的是压缩和解压缩。

日常文件操作

大家平时用鼠标干的活,这里咱们用敲命令的方式快速做一遍。要覆盖到得内容包括,文件的 copy,move,rename,remove 操作,那相应的命令其实超级好记啦,基本就是这些英文单词的缩写。

复制文件目录

$ cp -r dir1 dir2
$ cp file1 file2

移动文件目录

$ mv dir1 Desktop/dir1

重命名文件目录

$ mv file1 file2
$ mv dir1 dir2

删除文件目录

$ rm file
$ rm -r dir

创建文件目录

$ mkdir dir
$ touch file
$ >file
$ vim file

查看文件内容

$ cat file # 适合比较短的文件
$ less file # 有快捷键,可以看比较长的文件

查看文件类型 fiie

$ file file1
$ file dir1

查看文件大小

$ du -k file
$ du -m file

更多内容,参考 TLCL 的 《操作文件和目录》这一章:

http://billie66.github.io/TLCL/book/zh/chap05.html

下面开始实际操作游戏。把 terminal 窗口拉成半屏的,露出桌面来。现在我们敲

$ pwd
/home/peter

看到我们目前在 peter 这个用户的主目录里。每个用户的主目录里面都会有一个特殊目录,叫 Desktop,这个对应我们的桌面。比如我们

$ cd Desktop
$ mkdir mydir

我们就会看到,桌面上会蹦出一个新的文件夹来。可以敲 cd 不加任何参数,这样我们会自动回到 peter 的主目录。现在我们创建一个文件。

$ touch a.txt

把它移动到 mydir 需要怎么操作呢?可以用相对路径来定位 mydir

$ mv a.txt Desk<tab>/myd<tab>

再到桌面上新建一个目录

$ mkdir dir1

来进行目录的拷贝

$ cp -r dir1 dir2

这样成功的得到了 dir1 的一个副本 dir2 。但是如果同样的命令再执行一次,那么就会在 dir2 之内另外创建一个 dir1 了。

再稍微拓展一下内容。现在创建隐藏的文件和目录(名字前面加 .)

$ pwd
/home/peter/Desktop
$ touch .aa
$ mkdir .dir

这样用 ls 命令是看不到 .aa 和 .dir 的,要用 ls -a 才行。

下面我们在下载一个比较大的文件

wget http://imooc.com

Linux 下有个特点,就是文件的后缀一般都可有可无,比如我们现在

$ file index.html
$ mv index.html index
$ file index

发现不管有没有后缀,file 命令都可以正确地告诉我们这是个 html 文件。

这个文件比较长,如果用 cat 查看就比较难受,这次我们可以用 less 来查看

less index.html

less 中可以使用 j k gg G 来进行跳转,用 /-xxx 来进行查找,man 用的就是 less 。后面我们学习黑客编辑器 vim 的时候,会发现这些操作也是一样的。

通配符的使用

如果我们到 http://billie66.github.io/TLCL/book/zh/chap05.html 的 ”通配符“ 这一步分,就会发现通配符的类型好多啊。另外我们应该也发现,任何一个 Linux 命令基本使用都很简短,但是打开 man

$ man cp

都会发现里面的参数都是成片成片的,跟本不可能都记住。好在呢,系统的设计者根本就没有期待我们都记住,只需要记住几个最常用的,作为日常命令行使用就行。其他的那么多的参数,大部分是日常用的比较少,在写 shell 脚本的时候才会用到。因为没有人工的参与,语句需要写得比较严谨才行。如果要达到对字符串的比较精准的匹配,我们就会用到不是特别常用的通配符了,甚至还会用到正则表达式 http://billie66.github.io/TLCL/book/zh/chap20.html,正则表达式自己就够写一本书了,所有在我们这套课程里不深究。

我们可以把要记住的东西分类:

对于通配符,真正需要装入大脑内存部分的其实就是一个: * ,日常的命令行操作就够用了。几个实例:

$ ls
a.txt b.txt ccc.txt a.html hello.html

要删除所有文件,就用 rm *,不过我们可以先 echo * 看看 * 到底代替了那些文件。比如

$ echo *.txt
$ echo a*

文件打包

参考,TLCL 第19章:归档和备份 http://billie66.github.io/TLCL/book/zh/chap19.html 文章中各种压缩的方式很多,得到的压缩包格式也不少,看起来也稍微让人眼晕,所以我们这里还是按我自己一贯的风格来讲解,不求甚解,但求实用,给大家展示出实际开发中用的最多的几个实例。

例子一,网上下载源码,我们需要进行解压缩。https://github.com/happypeter/happygrep 上面 “download zip”

解压缩

$ unzip x.zip

压缩

$ zip -r x.zip x/

例子二,http://ftp.gnu.org/gnu/wget/ 下载一个 xxx.tar.gz

$ tar zxvf xxx.tar.gz
$ tar zcvf xxx.tar.gz xxx/

例子三,http://ftp.gnu.org/gnu/wget/ 下载 xxx.tar.bz2

$ tar jxvf xxx.tar.bz2
$ tar jcvf xxx.tar.bz2 xxx/

好,这一集就到这里了。