发表于 2009-6-5 07:011#
楼主3.1 特殊字符
特殊字符在shell中有特定的含义, 我们需要正确的使用它们.一般给文件或文件夹命名时最好不用:
& ; | * ? ' " ' [ ] ( ) $ < > { } ^ # / \ % ! ~ +
3.1.1 空白字符
RETURN, SPACE, 和TAB也有特殊用途. RETURN启动命令的执行,SPACE和TAB分隔命令行的各部分.
3.1.2 引用特殊字符
如果想将特殊字符当做普通字符使用, 则我们必需引用它们, 有两种办法.
1. 使用反斜杠 \
要引用特殊字符, 我们可以将特殊字符紧跟在反斜杠后面.
例如:
想输入 **
要这样输入 \*\*
想输入 \
要这样输入 \\
2. 使用单引号 '
用单引号将字符串括起来也能引用特殊字符, shell将其中的特殊字符和普通字符都当做普通字符看待.
例如:
'This is a special charater: >'
3.引用控制字符
引用删除字符(CONTROL-H), 行删除字符(CONTROL-U), 以及其它控制字符的方法是在它们的前面加上CONTROL-V.
如:
# echo 'xxxxCONTROL-U'
$ echo xxxxCONTROL-V CONTROL-U
{虽然在执行第二个命令行时,看不到行删除字符的回馈,但它确实在那里,不然:
$ echo xxxxCONTROL-v CONTROL-U | od -c
0000000 x x x x 025 \n
0000006
3.2 基本工具
Linux有很多工具, 我们在使用linux时, 都会直接或间接的使用这些命令.
目录, 别的操作系统一般叫文件夹, 是存放文件的地方. 当我们登陆系统后,默认就工作在我们的主文件夹中, 不特别指定,我们创建的文件就保存在我们的主文件夹中.
3.2.1 ls: 列出文件名
ls用来列出指定目录中所有文件的文件名.
$ ls
如下创建一个文本文件
$ vim practice
i
This is a snall file that I created with the vim.
ESC
:w
:q
$ls
$ cp practice practice1
$ cp practice practice2
3.2.2 cat: 显示文本文件的内容
cat从catenate而来, catenate是连接到一起的意思.
3.2.3 rm: 删除文件
rm(来自remove)可以用来删除文件.
rm删除文件时不会询问用户,要慎用.
例子: 使用ls, cat和rm
$ ls
pratice
$ cat pratice
This is a small file than I created with the vim.
$ rm pratice
$ ls
$ cat pratice
cat: pratice: No such file or directory
$
交互模式: -i选项
当我们给rn命令加上-i选项时, rm将给出确认信息, 并等你输入y之后才删除文件
$ rm -i practice1
rm: remove regular file 'practice1'? y
3.2.4 less和more: 一次显示一屏
使用less和more工具, 能每次显示一屏的方式查看较长的文件. less和more都是分页器.
less和more两者有细微的差别. 在文件的最后,less会显示一个文件结束的消息, 并等你按Q回到shell, 而more则在到达文件结束处后自动回到shell. 并且more不能向前翻页.
实际操作:
$ less /etc/termcap
$ more /etc/termcap
文件名补全功能
在命令行中某命令名后面输入几个字母后, 按TAB键能最大限度的补全文件名或列出可能的文件列表
3.2.5 hostname: 显示系统名称
$ hostname
3.3 文件操作
3.3.1 cp: 复制文件
cp(copy)命令能复制任何文件,包括文本文件和可执行(二进制)文件.
cp的语法如下
cp <源文件名> <目标文件名>
注意: 当存在与目标文件同名的文件时, cp复制文件时会覆盖此目标文件. 为此, 我们可使用-i选项.
例如:
$ cp -i pratice2 pratice3
$ cp -i pratice pratice1
3.3.2 mv: 更改文件名
可以用mv(move)来更改一个文件的名称,语法如下.
mv <原文件名> <新文件名>
$ mv practice2 practice2-n
mv命令也可能会覆盖已有的文件. 为此,可使用-i选项
$ mv -i practice3 practice3-n
$ mv -i practice3 pracitce3-n
$ mv practice2-n practice3-n
3.3.3 lpr: 打印文件
lpr将一个或多个文件放入打印队列中准备打印.
$ lpr practice-n
当有多台打印机可用时,可使用-P选项来指定打印机.
$ lpr -Pmailroom report
使用lpq可查看打印队列中都有哪些作业待打印.
lprm可用来删除待打印作业,终止打印作业,用作业号来指定是哪个作业.
$ lprm 86
可同时将多个打印作业放入打印队列.
$ lpr -Plaser1 05.txt 108.txt 12.txt
3.3.4 grep: 查找字符串
grep(global regular expression print)可以在一个或多个文件中查找指定的字符串, 显示包含指定字符串的行.
$ vim memo
i
Helen:
In our meeting on June 6 we
discussed the issue of credit.
Have you had any further thoughts
about it?
Alex
ESC
:wq
$grep 'credit' memo
discussed the issue of credit.
在本例中,文件memo若包含discrredit\creditor等单词, 则它们所在行也会显示在结果中.
-w选项限定grep的查找必需整个单词跟字符串相匹配.
$grep -w 'credit' memo
3.3.5 head: 显示文件的开始部分
默认显示开始的10行. 也可以指定要显示的行数.
$ head -1 mouths
3.3.6 tail: 显示文件的结尾部分
默认显示最后的10行.
可使用以下命令监视一个正在不断增长的文件.
$ tail -f logfile
3.3.7 sort: 将文件的内容按顺序显示.
sort工具将文件的内容按行排序显示, 但并不改变原文件.
$ sort memo
sort工具可用来按顺序输入表格. -u选项去掉重复的行, -n选项将一组数据按序输入.
3.3.8 uniq: 显示文本文件内容, 在显示中将文件中重复的行去掉
但是uniq并不改变原文件.
3.3.9 diff: 比较两个文件
diff工具比较两个文件并列出两者的不同之处. 比如说,我们可以用diff来比较两个报告, 比较一个程序的源码的不同版本.
diff使用-u选项时,首先显示两行用来分别指明被比较的文件哪个会标记为+,哪个会标记为-.
另外, -u选项还将多行的比较结果文本分割为很多块. 这些块以 @@xxxxxxxxxxx@@ 这样的行开始, 此行中指出了比较结果分别来自于两个文件的哪些行之间. 比较结果里用正负号标明了不同结果的来源文件.
$ diff -u practice2-n memo
$ diff -u c.1 c.2
--- c.1 2009-03-01 08:01:41 +0800
+++ c.2 2009-03-01 08:02:58 +0800
@@ -1, 6 +1, 5 @@
red
+blue
green
yellow
-pink
-purple
orange
3.3.9 file: 检测文件内容
使用file能不打开文件检测到文件的相关信息
$ vim test.jgp
i
This is a test files
ESC
:w
:q
$ file test.jpg
3.4 | (管道): 进程间通信
进程: 正在运行的程序
进程间通信是操作系统最主要的功能之一, 管道提供了进程间通信的一种简便方式.
$ cat months | head
使用管道能将一个程序的输出在打印机上打印:
$ tail months | lpr
3.5 4个有用的工具
3.5.1 echo: 显示输入的文本
echo将任何你在echo之后在命令行上的输入在显示屏上显示出来.
例如:
$ echo Hi
Hi
$ echo This is a sentence
This is a sentence
$ echo star: *
star: c.1 c.2 memo practice2-n practice3-n test.jpg
$ls
c.1 c.2 memo practice2-n practice3-n
echo在学习shell时很有用
3.5.2 date: 显示系统时间和日期
$ date
还可以指定格式和显示的内容
$ date +"%A %B %d"
3.5.3 script: 记录在Linux中发生的事务
script只在字符界面下有效. 并且script记录使用vim的事务不好阅读, 基本上没用.
script默认将事务记录在一个名叫typescript的文件中, 也可以由我们指定文件名.
-a选项将记录加入到文件的最后面.
$ script
script started, file is typescript
$ date
Thu Jan 20 10:28:48 PST 2005
$ who am i
alex pts/4 Jan 8 22:15
$exit
script done, file is typescript
使用命令exit结束记录事务. 可使用cat, less, more或编辑器等查看记录文件
3.5.4 unix2dos: 将Linux文件转化为Windows格式
下面是一个使用unix2dos将文件memo.txt转换为windows格式的例子.
$ unix2dos memo
不使用任何选项则unix2dos将覆盖原文件.
转换后的保存为新文件可使用-n选项.
dos2Unix: 将dos文件转换为Linux文件.
$ dos2unix memo
$ unix2dos -n memo memo-dos
3.6 压缩和文件存档
3.6.1 bzip2: 压缩文件
bzip2通过分析来压缩一个文件.
$ ls -l
-l(long)使ls显示更详细的信息.
在bzip2工具中使用-verbos(或 -v), 将显示压缩比.
bzip2在压缩文件时,一般都会在文件后加上扩展名.bz2.
bzip2不会改变原文件的修改时间.
3.6.2 buzip2和bzcat: 解压文件.
buzip2将被bzip2压缩的文件还原.
$buzip2 letter_e.bz2
bzcat先将压缩数据解压然后显示出来.
bzip2recover能从媒介错误中恢复有限数据.
3.6.2 gzip: 压缩文件
.gz: 用gzip压缩的文件用扩展名.gz来标示
gunzip: gzip, gunzip和zcat的用法跟bzip2, bunzip2和bzcat相同.
compress也可以用来压缩文件.
3.6.3 tar: 打包文件
tar用来将多个文件合成一个文件或文件夹, 和将文件从tar文件中抽取出来.
在下面的例子中,tar使用选项-c(create), -v(verbose), 和-f(write to or read from a file)来创建一个名为all.tar的档案文档.
tar会在创建的档案文档中增加一个首部.
$ ls -l c.1 c.2
-rw-rw-r-- 1 fhp fhp 36 3月 1 08:01 c.1
-rw-rw-r-- 1 fhp fhp 29 3月 1 08:02 c.2
$ tar -cvf all.tar c.1 c.2 memo
c.1
c.2
memo
$ ls -l all.tar
-rw-rw-r-- 1 fhp fhp 102405 3月 1 09:14 all.tar
$ tar -tvf all.tar
此tar命令使用-t选项以表格方式显示tar档案文件的内容. 如果使用-x代替-t则从档案文件中抽取出文件, 不使用-v则执行完后不反馈相关信息.
用tar处理后在用bzip2压缩的文件通常具有扩展名.tar.bz2 用tar处理后用gzip压缩的文件通常具有扩展名.tar.gz 可以分两步来还原这些文件.
下面演示一下怎样处理从网上下载的GNUmake工具包.(ftp.gnu.org)
$ls -l mak*
-rw-rw-r-- 1 sam sam 1211924 Jan 20 11:49 make-3.80.tar.gz
$gunzip mak*
-rw-rw-r-- 1 sam sam 1211924 Jan 20 11:49 make-3.80.tar
$tar -xvf mak*
make-3.80/
make-3.80/pro
make-3.80/pro/Makefile.in.in
^
make-3.80/tests/run-make-tests.pl
make-3.80/tests/test_driver.pl
在此, gunzip解压生成文件make-3.80.tar tar生成文件夹make-3.80并将抽取出的文件放入其中.
$ ls -ld mak*
drwxrwxr-x 8 sam sam 4096 otc 3 2002 make-3.80
-rw-rw-r-- 1 sam sam 4823040 Jan 20 11:49 make-3.80.tar
$ls -l mak*
-rw-r--r-- 1 sam sam 24687 Oct 3 2002 ABOUT-NLS
-rw-r--r-- 1 sam sam 1554 Jul 8 2002 AUTHORS
^
drwxrwxr-x 5 sam sam 4096 Oct 3 2002 w32
抽取后, 当前目录中有两个名称以mak开始的文件: make-3.80.tar和make-3.80. 使用-d选项则ls命令只显示文件和目录的名称,不显示目录中的内容.
注意: -x选项抽取出的文件可能有多个, 并且有可能会覆盖已有的同名文件.
处理.tar.gz文件的一种简便方式是在tar命令中使用-z选项调用gunzip.如
$tar -xvzf make-3.80.tar.gz
处理.tar.bz2则可使用-j选项调用bunzip2.
3.7 定位命令
3.7.1 which和whereis: 定位一个工具
搜索路径: 当shell接收到一个命令时, 它将在一个目录列表中搜索具有那个名字的程序并执行第一个搜索到的.这个目录列表就是搜索路径.
which: 显示给定工具的完整路径.
$ which tar
/bin/tar
whereis: 在标准位置搜索给定工具的相关文件, 而不是只在用户搜索路径中查找.
$ whereis tar
tar: /bin/tar /usr/include/tar.h /usr/share/man/manl/tar.l.gz
注意: which和whereis都只能反馈普通命令的信息, 而不能正确查找与shell内置命令(shell builtins)相关的信息.
$ whereis echo
echo: /bin/echo /usr/share/man/manl/echo.l.gz /usr/share/man/manlp/echo.lp.gz/usr/share/man/man3/echo.3x.gz
echo同时是一个程序工具和一个shell内置命令,whereis只返回了它作为程序工具的信息
$ which echo
/bin/echo
实际上echo一般运行的都是内置命令版本
可以使用内置命令type来判断一个命令是不是内置命令.
$ type echo
echo is a shell builtin
which与whereis的比较:
which只在用户搜索路径中查找,并且只返回找到的第一个; 而whereis在整个标准目录列表中查找,并返回所有找到的信息
3.7.2 apropos: 按关键字查找
apropos工具通过与man页的简明描述(就是每页的首行)比对关键字来查找. 带-k(Keyword)选项的man命令具有相同的功能.
$ apropos who
3.7.3 whatis
whatis与apropos的区别在于whatis只查找并返回单词完全匹配的情况.
$ whatis who
3.7.4 slocate: 查找文件
slocate是locate的安全版本, 在本地系统中查找给定文件
$slocate motd
/lib/security/pam_motd.so
/usr/share/man/man5/motd.5.gz
/etc/motd
在使用slocate工具前, updatedb工具需要更新slocate数据库, 一般每天更新一次.
3.8 获取用户和系统信息
who: 列出在系统中的用户
$ who
$ who am i
finger: 列出登陆到了系统中的用户
finger可以列出很详细的信息, 不是很安全.
3.9 与其他用户通信
3.10 电子邮件
3.11 本章小结
练习
3. 如果名为done的文件已经存在,执行下列命令会发生什么?
4. 怎样确定在系统中有哪些可用的编辑文件的工具?
5. 当你用diff比较两个不同的二进制文件时会发生什么?(可以使用gzip工具创建二进制文件) 解释一下为什么对二进制文件和ASCII文件,diff的结果不同.
8. 使用which查找一个不在用户搜索路径中的命令(在别的目录中), 会发生什么情况?
9. 是否在本章中讨论的所由工具都在多个目录中存在? 如果是的话, 都在哪些目录中?
10. 试着通过文件名运行/usr/bin中的工具. 此文件夹中有几种不同的文件?
11. 可以用哪个命令查看文件status的开始几行?结尾几行呢?
高级练习
12. 重新创建在例子中使用的文件c.1和c.2. 用diff -u比较这两个文件, 你得到的结果与课堂上的是否相同?
13. 运行一下命令:
$ echo cat
$ cat echo
解释两者的差异.
16. 从网上下载一个.tar.bz2文件, 用两种方法解压并说明解压的过程.
特殊字符在shell中有特定的含义, 我们需要正确的使用它们.一般给文件或文件夹命名时最好不用:
& ; | * ? ' " ' [ ] ( ) $ < > { } ^ # / \ % ! ~ +
3.1.1 空白字符
RETURN, SPACE, 和TAB也有特殊用途. RETURN启动命令的执行,SPACE和TAB分隔命令行的各部分.
3.1.2 引用特殊字符
如果想将特殊字符当做普通字符使用, 则我们必需引用它们, 有两种办法.
1. 使用反斜杠 \
要引用特殊字符, 我们可以将特殊字符紧跟在反斜杠后面.
例如:
想输入 **
要这样输入 \*\*
想输入 \
要这样输入 \\
2. 使用单引号 '
用单引号将字符串括起来也能引用特殊字符, shell将其中的特殊字符和普通字符都当做普通字符看待.
例如:
'This is a special charater: >'
3.引用控制字符
引用删除字符(CONTROL-H), 行删除字符(CONTROL-U), 以及其它控制字符的方法是在它们的前面加上CONTROL-V.
如:
# echo 'xxxxCONTROL-U'
$ echo xxxxCONTROL-V CONTROL-U
{虽然在执行第二个命令行时,看不到行删除字符的回馈,但它确实在那里,不然:
$ echo xxxxCONTROL-v CONTROL-U | od -c
0000000 x x x x 025 \n
0000006
3.2 基本工具
Linux有很多工具, 我们在使用linux时, 都会直接或间接的使用这些命令.
目录, 别的操作系统一般叫文件夹, 是存放文件的地方. 当我们登陆系统后,默认就工作在我们的主文件夹中, 不特别指定,我们创建的文件就保存在我们的主文件夹中.
3.2.1 ls: 列出文件名
ls用来列出指定目录中所有文件的文件名.
$ ls
如下创建一个文本文件
$ vim practice
i
This is a snall file that I created with the vim.
ESC
:w
:q
$ls
$ cp practice practice1
$ cp practice practice2
3.2.2 cat: 显示文本文件的内容
cat从catenate而来, catenate是连接到一起的意思.
3.2.3 rm: 删除文件
rm(来自remove)可以用来删除文件.
rm删除文件时不会询问用户,要慎用.
例子: 使用ls, cat和rm
$ ls
pratice
$ cat pratice
This is a small file than I created with the vim.
$ rm pratice
$ ls
$ cat pratice
cat: pratice: No such file or directory
$
交互模式: -i选项
当我们给rn命令加上-i选项时, rm将给出确认信息, 并等你输入y之后才删除文件
$ rm -i practice1
rm: remove regular file 'practice1'? y
3.2.4 less和more: 一次显示一屏
使用less和more工具, 能每次显示一屏的方式查看较长的文件. less和more都是分页器.
less和more两者有细微的差别. 在文件的最后,less会显示一个文件结束的消息, 并等你按Q回到shell, 而more则在到达文件结束处后自动回到shell. 并且more不能向前翻页.
实际操作:
$ less /etc/termcap
$ more /etc/termcap
文件名补全功能
在命令行中某命令名后面输入几个字母后, 按TAB键能最大限度的补全文件名或列出可能的文件列表
3.2.5 hostname: 显示系统名称
$ hostname
3.3 文件操作
3.3.1 cp: 复制文件
cp(copy)命令能复制任何文件,包括文本文件和可执行(二进制)文件.
cp的语法如下
cp <源文件名> <目标文件名>
注意: 当存在与目标文件同名的文件时, cp复制文件时会覆盖此目标文件. 为此, 我们可使用-i选项.
例如:
$ cp -i pratice2 pratice3
$ cp -i pratice pratice1
3.3.2 mv: 更改文件名
可以用mv(move)来更改一个文件的名称,语法如下.
mv <原文件名> <新文件名>
$ mv practice2 practice2-n
mv命令也可能会覆盖已有的文件. 为此,可使用-i选项
$ mv -i practice3 practice3-n
$ mv -i practice3 pracitce3-n
$ mv practice2-n practice3-n
3.3.3 lpr: 打印文件
lpr将一个或多个文件放入打印队列中准备打印.
$ lpr practice-n
当有多台打印机可用时,可使用-P选项来指定打印机.
$ lpr -Pmailroom report
使用lpq可查看打印队列中都有哪些作业待打印.
lprm可用来删除待打印作业,终止打印作业,用作业号来指定是哪个作业.
$ lprm 86
可同时将多个打印作业放入打印队列.
$ lpr -Plaser1 05.txt 108.txt 12.txt
3.3.4 grep: 查找字符串
grep(global regular expression print)可以在一个或多个文件中查找指定的字符串, 显示包含指定字符串的行.
$ vim memo
i
Helen:
In our meeting on June 6 we
discussed the issue of credit.
Have you had any further thoughts
about it?
Alex
ESC
:wq
$grep 'credit' memo
discussed the issue of credit.
在本例中,文件memo若包含discrredit\creditor等单词, 则它们所在行也会显示在结果中.
-w选项限定grep的查找必需整个单词跟字符串相匹配.
$grep -w 'credit' memo
3.3.5 head: 显示文件的开始部分
默认显示开始的10行. 也可以指定要显示的行数.
$ head -1 mouths
3.3.6 tail: 显示文件的结尾部分
默认显示最后的10行.
可使用以下命令监视一个正在不断增长的文件.
$ tail -f logfile
3.3.7 sort: 将文件的内容按顺序显示.
sort工具将文件的内容按行排序显示, 但并不改变原文件.
$ sort memo
sort工具可用来按顺序输入表格. -u选项去掉重复的行, -n选项将一组数据按序输入.
3.3.8 uniq: 显示文本文件内容, 在显示中将文件中重复的行去掉
但是uniq并不改变原文件.
3.3.9 diff: 比较两个文件
diff工具比较两个文件并列出两者的不同之处. 比如说,我们可以用diff来比较两个报告, 比较一个程序的源码的不同版本.
diff使用-u选项时,首先显示两行用来分别指明被比较的文件哪个会标记为+,哪个会标记为-.
另外, -u选项还将多行的比较结果文本分割为很多块. 这些块以 @@xxxxxxxxxxx@@ 这样的行开始, 此行中指出了比较结果分别来自于两个文件的哪些行之间. 比较结果里用正负号标明了不同结果的来源文件.
$ diff -u practice2-n memo
$ diff -u c.1 c.2
--- c.1 2009-03-01 08:01:41 +0800
+++ c.2 2009-03-01 08:02:58 +0800
@@ -1, 6 +1, 5 @@
red
+blue
green
yellow
-pink
-purple
orange
3.3.9 file: 检测文件内容
使用file能不打开文件检测到文件的相关信息
$ vim test.jgp
i
This is a test files
ESC
:w
:q
$ file test.jpg
3.4 | (管道): 进程间通信
进程: 正在运行的程序
进程间通信是操作系统最主要的功能之一, 管道提供了进程间通信的一种简便方式.
$ cat months | head
使用管道能将一个程序的输出在打印机上打印:
$ tail months | lpr
3.5 4个有用的工具
3.5.1 echo: 显示输入的文本
echo将任何你在echo之后在命令行上的输入在显示屏上显示出来.
例如:
$ echo Hi
Hi
$ echo This is a sentence
This is a sentence
$ echo star: *
star: c.1 c.2 memo practice2-n practice3-n test.jpg
$ls
c.1 c.2 memo practice2-n practice3-n
echo在学习shell时很有用
3.5.2 date: 显示系统时间和日期
$ date
还可以指定格式和显示的内容
$ date +"%A %B %d"
3.5.3 script: 记录在Linux中发生的事务
script只在字符界面下有效. 并且script记录使用vim的事务不好阅读, 基本上没用.
script默认将事务记录在一个名叫typescript的文件中, 也可以由我们指定文件名.
-a选项将记录加入到文件的最后面.
$ script
script started, file is typescript
$ date
Thu Jan 20 10:28:48 PST 2005
$ who am i
alex pts/4 Jan 8 22:15
$exit
script done, file is typescript
使用命令exit结束记录事务. 可使用cat, less, more或编辑器等查看记录文件
3.5.4 unix2dos: 将Linux文件转化为Windows格式
下面是一个使用unix2dos将文件memo.txt转换为windows格式的例子.
$ unix2dos memo
不使用任何选项则unix2dos将覆盖原文件.
转换后的保存为新文件可使用-n选项.
dos2Unix: 将dos文件转换为Linux文件.
$ dos2unix memo
$ unix2dos -n memo memo-dos
3.6 压缩和文件存档
3.6.1 bzip2: 压缩文件
bzip2通过分析来压缩一个文件.
$ ls -l
-l(long)使ls显示更详细的信息.
在bzip2工具中使用-verbos(或 -v), 将显示压缩比.
bzip2在压缩文件时,一般都会在文件后加上扩展名.bz2.
bzip2不会改变原文件的修改时间.
3.6.2 buzip2和bzcat: 解压文件.
buzip2将被bzip2压缩的文件还原.
$buzip2 letter_e.bz2
bzcat先将压缩数据解压然后显示出来.
bzip2recover能从媒介错误中恢复有限数据.
3.6.2 gzip: 压缩文件
.gz: 用gzip压缩的文件用扩展名.gz来标示
gunzip: gzip, gunzip和zcat的用法跟bzip2, bunzip2和bzcat相同.
compress也可以用来压缩文件.
3.6.3 tar: 打包文件
tar用来将多个文件合成一个文件或文件夹, 和将文件从tar文件中抽取出来.
在下面的例子中,tar使用选项-c(create), -v(verbose), 和-f(write to or read from a file)来创建一个名为all.tar的档案文档.
tar会在创建的档案文档中增加一个首部.
$ ls -l c.1 c.2
-rw-rw-r-- 1 fhp fhp 36 3月 1 08:01 c.1
-rw-rw-r-- 1 fhp fhp 29 3月 1 08:02 c.2
$ tar -cvf all.tar c.1 c.2 memo
c.1
c.2
memo
$ ls -l all.tar
-rw-rw-r-- 1 fhp fhp 102405 3月 1 09:14 all.tar
$ tar -tvf all.tar
此tar命令使用-t选项以表格方式显示tar档案文件的内容. 如果使用-x代替-t则从档案文件中抽取出文件, 不使用-v则执行完后不反馈相关信息.
用tar处理后在用bzip2压缩的文件通常具有扩展名.tar.bz2 用tar处理后用gzip压缩的文件通常具有扩展名.tar.gz 可以分两步来还原这些文件.
下面演示一下怎样处理从网上下载的GNUmake工具包.(ftp.gnu.org)
$ls -l mak*
-rw-rw-r-- 1 sam sam 1211924 Jan 20 11:49 make-3.80.tar.gz
$gunzip mak*
-rw-rw-r-- 1 sam sam 1211924 Jan 20 11:49 make-3.80.tar
$tar -xvf mak*
make-3.80/
make-3.80/pro
make-3.80/pro/Makefile.in.in
^
make-3.80/tests/run-make-tests.pl
make-3.80/tests/test_driver.pl
在此, gunzip解压生成文件make-3.80.tar tar生成文件夹make-3.80并将抽取出的文件放入其中.
$ ls -ld mak*
drwxrwxr-x 8 sam sam 4096 otc 3 2002 make-3.80
-rw-rw-r-- 1 sam sam 4823040 Jan 20 11:49 make-3.80.tar
$ls -l mak*
-rw-r--r-- 1 sam sam 24687 Oct 3 2002 ABOUT-NLS
-rw-r--r-- 1 sam sam 1554 Jul 8 2002 AUTHORS
^
drwxrwxr-x 5 sam sam 4096 Oct 3 2002 w32
抽取后, 当前目录中有两个名称以mak开始的文件: make-3.80.tar和make-3.80. 使用-d选项则ls命令只显示文件和目录的名称,不显示目录中的内容.
注意: -x选项抽取出的文件可能有多个, 并且有可能会覆盖已有的同名文件.
处理.tar.gz文件的一种简便方式是在tar命令中使用-z选项调用gunzip.如
$tar -xvzf make-3.80.tar.gz
处理.tar.bz2则可使用-j选项调用bunzip2.
3.7 定位命令
3.7.1 which和whereis: 定位一个工具
搜索路径: 当shell接收到一个命令时, 它将在一个目录列表中搜索具有那个名字的程序并执行第一个搜索到的.这个目录列表就是搜索路径.
which: 显示给定工具的完整路径.
$ which tar
/bin/tar
whereis: 在标准位置搜索给定工具的相关文件, 而不是只在用户搜索路径中查找.
$ whereis tar
tar: /bin/tar /usr/include/tar.h /usr/share/man/manl/tar.l.gz
注意: which和whereis都只能反馈普通命令的信息, 而不能正确查找与shell内置命令(shell builtins)相关的信息.
$ whereis echo
echo: /bin/echo /usr/share/man/manl/echo.l.gz /usr/share/man/manlp/echo.lp.gz/usr/share/man/man3/echo.3x.gz
echo同时是一个程序工具和一个shell内置命令,whereis只返回了它作为程序工具的信息
$ which echo
/bin/echo
实际上echo一般运行的都是内置命令版本
可以使用内置命令type来判断一个命令是不是内置命令.
$ type echo
echo is a shell builtin
which与whereis的比较:
which只在用户搜索路径中查找,并且只返回找到的第一个; 而whereis在整个标准目录列表中查找,并返回所有找到的信息
3.7.2 apropos: 按关键字查找
apropos工具通过与man页的简明描述(就是每页的首行)比对关键字来查找. 带-k(Keyword)选项的man命令具有相同的功能.
$ apropos who
3.7.3 whatis
whatis与apropos的区别在于whatis只查找并返回单词完全匹配的情况.
$ whatis who
3.7.4 slocate: 查找文件
slocate是locate的安全版本, 在本地系统中查找给定文件
$slocate motd
/lib/security/pam_motd.so
/usr/share/man/man5/motd.5.gz
/etc/motd
在使用slocate工具前, updatedb工具需要更新slocate数据库, 一般每天更新一次.
3.8 获取用户和系统信息
who: 列出在系统中的用户
$ who
$ who am i
finger: 列出登陆到了系统中的用户
finger可以列出很详细的信息, 不是很安全.
3.9 与其他用户通信
3.10 电子邮件
3.11 本章小结
练习
3. 如果名为done的文件已经存在,执行下列命令会发生什么?
4. 怎样确定在系统中有哪些可用的编辑文件的工具?
5. 当你用diff比较两个不同的二进制文件时会发生什么?(可以使用gzip工具创建二进制文件) 解释一下为什么对二进制文件和ASCII文件,diff的结果不同.
8. 使用which查找一个不在用户搜索路径中的命令(在别的目录中), 会发生什么情况?
9. 是否在本章中讨论的所由工具都在多个目录中存在? 如果是的话, 都在哪些目录中?
10. 试着通过文件名运行/usr/bin中的工具. 此文件夹中有几种不同的文件?
11. 可以用哪个命令查看文件status的开始几行?结尾几行呢?
高级练习
12. 重新创建在例子中使用的文件c.1和c.2. 用diff -u比较这两个文件, 你得到的结果与课堂上的是否相同?
13. 运行一下命令:
$ echo cat
$ cat echo
解释两者的差异.
16. 从网上下载一个.tar.bz2文件, 用两种方法解压并说明解压的过程.
签名:

UID 58024
