第一章 引言
shell 是和键盘打交道的,但你也可以在终端仿真器里使用鼠标。X 窗口系统 (使 GUI 工作的底层引擎)内建了一种机制,支持快速拷贝和粘贴技巧。 如果你按下鼠标左键,沿着文本拖动鼠标(或者双击一个单词)高亮了一些文本, 那么这些高亮的文本就被拷贝到了一个由 X 管理的缓冲区里面。然后按下鼠标中键, 这些文本就被粘贴到光标所在的位置。
第二章 : 什么是 shell
date
这个命令显示系统当前时间和日期。
cal
它默认显示当前月份的日历。
df
查看磁盘剩余空间的数量。
free
显示空闲内存的数量。
要从一个虚拟控制台转换到另一个,按下 Ctrl-Alt-F1 到 Ctrl-Alt-F6 访问。返回图形桌面,按下 CtrlA-lt-F7。
第三章:文件系统中跳转
pwd
打印出当前工作目录名
cd
更改目录
ls
列出目录内容
符号 “.” 指的是工作目录,”..” 指的是工作目录的父目录
cd ./bin
在几乎所有的情况下,可以省略”./”,它是隐含的输入。如果不指定一个文件的路径,那它被默认为在当前工作目录下。
cd ..
当用户以普通用户的身份操控系统时,home目录是唯一 允许用户写入文件的地方。
cd
更改工作目录到你的home目录。
cd -
更改工作目录到先前的工作目录。
cd ~user_name
更改工作目录到用户home目录。例如, cd ~bob 会更改工作目录到用户“bob”的home目录。
以 “.” 字符开头的文件名是隐藏文件。这仅表示,ls 命令不能列出它们, 用ls -a
命令就可以了。
第四章:探究操作系统
ls ~ /usr
列出多个指定目录的内容。在这个例子中,将会列出用户家目录(用字符“~”代表)和/usr 目录的内容。
ls -l
使用 ls 命令的“-l”选项,则结果以长模式输出。
大多数命令使用的选项,是由一个中划线加上一个字符组成,例如,“-l”,但是许多命令,包括来自于 GNU 项目的命令,也支持长选项,长选项由两个中划线加上一个字组成,如-a对应的长选项为--all。当然, 许多命令也允许把多个短选项串在一起使用。
ls -lt --reverse
“l” 选项产生长格式输出,“t”选项按文件修改时间的先后来排序。加上长选项 “–reverse”,则结果会以相反的顺序输出。
ls -d -l
把-d这个选项与 -l 选项结合使用,可以看到所指定目录的详细信息,而不是目录中的内容。
ls -h -l
当以长格式列出时,以人们可读的格式,而不是以字节数来显示文件的大小。-S命令输出结果按照文件大小来排序。 -t 按照修改时间来排序。
-rw-r--r-- 对于文件的访问权限。第一个字符指明文件类型。在不同类型之间, 开头的“-”说明是一个普通文件,“d”表明是一个目录。其后三个字符是文件所有者的 访问权限,再其后的三个字符是文件所属组中成员的访问权限,最后三个字符是其他所 有人的访问权限。
file filename
确定文件类型,如file picture.jpg
。
less filename
浏览文件内容,一旦 less 程序运行起来,我们就能浏览文件内容了。如果文件内容多于一页,那么我们可以上下滚动文件。按下“q”键, 退出 less 程序。按下“h”键 显示帮助屏幕。
在计算机中,数字可以 用来代表信息。毕竟,计算机只能理解数字,这样所有的数据都被转换成数值来表示,如ASCII 文本。文本只是包含 简单的字符到数字的映射,是简单的字符与数字之间的一对一映射。它和一些文字处理器文档不一样,比如说由微软或 OpenOffice.org 文档 编辑器创建的文件。这些文件,和简单的 ASCII 文件形成鲜明对比,它们包含许多非文本元素,来描述它的结构和格式。 纯 ASCII 文件只包含字符本身,和一些基本的控制符,像制表符、回车符及换行符。
符号链接:在大多数“类 Unix” 系统中, 有可能一个文件被多个文件名所指向。如 lrwxrwxrwx 1 root root 11 2007-08-11 07:34 libc.so.6 -> libc-2.6.so 第一个字符是“l”。这个符号链接指向一个 叫做 “libc-2.6.so” 的共享库文件。这意味着,寻找文件 “libc.so.6” 的程序,实际上得到是文件 “libc-2.6.so”。比方说,我们安装了文件 “foo” 的 2.6 版本,它的 文件名是 “foo-2.6”,然后创建了叫做 “foo” 的符号链接,这个符号链接指向 “foo-2.6”。 这意味着,当一个程序打开文件 “foo” 时,它实际上是打开文件 “foo-2.6”。 现在,每个人都很高兴。依赖于 “foo” 文件的程序能找到这个文件,并且我们能知道安装了哪个文件版本。 当升级到 “foo-2.7” 版本的时候,仅添加这个文件到文件系统中,删除符号链接 “foo”, 创建一个指向新版本的符号链接。这不仅解决了版本升级问题,而且还允许在系统中保存两个不同的文件版本。 假想 “foo-2.7” 有个错误(该死的开发者!),那我们得回到原来的版本。 一样的操作,我们只需要删除指向新版本的符号链接,然后创建指向旧版本的符号链接就可以了。
还有一种链接类型,叫做硬链接。硬链接同样允许文件有多个名字, 但是硬链接以不同的方法来创建多个文件名。
第五章:操作文件和目录
cp
— 复制文件和目录
mv
— 移动/重命名文件和目录
mkdir
— 创建目录
rm
— 删除文件和目录
ln
— 创建硬链接和符号链接
通配符
*
匹配任意多个字符(包括零个或一个)
?
匹配任意一个字符(不包括零个)
[characters]
匹配任意一个属于字符集中的字符
[!characters]
匹配任意一个不是字符集中的字符
[[:class:]]
匹配任意一个属于指定字符类中的字符
最常使用的字符类:
[:alnum:] 匹配任意一个字母或数字
[:alpha:] 匹配任意一个字母
[:digit:] 匹配任意一个数字
[:lower:] 匹配任意一个小写字母
[:upper:] 匹配任意一个大写字母
一些类型匹配的范例:
- 所有文件
g* 文件名以“g”开头的文件
b.txt 以"b"开头,中间有零个或任意多个字符,并以".txt"结尾的文件
Data??? 以“Data”开头,其后紧接着3个字符的文件
[abc] 文件名以"a","b",或"c"开头的文件
BACKUP.[0-9][0-9][0-9] 以"BACKUP."开头,并紧接着3个数字的文件
[[:upper:]]* 以大写字母开头的文件
[![:digit:]]* 不以数字开头的文件
*[[:lower:]123] 文件名以小写字母结尾,或以 “1”,“2”,或 “3” 结尾的文件
mkdir - 创建目录
mkdir dir1 dir2 dir3
会创建三个目录,名为 dir1, dir2, dir3。
cp - 复制文件和目录
cp file1 file2 dir1
复制文件 file1 和文件 file2 到目录 dir1。目录 dir1 必须存在。
cp dir1/* dir2
使用一个通配符,在目录 dir1 中的所有文件都被复制到目录 dir2 中。 dir2 必须已经存在。
cp -r dir1 dir2
复制目录 dir1 中的内容到目录 dir2。如果目录 dir2 不存在, 创建目录 dir2,操作完成后,目录 dir2 中的内容和 dir1 中的一样。 如果目录 dir2 存在,则目录 dir1 (和目录中的内容)将会被复制到 dir2 中。
参数:
-a, --archive 复制文件和目录,以及它们的属性,包括所有权和权限。 通常,复本具有用户所操作文件的默认属性
-i, --interactive 在重写已存在文件之前,提示用户确认。如果这个选项不指定, cp 命令会默认重写文件。
-r, --recursive 递归地复制目录及目录中的内容。当复制目录时, 需要这个选项(或者-a 选项)。
-u, --update 当把文件从一个目录复制到另一个目录时,仅复制目标目录中不存在的文件,或者是文件内容新于目标目录中已经存在的文件。
mv - 移动和重命名文件
mv file1 file2
移动 file1 到 file2。如果 file2 存在,它的内容会被 file1 的内容重写。 如果 file2 不存在,则创建 file2。 这两种情况下,file1 都不再存在。这相当于重命名。
mv -i file1 file2
除了如果 file2 存在的话,在 file2 被重写之前,用户会得到 提示信息外,这个和上面的选项一样。
mv file1 file2 dir1
移动 file1 和 file2 到目录 dir1 中。dir1 必须已经存在。
mv dir1 dir2
如果目录 dir2 不存在,创建目录 dir2,并且移动目录 dir1 的内容到 目录 dir2 中,同时删除目录 dir1。如果目录 dir2 存在,移动目录 dir1(及它的内容)到目录 dir2。
rm - 删除文件和目录
选项:
-i, --interactive 在删除已存在的文件前,提示用户确认信息。 如果不指定这个选项,rm 会默默地删除文件
-r, --recursive 递归地删除文件,这意味着,如果要删除一个目录,而此目录 又包含子目录,那么子目录也会被删除。要删除一个目录,必须指定这个选项。
-f, --force 忽视不存在的文件,不显示提示信息。这选项覆盖了“--interactive”选项。
-v, --verbose 在执行 rm 命令时,显示翔实的操作信息。
rm file1
默默地删除文件
rm -i file1
除了在删除文件之前,提示用户确认信息之外,和上面的命令作用一样。
rm -r file1 dir1
删除文件 file1, 目录 dir1,及 dir1 中的内容。
rm -rf file1 dir1
同上,除了如果文件 file1,或目录 dir1 不存在的话,rm 仍会继续执行。
小心 rm! Linux,没有复原命令。一旦你用 rm 删除了一些东西, 它就消失了。
小贴士。 当你使用带有通配符的rm命令时(除了仔细检查输入的内容外), 先用 ls 命令来测试通配符。这会让你看到将要被删除的文件是什么。然后按下上箭头按键,重新调用 刚刚执行的命令,用 rm 替换 ls。
ln — 创建链接
ln file link
创建硬链接
ln -s item link
创建符号链接,,”item” 可以是一个文件或是一个目录
第六章:使用命令
type
– 说明怎样解释一个命令名
which
– 显示会执行哪个可执行程序
man
– 显示命令手册页
apropos
– 显示一系列适合的命令
info
– 显示命令 info
whatis
– 显示一个命令的简洁描述
alias
– 创建命令别名
命令的类别:
- 是一个可执行程序
- 是一个内建于 shell 自身的命令,shell 内部命令
- 是一个 shell 函数。这些是小规模的 shell 脚本,它们混合到环境变量中
- 是一个命令别名
type
显示命令的类型,如type ls
。
which - 显示一个可执行程序的位置
只对可执行程序有效,不包括内建命令和命令别名。
which ls
help - 得到 shell 内建命令的帮助文档
help cd
cd: cd [-L|-P] [dir] 出现在命令语法说明中的方括号,表示可选的项目。一个竖杠字符 表示互斥选项。
--help - 显示用法信息
mkdir --help
man - 显示程序手册页
man ls
man 所显示的参考手册,被分成几个章节:1 用户命令;2 程序接口内核系统调用;3 C 库函数程序接口;4 特殊文件,比如说设备结点和驱动程序;5 文件格式;6 游戏娱乐,如屏幕保护程序;7 其他方面;8 系统管理员命令。
要查看参考手册的特定章节,从而找到我们需要的信息,可以来指定章节号,如man 5 passwd
命令运行结果会显示文件 /etc/passwd 的文件格式说明手册。
apropos - 显示适当的命令
基于关键字的匹配,搜索参考手册列表,输出结果每行的第一个字段是手册页的名字,第二个字段展示章节。注意,man 命令加上”-k”选项, 和 apropos 完成一样的功能。如apropos floppy
。
whatis - 显示非常简洁的命令说明
手册页晦涩难懂的。whatis ls`显示匹配特定关键字的手册页的名字和一行命令说明。
info - 显示程序 Info 条目
GNU 项目提供了一个命令程序手册页的替代物,称为”info”。info 内容可通过 info 阅读器 程序读取。info 程序读取 info 文件,info 文件是树型结构,分化为各个结点,每一个包含一个题目。 info 文件包含超级链接,它可以让你从一个结点跳到另一个结点。一个超级链接可通过 它开头的星号来辨别出来,把光标放在它上面并按下 enter 键,就可以激活它。
? 显示命令帮助
PgUp or Backspace 显示上一页
PgDn or Space 显示下一页
n 下一个 - 显示下一个结点
p 上一个 - 显示上一个结点
u Up - 显示当前所显示结点的父结点,通常是个菜单
Enter 激活光标位置下的超级链接
q 退出
如info coreutils
将会显示一个包含超级链接的手册页,这些超级链接指向包含在 coreutils 包中的各个程序。
许多安装在系统中的软件,都有自己的文档文件,位于/usr/share/doc 目录下。 这些文件大多数是以文本文件的形式存储的,可用 less 阅读器来浏览。一些文件是 HTML 格式, 可用网页浏览器来阅读。我们可能遇到许多以”.gz”结尾的文件。这表示 gzip 压缩程序 已经压缩了这些文件。gzip 软件包包括一个特殊的 less 版本,叫做 zless,zless 可以显示由 gzip 压缩的文本文件的内容。
用别名(alias)创建你自己的命令
可以把多个命令放在同一行上,命令之间 用”;”分开,如
cd /usr; ls; cd -
首先更改目录到/usr,然后列出目录 内容,最后回到原始目录(用命令”cd -“),结束在开始的地方。可以通过 alias 命令 把这一串命令转变为一个命令。
我们要做的第一件事就是为我们的新命令构想一个名字。 比方说”foo”。在使用”foo”之前,查明是否”foo”命令名已经存在系统中,可以使用 type 命令:如type foo
。
创建命令别名(等号前后没有空格):alias foo='cd /usr; ls; cd -'
删除别名,使用 unalias 命令:unalias foo
要查看所有定义在系统环境中的别名,使用不带参数的 alias 命令alias
在命令行中定义别名有点儿小问题。当你的 shell 会话结束时,它们会消失。之后我们会了解怎样把自己的别名添加到文件中去。
网友评论