RHCE033学习笔记
第一章
Linux
总览
1.1 GNU:
自由操作系统计划
FSF
:自由软件基金会
GPL:GNU
公共通用许可证
Ctrl+Alt+F1
到
Ctrl+Alt+F6
六个组合键可以在六个虚拟控制台之间切换。
Ctrl+Alt+F7
可以切换到默认的
X
服务器。
1.2
内核、程序和进程
内核是一个操作系统,为进程提供运行环境;
程序是文件系统内的可执行文件,通常是二进制文件;
进程是程序运行的实例。
Linux
中的
Shell
是一个交互式的进程,指定要运行的其他进程,默认为
bash
。
1.3
查看文件系统
ls
列出目录内容
cat
查看文件内容
可以使用绝对路径和相对路径
“
/
”为根目录(
root directory
)。
1.4
运行命令
命令格式:命令
+
选项
+
参数,选项以“
-
“或“
- -
”开头,选项也可以有参数。
1.5
管理终端
reset
可将终端恢复为正常状态,
tab
可补全命令。
Linux
终端控制组合键
组合键
|
符号名称
|
约定使用
|
Ctrl+C
|
SIGINT
|
非常规中断——终止前台进程
|
Ctrl+D
|
EOT
|
输入完成的正常信号
|
Ctrl+G
|
BEL
|
终端声效
|
Ctrl+H
|
BS
|
后退一格——删除前一个字符
|
Ctrl+J
|
LF
|
换行——与
Enter
键功能相同
|
Ctrl+L
|
FF
|
换页——使
bash
清屏
|
Ctrl+Q
|
|
解锁终端显示
|
Ctrl+S
|
|
锁住终端显示
|
Ctrl+U
|
NAK
|
删除当前的行
|
Ctrl+Z
|
SIGSTOP
|
挂起进程
|
设备节点
/dev/zero
是伪设备,读取时会返回无数个二进制零,
/dev/null
设备节点也是伪设备,会丢弃任何写入其中的信息。
终端设备名称:
ttyn
(虚拟控制台),
ttySn
(串口端口设备),
pts/n
(伪终端),
:0
(
X
服务器)。
1.6
寻求帮助的方法
-h
、
--help
、
-
?
man page
例如:
man ls
、
man –k ls
、
man 5 intro
info page
目录
/usr/share/doc
红帽文档指南、
www.redhat.com
第二章
文件系统基础
2.1
文件系统可以看成一棵倒置的树
pwd
显示当前工作目录的绝对路径
特殊目录名
符号
|
意义
|
.
|
当前工作目录,相对引用中可使用
|
..
|
父目录
|
~
|
用户主目录
|
-
|
上个工作目录
|
默认情况下,
cd
命令等同于
cd ~
默认的
bash
提示只显示
cwd
的最后一个目录名
.
和
..
都表示相对引用
2.2
标准目录结构
- /bin
存放引导系统所需的可执行程序和最常用的
linux
命令
- /boot
存放系统启动时必要的文件,包括系统内核
- /dev
包括
linux
支持的硬件设备对应的连接文件
-/etc
保存系统配置文件,可以控制系统的任何方面
-/home
存放除超级用户外的各个用户的主目录
-/lib
存放各种库文件,包括共享库和函数库
-/root
根用户的主目录
-/sbin
存放相对不常用的命令,多数用于系统管理
-/proc
虚拟文件系统,用于从内存读取进程信息
/ (
根
) -/opt
默认为空
-/media
默认为空
-/mnt
用来作为光盘、软盘、
U
盘的挂载点
-/misc
默认为空,供管理员堆放公共杂物
-/bin
-/etc
-/usr - -/sbin
-/lib
-/tmp
…
-/var
存放系统工作的一些记录、假脱机目录和其他变量数据
-/tmp
存放应用程序产生的临时文件
-/srv
默认为空
-/sys
存放一些系统信息
-/lost+found
存放系统崩溃时产生的文件,可用于修复系统
-/selinux
存放与安全相关的文件
-/net
默认为
空
root
是根用户,
/root
是
root
的主目录,
/
是根目录。
2.3
文件管理
cp
复制文件
cp [OPTIONS] {SOURCE} {TARGET}
mv
移动或重命名文件
mv [OPTION…] {SOURCE} {TARGET}
rm
删除文件
rm [OPTIONS] {FILE..}
重定向、移动、复制可能“损坏”文件
Shell
会在执行其他命令(
ls
,
cat
等)前解读“
>
”符号,例如,
ls > file
,假如
file
不存在,该命令会先创建
file
文件,再执行
ls
命令。
2.4
目录管理
ls -R
可以递归的查看目录
cd –r
递归复制目录
rm -r
递归删除目录
mkdir
建立空目录
rmdir
删除空目录
2.5
文件名和文件名匹配
文件名可以是“
/
”除外的任何字符,但不代表应该这么做,以“
.
”开头的文件为隐藏文件。不包括目录,文件名最长可达
255
个字符,包括目录最长可达
4096
个字符。
文件名匹配通配符
字符
|
作
用
|
*
|
匹配
0
个或多个字符(开头的“
.
”除外)
|
?
|
匹配一个字符(开头的“
.
”除外)
|
[…]
|
匹配在给出的列表或范围内的任何一个字符
|
[^…]
|
匹配在给出的列表或范围外的任何一个字符
|
2.6
检查文件和文本编辑
常用命令:
file
、
cat
、
more
、
less
、
head
、
tail
。
常用文本编辑器:
vi
、
nano
、
gedit
(图形文本编辑器)
文本编辑器和文字处理器的区别,文本编辑器主要用来编辑系统配置文件,不会产生任何二进制码,文字处理器除了处理文本外,还用来编辑字体、格式等
,会设置二进制码。
第三章、用户和组
3.1
用户和
/etc/passwd
文件
用户名、
uid
(
32
位整数)、
gid
(
32
位整数,主要组)都是唯一的。
在配置文件
/etc/passwd
中保存有一个数据库,数据库里存放着用户名和
uid
的对应关系,用户账户把
uid
映射到用户名、密码、
gid
、主目录和登录
shell
上。
系统上的大多数用户有权限读取这个文件,但没有权限修改。
用户密码保存在
/etc/shadow
(影子文件),一般用户没有查看权限。
忘记密码,可以让有根用户权限的人给你重新分配密码。
三种类型的用户:普通用户、根用户、系统用户。其中系统用户不代表人,而代表系统的组成部分,例如,处理电子邮件的进程通常以用户名
mail
来运行。
红帽企业版
Linux
用户
ID
用户
ID
范围
|
用户类型
|
0
|
根用户
|
1-499
|
系统用户
|
500+
|
普通用户
|
3.2
组和
/etc/group
文件
每个用户都属于一个
主要组
,
次要组
可有可无。
配置文件
/etc/group
把组名与组
ID
关联在一起。
文件系统上的每个文件都有一个用户所有者和一个组所有者。新创建文件的默认组,称作用户的主要组,组名和用户相同。
根用户可以使用
usermod
、
groupmod
命令更改组成员身份。
3.3
检查用户信息
检查用户信息的命令
命令
|
功能
|
id
|
显示用户信息和组信息
|
whoami
|
获取当前用户名
|
users
、
who
、
w
|
获取正在会话中的用户
|
finger
|
输出用户最后登陆系统时间及其它信息
|
3.4
改变身份
su
命令让用户切换用户
ID
su USER
登陆后
shell
为非登陆
shell
。
su – USER
登陆后
shell
为登陆
shell
,即完全登陆。
su
切换到根用户。
newgrp
或
sg
让用户切换主要组
,语法:
newgrp
组名
第四章
文件所有者及权限
4.1
常规文件所有者及权限
文件有一个用户所有者,一个组所有者和一组权限。
文件有三种权限类型:
r
、
w
、
x
,三种访问级别:
u
、
g
、
o
。
修改文件所有者:
chmod
普通用户不能改变文件的用户所有者,却可以改变组所有者。
4.2
改变文件权限
chmod [ugoa]+/-/=[rwx] filename
4.3
用
chgrp
命令和
chown
命令改变文件所有者
chgrp
改变文件的组所有者
chown
改变文件的用户所有者
文件新建立时,它的组所有者是建立人的主要组,在红帽企业版
linux
中,这是建立者的私有组。
谁可以修改文件的所有者和权限
操作
|
可以执行的用户
|
chmod
|
根用户和文件的所有者
|
chgrp
|
根用户和文件所有者(必须是新组成员)
|
chown
|
只有根用户
|
4.4
目录所有者和权限
常规文件和目录的权限
|
r(
读
)
|
w(
写
)
|
x(
执行
)
|
常规文件
|
浏览文件
|
修改文件
|
将文件作为命令执行
|
目录
|
列出目录内容
|
添加或删除文件
|
在目录中
”
搜索
”
已知文件
|
在红帽企业版中,用户主目录是受“保护”的,默认权限为
drwx------
。
4.5 chmod
命令:八进制计数法,控制默认权限:
umask
。
每种权限以一个值表示,可读是
4
,写入是
2
,执行是
1
,文件和目录做相同处理,使用
chmod –R
递归命令时容易产生错误,可使用
find
命令进行更合理的递归。
在内核级别,
linux
分别使用默认模式
666
(
rw-rw-rw
)、
777
(
rwxrwxrwx
)建立文件和目录,每个进程使用一个“
umask
”参数来遮盖某些特定的默认权限。
红帽企业版中,标准用户的默认
umask
值为
022
。
用
umask
命令可查看和修改
bash shell
的
umask
值。
第五章
Linux
文件系统
5.1
文件详述
文件包括
:
常规文件、目录、符号链接、设备节点及其它。
所有文件有如下属性:用户所有者、组所有者、权限和时间信息。这种信息保存在名为
inode
(
i-
节点)的结构中。
文件名保存在名为
dentry
(目录项)的数据结构中。
Linux
内核中,文件一般通过
i-
节点编号加以识别。
i-
节点信息可以通过
ls-l
命令和
stat
命令查询。
每个文件都有三层结构:
dentry
、
inode
和
data
,
dentry
含有文件名并关联
inode
,
inode
含有文件元数据并指向数据区
data
。
传统
Unix
(
Linux
)系统不记录文件创建时间。
文件长度和大小
i-
节点用两种度量记录文件大小:文件长度(文件数据的实际字节数)和大小(所占用的磁盘空间量)。由于文件在磁盘的上的底层信息不同,两种信息度量有所不同。一般来说,文件以字节块(通常是
4
千字节)为单位增加。而文件数据以单个字节为单位增加。
ls –l
命令在第五列显示文件长度(以
B
为单位),
ls – s
可以显示文件的大小(以
KB
为单位),
stat
命令把文件的长度叫大小(
size
)。
在
ls – F
命令列出的文件中,目录以“
/
”结尾,符号链接以“
@
”结尾,附有可执行权限的各种常规文件以“
*
”结尾。
ls – l
命令输出的各列意义
其中第一行的
total
表示该目录下所有文件使用的空间总块数(不包括子目录)
第一列:文件类型和文件的权限
第二列:文件的链接总数,目录总是大于等于
2
第三列:文件的所有者
第四列:文件组所有者
第五列:以字节计算的文件长度,目录长度以块数为单位增加
第六列:文件的最后一次修改时间
5.2
硬链接(
hard links
)和软链接(
soft links
)
ln [option] TARGET [LINK]
对文件
TARGET
创建链接
LINK
硬链接举例:
ln file hard_link
硬链接共享
i-
节点和数据,删除文件,链接仍然可使用。
rm
命令在底层不直接删除文件,而是“
unlink”(
脱链
)
文件。
软链接举例:
ln file soft_link
软链接使用各字的
dentry
和
i-
节点,但
data
为目标文件的文件名,它们的
i-
节点不同,删除目标文件后,该链接变成空链接。
软链接和硬链接的比较
硬链接
|
软链接
|
目录之间不能用硬链接
|
软链接可以关联的目录
|
硬链接没有原始文件和复制文件的概念,硬链接一旦创建,它链接的两端文件得到同等待遇
|
软链接有引用和被引用的概念,删除被引用的文件就会导致空链接的产生
|
硬链接必须关联同一个文件系统下的文件
|
软链接也可关联不同文件系统中的文件
|
Chroot
的目录间可共享硬链接
|
软链接不能引用
chroot
目录外的文件
|
5.3
目录与设备节点
目录就是包含一些目录项,目录项建立文件名与
i-
节点的映射。每个目录都包含至少两个引用,
”.”
指向自身和父目录的目录项引用。另外的引用由目录下子目录
”..”
构成,因此目录的链接数大于等于
2
。
字符设备:按字节流依次读写的设备,如:鼠标、键盘、声卡和打印机。
块设备:一次读写一大块设备,允许随机访问,如
:
硬盘、软驱、光驱。
字符设备节点(
c
),块设备节点(
b
)
除了终端用户和控制台用户外,设备节点的权限并不允许用户直接访问。
控制台就是虚拟终端,也叫虚拟控制台,它充当了“哑终端”。
5.4
磁盘、文件系统与挂载
Linux
允许通过
/dev
目录下的设备节点对磁盘进行访问。
通常,磁盘被分区格式化为文件系统,挂载到目录下使用。
文件系统用
mkfs
命令创建。
红帽企业版
linux
默认文件系统是
ext3
。
mount
将磁盘分区挂载到已存在的目录,该目录叫做挂载点。
umount
将已挂载目录脱卸。
df
命令给出磁盘使用信息和已挂载的设备。
1、
磁盘设备
Linux
磁盘设备节点
设备节点
|
磁盘
|
/dev/fd0
|
软盘
|
/dev/hda
|
IDE1
通道上的主盘
|
/dev/hdb
|
IDE1
通道上的从盘
|
/dev/hdc
|
IDE2
通道上的主盘
|
/dev/hdd
|
IDE2
通道上的从盘
|
/dev/sda
|
SCSI
的第一个硬盘
|
/dev/sdb
|
SCSI
的第二个硬盘
|
/dev/cdrom
|
到
CD/ROM
的符号链接
|
注:
/dev/hda1
为
IDE1
通道上的主盘的第一个分区。其它的依次类推。
2、
对磁盘的低级访问
对磁盘的低级访问就是直接将数据仅依字节流的形式存放于磁盘,或从磁盘读取,人们希望给文件给个文件名,然后将信息保存在文件里;将文件放进目录里管理,并控制对其访问的权限。所有这些机构化的信息管理由文件系统完成。
3、
文件系统
在磁盘上存储数据前,首先要创建文件系统,在
windows
中叫做格式化,
在
linux
中
mkfs
命令族用于创建文件系统。它们位于供管理员用的
/sbin
目录下。
4、
挂载文件系统
在系统启动的时候,一个文件系统被映射为根分区,它的根目录就是系统的根(
/
)。
如果一个系统有多块磁盘,或者一个磁盘有多个分区、那么为了访问别的磁盘上的分区,就将那个文件系统的根目录映射到文件系统中一个已经存在的目录下;这个过程叫做文件系统的挂载。
对于
ls
命令来说,文件系统的不同都被隐藏起来了,所有的文件系统都被组织到一个目录树结构下。
mount
命令可用来查看挂载点,一些叫做
none
的设备是虚拟设备,它是在内核中实现的,并不是任何物理设备。
lost+found
目录是在创建文件系统时自动创建的,在
ext2
、
ext3
中文件系统的根下一直存在。在文件系统修复时会用到。
将一个磁盘(已存在文件系统)上的数据一字节一字节的复制到另一个没有挂载的设备上的技巧叫做磁盘镜像,这是对磁盘的低级访问。
5.5
使用
locate
和
find
命令查找文件
locate
命令利用数据库根据文件名迅速定位系统上的文件。速度快,但副作用是不能查找最近一天内新增的文件,或者报告因最近删除而失效的文件。
find
命令实时递归查找系统上的文件,几乎所有的文件属性都可作为
find
命令的搜索条件,但不能直接根据文件内容搜索,可结合
grep
命令实现。
Locate
命支持元字符:
*
、?、
[]
,如
locate *.fish.png
。
find <
起始目录
> <
搜索条件
> <
动作
>
5.6
文件压缩:
gzip
和
bzip2
最常用的压缩命令是
gzip
。解压为
gunzip
。
bzip2
命令压缩效果更好,解压用
bunzip2
。
5.7
文件归档:
tar
命令
将文件归档可以将整个目录树保存在一个文件中。
tar
命令可以用来创建、列出和释放归档文件。
归档文件通常也会一并压缩。如:
tar cvf net.tar /etc/sysconfig/networking
file-roller
应用程序提供图形化的操作界面。
第六章
Bash Shell
6.1 Bash
引言
红帽企业版
linux
默认的
shell
是
bash shell
。
bash shell
的两个不同功能:交互式
shell
和
shell
脚本。
bash
启动时执行
~/.bashrc
文件中的命令,允许用户自定义其
shell
。
bash shell
保存历史命令,可以方便的调用。
交互式
shell
不断地重放侦听命令行的循环、解析被请求的命令、执行任何被请求的操作,并且显示结果。
bash
历史记录替换
语法
|
替换
|
!!
|
前一个命令
|
!n
|
命令号
n
|
!-n
|
倒数第
n
个命令
|
!cmd
|
最后用来启动
cmd
的命令
|
history
命令的技巧:
Esc+.
(先按
Esc
后按点)和
Alt+.
恢复之前被键入命令行的最后一个标记。
Ctrl+R
匹配的命令行可以随着文本的键入而立刻被看到。
fc
命令
该命令允许用户通过打开用的
vi
把之前键入的命令作为文本进行“整理”。退出后立即执行。
6.2
命令列表和脚本
多个命令间可以用
;隔开
退出命令时,每个命令向父命令返回一个整数,称作返回值。
Shell
变量
$?
表示先前执行命令的返回值,
echo $?
显示最新执行程序的返回值。
用
&&
把两个命令连接在一起,只有当第一个命令成功时(即返回值为
0
)才运行第二个命令,用户
||
把两个命令连接在一起,只有当第一个命令“失败”
时(返回值非零),才执行第二个命令。
Linux
在执行命令时,通常从一组固定的目录中寻找这个命令,这些目录被看做是你的
PATH
。
6.3 bash
变量
Shell
变量用
name=value
语法来赋值。
用
$
来解析变量,如
echo $ A
。
在内存层,有一个由子进程继承的环境变量集合。
export
命令将
shell
变量转化为环境变量。
set
和
env
命令分别用于列出
shell
变量和环境变量。
uset A
复位变量,即删除变量。
变量有字母数字字符和下划线组成,不能以数字开头,区分大小写。通常用大写。
如果你想把变量设置给含有空格的值,必须把这个值括在引号里。
解析变量时,如果需要的话,可以用大括号
{}
标出变量名。
bash
预赋值的变量
变量
|
含义
|
BASH_VERSION
|
但前
bash
的版本
|
HOSTNAME
|
当前机器的
DNS
主机名
|
OLDPWD
|
上次工作目录
|
PWD
|
当前工作目录
|
RADOM
|
介于
0
到
32767
之间的任意整数
|
SECONDS
|
自
shell
启动以来的秒数
|
以上变量被
bash shell
初始化,但是不能被重新赋值。
bash
的只读变量
变量
|
含义
|
?
|
最新执行的命令的退出状态,即查看返回值
|
-
|
当前启用中的
shell
选项标记
|
$
|
当前
shell
的进程
ID
|
_
|
前一个命令的最后标记
|
!
|
最新后台命令的进程
ID
|
PPID
|
Shell
父进程的
ID
|
SHELLOPTS
|
被冒号隔开的当前启用中的
shell
选项列表,和
set – o
结果一样
|
UID
|
当前用户的
UID
|
常用的环境变量
变量
|
功能
|
TERM
|
指定了用户终端的底层配置,该变量在使用串行线控制台时更由用
|
PATH
|
指定了可执行文件的搜索目录
|
DISPLAY
|
指定了图像环境中客户程序应该使用的
X
服务器
|
LANG
|
指定了国家化程序的首选语言
|
EDITOR
|
指定了默认的编辑器
|
PRINTER
|
指定了默认的打印机
|
给
PATH
环境变量附加目录:
PATH=$PATH:/usr/sbin
6.4
命令行替换
bash shell
在解释命令前替换某些命令行元字符。
bash
中的命令行替换
替换
|
语法
|
含义
|
历史(
history
)
|
!
|
前一个命令行
|
大括号
|
{}
|
指定的文本
|
代字号
|
~
或
~username
|
用户的主目录
|
变量
|
$
、
${…}
|
变量
Shell
和环境变量
|
算术
|
$((…))
|
整数算术运算(
+
、
-
、
*
、
/
)
|
命令
|
`…`
、
$(…)
|
运行在子
shell
中命令的输出
|
路径名
|
*
、?、
[…]
、
[^…]
|
文件系统中匹配的文件
|
引用和转义字符
bash shell
的引用和转义
语法
|
作用
|
\
|
避免一个字符被
shell
解释
|
“
…
”
|
避免双引号内除了
$
、!和
`…`(
反引号
)
字符以外的其他字符被
shell
解释
|
‘
…
’
|
避免引号内的字符被
shell
解释
|
如果要把一个特殊字符加到命令中,你应该用引号(或反斜杠转义)来保护这个字符,因为
shell
替换在命令运行之前发生。
6.5
自定义
shell
bash shell
本身即实现某些与
shell
行为密切相关的命令,被称为内置命令。
Shell
别名可创建扩展为任意文本的命令。
用
alias
建立和检查别名。
unalias
删除别名
用
PS1
变量自定义
bash shell
提示符。
Shell
标记可以用
set – f
命令设定,用
set + f
命令删除。
Shell
选项可用
shopt
命令检查和复位。
常见的
shell
内置命令:
cd
、
pwd
、
echo
。
alias
使用下列语法:
alias NAME=VALUE
,等号两边没有空格。
别名替换:如果别名替换为一个与别名有着相同名称的命令,则
shell
仅仅执行替换,然后继续前进。否则,展开别名,例见
P237
,
ll
命令。
Bash
提示符中常用的转义序列
序列
|
替换
|
\a
|
终端响铃
|
\d
|
以“星期
月份
日期”格式显示日期
|
\h
|
直到第一个“
.
”的主机名
|
\T
|
以
12
小时格式
HH:MM:SS
显示当前时间
|
\u
|
当前用户的用户名
|
\W
|
当前工作目录的
basename
(即最后一个目录)
|
\!
|
命令的历史记录号码
|
\$
|
如果用户的
ID
为
0
,则提示符为
#
,否则提示符为
$
|
\n
|
原样输出后面的字符
|
\nnn
|
与八进制数字
nnn
对应的字符
|
set
内置命令常用的
shell
标记
标记
|
作用
|
-f
|
使路径名替换无效
|
-n
|
读取命令、但不执行(用来对脚本进行语法检查)
|
-o optionname
|
设置指定的选项,一些常用选项如下:
emacs
使用
emacs
风格的命令行快捷键
ignoreeof
当
EOF
(
ctrl+D
)被读取时,不退出
shell
vi
使用
vi
风格的命令行快捷键
|
-v
|
在命令被读取时,打印命令(调试脚本时有用)
|
-x
|
在替换被应用之后打印命令(调试脚本和检查
shell
替换时有用)
|
-C
|
不允许
shell
在重定向中损坏文件
|
Bash shell
选项
选项
|
作用
|
cdspell
|
使用
cd
内置命令时,试图改正目录名的拼写错误
|
expand_alias
|
启动
shell
别名
|
extglob
|
启动替换的模式匹配语法
|
nocaseglob
|
应用文件名替换时不区分大小写
|
6.6
获得
shell
脚本和
shell
初始化
Shell
脚本用
source
或
.
命令获得
Shell
脚本应在执行获得脚本的同一个
shell
中执行
Shell
有登录
shell
、非登录
shell
、交互式
shell
、非交互式
shell
之分
bash shell
允许用户把多个命令集中到一个文件中,然后执行这些命令,仿佛它们在提示符下直接键入的一样,这被称为获得文件。
当获得
shell
脚本时,脚本的内容在当前
shell
中执行。
不同类型的
bash shell
上下文
|
登录
shell
|
交互式
shell
|
从虚拟控制台登录
shell
|
是
|
是
|
通过网络
shell
到一台远程机器上时登录
shell
|
是
|
是
|
X
初始化
shell
|
是
|
是
|
X
终端
shell
|
否
|
是
|
手动运行
bash
启动的子
shell
|
否
|
是
|
用在命令替换中的子
shell
|
否
|
否
|
被圆括号分组的命令使用的子
shell
|
否
|
否
|
执行脚本时使用的子
shell
|
否
|
否
|
Bash
的启动配置文件
Bash shell
的启动配置文件功能
文件
|
Shell
类型
|
预期功能
|
/etc/profile
|
登录
shell
|
通用的有效环境变量
|
/etc/profile.d/*.sh
|
登录
shell
|
软件包特有的环境变量
|
~/bash_profile
|
登录
shell
|
用户特有的环境变量
|
~/.bashrc
|
所有交互式
shell
|
用户特有的别名、
shell
功能和
shell
选项
|
/etc/bashrc
|
所有交互式
shell
|
通用别名、
shell
功能和
shell
选项
|
第七章
标准输入
/
输出和管道
7.1
标准输入和输出
基于终端的程序往往从一个源读取信息,向一个目的地写入信息。
三种类型的程序:
图形程序(
Firfox
网络浏览器等)、屏幕程序(
vi
和
nano
文本编辑器等)、终端程序(即命令,如:
ls
、
cd
等)。
Linux
进程通过给每个当前被它们打开的文件赋整数值来追踪这些文件,这个整数值被称作文件描述符。
用命令
ls –l /proc/PID/fd,
查看文件描述符。
P252
标准输入、标准输出和标准错误的文件描述符
流
|
描述符
|
缩写
|
标准输入
|
0
|
stdin
|
标准输出
|
1
|
stdout
|
标准错误
|
2
|
stderr
|
7.2
标准错误
可以用
2>
把标准错误流重定向到文件中。可以用
2>>
追加标准错误。
可以用
2>&1
或
>&
(新派做法)把标准错误流与标准输出流结合在一起。
7.3
管道
用
UNIX
所谓的管道可以吧一个进程的标准输出流和另一个进程的标准输入流连接起来。
Unix
中的许多命令被设计为过滤器,从标准输入中读取输入,将输出传送到标准输出。
用“
|
”在两个命令之间创建管道。连接在管道中的所有进程被称作进程组。
作为过滤器的命令:
grep
、
head
、
tail
、
sort
、
sed
、
awk
。
UNIX
哲学:联合使用简单的工具更有效。
第八章、字符处理工具
8.1
文本编码及字数统计
当保存文本文件时,计算机会将字符转换成数字形式表示。这个过程就是文本的编码。
为了适应不同的语言要求,开发了不同的编码技术,这些技术以不同的字符集来代表。
wc
命令统计出文件中字符、文字和行的数量。
ASC II
编码是目前最古老的但最常使用的编码技术之一。
UTF-8
标准几乎是一种可接受的标准,因此在最新的红帽企业版
linux
中成为默认的编码形式。
cat
命令可以显示非打印字符。
8.2
搜索文本:
grep
grep
命令可以用来打印那些符合指定字符串或模式的行。
grep
代表
general regular expression parser
(通用正则表达式分析程序)
fgrep
grep [-i] [-n] [-v] [-r] [-w] pattern [filename….]
egrep
其中
fgrep
可快速搜索简单模式,常用于搜索常用单词。
grep
使用常用正则表达式搜索。
egrep
使用更强的的扩展正则表达式搜索模板。
8.3
正则表达式介绍
正则表达式是一个指定文本模式的标准
UNIX
语法。
许多命令都可以接受正则表达式,包括
grep
、
sed
、
vi
和许多脚本语言。
正则表达式应放在单引号内,避免在用
bash
解释特殊字符时造成和
grep
之间的混淆。
字符类
采用语言中具体的规则来区分字母的大小写。
正则表达式字符类
表达式
|
字符类
|
ASCII
中的对应域
|
[:alnum:]
|
字母数字混排
|
A-Za-z0-9
|
[:alpha:]
|
字母字符
|
A-Za-z
|
[:blank:]
|
空格符或者制表符
|
|
[:digit:]
|
数字
|
0-9
|
[:lower:]
|
小写字母
|
a-z
|
[:punct:]
|
可打印字符,不包括空格和字母数字混排字符
|
|
[:space:]
|
空白字符
|
|
[:upper:]
|
大写字母
|
A-Z
|
Linux
正则表达式语法总结
字符
|
功能
|
正则表达式语法
|
解释
|
.
|
通配符
|
基本
|
代表一个或者任意字符
|
[abc],[a-z]
|
包含域
|
基本
|
代表域内任意一个字符
|
[^abc],[^a-z]
|
排除范围
|
基本
|
代表不包含在域内的任意一个字符
|
?
|
修饰符
|
扩展
|
代表
0
或
1
个前面的项
|
*
|
修饰符
|
基本
|
代表
0
或多个前面的项
|
+
|
修饰符
|
扩展
|
代表
1
个或者多个前面的项
|
{m,n}
|
修饰符
|
扩展
|
代表前面的项出现了
m
到
n
次之间
|
{n}
|
修饰符
|
扩展
|
代表前面的项具体的出现次数为
n
|
^
|
锚
|
基本
|
标出一行的开始
|
$
|
锚
|
基本
|
标出一行的结束
|
\<
|
锚
|
基本
|
标出一个单词的开始
|
\>
|
锚
|
基本
|
标出一个单词的开始
|
(…)
|
分组
|
基本
|
允许修饰符修饰一组字符
|
(…|…)
|
分组
|
扩展
|
允许指定可选的模式
|
\
|
转义
|
扩展(基本)
|
取消
(
或启动
)
后续字符的特殊含义
|
正则表达式与文件名匹配对比表
正则表达式
|
文件名匹配
|
在执行搜索或者搜索及替换功能时,比如
grep
、
vi
、
sed
以及许多脚本语言,如
perl
、
python
等
|
有
bash shell
执行,是为了匹配文件名,并减少在一些应用程序或者脚本语言中搜索的范围
|
使用表达式“
.*
”代表任意项
|
使用表达式“
*
”代表任意项
|
使用表达式“
.
”来表达单个字符
|
使用表达式“?”来表达任何单个字符
|
8.4
排序命令:
sort
命令和
uinq
命令
sort
命令按字母表顺序排列数据
sort –n
按数字顺序排列数据
sort –u
排序并删除重复数据
sort –k
和
–t
按指定字段对数据进行排序
uniq
命令是用来识别、统计或者删除排序过数据中的重复记录。一般和
sort
联合使用,且在
sort
命令后面。
8.5
提取和组合文本:
cut
命令和
paste
命令
(P330)
cut
命令可根据字节、字符或者指定的列从文本文件中提取文本。
paste
命令将两个文本文件进行逐行合并。
8.6
追踪差异:
diff
命令
(P340)
diff
命令可以比较两个文件之间的差异。
diff
命令的输出格式:
标准
diff
上下文
diff –c
一体
diff –u
并排
diff –y
diff
命令通常跟着两个参数,一个是
from-file
,另一个是
to-file
(换句话说就是一个旧文件和一个新文件)。
8.7
文本转换
tr
命令
(P352)
tr
命令的功能是将标准输入读取的数据进行转换。
tr
命令的最基本的形式是以字节换字节的方式执行。
8.8
拼写检查:
aspell (P362)
aspell –c
命令可以对文件进行交互式拼写检查。
aspell --list
命令可对标准输入进行非交互式拼写检查。
aspell dump
命令可用来浏览系统词典或者用户的个人词典。
8.9
格式化文本(
fmt
)和文件分割(
split
)
(P366)
fmt
命令可用不同的宽度重新格式化文件
使用
-p
命令行选项,
fmt
命令将仅对以指定前缀开始的行重新格式化,并保留其前缀。
split
命令可以行数或者字节数位单位,将一个文件分割成多个文件。
第九章
进程管理
9.1
进程
进程是正在运行的可执行程序的实例,通过进程
ID(pid)
识别。
Linux
使用虚拟内存,所以每个进程都拥有自己特定的内存地址空间。
进程有一个
uid
和一组
gid
。
进程有其文件系统环境,包括
cwd
、
umask
、根目录和一组打开的文件。
进程有调度环境,包括优先级值。
进程有一组环境变量。
ps
命令可用来查看所有正在运行的进程。
top
命令可用来监控所有正在运行的进程。
9.2
进程状态
P390
进程总是处于
5
种状态之一:可运行
(R)
、自愿睡眠
(S)
、强制睡眠
(D)
、挂起
(T)
、僵尸
(Z)
。
在
linux
系统中,第一个进程
/sbin/init
由内核在启动时运行。其他所有进程都是父进程自我复制和派生的结果。
一个进程由另一个进程执行的过程叫做
exec
(
executing
的简称)。
通常,新命令由进程(通常是
shell
)运行,首先派生,继而执行。这种机制被称为派生和执行机制。
当进程退出、释放大多数资源和它的父进程收集它的返回值、释放剩余资源这两段时间之间,子进程处于一个特殊状态,被称作僵尸进程。每个进程都会经历一个短暂的僵尸状态,但却不占用内存空间、
CPU
时间。
9.3
进程调度:优先级(
nice
)和更改优先级(
renice
)
Linux
内核的基本任务是调度进程。
每个进程都有一影响其调度的优先级(
niceness
)值。
nice
和
renice
命令可以改变进程调度的优先顺序。
9.4
发送信号
信号是进程间通信的底层形式,由多种来源产生,包括内核、终端和其他进程。
信号由信号值(或信号号码)区分,信号值具有约定的符号名称和用途。信号值的名称可以用
kill -l
命令列出。
kill
命令向其他进程发送信号。
接收到信号时,进程可以忽视它或用内核指定的默认方式作出反应,也可以调用一个自定义信号处理程序。
根据约定,信号值
15
(
SIGTERM
)用来请求终止进程。
信号值
9
(
SIGKILL
)可以终止进程,而且该信号不能被忽略。
9.5
作业控制
bash shell
允许命令作为“作业”在后台运行。
bash shell
允许前台运行一个作业,后台运行多个作业。
jobs
命令会列出所有的后台作业。
Ctrl+Z
组合键会挂起当前的前台作业,并将其置于后台。
bg
命令可以恢复置于后台作业的运行。
fg
命令可以将后台作业置于前台。
通过给命令行附加一个“
&
”字符,任何指定的命令也可以在后台运行。
9.6
调度延迟的名:
at
at
命令可以使命令稍后执行。
batch
命令可以让命令在机器负载较低的情况下运行。
可以直接输入命令,或者以脚本形式提交命令。
作业中的标准输出用邮件发送给用户。
atp
命令和
atrm
命令用来查看和删除当前的计划任务。
作为守护进程运行的程序通常以字母
d
结尾。
守护进程的一个定义特征是,它结束与启动它的终端之间的联系。
9.7
调度周期任务:
cron
cron
工具用来调度经常重复的任务。
crontab
命令是编辑
crontab
文件的一个前端程序。
contab
文件使用
5
个字段来规定计时信息。
cron
作业中的标准输出会作为邮件寄给用户。
第十章 网络
应用程序
10.1 TCP/IP
互联网简介
大多数
linux
联网服务器都是按照客户端
-
服务器模型来设计的。
网络服务应用程序通常都会设计成“一直运行”,只有根用户才能管理服务进程。
网络应用程序客户端通常在使用时才会运行,而且任何用户都可以运行。
大多数的
linux
网络服务器和客户端之间使用
TCP/IP
协议进行通信。
网络服务器通常使用指定的,众所周知的端口,可以在文件
/etc/service
中列出。这些端口号小于
1024
,属于特权端口。
hostname
显示当前机器的
ip
地址,
netstat – tuna
命令检查所有开发端口。
10.2 linux
打印
红帽企业版
linux
使用
CUPS
打印系统来管理打印机。
CUPS
打印系统围绕着打印机这一概念设计,将假脱机目录、过滤器和打印设备结合在
一起。
system-config-printer
、
gnome-dfault-printer
和
lpstat
命令能用来浏览可用的打印队列。
lpr
、
lpq
和
lprm
分别用来提交打印任务、询问尚未完成的打印任务和取消等待中的打印任务,它们将检查
PRINTER
环境变量,以获得默认的打印队列。
lp
和
cancel
命令类似于
lpr
和
lprm
命令。
许多应用程序的打印靠管道传递给
lpr
命令完成。
10.3
管理打印文件
Linux
系统的主要打印格式是
PostScript
。
gs
和
evince
命令能预览
PostScript
文件。
enscript
命令将文本文件转换成修饰过的
PostScript
。
ps2pdf
和
pdf2ps
命令将文件转换成
PDF
文件,或者进行相反得操作。
mpage
命令能重排
PostScript
文件里的每个页面。
10.4
电子邮件概述
电子邮件管理涉及
MUA
(邮件用户代理程序)和
MTA
(邮件传输代理程序)。
用
POP
或
IMAP
来接收电子邮件,用
SMTP
来发送电子邮件。
经由本地发送但尚未阅读的电子邮件暂存在
/var/spool/mail/$USER
文件中。最简单的
MUA
之一是
mail
命令。
Evolution
图形化电子邮件客户端程序。
10.5
网络诊断程序
/sbin/ifconfig
能显示本地
IP
配置。
/sbin/traceroute
命令能诊断出路由问题。
ping
命令可确定主机间的底层网络连接性。
host
命令能做出直接的
DNS
查询。
10.6
基于终端的网络和
FTP
客户端程序
Elinks
终端
HTTP
客户端程序可在非图形环境中浏览网页,调用命令是
links
。
curl
应用程序是一个非交互的多协议客户端程序(包括
HTTP
、
HTTPS
、
FTP
),能以批模式来传送文件。
Wget
应用程序是一个非交互的多协议客户端程序(包括
HTTP
、
HTTPS
、
FTP
),能递归传送网页,并能在所有网页引用的页面中进行递归搜索。
10.7
远程
shell
命令
远程
shell
应用程序允许用户在远程机器上执行任意命令,而且能让标准输出返回本地。当然,它也可以启动交互式
shell
。
安全
shell
应用程序提供了一个远程
shell
,这样所有的信息都加密了,而且用户能用传统的密码验证或使用公钥验证系统。
为了使用公钥验证系统,必须用
ssh-keygen
命令生成一个公有
-
私有密钥对。
因为安全
shell
服务器有自己的公有
-
私钥对,所有服务器和客户端能相互进行验证。
转载于:https://blog.51cto.com/wzhjz/226576