The Linux Command Line学习笔记(一)

记录读《The Linux Command Line》的学习笔记,因为之前是记在印象笔记里面的,格式有点对不上,这里内容就全部粘贴到代码框里面。

另外一篇此书的学习笔记博客


文件查看

1
`pwd  —  打印出当前工作目录名`
1
`ls    —    列出目录内容ls -l  # 长模式ls -l  # 修改时间排序ls -a # 显示所用文件,默认不显示隐藏文件ls -S  # 按大小排序me@linuxbox    ~]$    ls    /usr   # 除了当前工作目录以外,也可以指定要列出内容的目录[me@linuxbox    ~]$    ls    ~    /usr #列出多个指定目录的内容 ,家目录(用字符“~”代表)`
1
2
3
4
5
cd    —    更改目录
符号 “.” 指的是工作目录(找下一层使用,一般可省略使用),”..” 指的是工作目录的父目录(找上一层使用)
| cd | 更改工作目录到你的家目录。 |
| cd - | 更改工作目录到先前的工作目录。 |
| cd ~user_name | 更改工作目录到用户家目录。例如, cd ~bob 会更改工作目录到用户“bob”的家目
1
2
3
4
linux一切皆文件,不依赖后缀名判断
使用 file 打印文件描述
me@linuxbox ~]$ file picture.jpg
picture.jpg: JPEG image data, JFIF standard 1.01
1
2
3
4
5
6
less浏览文本文件内容,以下是常用命令
| G | 移动到最后一行 |
| 1G or g | 移动到开头一行 |
| /charaters | 向前查找指定的字符串 |
| q | 退出 less 程序 |
| h | 显示帮助屏幕 |

文件操作

1
2
3
4
5
6
接受文件名作为参数的任何命令,都可以使用通配符,要记得一些简单的规则(类似正则)
cp item1 item2 — 复制文件和目录
mv item1 item2— 移动/重命名文件和目录
mkdir dir1 — 创建目录
rm item1 — 删除文件和目录(一旦删除不可恢复,慎重使用)
ln — 创建硬链接和符号链接
1
2
3
4
5
6
7
8
9
10
这里列举了    cp    命令一些有用的选项(短选项和等效的长选项):其他操作也类同
| -a, --archive | 复制文件和目录,以及它们的属性,包括所有权和权限。
| -i, --interactive | 在重写已存在文件之前,提示用户确认
| -r, --recursive | 递归地复制目录及目录中的内容。当复制目录时, 需要这个选项(或者-a 选项)。 |
| -u, --update | 当把文件从一个目录复制到另一个目录时,仅复制 目标目录中不存在的文件,或者是文
件内容新于目标目录中已经存在的文件。 |
| -v, --verbose | 显示翔实的命令操作信息 |

rm命令参数选项:
| -f, --force | 忽视不存在的文件,不显示提示信息。这选项颠覆了“--interactive”选项。 |
1
`ln    命令即可创建硬链接,也可以创建符号链接。`
1
`重命名:[me@linuxbox    playground]$    mv    oldname  newname`

使用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
type    –    说明怎样解释一个命令名
which – 显示会执行哪个可执行程序
man – 显示命令手册页 ,完整正式又复杂
apropos – 显示一系列适合的命令,基于某个关键字的匹配项搜索
info – 显示命令 info
whatis – 显示一个命令的简洁描述
alias – 创建命令别名

到底什么是命令?命令可以是下面四种形式之一:
1. 是一个可执行程序,比如说shell,perl,python,ruby,等等。
2. 是一个内建于 shell 自身的命令。cd 命令,就是一个 shell 内部命令。
3. 是一个 shell 函数。
4. 是一个命令别名。


[me@linuxbox ~]$ type ls
ls is aliased to `ls --color=tty`
[me@linuxbox ~]$ which ls
/bin/ls
[me@linuxbox ~]$ help cd
cd: cd [-L|-P] [dir] # 方括号,表示可选的项目。一个竖杠字符 表示互斥选项
[me@linuxbox ~]$ mkdir --help # 显示命令所支持的语法和选项说明
Usage: mkdir [OPTION] DIRECTORY...
[me@linuxbox ~]$ man ls # 手册页的组织形式| 章节 | 内容 |,可以指定章号
[me@linuxbox ~]$ apropos floppy #以”floppy”为关键词来搜索参考手册的
create_floppy_devices (8) - udev callout to create all possible #输出结果每行的第一个字段是手册页的名字,第二个字段展示章节。注意,man 命令加上”-k”选项,和 apropos 完成一样的功能。
许多手册页都很难阅读,whatis 程序显示匹配特定关键字的手册页的名字和一行命令说明。
info - GNU 项目提供了一个命令程序手册页的替代物,称为”info”,输入”info”,接着输入程序名称,启动 info。下表中的命令,当显示一个 info 页面时, 用来控制阅读器。
表 6-2: info 命令
| 命令 | 行为 |
| --- | --- |
| ? | 显示命令帮助 |
| Pg Up or Backspace | 显示上一页 |
| Pg Dn or Space | 显示下一页 |
| n | 下一个 - 显示下一个结点 |
| p | 上一个 - 显示上一个结点 |
| u | Up - 显示当前所显示结点的父结点,通常是个菜单 |
| Enter | 激活光标位置下的超级链接 |
| q | 退出 |

[me@linuxbox ~]$ type test # 检测新命名是否与系统重名
test is a shell builtin #重名,需要换一个
[me@linuxbox ~]$ type foo # 检测
bash: type: foo: not found # 不重名,可以使用这个新命名
[me@linuxbox ~]$ alias foo='cd /usr; ls; cd -' #通过 alia 命令 把这一串命令转变为一个命令
注意命令结构:alias name='string'。在命令”alias”之后,输入“name”,紧接着(没有空格)是一个等号,等号之后是 一串用引号引起的字符串,字符串的内容要赋值给 name
删除别名,使用 unalias 命令,像这样:
[me@linuxbox ~]$ unalias foo
[me@linuxbox ~]$ type foo
bash: type: foo: not found

IO重定向

1
`重定向命令的输入输出,命令的输入来自文件,而输出也存到文件。    也可以把多个命令连接起来组成一个强大的命令管道。为了炫耀这个工具,我们将叙述    以下命令:`

第八章:从shell眼中看世界

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
echo    是一个    shell    内部命令,来完成非常简单的任务。    它在标准输出中打印出它的文本参数。

[me@linuxbox ~]$ echo this is a test
this is a test
[me@linuxbox ~]$ echo *
Desktop Documents ls-output.txt Music Pictures Public Templates Videos

为什么 echo 不打印“*”呢,最简单的答案就是在 echo 命令被执行前, shell 把“*”展开成了 另外的东西(在这种情况下,就是在当前工作目录下的文件名字)
类似还有

[me@linuxbox ~]$ echo this is a test
this is a test
[me@linuxbox ~]$ echo The total is $100.00
The total is 00.00 # $1的值替换为一个空字符串,因为 1 是没有定义的变量



路径名展开
这种通配符(即*)工作机制叫做路径名展开(当前工作目录下的文件名字)

[me@linuxbox ~]$ echo D*
Desktop Documents #列出当前工作目录下的D开头的文件名字

波浪线展开
波浪线字符(“~”)有特殊的意思。当它用在 一个单词的开头时,它会展开成指定用户的家目录名,如果没有指定用户名,则是当前用户的家目录:

[me@linuxbox ~]$ echo ~
/home/me

算术表达式展开
shell 允许算术表达式通过展开来执行。这允许我们把 shell 提示当作计算器来使用:

[me@linuxbox ~]$ echo $((2 + 2))
4
| / | 除(取整数除法,所以结果是整数。) |
| % | 取余,只是简单的意味着,“余数” |
| ** | 取幂 |

[me@linuxbox ~]$ echo Five divided by two equals $((5/2))
Five divided by two equals 2
[me@linuxbox ~]$ echo with $((5%2)) left over.
with 1 left over.

花括号展开
可能最奇怪的展开是花括号展开。通过它,你可以从一个包含花括号的模式中 创建多个文本字符串。例子:

[me@linuxbox ~]$ echo Front-{A,B,C}-Back
Front-A-Back Front-B-Back Front-C-Back
[me@linuxbox ~]$ echo {Z..A} #可以一系列整数和字符
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
[me@linuxbox ~]$ echo a{A{1,2},B{3,4}}b #嵌套
a A1b a A2b a B3b a B4b

命令替换
命令替换允许我们把一个命令的输出作为一个展开模式来使用:

me@linuxbox ~]$ echo $(ls)
Desktop Documents ls-output.txt Music Pictures Public Templates Videos
[me@linuxbox ~]$ ls -l $(which cp) #把 which cp的执行结果作为一个参传递给ls命令
-rwxr-xr-x 1 root root 71516 2007-12-05 08:58 /bin/cp


双引号、单引号
双意味着单词分割,路径名展开, 波浪线展开,和花括号展开都被禁止,然而参数展开,算术展开,和命令替换 仍然执行。
单引号所有都被禁止。
[me@linuxbox ~]$ echo text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER
text /home/me/ls-output.txt a b foo 4 me
[me@linuxbox ~]$ echo "text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER"
text ~/*.txt {a,b} foo 4 me
[me@linuxbox ~]$ echo 'text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER'
text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER


转义字符'\'
| \a | 响铃(”警告”-导致计算机嘟嘟响) |
| \b | 退格符 |
| \n | 新的一行。在类 Unix 系统中,产生换行。 |
| \r | 回车符 |
| \t | 制表符 |

第九章:键盘高级操作技巧

1
`clear    -    清空屏幕`

第十章:权限

1
`在这一章中,我们将看看这一系统安全的本质部分,会介绍以下命令:`

chmod - 更改文件模式chmod

命令支持两种不同的方法来改变文件模式:1、八进制数字表示法,或 2、 符号表示法。这两种方法都有人用。首先我们讨论一下八进制数字表示法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
通过使用3个八进制数字,我们能够设置文件所有者,用户组,和其他人的权限:
[me@linuxbox ~]$ chmod 600 foo.txt
通过传递参数 “600”,我们能够设置文件所有者的权限为读写权限,而删除用户组和其他人的所有 权限

chmod 命令还支持另一种符号表示法,通过字符 “u”,“g”,“o”,和 “a” 的组合来指定 要影响的对象。如果没有指定字符,则假定使用”all”
表10-4: chmod 命令符号表示法
|||
|-----|-----------|
| u | "user"的简写,意思是文件或目录的所有者。 |
| g | 用户组。 |
| o | "others"的简写,意思是其他所有的人。 |
| a | "all"的简写,是"u", "g"和“o”三者的联合。 |
执行的操作可能是一个“+”字符,表示加上一个权限, 一个“-”,表示删掉一个权限,或者是一个“=”,表示只有指定的权限可用,其它所有的权限被删除。
表10-5: chmod 符号表示法实例
|||
|-----|-----------|
| u+x | 为文件所有者添加可执行权限。 |
| u-x | 删除文件所有者的可执行权限。 |
| +x | 为文件所有者,用户组,和其他所有人添加可执行权限。 等价于 a+x。 |
| o-rw | 除了文件所有者和用户组,删除其他人的读权限和写权限。 |
| go=rw | 给群组的主人和任意文件拥有者的人读写权限。如果群组的主人或全局之前已经有了执行的权限,他们将被移除。
1
2
3
4
5
6
7
umask    -    设置默认权限

[me@linuxbox ~]$ rm -f foo.txt
[me@linuxbox ~]$ umask
0002
运行不带参数的 umask 命令, 看一下当前的掩码值。响应的数值是0002(0022是另一个常用值),这个数值是掩码的八进制表示形式,
以下是掩码0002的八进制表达形式

1
2
3
4
5
6
这次自己设置掩码

[me@linuxbox ~]$ rm foo.txt
[me@linuxbox ~]$ umask 0000
大多数情况下,你不必修改掩码值,系统提供的默认掩码值就很好了

1
`更改身份`
-------------Thanks for Reading!-------------