- 1.Shell是什么
- 2.(文件目录)导航
- 3.Linux系统
- 4.操作文件和目录
- 5.命令的使用
- 6.重定向
- 7.透过shell看世界
- 8.高级键盘技巧
- 9.权限
- 10.进程
- 11.环境
- 12.VIM
- 13.定制提示符
- 14.软件包管理
- 15.存储介质
- 16.网络
- 17.文件搜索
- 18.归档与备份
- 19.正则表达式
- 20.文本处理
- 21.格式化输出
- 22.打印
- 23.编译程序
- 24 ~ 35. shell脚本语言相关内容
- 36.其它命令
1.Shell是什么
- 当谈到命令行的时候,我们实际上指的是shell。shell是一个接收由键盘输入的命令,并将其传递给操作系统执行的程序。一般Linux提供的shell程序叫做bash(Bourne Again Shell),即bash是sh的增强版本。
- 如果shell提示符的最后一个字符是
#
,而不是一个$
符号,那么终端会话将享有超级用户特权。 - 即使没有运行terminal,一些终端会话也会在图形桌面的后台运行,这叫做虚拟终端或者虚拟控制台。在绝大多数系统中,通过依次按下Ctrl-Alt-F1键到Ctrl-Alt-F6组合键可以访问大部分Linux发行版中的终端会话。
2.(文件目录)导航
- 以“.”字符开头的文件名是隐藏的。这仅说明
ls
命令不会列出这些文件,除非输入ls -a
。 - Linux没有文件扩展名的概念。
- Linux创建文件名的过程,最后仅使用句号,连字符和下划线这些特殊字符。
3.Linux系统
-
大部分命令看起来如下所示:
command -options arguments
- 命令后面跟有一个或多个选项
- 命令后面还会跟有一个或多个参数,这些参数是命令作用的对象
-
ls
命令的长列表字段(-l
)-
-rw-r-r--
:- 第一个字符表示文件的类型。在不同的类型之间,开头的"-"表示该文件是一个普通文件,d表示是一个目录。
- 紧接着的三个字符表示文件所有者的权限。
- 再接着的三个字符表示文件所属组中成员的访问权限。
- 最后三个字符,表示其他所有人的访问权限。
-
-
Linux发布了一个Linux文件系统层次标准(Linux Filesystem Hierarchy Standard)1。
4.操作文件和目录
- 类UNIX操作系统(如Linux)并不包含还原删除操作的命令。一旦使用
rm
命令,就彻底删除了。 - 当
rm
命令和通配符一起使用的时候,除仔细检查输入内容外,可使用ls
命令预先对通配符做出测试,这将显示欲删除的文件。 - 硬链接由两条重要的局限性:
- 硬链接不能引用自身文件系统以外的文件。也就是说,链接不能引用与该链接不在同一磁盘分区的文件。
- 硬链接无法引用目录
- 符号链接是为了克服硬链接的局限性而创建的。符号链接与Windows系统下的快捷方式非常相似,但是,符号链接要早于Windows的快捷方式很多年
- 由于文件名是由链接创建的,所以一个文件通常至少有一个链接。
- 创建硬链接时,实际上是创建了额外的名称,这些名称都指向同一数据部分。系统分配了一些列的盘块给所谓的索引节点(inode),该节点随后与文件名称部分建立关联。因此,每个硬链接都指向包含文件内容的具体索引节点。
- 创建符号链接时,同时也创建了一个文本用来描述目标文件在哪里与符号链接有关联。
- 大部分(对符号链接的)操作,是以链接目标作为对象的,而非链接本身。而
rm
命令是个例外。当删除一个链接的时候,链接本身被删除,但是目标文件依旧存在。
5.命令的使用
-
一条命令无外乎以下4种情况:
- 可执行程序
- shell内置命令
- shell函数。shell函数是合并到环境变量中的小型shell脚本。
- alias命名。
-
which
命令只适用于可执行程序,而不适用于内置命令和命令别名。 -
man
命令显示的“手册文档”被分成多个部分,它不仅包括用户命令,也包括系统管理命令、程序接口、文件格式等。 -
系统中安装的很多软件包都有自己的文档文件,它们存放在
/usr/share/doc
目录中。
6.重定向
- 程序的运行结果,一般发送到了标准输出
stdout
- 程序的状态信息,一般发送到了标准错误
stderr
- 许多程序可以从一个标准输入
stdin
的设备获得输入。默认情况下,标准输入链接到键盘 - 使用重定向操作符
>
,可以把标准输出导入文件,而不是打印在屏幕上 - 使用重定向操作符
>>
,会把重定向的标准输出追加到文件的末尾,而不是重写文件 - 因为标准错误的文件描述符的索引是2,所以标准错误的重定向操作符是
2>
- 系统提供了一个称作是位桶(bit bucket)的特殊文件,它接受输入但是不对任何输入做处理
7.透过shell看世界
扩展
- 路径名扩展,pathname expression。通过通配符来实现扩展的机制,叫做路径名扩展。
- 波浪线扩展。
- 算数扩展。
- 花括号扩展。一般用于创建一系列的文件和目录。
- 参数扩展。
- 命令替换。
引用
- 双引号。双引号使得单词分割,路径名扩展,波浪线扩展,花括号扩展都失去作用。但是参数扩展,算数扩展,命令替换仍然生效。
- 单引号。单引号会抑制所有的扩展。
- 转义字符。反斜杠称为转义字符。
8.高级键盘技巧
- shell提供了一种专门用来扩展历史记录项的功能 -- 使用
!
字符.
9.权限
- 在UNIX术语中,所有用户是指整个世界(world)。
- 用户账户定义在
/etc/passwd
文件中,用户组定义在/etc/group
文件中,文件/etc/shadow
保存了用户的密码信息。 -
文件类型:
属性 文件类型 - 普通文件 d 目录文件 l 符号链接。符号链接后面的文件模式属性都是 rwxrwxrwx
但是这是伪权限。符号链接的目标文件的权限才是真权限。c 字符设备文件。该文件类型表示以字节流处理数据的设备,如终端或调制解调器。 b 块设备文件。该文件类型表示以数据块方式处理数据的设备,如硬盘驱动或者光盘驱动。 -
常用的八进制文件模式就下面几种:
- 7(rwx)
- 6(rw-)
- 5(r-x)
- 4(r--)
- 0(---)
-
符号表示法
+
表示添加一种权限-
表示删除一种权限=
表示只有指定的权限可用,其它所有的权限都被删除
-
umask
命令设置的掩码值只能在当前shell会话中生效,在当前的shell会话结束后,则必须重新设置。
10.进程
- 一个程序的运行可以触发其它程序的运行,在进程系统中这种情况被表述为父进程创建子进程。
- TTY是teletype(电传打印机)的缩写,代表了进程的控制终端(controlling terminal)。
top
命令:x
选项,告知ps显示所有的进程,不管它运行在哪个终端。tty
列显示x
,代表没有控制终端- 输出结果中添加了一个命名为STAT(state,而不是stats)的列,代表进程的当前状态.
- 使进程在后台运行:
- 命令后面加上
&
符号即可在后台运行 jobs
命令,可以查看该终端下所有后台运行的进程fg
命令,可以让后台运行的进程回到前台来运行
- 命令后面加上
- 信号:
- 使用
kill
,向进程发送信号,可以终止进程。默认是SIGTERM(15) - 如果要强制杀死,可以使用
kill -9 pid
- 使用
11.环境
-
shell变量和环境变量
- shell变量是由bash存放的少量数据
- 环境变量就是除此之外的所有其它变量
set
命令会同时显示shell变量和环境变量,而printenv
命令只会显示环境变量
-
在用户输入命令后,shell不会搜索整个目录来寻找可执行文件,而是会搜索
PATH
变量中存储的目录列表 -
一般来说,在
PATH
中添加目录,或者定义额外的环境变量这些操作,需要放入到.bash_profile
文件中。其它的操作应该放在.bashrc
文件. -
扩展名为
.bak
,.sav
,.old
,.orig
是常用的标示备份文件的方法.
12.VIM
基本操作我已经熟悉,这章略过.
13.定制提示符
- 提示符是由名为
PS1
(prompt string 1的缩写)这个环境变量来定义的。
14.软件包管理
pass
15.存储介质
etc/fstab
文件内容列出了系统启动时挂载的设备(通常是硬盘分区)- 卸载设备能确保缓存中的所有剩余数据写入设备,从而设备能够安全移除。
16.网络
ping
命令会向指定的网络主机发送特殊网络数据包IMCP ECHO_REQUEST.eh0
是以太网端口,lo
是系统用来访问自己的回环虚拟接口,也就是localhost。- SSH协议解决了于远程主机进行安全通信的两个基本问题:第一,该协议能验证远程主机的身份是否真实,从而避免中间人攻击;第二,该协议将本机于远程主机之间的通信内容全部加密。
ssh
命令除了能开启远程系统上的shell会话之外,还能直接执行单个命令。
17.文件搜索
-
locate
命令的搜索数据库是由另一个叫做updatedb
的程序创建,这个程序通常用cron定时执行,所以有时locate
查找的结果不是最新的 -
locate
程序查找文件仅仅是依据文件名,而find
程序则是依据文件的各种数据在既定的目录(递归其下面的子目录)里面查找。
18.归档与备份
gzip
命令用于压缩一个或多个文件,文件后缀名一般是.gz
bzip2
是由Julian Seward开发,和gzip命令相仿,但是使用不同的压缩算法。该算法具有高质量的数据压缩能力,但是压缩的速度却降低了。使用bzip2
压缩后的文件以.bz2
为后缀名.- 归档是一个聚集众多文件并将它们组合成一个大文件的过程,它通常作为系统备份的一部分。
tar
是类UNIX系统中用于归档文件的经典工具。tar是tape archived饿缩写。- 使用
tar
进行解压缩,除非使用超级用户的名义执行命令,否则提取出来的文件和目录的所有权属于执行命令的用户,而不是文件的原始作者。 zip
命令即是压缩工具,也是文件归档工具。Linux用户主要使用zip
程序与Windows系统交换文件,而不是将其用于压缩或者归档文件。- 关于
zip
,有一点需要注意(与tar命令相反),即如果指定的归档文件已经存在,那么zip
仅仅会更新而不会取而代之。 - 针对类UNIX系统,使用
rsync
命令可以进行文件同步。该命令使用rsync远程更新协议
,这个协议允许rsync
命令快速检测到本地和远程系统上两个目录之间的不同,从而以最少数量的复制动作以完成两个目录之间的同步. rsync
命令不支持远程系统和远程系统之间的复制.
19.正则表达式
已经熟悉,略过.
20.文本处理
sort
命令可以允许多个文件作为其输入参数uniq
参数近针对已排序的输入数据进行去重diff
和patch
是代码提交更新中最主要使用的两个命令,包括git
命令也有用到.
21.格式化输出
pass
22.打印
pass
23.编译程序
./configure
其实是执行源代码树下的一个shell脚本,它的任务就是分析生成环境。大多数的源代码都包含这个脚本make
程序的作用就是输入Makefile
,该文件描述生成最后可执行程序时的各部件之间的联系和依赖关系.- 一般打包好的源代码都包含一个特殊的
make
target程序,就是make install
.这个程序的目的是把在系统目录下安装最后生成的可执行程序.
24 ~ 35. shell脚本语言相关内容
阅读了一遍书中内容,暂时没有内容学shell,只要保持大概看得懂就行了。
36.其它命令
组命令
使用花括号括起来,子shell
使用圆括号子shell
在当前shell的子拷贝中执行命令,而组命令在当前shell执行所有命令。在子shell退出的时候,复制的环境变量也就消失了。- 在一个好的设计中,脚本应该针对用户注销和关闭电脑的情况下作出反应,做一些比如删除临时文件的清理工作。
trap
命令可以针对不同的SIGNAL作出反应. wait
命令可以让父脚本暂停,直到指定的进程(比如子脚本)结束.- 命名管道,可以建立两个进程之间的通信。