第一章 定义、概念、常识
1.1 Linux的组成结构
Linux属于宏内核操作系统
组成:Kernel—>库、库函数->shell->Application
1.2 bash中的变量
1.2.1环境变量
Linux是一个多用户的操作系统,多用户意味着每个用户登录系统后,都有自己的专用运行环境,而这个环境是由一组变量所定义,这组变量被称为环境变量.
1.2.2 本地shell变量
本地shell变量是局部变量,只对当前shell有效(可用export导出为环境变量)
1.3 通配符
通配符又称多义符
?:表示该位置可以是任意的单个字符
*:表示该位置可以是若干个任意字符
[charset]:可替代charset中的任意字符,还可描述介于字符之间的描述[a-z] [a-zA-Z]
Linux通配符主要用来描述文件需和正则表达式区分开来.
1.4 文件类型
Linux文件类型有以下7种
-:普通文件
d:目录
b:块设备文件
c;字符设备文件
l:链接文件
下面2种文件在程序启动后产生
p:管道文件
s:套接字文件(socket文件)
1.5 文件和目录权限
1.5.1 权限类别
普通权限: r 读 w写 x 执行 – 没有权限
特殊权限:
s(SUID,Set UID):可执行文件搭配此权限可获得特权任意使用该文件所有者所能使用的全部系统资源.
s(SGID,Set GID):同上,文件所属组.
t(stiky):所有用户(如/tmp)均有完整权限,但只有文件所有者可以删除修改所有者的文件不能越界.
St权限占用x位置,若x存在则st小写,反之,大写.
1.5.2 角色
u:所有者->ls -l 第一列2-4个位置 o:其他人-> ls -l 第一列8-10位
g:所数组-> ls -l 第一列5-7个位置 a:所有->包括以上所有
1.5.3 权限掩码
创建文件或目录时,系统用umask的值来将初始的权限降低为更合理更安全的权限.
1.6 Linux文件属性的时间
Linux文件无创建时间,有以下3个.
Access:访问时间
Modify:修改文件的时间(内容)
Change:修改文件的时间(属性)
1.7 进程状态
D:不可中断的闲置状态 R: 运行 S: 睡眠 Z:僵尸 W:等待 N:低优先级的进程 <:高优先级的进程
1.8 硬链接和字符链接
硬链接 :在目录中的block块中直接指向inode节点的指针,硬链接是同样的inode编号,会增加文件链接数
字符链接 :一个新的inode节点,内容存放着它所链接的文件的路径.字符链接不会增加文件的链接数
第二章 Linux常用命令详解
2.1 收集系统相关信息
hostname [主机名] :查看和修改当前主机名
who :查看当前在线的用户
whoami :查看当前的用户(login shell)
last :列出目前和过去登入系统的用户相关信息.单独执行读取/var/log/wtmp文件
lastlog : 列出目前和过去登入系统的用户相关信息.单独执行读取/var/log/lostlog文件
finger [-lmsp] <用户> :查找并显示用户信息
uname [-ar] :当前系统信息[详细信息/内核版本]
pwd :显示当前路径
id [-ug] <用户> :显示用户的id信息
df :显示当前文件系统概况
free :显示内存状态
groups <用户> :显示用户所属组
cal :显示日历 cal 2010显示2010全年日历
date :显示当前详细信息 + [%d%m%y%k%l%M%S%u] :号月年时(全)时(半)分秒星期
2.2 查看文件内容
cat [-bnse] <文件> :输出标准输出.b:对所有非空行编行号n:对所有行编行号s:多个空行用单一空行代替 -e:每行末尾加上$符号.
more :分屏显示(%)space下一屏.完成直接退出
less :分屏显示可上下翻页,需按q退出
head [-n] :显示前n行,默认前10行.
tail [-n] :显示尾n行,默认尾10行.-f参数可用来监视某些文件tail -f /var/log/message.
wc [-clw] <文件列表> :统计字数,行数,字节数.
cut [-d分隔符] [-f第几段] [-c字符范围] :分割查看文件-f -c可接参数 N-M:从N开始到M结束.N-:从第一个开始到文件结束 -N :从第一个到第N个.
sort [-ncdfro] <文件> :排序 n:数值 f:将小写当大写 r:反序 o <输出文件> c:检查是否已排d :只对数字,字母和空格排序.
uniq [-cdu] <输入文件> [输出文件] :检查及删除文本文件中重复出现的行列.
-c :在每行旁显示重复次数 –d:仅显示重复出现的行 –u:仅显示不重复出现的行.
diff [-cipu] 文件 文件 :比较文件差异.c:显示全部不同 i:忽略大小写 p:若为C程序也显示差异所在的函数 u:合并的方式显示不同.
grep [-clvR] [-A行数] [-B行数] :过滤显示文件内容.-c:计算符合的数目-l :只显示文件名 -A2:找到的位置上2行.-B2:找到的位置下2行.
2.3 文件和目录管理
ls :显示文件目录信息
-a:显示所有文件及目录 (ls规定将文件名或目录名中开头为"."的视为隐藏档,不会列出)
-c:按列输出,纵向排序
-x:按列输出,横向排序
-l:除文件名外,也将文件状态、权限、拥有者、文件大小等信息详细列出
-t :根据文件建立时间的先后次序列出
-A :同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
-X:按扩展名排序显示
-R:递归显示下层子目录
-F:在列出的档案名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
-r:将档案以相反次序显示(原定依英文字母次序)
cd: 切换工作目录
cd 绝对路径 例:cd /boot
cd 相对路径 例:cd cdrom
cd :当前用户主目录
cd ~ [用户名] :跟用户名,进入该用户名主目录,不带用户名进入当前用户主目录
程度
cd - :回到上一次操作的目录
touch [文件] :如果文件存在则更新文件的3个时间,如果不存在则创建此文件.
cp [-abfiprR] .. :复制文件和目录 a:尽可能保持文件结构属性 b :备份 f:强制、覆盖 i提示 p:保持与原文件所有者、组权限和时间标志.r,R :递归.cp [] 源文件 目标文件 ; cp [] 源文件 目录 ;cp 源文件组 目录
rm [-riIfv] 文件列表 :删除文件和目录.
-r 删除文件列表中指定的目录,若不用此标志则不删除目录
-I 每次均提示
I 指定交互模式。在执行删除前提示确认。任何以Y开始的响应都表示肯定;其他则表示否定。
-f 指定强行删除模式。通常,在删除文件权限可满足时rm提示。本标志强迫删除,不用提示。
-V 在删除前回显文件名。
-- 指明所有选项结束。用于删除一个文件名与某一选项相同的文件。例如:假定偶然建立了名为-f的文件,又打算删除它,命令rm -f不起任何作用,因为-f被解释成标志而不是文件名;而命令rm -- -f能成功地删除文件.
mv [-fib] :移动和重命名.i :权限提示.
mv 文件 文件;mv 目录 目录 ; mv 文件列表 目录.
mkdir [-m模式] [-pv] 目录: 创建文件夹
-p:建立所有不存在父目录的目录。
-m: 权限
rmdir [-pv] 目录列表:删除文件夹.
-p:同上一个p
ln [-s] :创建链接文件.
chmod [选项] [权限] 文件和目录列表:修改权限
-c 只有在文件的权限确实改变时才进行详细说明。
-f 不打印权限不能改变的文件的错误信息。
-v 详细说明权限的变化。
-R 递归改变目录及其内容的权限
1).字符模式:角色+-权限 chmod g+w abc.txt; chmod g+w,o-x abc.txt;
2).八进制模式 :1为真,0为假.分3组,依次组成8进制数然后组合.如rw-r--r-- 为 644
chown,chgrp:修改所有者,所属组,参数同上.
file [-zL] [-f名称文件] :检测文件类型 .z:尝试解读压缩文件.L:直接显示符号链接指向的文件类别.-f:检测文件中的每个文件的类型.
du [-shc] :显示文件和目录大小.c:同时显示总和.s:目录.
ps :显示系统中所运行进程的详细信息
-e 显示所有进程;
-a 显示所有终端机下执行的程序
-l 查看自己进程的详细信息;
-u 进程信息以用户格式来显示;
-x 显示后台运行的进程
pstree:按树形显示进程
-u:显示用户的名称
-p:显示进程的编号
jobs:显示当前控制台的后台进程
-l:列出进程名称外 和列出PID
-r:仅运行的进程
-s:仅暂停的进程
fg :恢复后台进程到前台运行
1).fg [+-]:恢复后台进程中(+-)到前台运行
2).fg n:恢复第n个后台进程到前台
bg n:后台挂起->后台运行.
top:动态显示进程的状态
top -d 2:2秒更新一次
top -u dyt:只显示某个用户的
1).分两部分显示,上下
2).按键
M:内存
N:按打开时间
P:按cpu
A:按PID
q:退出
k:杀进程
r:改优先级.
nohup command & :脱离shell的后台运行.
nice -n 优先级(-20-19) command :打开进程并设置优先级.
renice 优先级 PID :重设优先级.
kill 信号 PID:杀进程(默认15号进程)查看可选信号kill -l.kill %n:杀掉后台第n个任务.
killall 进程名:杀掉所有进程名为..的进程.
skill zy:杀zy的所有进程.skill -9 tty1:杀终端及其进程.
pkill -u zy :杀zy 的所有进程.
pgrep httpd :http的所有PID.
2.5 文件和目录查找
find:查找文件 find[目录列表][匹配标准]
1).匹配标准
-name 文件:告诉find要找什么文件;要找的文件包括在引号中,可以使用通配符(*和?)
-perm 模式:匹配所有模式为指定数字型模式值的文件。不仅仅是读,写和执行,所有模式都必须匹配。如果在模式前是负号(-),表示采用除这个模式外的所有模式。
-type x:匹配所有类型为x的文件。x是c(字符特殊),b(块特殊),d(目录),p(有名管道),l(符号连接),s(套接文件)或f(一般文件)。
-links n:匹配所有链接数位n的文件
-user 用户号:匹配所有用户序列号是前面所指定的用户序列号的文件,可以是数字型的值或用户登录名.
-atime n:匹配所有在前n天内访问过的文件.
-mtime n:匹配所有在前n天内修改过的文件.
-amin n 查找n分钟以前被访问过的所有文件.
-cmin n 查找n分钟以前文件状态被修改过的所有文件.
-ctime n 查找n天以前文件状态被修改过的所有文件.
-mmin n 查找n分钟以前文件内容被修改过的所有文件.
-newwe 文件:匹配所有修改时间比file文件更新的文件.
-size n: 匹配所有大小为n块的文件(512字节块,若k在n后,则为1k字节块
-o:表示或 -a :表示和(默认为a)
-exec <执行指令>:find返回值为true执行该指令.
-ok <执行指令> :同上,但会询问用户.
例:find /home –user zy -a –perm -777 -a –type d –ok rm {} /;
-777表所有均为1(9位权限).+777表任意一个为1.
which command :查找命令所在路径.
whereis command :查找命令和帮助文档所在路径.
locate [-r正则表达式] <文件> :查找文件.
updatedb 更新locate的数据库.
2.6 文件压缩和打包.
zip file.zip file:压缩file到file.zip
-d :从压缩文件中删除指定的文件
-m:将文件移到压缩文件中
-r:递归处理.压缩目录要使用
-z:给压缩文件注释
unzip file.zip :解压file.zip
zipinfo 查看zip中的内容
-l :以长条的方式显示zip的内容
gzip [-cdt#] 文件名
-c:将压缩的数据输出到屏幕,可以重定向
-d:解压缩的参数
-t:用来检查压缩文件的一致性,看文件是否有错
-#:压缩等级:1最不好,9最好,6是默认值
示例
gzip file :压缩file得到file.gz
zcat file.gz:读取file.gz的内容
gzip -d file.gz或gunzip file.gz解压缩
gzip -9 -c file>file.gz:以最大的压缩比率压缩file到file.gz
gunzip 文件名:解压缩.
bzip2 [-cdt#] 文件名
-c:将压缩的数据输出到屏幕,可以重定向
-d:解压缩的参数
-t:用来检查压缩文件的一致性,看文件是否有错
-#:压缩等级:1最不好,9最好,6是默认值
bunzip 文件名:解压缩
tar [主选项+辅选项] 文件或者目录
-----------主选项参数----------
-c 创建新的档案文件.如果用户想备份一个目录或是一些文件,就要选择这个选项.
-x 从档案文件中是释放文件
-t 列出档案文件的内容,查看已经备份了哪些文件.
-u 更新文件.就是说,用新增的文件取代原备份文件,如果在备份文件中找不到要更新的文件,则把它追加到备份文件的最后.
-----------辅选项参数----------
f 使用档案文件或设备,这个选项通常是必选的。
K 保存已经存在的文件。例如我们把某个文件还原,在还原的过程中,遇到相同的文件,不会进行覆盖。
m 在还原文件时,把所有文件的修改时间设定为现在。
M 创建多卷的档案文件,以便在几个磁盘中存放。
v 详细报告tar处理的文件信息。如无此选项,tar不报告文件信息。
z 用gzip来压缩/解压缩文件
j 用bzip2来压缩/解压缩文件
2.7 管理和环境.
histry :显示和编辑历史命令(有两种用法)
1).当命令没有参数时,整个历史命令列表的内容都将被显示出来.使用n参数的作用是仅有最后n个历史命令会被列出.
2).histroy [-rwan] [filename] (如果 filename 选项没有被指定,history 命令将用变量HISTFILE 的值来代替)
-r:告诉 history 命令读命令历史列表文件的内容并且把它们当作当前的命令历史列表.
-w:把当前的命令历史记录写入文件中并覆盖文件原来的内容.
-a:把当前的命令历史记录追加到文件中.
-n将读取文件中的内容并加入到当前历史命令列表中.
alias [alias-name=‘original-command’](其中,alias-name是用户给命令取的别名,original-command是原来的命令和参数。需要注意的是,由于Bash是以空格或者回车来识别原来的命令的,所以如果不使用引号就可能导致Bash只截取第一个字,从而出现错误)注意:在定义别名时,等号两边不能有空格,否则shell将不能决定要做什么。仅在命令中包含空格或特 殊字符时才需要引号。如果键入不带任何参数的alias命令,将显示所有已定义的别名
unalias 已命令过的别名:撤销命令别名.
set :查看所有变量,set 变量名=…. 设置变量.
unset 变量名(函数名) :撤销变量.
env :查看环境变量.
export 变量名 :将变量导出为环境变量.
useradd: useradd <用户名> 添加用户
-u:指定uid
-g:指定初始组
-G:指定附加组
-d:指定主目录
-s:指定默认shell程序
-p: 指定密码
1).useradd -u 505 -g root -G dyt -p yy -d /home/myhome -s /bin/bash
passwd <用户名> :修改,添加密码.
usermod
-c :改名字注释
-d :更改主目录
-不会创建目录,要自己创建
-要更改文件拥有者
-更改权限
-e:过期时间
-f:缓冲天数(多少天关闭此帐号)
-g:更改用户所在的组
-G:将用户加入某个组:
-s:指定登陆的shell
-u:指定uid
-p:指定密码
-l:修改帐户名
-L:锁定用户
-U:解锁用户
userdel
-r:递归删除对应的根目录,用户组
gpasswd:可以用来删除和添加组的成员
gpasswd -a 用户 组名 :将用户加入组
gpasswd -d 用户 组名:从组中移除用户
groupadd :添加新组
groupmod:更改群组识别码或名称 groupmod [-g <群组识别码> <-o>][-n <新群组名称>][群组名称]
-g 设置欲使用的群组识别码。
-o 重复使用群组识别码。
-n 设置欲使用的群组名称
newgrp 组名:可以改变有效组(当前shell)
su :可以在同一个窗口切换用户的身份(pstree 查看su的运行原理发现是在bash中进入另一个bash,所以可以直接用exit返回上一个用户)
su 用户名:切换用户,但是不切换环境变量
su - 用户名:切换用户,同时也切换环境变量.
mount [-t vfstype] [-o options] device dir:挂载设备.
-o的部分选项.loop:把文件当磁盘分区 ro:只读 rw:只写.
mount -o username=zy //192.168.0.1/tools /mnt
mount -t iso9660 -o loop a.iso /mnt
cat /dev/cdrom > a.iso
mount 192.168.0.254:/var/ftp/pub /mnt ->NFS加载Linux共享文件.
2.8 Linux 编辑器.
2.8.1 vi(vim)
vi hello.c:打开或新建hello.c
vi +5 hello.c:打开且光标定位在hello.c的第5行
vi + hello.c:打开且光标定位在hello.c的末行
vi +/main hello.c:打开光标定位在main上
vi *.c :打开多个.c文件
vi +/main *.h *.c :用于在工程中快速定位到main函数
操作
i:光标处插入,I:当前行行首
a 和 A (是append的简写)
a:光标所在位置之后插入
A:光标所在位置行尾
o:光标行下面插入空行
O:光标上面插入空行
s: 删除光标所在字元。
S: 删除光标所在的列。
cc: 可以修改整列文字.<=>S
以上操作完成进入编辑模式
r :修改光标所在字元,r 後接著要修正的字符。
R: 进入取替换状态,新增文字会覆盖原先文字,直到按 [ESC] 回到指令模式下为止。
x: 删除光标处的字符
X: 删除光标前的字符
(n)dd: 删除当前(及以下n-1)行
d$: 删除光标当前位置到行尾
d0: 删除光标当前位置到行首
dw: 删除一个单词
D: 删除光标到该行结束为止所有的文字
复制
复制(包括当前行及下面n-1行)整行:(n)yy
从光标到行尾:y$
从光标到行首:y0
粘贴
p:粘贴缓冲区的内容
文本选择
逐字选择:v
逐行选择:V
撤销
u:可以恢复被删除的文字
U:可以恢复光标所在列的所有改变
重做
.:重复上一次操作。
ctrl + r:同上
退出(要使用:切换到末行模式进行操作)
w
w!强制保存
q:退出
q!:强制退出
wq:保存退出
wq!:强制保存退出
ZZ 功能与 :wq 相同
x 与:wq相同
光标移动
hjkl:上下左右
0 移到当前行的最前
$ 移到当前行的最后
H 移到屏幕第一行
M 移动到视窗的中间列
b 移动到下个字的第一个字母
w 移动到上个字的第一个字母
e 移动到下个字的最後一个字母
^ 移动到光标所在列的第一个非空白字元
n- 减号移动到上一列的第一个非空白字元前面加上数字可以指定移动到以上 n 列
n+ 加号移动到下一列的第一个非空白字元前面加上数字可以指定移动到以下 n 列
nG 直接用数字 n 加上大写 G 移动到第 n 列
fx 往右移动到 x 字元上
Fx 往左移动到 x 字元上
tx 往右移动到 x 字元前
Tx 往左移动到 x 字元前
; 配合f&t(大小fx tx)使用重复一次
, 配合f&t使用,反方向重复一次
/string 往右移动到有 string 的地方
?string 往左移动到有 string 的地方
n 配合 /&? 使用,重复一次
N 配合 /&? 使用,反方向重复一次
n( 左括号移动到句子的最前面句子是以前面加上数字可以指定往前移动 n 个句子 ! . ? 三种符号来界定
n) 右括号移动到下个句子的最前面前面加上数字可以指定往後移动 n 个句子 ! . ? 三种符号来界定
L 移到屏幕末行
G 移到文件最后行
gg 移到文件第一行
n回车:往下n行
文本缩进缩出
>n回车:光标行及下n行往右移动8个空格
n<<:光标行以及下面n-1行左移8个空格
异行移动
5m2:第5行移到第2行的下方
:1,10 s/bin/BIN/g:1-10行将bin替换成BIN
:%s/bin/BIN/g:全部替换
:.,$s/bin/BIN/gc:当前行到文件尾:全部替换,每一次替换都提示用户
(g为global,c为confirm)
屏幕滚动
Ctrl+u 向上半页
Ctrl+d 向下半页
Ctrl+f 向下一页
Ctrl+b 向上一页
窗口分割
:split 文件
:vsplit 文件
vi设置
:set nu 显示行号,打开这个功能以后会在每一行的最左面显示行号,行号不算在文件本身
:set nonu 关闭显示行号的功能
:set nohlsearch 消除搜索的记号
:set ic 忽略大小写,主要是为了方便搜索
:set noic 不忽略大小写
:syntax enable/on 打开色彩支持
:syntax off 关闭色彩支持
:set ai 打开自动缩进
:set ts=4 设定tables键值4
指令列表
d 删除(delete)
y 复制(yank)
p 放置(put)
c 修改(change)
范围可以是下列几个:
e 光标所在位置到该字的最後一个字母
w 光标所在位置到下个字的第一个字母
b 光标所在位置到上个字的第一个字母
$ 光标所在位置到该列的最後一个字母
0 光标所在位置到该列的第一个字母
) 光标所在位置到下个句子的第一个字母
( 光标所在位置到该句子的第一个字母
} 光标所在位置到该段落的最後一个字母
{ 光标所在位置到该段落的第一个字母
******指令+范围可构成指令*******
例如:dw 是由删除指令 d 与范围 w 所组成,代表删除一个字 d(elete) w(ord)
“a5yy -----> 五行放入a剪切板中
“ap -----> 粘贴a剪切板
“bp -----> 粘贴b剪切板
vim中,命令前加数字代表该命令做多少次如6i,插入完回到命令模式产生6个重复的插入内容.
2.8.2 sed
1.sed -e ‘sed command’ -e ‘sed command’
2.sed ‘sed command’; ‘sed command’; ……
sed command:
s:替换
d:删除
p:打印
g:全部
例:sed -n -e ‘//
-n参数代表不输出到标准输出.-f 名称文件:表示一行行执行文件中的sed命令.
2.8.3 awk
-f 名称文件:表示一行行执行文件中的sed命令.
$1 :第一列 $2 :第二列……
chkconfig |awk ‘$1==”httpd” {pirntf $5}’ 打印httpd运行级别为3的情况.
chkconfig |awk ‘BEGIN {i=0} {if ($3==”1:off”) i+=1} END {printf i}’ 同上.
BEGIN :开始时执行的命令. END: 最后执行的命令.
-F:-- >表示以:作为分隔符.
awk -F: ‘BEGIN {i=0} {if ($7==”/bin/bash”) i+=1} END {printf i} < /etc/passwd
计算/etc/passwd中shell为/bin/bash的个数.
第三章 正则表达式
.:任意一个字符.
*:任意多个前一字符
^:开头(行)
$:结尾(行)
[]:方括号的任意一个.
{}:重复次数
/>单词
^$:空行.
^a以a开头的行a$以a结尾的行a?一个或0个单独的a
a+<=>a* a,aa,aaa甚至更多个a.
^[a-t]以a-t任意一个开头 ^[^a-t]不是a-t任意一个开头.
^[a,b,c] a,b,c任意一个开头.
/
/
a/{18/} a重复18次.
第四章 输入输出重定向及管道
4.1 Linux工具/命令种类
过滤器:从一个来源作为输入,有输出源
编辑器:编辑工具
交互工具:需要交互的工具命令
4.2 重定向
重定向是改变默认输出输入.
默认的输出输入
stdin(0) :标准输出流
stdout(1) :标准输入流
stderr(2) :标准错误流
输出重定向
>:正确的输出(true)
2>:错误的输出(false)
>file 2>&1 (正确错误的信息都重定向到file)
&>file 同上
>的延伸用法:> 文件名 文件存在则更新文件3个时间不存在则创建.
>> file :重定向到file的末尾(衔接)
输入重定向
<:输入重定向
<<的用法:
1.让系统一次性的将键盘的全部输入线送入虚拟的”当前文档”再一次性的追加的文档末尾.
2.需要一堆字符、符号或字符串作为起始终结标识符。
3.可选任意符号作为起始终结标识符。
例:cat << EEE
>aaa aaa
>bbb bbb
>ccc ccc
>EEE-- > 碰到EEE退出输入 输出---->
4.3 管道
将上一条命令作为下一条命令的参数 |.
例:ls -l /etc |grep ‘^l’ |tee /dev/tty1 |wc –l
求/etc中链接文件个数.tee代表复制一份结果.
第五章 bash中的快捷键和运算符
5.1 bash中的快捷键
ctrl + s 停止屏幕输出
ctrl + q 恢复屏幕输出
ctrl + d 标准输入结束
ctrl + r 调用命令历史
ctrl + l 清屏
ctrl + c 当前任务
5.2 bash中的运算符
!n:执行命令历史中的第n个命令
!!:执行命令历史中的最后一条命令
!$:前一个命令的最后一个参数
$?:上一个命令是否成功执行(true:0)(false:1)
$变量名:引用某变量的值. #:注释
*:任意多个任意字符 ~:主目录 &:表后台执行 %n:后台第n个任务.
[abc],[a-z],[a-zA-Z]:方括号中任意一个
{}:表枚举例touch {a,b,c}{1,2,3} 创建9个文件
abc():声明一个函数abc(函数体用大括号括起来)
():表示在子shell中执行=>打包命令
“”:忽略空格的特殊意义.
‘’:忽略所有字符的特殊含义
``:中间的内容作为shell命令先执行.
/:逃逸符,洗掉字符的特殊意义.
;:一个命令结束.
=:赋值,=号两边不加空格.
[ ]:内容两边加空格,表判断.例:[ -f /etc/passwd ]
f 是否文件 d是否目录 c字符设备 b块设备 l链接文件 x可执行 r可读 w可写
. <文件>:读文件,把文件中每行当作一个命令,依次执行.
例: . /etc/passwd ->执行/etc/passwd每行语句 (执行结果是一堆错误)
|:管道符
&&:前一个命令为true执行下一个.
||:前一个命令为false执行下一个.
<,>,>>,<<:输入输出重定向.
$$:当前shell的PID
[ $USER = root ]:判断=号两边是否相等.
$[]:表示[]内为算术表达式.
::分隔符.
数值比较时的运算符
相等 -eq
不等 -nq
大于 -gt
小于 -lt
大于或等于 -ge
小于或等于 -le
为空 -z
不为空 -n
例[ $a -eq $b ] -> a=b? [ -z $a ] ->a为空? [ $a -gt $b ] ->a>b?
5.3 bash相关的配置文件
login shell时加载
/etc/profile
~/.bash.profile
每次shell启动时加载
/etc/bashrc
~/.bashrc
退出shell加载 ~/.bash_logout
命令历史 ~/.bash_history
第六章 shell 编程基础
6.1 shell 脚本交互
1.用参数交互 $1,$2,$3……第一二三……个参数.
2.用命令进行交互
-read
-echo
-printf
6.2 流程控制
6.2.1 条件控制
[ ], &&, ||, if, case
if语法:
if 条件
then 动作
elif 条件
then 动作
else
动作
fi
case 语法:
case 数组 in
A)
动作
;;
B)
动作
;;
esac
A,B代表数组中的某个变量.
6.2.2 循环控制
while utile for
break continue :中断
while语法
while 条件(为真执行循环体)
do
动作
done
untile 语法和while 相同不过是当条件为假时执行循环体.
for语法
for 变量 in 数组
do
动作
done
6.3 shell调试
使用bash命令
-v
-b 执行过程课件
-x 显示变量结果
echo用法-e:表示可以使用格式控制符.
-n:不自动换行.