第一章 什么是shell
shell就是一个程序,它接受从键盘输入的命令,然后把命令传递给操作系统执行。当使用图像用户界面时,我们需要一个叫做终端仿真器的程序和shell作交互。超级用户的提示符是$
,普通用户的提示符为#
.
一些简单的命令
- date:显示系统当前的日期和时间
- cal:显示当前月份的日历
- df: 查看磁盘剩余空间的数量
- free:显示内存空闲的数量
- exit: 结束终端会话
第二章 文件系统中跳转
显示当前工作目录
pwd
列出目录内容
ls
更改当前工作目录
cd
相对路径
.
: 工作目录..
: 工作目录的父目录~
: 家目录
第三章 研究操作系统
ls命令选项和参数
选项 | 长选项 | 描述 |
---|---|---|
-a | –all | 列出所有文件包括隐藏文件 |
-h | –human-readable | 以人们可读的格式列出 |
-l | 以长格式显示结果 | |
-r | –reverse | 以相反的顺序显示结果 |
-S | 按文件大小来排序 | |
-t | 按修改时间来排序 |
深入研究长格式
-rw-r–r– 1 ma staff 4579 2 3 10:09 debug.log
字段 | 含义 |
---|---|
-rw-r–r– | 文件的访问权限。第一个字符指明文件类型,‘-’是一个普通文件,‘d’是一个目录。后面三个是所有者的权限,再三个是群组成员的权限,后三个是其它人的权限。 |
1 | 文件的硬链接数目 |
Ma | 文件所属的用户名 |
staff | 文件所属的群组名 |
4579 | 以字节数表示的文件大小 |
—- | 上次修改的文件日期 |
*** | 文件名 |
确定文件类型
file filename
用less浏览文件内容
Less filename
less常用的键盘命令:
命令 | 行为 |
---|---|
page up or b | 向上翻页 |
page down or space | 向下翻页 |
G | 移动到最后一个行 |
1G or g | 移动到开头一行 |
/characters | 向前查找指定的字符串 |
n | 向下查找下一个出现的字符 |
h | 显示帮助 |
q | 退出less |
第四章 操作文件和目录
通配符
通配符 | 意义 |
---|---|
* | 匹配任意多个字符,包括0个和1个 |
? | 匹配任意一个字符 |
[characters] | 匹配任意一个属于字符集中的字符 |
[!characters] | 匹配任意一个非字符集中的字符 |
[[:class:]] | 匹配任意一个指定类中的字符 |
常用的字符类:
| 字符符 | 意义 |
| ———————- | —————————— |
| [:alnum:] | 匹配任意一个字母或数字 |
| [:alpha:] | 匹配任意一个字母 |
| [:digit:] | 匹配任意一个数字 |
| [:upper:]或者[:lower:] | 匹配任意一个大写或者小写字母 |
mkdir创建目录
mkdir dir1 dir2
创建目录dir1和dir2
cp 复制文件和目录
cp item1 item2
cp item1… directory
一些有用的选项
选项 | 意义 |
---|---|
-a, –archive | 复制文件和目录,以及他们的属性 |
-i, –interactive | -i, –interactive |
-r, –recursive | 递归地复制目录和文件,复制目录时,需要这个选项 |
-u, –update | 仅复制目标目录中不存在的文件 |
mv 移动和重命名文件
mv item1 item2
一些选项
选项 | 意义 |
---|---|
-i, –interactive | -i, –interactive |
-u, –update | 仅复制目标目录中不存在的文件 |
rm 删除文件和目录
rm选项和意义:
选项 | 意义 |
---|---|
-i,–interactive | 删除前提示用户 |
-r,–recursive | 递归地删除文件,若删除目录则需指定这个选项 |
-f,–force | 忽视不存在的文件,不显示提示信息 |
-v,–verbose | 执行命令时,显示详实的信息 |
Linux系统没有复原命令,一旦用rm删除一些东西,就永远消失了,所以无论啥时候,rm命令用到通配符的时候,先用ls
测试通配符。
第五章 使用命令
命令是什么
命令可以是下列4种形式之一:
- 是一个可执行程序
- 是一个内建于shell自身的命令
- 是一个shell函数
- 是一个命令别名
显示命令的类型
type
是shell的内部命令,它会显示命令的类别,给出一个特定的命令名。
显示一个可执行程序的位置
使用which
命令可以确定所给定的执行程序的准确位置。
得到shell内部命令的帮助文档
使用help command
命令得到命令的帮助文档;许多可执行程序支持--help
选项,显示此命令支持的语法和选项说明。
man 显示程序手册页
whatis 显示非常简洁的命令说明
info 显示程序的Info条目
创建别名
使用alias
命令创建命令的别名,使用方法
alias name=’string’
注意:name与string之间没有空格。string是一系列的命令,name是这一系列命令的别名,下次输入name时等价于输入string。
使用unalias
命令删除别名。
第六章 重定向
标准输入输出
一般地,输出送到屏幕,输入来自键盘,但是通过I/O重定向我们可以改变输入输出的方向。
重定向标准输出
使用>
重定向符,后面跟着文件名,则会把原本输出到标准输出的内容输出到重定向符后面的文件中。需要注意的是使用>
重定向符重定向输出结果时,目标文件总是从头开始被重写。所以当我们需要删除一个文件内容或者新建一个空文件的时候,可以使用这样一个技巧:
> filename
使用>>
重定向符可以把重定向结果追加到文件内容后面,而不是重头开始写文件,如果文件不存在,文件会被新建。
>> filename
重定向标准错误
文件描述符0,1,2分别表示标准输入、输出和错误。
ls -l /bin/usr 2> ls-error.txt
文件描述符’2‘紧挨着放在重定向符之前,执行重定向标准错误到文件ls-error.txt任务。
重定向标准输出和错误到同一个文件
第一种方法:
ls -l /bin/usr > ls-output.txt 2>&1
这里使用了两次重定向,首先重定向标准输出到文件ls-output.txt,然后重定向文件描述符2到文件描述符1,使用表示法2>&1.
第二种方法:
ls -l /bin/usr &> ls-output.txt
处理不需要的输出
ls -l /bin/usr 2> /dev/null
重定向标准输入
cat 连接文件
cat命令读取一个或多个文件,然后复制他们到标准输出,cat经常用来显示简短的文本文件。
cat [file]
cat可以将多个文件连接成或者合并为一个文件:
cat file1 … filem > cat_file
管道线
管道线操作符|
可以使一个命令的标准输出作为另一个命令的标准输入:
command1 | command2
过滤器
- sort,排序
- uniq,忽略重复行
- wc,打印行,字和字节数
- grep,打印匹配行
- head/tail,打印文件开头、结尾部分
第七章 从shell眼中看世界
字符展开
算术表达式展开
花括号展开
通过它可以从一个包含花括号的模式中创建多个字符串。
ma$ echo F-{a,b,c}-B
F-a-B F-b-B F-c-B
ma$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
echo {A..Z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
参数展开
其实就是shell中的变量。
命令替换
ma\$ ls -l \$(which cd)
-rwxr-xr-x 15 root wheel 190 8 18 08:20 /usr/bin/cd
which cd
会返回一个路径。
双引号
双引号中的文本被当做普通字符看待,但是参数展开和算术表达式展开仍然有效。
单引号
所有的展开将被禁止。
转义字符
转移序列 | 含义 |
---|---|
\a | 响铃 |
\b | 退格键 |
\n | 换行 |
\r | 回车符 |
\t | 制表符 |
第八章 键盘高级技巧
移动光标
按键 | 行动 |
---|---|
Ctrl-a | 移动光标到行首 |
Ctrl-e | 行尾 |
Ctrl-f | 右键头 |
Ctrl-b | 左箭头 |
Alt-f | 光标前移一个字 |
Alt-b | 光标后移一个字 |
Ctrl-l | 清空屏幕,同clear命令相同 |
修改文本
按键 | 行动 |
---|---|
Ctrl-d | 删除光标位置的字符 |
Ctrl-t | 光标位置的字符和光标前面的字符互换位置 |
Alt-t | 光标位置的字和前面的字互换位置 |
Alt-l | 把光标位置到字尾的字符换成小写字母 |
Alt-u | 把光标位置到字尾的字符换成大写字母 |
剪切和粘贴
按键 | 行动 |
---|---|
Ctrl-k | 剪切光标位置到行尾的文本 |
Ctrl-u | 剪切光标位置到行首的文本 |
Alt-d | 剪切光标位置到词尾的文本 |
Alt-backspace | 剪切光标位置到词头的文本 |
Ctrl-y | 把剪切板的内容粘贴到光标位置 |
历史命令
history
显示历史命令。
可以通过
history | less
来浏览历史命令。通过执行
history | grep 目录
来找到此目录中的命令。通过
!行号
来执行历史命令中此行号对应的命令。
第九章 权限
创建一个文件并显示它的详细信息
$ > foo.txt
$ ls -l foo.txt
-rw-r–r– 1 ma staff 0 2 16 19:46 foo.txt
显示的前十个字符是文件的属性,第一个字符表示文件的类型。下表是文件常见的类型:
属性 | 文件类型 |
---|---|
- | 普通文件 |
d | 目录 |
l | 符号链接 |
c | 字符设备文件 |
b | 快设备文件 |
剩下的九个字符代表文件所有者、文件组所有者、其他人的读写和执行权限。
chmod 更改文件模式
可以使用两种方法改变文件模式:八进制数字表示法和符号表示法。
数字表示法
因为对所有者、群组和其他人分别有r、w、x三种权限,所以假如对于所有者的权限来讲,所有者对文件有r权限和w权限,但是x权限没有,那么他有的权限的位置就置为1,反之为0,那么对应地二进制表示为110,与此对应的八进制为6,即所有者的权限用一个4表示,其它群组和其他人时同理,所以一个文件可以用3个八进制数字表示它的权限模式。例如改变foo.txt的文件权限:
$ chmod 600 foo.txt
$ ls -l foo.txt
-rw——- 1 ma staff 0 2 16 19:46 foo.txt
符号表示法
符号表示法分为3个部分:更改会影响谁,要执行那个操作,要设置哪种权限。
符号 | 含义 |
---|---|
u | 文件所有者 |
g | 用户组 |
o | 其他人 |
a | u、g、o三者的组合 |
若没有指定字符,则假定使用a。
执行的操作有两种:+
增加一个权限,-
删掉一个权限。
权限用r、w、x指定。例如
$ chmod g+r foo.txt
$ ls -l foo.txt
-rw-r—– 1 ma staff 0 2 16 19:46 foo.txt
更改身份
su 以其他用户和组ID运行一个shell
su命令以另一个用户的身份来启动shell:
su [-[l]] [user]
如果包含-l选项,那么会为指定用户启动一个需要登录的shell,意味着会加载这个用户的shell环境,并且工作目录会更改到这个用户的家目录。如果不指定用户,则默认启动超级用户。-l可以缩写为-,例如启动超级用户:
su -
当工作完成后,输入exit
返回原来的shell。也可以只执行单个命令,而不是启动一个新的可交互的shell,
su -c ‘command’
命令用单引号括起来。
sudo 以另一个用户身份执行命令
sudo很多方面类似于su,但sudo还有其他一些总要的功能。管理员可以配置sudo命令,从而使用户以不同身份通过一种可控的方式来执行命令。sudo命令不要求超级用户的密码,而是需要自己的密码来认证。sudo命令不会重新启动一个shell,命令不必用单引号括起来。
chown 更改文件所有者和用户组
使用这个命令需要超级用户权限。命令语法:
chown [owner][:[grou]] file…
更改用户密码
只要输入passwd
命令,就能更改你的密码。
References
- William E.Shotts,Linux命令行大全