第一课
练习
1、创建用户mandriva,其ID为2200,基本组为distro,组ID为3300,附加组为peguin;
# groupadd -g 3300 distro
# groupadd peguin
# useradd -u 2200 -g distro -G peguin mandriva
2、创建用户gentoo,其全名"Gentoo",默认shell为/bin/tcsh
# useradd -u 'Gentoo' -s /bin/tcsh gentoo
3、修改mandriva的UID为4400,基本组为linux,附加组为distro和gentoo
# usemod -u 4400 -g linux -a -G distro,gentoo mandriva
4、给gentoo添加密码,并设定其密码最短使用期限为2天,最长为60天,警告为3天,非活动期限为7天。
# echo 'gentoo' | passwd --stin gentoo
# chage -m 2 -M 60 -w 3 -i 7 gentoo
linux权限
安全模型:
文件权限:r,w,x
目录权限:r,w,x
perm
mode:
ownership:
chmod:
操作三类用户的权限,使用八进制来进行
chmod [-R] OCTAL_MODE FILE...
加-R表示递归
操作指定类别使用者的权限
u: 属主
g: 属组
o: 其他
a: 所有
指定一个后多个类别mode
chmod u=rw file
chmod ug=r file
操作指定类别的使用者指定权限:
chmod u+r file
chmod a+r file//对a加
chmod u+w file//给u加
chmod o+x file //给o加
chmod -r file //
chmod u-w file //u
chmod a-x file //all
参考其他文件修改指定文件权限--reference=FILE
chmod --reference=/ref target
修改目录时,级联子目录的权限也修改
# chmod 750 DIR
# chmod -R g=750 DIR
chown: 修改属主
chown [-R] [--reference] USER FILE...
加--reference时,修改属主和属组
chown [-R] [--reference] USER:GROUP FILE... 或 USER.GROUP FILE... 或 空:GROUP FILE...(只改属组)
加--reference时,修改属主以及属组
chgrp: 修改属组
chown [-R] [--reference] GROUP FILE...
加--reference时, 只修改属组
mkdir:默认权限为755(root)、775(user)
touch:默认权限为644(root)、664(user)
umask:反向
其中管理员:022
普通用户:002(当普通用户的uid和gid一样,否则为022)
文件:666-umask
目录:777-umask
可以使用umask 023来修改当前用户umask
创建文件时,如果666-mask得到的权限中,具有执行权限,则在对应的权限+1后作用生效的权限
bash:快捷键
home/ctrl+A:快速跳至命令行首
end/ctrl+E:快速跳至命令行尾
ctrl+U:删除命令行首至当前光标所在处之前的所有内容
ctrl+K:删除命令行当前光标所在处之后的所有内容
ctrl+L:清屏
Ctrl+C:终止
Ctrl+Z:把当前命令送至后台执行
第二课
bash 环境:
shell :外壳
编译器
解释器:
解释:词法分析,语法分析,语义分析,
条件判断:选择分支
循环
过程式编程语言:
顺序执行
选择执行
循环执行
解释器:提供了编程环境
脚本:使用bash提供的控制机制,期望执行的命令罗列于文本文件中。
bash没有库,整个程序几乎都要依赖于系统命令来完成。
静态语言
编译型:
源程序--预处理--编译--汇编--链接
解释性:
源程序 --解析器读取
动态语言
bash 的重要特性:变量
bash变量类型:
本地变量:只对当前shell进程有效的变量,对其他shell进程无效,包括当前shell进程的子进程。
(set) VAR_NAME = VALUE
变量引用:${VAR_NAME} 或 $VAR_NAME
变量赋值:向变量的存储空间保存数据
“”:弱引用 - 内容被替换
‘’:强引用 - 原样输出
环境变量:对当前shell进程及其子shell有效,对其他的shell进程无效;
定义:export VAR_NAME = VALUE
导出: export VAR_NAME
用户可自定义环境变量
bash有许多内置的环境变量
撤销变量:unset VAR_NAME
只读变量:readonly VAR_NAME
局部变量:
对shell脚本中某代码片段有效;通常用于函数本地;
local VAR_NAME = VALUE
位置变量:
$1,$2,...,${10}
特殊变量:
$?
查看当前shell进程中的所有变量:set
查看当前shell进程中的所有环境变量:export,printenv,env;
变量命名:
1、不能使用程序中的关键字(保留字)
2、只能使用数字、字母和下划线,且不能以数字开头;
3、见名知意;
变量类型:
1、定义类型,也就声明了存储机制;文本和二进制
2、存储空间
数值型:
精确数值:整数
仅似数值:浮点型
单精度浮点
双进度浮点
字符型
char
string
布尔型:
true,false
类型转换
显示转换
隐式转换
bash是弱类型的语言,一切皆字符
bash的配置文件:
profile类:为交互式登录的用户提供配置
全局:
/etc/profile
/etc/profile.d/*.sh
用户:
~/.bash_profile
功用:
1、设定环境变量;
2、运行命令或脚本
bashrc类:为非交互式的用户提供配置
全局:/etc/ashrc
用户:~/.bashrc
功用:
1、设定本地变量;
2、定义命令别名
登录类型:
交互式:
直接通过终端输入账号和密码登录
使用su -l USERNAME 或 su - USERNAME
非交互式:
su USERNAME
图形界面下打开的终端
执行脚本
通过编辑配置文件修改的配置生效?
1、退出并重新登录
2、让bash重读此配置文件:source FILE;. FILE
配置文件读取顺序
交互登录的用户:
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非交互式登录的用户:
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
第三课
程序:
指令 + 数据
计算机:二进制代码
编程语言:
问题空间 --> 解空间
bash 编程,
指令:OS上可运行的指令
翻译:在当前OS上查找相应命令并提交给内核的过程;
程序控制语句:略
Linux文本处理工具:
文本搜索
grep,egrep,fgrep(不支持正则)
grep:Global search Regular expression and Print out the line.
文本搜索工具,根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的行。
语法格式:
grep [options] ... 'PATTERN' FILE...
正则表达式:是一类字符所书写的模式。
基本正则表达式:grep
扩展正则表达 :egrep 或 grep -E
fgrep :fast,不支持使用正则表达式
正则表达式引擎,
基本正则表达式的元字符:
字符匹配
.:匹配任意单个字符
[]:匹配指定范围内的任意单个字符 例:[0-9] [a-z]
[^]:匹配非指定范围内的任意单个字符
次数匹配元字符:用于实现指定其前面的字符所能够出现的次数。
*:任意长度,它前面的字符可以出现任意次;例:x*y = xxy,xyy,y
\?:0或1次,它前面的字符是可有可无的 例:x\?y = xy,y,ay
\{m\}:m次,它前面的字符要出现M次。例:x\{2\}y = xxxxxy,
\{m,n\}:至少m次,至多n次 例:x\{2,5\}y = xxy,
.*:任意长度的任意字符
工作与贪婪模式:尽可能多的去匹配
[[:space:]] 空白字符
[[:alnum:]] 任何字母
[[:alpha:]] 匹配任何字母和数字
[[:blank:]] space and tab
[[:digit:]] 匹配任何数字
[[:lower:]] 匹配任何小写字母
[[:print:]]
[[:punct:]] 匹配任何标点符号
[[:upper:]] 匹配任何大写字母
[[:xdigit:] 匹配任何16进制数字
位置锚定:
^:行首锚定,写在模式的最左侧;
$:行尾锚定,写在模式的最右侧;
^$:空白行,
不包含特殊字符的连续字符组成的串叫单词;
\<:词首,出现单词左侧 例:\<char
\>:词尾,出现单词右侧 例:char\>
\b:词首、词尾皆可;
分组:
\(\) 例:\(ab\){1,\} ab分组至少出现一次
引用:
\#:引用第n个括号所匹配到的内容,而非模式本身;例:\(ab\?c).*\1 = abcmnabc , abcmnac(X)
命令选项:
-v:反向选取
-o:仅显示匹配的字串,而非字串所在的行
-i:忽略字符大小写
-A (数字)行
-B (数字)行
-C (数字)行
第五课
全屏编辑器(),行编辑器(sed)
nano
emacs
vi --> vim
vim:
模式化的编辑器
模式:
编辑模式:命令模式,键盘操作常被理解为编辑命令;
输入模式
末行模式:vim内置的命令行接口,执行vim的内置命令
打开文件:
# vim [option]...[FILE]...
ESC键:
编辑模式 --> 命令行模式
i:在光标所在的前方转换为输入模式;
a:在光标所在的后方转换为输入模式;
o:在光标所在处的下方新建一个空行并转换为输入模式;
I:在光标所在行的行首转换额外输入模式;
A:在光标所在行的行尾转换为输入模式;
O:在光标所在行的上方新建一个空白行并转换为输入模式;
输入模式 --> 编辑模式
ESC键
编辑模式 --> 末行模式
:(冒号)
末行模式 --> 编辑模式
ESC键
退出文件:
末行模式:
1、:q! 不保存退出
2、:wq 保存退出
3、:x 保存退出
编辑模式:
4、ZZ 保存退出
编辑文本:#(以下命令) #代表数字
光标移动:
1、字符间移动:h,j,k,l
2、单词间跳转:
w:下一个单词词首
b:当前单词或前一个单词的词首
e:当前单词或下一个单词的词尾
行内移动:
^:移动到行首第一个非空白字符
$:移动到行尾
0:移动到绝对行首
句子间移动:
)
(
段落间移动:
}
{
行间移动:
#G:直接跳转至#号
G:最后一行
编辑命令:
x:删除光标所在处的字符
d:删除命令。结合光标跳转字符使用,删除跳转字符内的字符;
dd:删除光标所在行
d$:删除光标到行尾的的内容。等于D
注意:最后一次删除的内容会被保存至缓冲区;
p:paste,粘贴,在光标所在行的下方
P:粘贴,在光标所在行的上方;
y:yank,复制
Y:相当于yy
c:change,修改。先删除,再转换为输入模式;
cc、C:删除光标所在处的整行再转换为输入模式;
撤销命令:
u:undo,撤销删除
#u:
撤销此前的撤销操作:
Ctrl + r
重复前一条命令:
.(点号)
vimtutor - 帮助教程
vim:
末行模式:
s/查找模式/要替换成的内容/gi
查找模式:可以使用正则表达式
要替换成的内容:不能使用正则模式,仅能使用引用;
g:global,全行替换
i:不区分字符大小写
内容界定:
startpos,endpos
#:第#行
.:当前行
%:全文相当1,$
10,$-1
w:将选定内容另存到某文件 w [path]...
r:将选定内容读取到某文件 r [path]...
可视化模式:
v:光标走过的字符
V:光标走过的行
文本查找:
用法同less命令
/pattern
?pattern
n 向下找
N 向上找
翻屏:
Ctrl + f:向文件尾部翻一屏
Ctrl + b:向文件首部翻一屏
Ctrl + d:向文件尾部翻半屏
Ctrl + u:向文件首部翻半屏
j:
k:
多文件模式:
:next 下一个文件
:previous 上一个文件
:last 最后一个文件
:first 第一个文件
:wqall 保存所有
多窗口模式:
多文件
o:上下分屏显示多个文件 vim -o 文件1,文件2。。。
O:左右分屏显示多个文件 vim -O 文件1,文件2。。。
ctrl+w切换下个文件 左右箭头
单文件
ctrl+w,s:水平分割
ctrl+w,v:垂直分割
窗口属性定义:
:set nu :显示行号
nonu :取消显示行号
ai 自动缩进
noai 取消自动缩进
ic 大小写
noic 忽略大小写
sm 括号高亮
nosm 忽略括号高亮
hlsearch 高亮搜索
nohlsearch 取消高亮搜索
语法高亮 :syntax on|off
:set
配置文件:
全局:/etc/vimrc
用户:~/.vimrc 不定存在,可以新建
vim回顾:
编辑-->输入
i,I
a,A
o,O
c,C
跳转:
h,j,k,l
w,b,e
^,$,0
),(
},{
d,y,c
u,Ctrl + r
vim + # FILE
第六课
bash编程:
bash进程:解释器
type
shell脚本:
第一行,顶格:
#!/bin/bash
其他的以#开头的行均为注释,会被解释器忽略。
过程式编程语言:
顺序执行
选择执行:条件分支
循环执行
bash:
-n file 语法测试
-x file 单步执行:
变量类别:
本地变量
环境变量:export:导出
局部变量
位置变量:$1,...,$n,${10}
特殊变量:
$?,
$#:传递给脚本参数的个数
$*:所有参数
$@:引用传递给脚本的所有参数
shift [n]:同时取出N个参数 踹出几个
bash的循环语句:
for:遍历有限的元素列表;
while:
until:
for语句的格式:
for VAR_NAME(变量) in LIST(列表);(分号可忽略)
do
循环体
done
LIST:列表,中间包括一个或多个元素
生成数值列表:
1. {start...end} :起始值...结束值
2. seq: (起始值) 结束值
例:添加301-310用户
for uno in {301...310}
for uno in $(seq 301 310)
do
useradd user${uno}
done
bash弱类型:
变量=值 (等号间不能有空格BASH会当成参数)
任何变量无需事先声明,可直接使用;
值默认都是字符型
unset :撤销变量
算术运算:bash会对数字执行隐式的类型转换
let Var_Name=VALUES
bash的算术运算的方式:
let Var_Name=EXPRESSION
$[EXPRESSION]
$((EXPRESSION))
bash的算术运算方式:
expr ARG1 OP ARG2 (中间要有空格)
for 循环:
遍历LIST元素,遍历结束,循环退出;
bash中的字符串连接:
变量引用后方跟直接字符串时,变量名要加${}
echo 可以用单引号将命令放置其中输出 如
echo "This is 'id -u test'";
实现某种操作:总是 测试 前提是否满足
逻辑运算:
布尔运算:真,假
与 &&,或 ||,非(取反),异或(相同为假,不同为真)
命令都有其状态返回值:
成功:0,真
失败:1--255,假
bash条件测试:
0为真;1为假
命令执行成功与否即为条件测试;
test EXPR 比较运算
[ EXPR ] - 比较或单目用中括号
[[ EXPR ]]
比较运算:
>,<,>=,<=,==,!=
测试类型:根据比较时的操作数的类型
整型测试
字符测试
文件测试:判断文件的存在及属性等
注意:比较运算通常只在同一种类型间进行;
条件测试:
整型测试:
-gt,-lt,-eq,-ge,-ne,-le
字符串测试:
>,<,==,!=,=~(模式匹配),-n,-z
-z:为空则为真,不空则为假
-n:为空则为假,不空则为真
-a:与
-o:或
-not:非
例: [[ "$var" =~ PATTERN ]] 模式匹配变量
文件测试:
组合条件测试:在多个条件间实现逻辑运算
过程式编程:
顺序
选择
循环:for
选择:if 和 case
if:三种使用格式
单分支的if语句:
if (!取反空格)测试条件;then
选择分支
fi 闭合标签
echo $? - 输出最近上一步结果
type exit - 结束SHELL进程
自定义shell进程的状态返回值:
exit [n]-数值
双分支的if语句:
if 测试条件;then
选择分支1
else
选择分支2
fi
两个分支仅执行其中一个;
注意:如果把命令执行成功与否当做条件,则if语句后必须只跟命令本身,而不能引用;
多分支if语句:
if 条件1;then
分支1
elif 条件2;then
分支2
...
else
分支n
fi
if命令: 在bash运行至if时,其后的命令会被执行
bash编程之条件测试:
条件测试:
-a,-e:如果文件存在则为真;
-f :文件存在且是普通文件;
-d:存在并且为目录文件;
-L/-h:存在并且为符号链接文件;
-b:块设备
-c:字符设备
-S:套接字设备
-p:命名管道
-s:存在并且为非空文件;
-r:
-w:
-x:存在可执行
FILE1 -nt FILE2:FILE1的mtime新于FILE2
-p "输入内容"
-t 秒
练习
1、创建用户mandriva,其ID为2200,基本组为distro,组ID为3300,附加组为peguin;
# groupadd -g 3300 distro
# groupadd peguin
# useradd -u 2200 -g distro -G peguin mandriva
2、创建用户gentoo,其全名"Gentoo",默认shell为/bin/tcsh
# useradd -u 'Gentoo' -s /bin/tcsh gentoo
3、修改mandriva的UID为4400,基本组为linux,附加组为distro和gentoo
# usemod -u 4400 -g linux -a -G distro,gentoo mandriva
4、给gentoo添加密码,并设定其密码最短使用期限为2天,最长为60天,警告为3天,非活动期限为7天。
# echo 'gentoo' | passwd --stin gentoo
# chage -m 2 -M 60 -w 3 -i 7 gentoo
linux权限
安全模型:
文件权限:r,w,x
目录权限:r,w,x
perm
mode:
ownership:
chmod:
操作三类用户的权限,使用八进制来进行
chmod [-R] OCTAL_MODE FILE...
加-R表示递归
操作指定类别使用者的权限
u: 属主
g: 属组
o: 其他
a: 所有
指定一个后多个类别mode
chmod u=rw file
chmod ug=r file
操作指定类别的使用者指定权限:
chmod u+r file
chmod a+r file//对a加
chmod u+w file//给u加
chmod o+x file //给o加
chmod -r file //
chmod u-w file //u
chmod a-x file //all
参考其他文件修改指定文件权限--reference=FILE
chmod --reference=/ref target
修改目录时,级联子目录的权限也修改
# chmod 750 DIR
# chmod -R g=750 DIR
chown: 修改属主
chown [-R] [--reference] USER FILE...
加--reference时,修改属主和属组
chown [-R] [--reference] USER:GROUP FILE... 或 USER.GROUP FILE... 或 空:GROUP FILE...(只改属组)
加--reference时,修改属主以及属组
chgrp: 修改属组
chown [-R] [--reference] GROUP FILE...
加--reference时, 只修改属组
mkdir:默认权限为755(root)、775(user)
touch:默认权限为644(root)、664(user)
umask:反向
其中管理员:022
普通用户:002(当普通用户的uid和gid一样,否则为022)
文件:666-umask
目录:777-umask
可以使用umask 023来修改当前用户umask
创建文件时,如果666-mask得到的权限中,具有执行权限,则在对应的权限+1后作用生效的权限
bash:快捷键
home/ctrl+A:快速跳至命令行首
end/ctrl+E:快速跳至命令行尾
ctrl+U:删除命令行首至当前光标所在处之前的所有内容
ctrl+K:删除命令行当前光标所在处之后的所有内容
ctrl+L:清屏
Ctrl+C:终止
Ctrl+Z:把当前命令送至后台执行
第二课
bash 环境:
shell :外壳
编译器
解释器:
解释:词法分析,语法分析,语义分析,
条件判断:选择分支
循环
过程式编程语言:
顺序执行
选择执行
循环执行
解释器:提供了编程环境
脚本:使用bash提供的控制机制,期望执行的命令罗列于文本文件中。
bash没有库,整个程序几乎都要依赖于系统命令来完成。
静态语言
编译型:
源程序--预处理--编译--汇编--链接
解释性:
源程序 --解析器读取
动态语言
bash 的重要特性:变量
bash变量类型:
本地变量:只对当前shell进程有效的变量,对其他shell进程无效,包括当前shell进程的子进程。
(set) VAR_NAME = VALUE
变量引用:${VAR_NAME} 或 $VAR_NAME
变量赋值:向变量的存储空间保存数据
“”:弱引用 - 内容被替换
‘’:强引用 - 原样输出
环境变量:对当前shell进程及其子shell有效,对其他的shell进程无效;
定义:export VAR_NAME = VALUE
导出: export VAR_NAME
用户可自定义环境变量
bash有许多内置的环境变量
撤销变量:unset VAR_NAME
只读变量:readonly VAR_NAME
局部变量:
对shell脚本中某代码片段有效;通常用于函数本地;
local VAR_NAME = VALUE
位置变量:
$1,$2,...,${10}
特殊变量:
$?
查看当前shell进程中的所有变量:set
查看当前shell进程中的所有环境变量:export,printenv,env;
变量命名:
1、不能使用程序中的关键字(保留字)
2、只能使用数字、字母和下划线,且不能以数字开头;
3、见名知意;
变量类型:
1、定义类型,也就声明了存储机制;文本和二进制
2、存储空间
数值型:
精确数值:整数
仅似数值:浮点型
单精度浮点
双进度浮点
字符型
char
string
布尔型:
true,false
类型转换
显示转换
隐式转换
bash是弱类型的语言,一切皆字符
bash的配置文件:
profile类:为交互式登录的用户提供配置
全局:
/etc/profile
/etc/profile.d/*.sh
用户:
~/.bash_profile
功用:
1、设定环境变量;
2、运行命令或脚本
bashrc类:为非交互式的用户提供配置
全局:/etc/ashrc
用户:~/.bashrc
功用:
1、设定本地变量;
2、定义命令别名
登录类型:
交互式:
直接通过终端输入账号和密码登录
使用su -l USERNAME 或 su - USERNAME
非交互式:
su USERNAME
图形界面下打开的终端
执行脚本
通过编辑配置文件修改的配置生效?
1、退出并重新登录
2、让bash重读此配置文件:source FILE;. FILE
配置文件读取顺序
交互登录的用户:
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非交互式登录的用户:
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
第三课
程序:
指令 + 数据
计算机:二进制代码
编程语言:
问题空间 --> 解空间
bash 编程,
指令:OS上可运行的指令
翻译:在当前OS上查找相应命令并提交给内核的过程;
程序控制语句:略
Linux文本处理工具:
文本搜索
grep,egrep,fgrep(不支持正则)
grep:Global search Regular expression and Print out the line.
文本搜索工具,根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的行。
语法格式:
grep [options] ... 'PATTERN' FILE...
正则表达式:是一类字符所书写的模式。
基本正则表达式:grep
扩展正则表达 :egrep 或 grep -E
fgrep :fast,不支持使用正则表达式
正则表达式引擎,
基本正则表达式的元字符:
字符匹配
.:匹配任意单个字符
[]:匹配指定范围内的任意单个字符 例:[0-9] [a-z]
[^]:匹配非指定范围内的任意单个字符
次数匹配元字符:用于实现指定其前面的字符所能够出现的次数。
*:任意长度,它前面的字符可以出现任意次;例:x*y = xxy,xyy,y
\?:0或1次,它前面的字符是可有可无的 例:x\?y = xy,y,ay
\{m\}:m次,它前面的字符要出现M次。例:x\{2\}y = xxxxxy,
\{m,n\}:至少m次,至多n次 例:x\{2,5\}y = xxy,
.*:任意长度的任意字符
工作与贪婪模式:尽可能多的去匹配
[[:space:]] 空白字符
[[:alnum:]] 任何字母
[[:alpha:]] 匹配任何字母和数字
[[:blank:]] space and tab
[[:digit:]] 匹配任何数字
[[:lower:]] 匹配任何小写字母
[[:print:]]
[[:punct:]] 匹配任何标点符号
[[:upper:]] 匹配任何大写字母
[[:xdigit:] 匹配任何16进制数字
位置锚定:
^:行首锚定,写在模式的最左侧;
$:行尾锚定,写在模式的最右侧;
^$:空白行,
不包含特殊字符的连续字符组成的串叫单词;
\<:词首,出现单词左侧 例:\<char
\>:词尾,出现单词右侧 例:char\>
\b:词首、词尾皆可;
分组:
\(\) 例:\(ab\){1,\} ab分组至少出现一次
引用:
\#:引用第n个括号所匹配到的内容,而非模式本身;例:\(ab\?c).*\1 = abcmnabc , abcmnac(X)
命令选项:
-v:反向选取
-o:仅显示匹配的字串,而非字串所在的行
-i:忽略字符大小写
-A (数字)行
-B (数字)行
-C (数字)行
第五课
全屏编辑器(),行编辑器(sed)
nano
emacs
vi --> vim
vim:
模式化的编辑器
模式:
编辑模式:命令模式,键盘操作常被理解为编辑命令;
输入模式
末行模式:vim内置的命令行接口,执行vim的内置命令
打开文件:
# vim [option]...[FILE]...
ESC键:
编辑模式 --> 命令行模式
i:在光标所在的前方转换为输入模式;
a:在光标所在的后方转换为输入模式;
o:在光标所在处的下方新建一个空行并转换为输入模式;
I:在光标所在行的行首转换额外输入模式;
A:在光标所在行的行尾转换为输入模式;
O:在光标所在行的上方新建一个空白行并转换为输入模式;
输入模式 --> 编辑模式
ESC键
编辑模式 --> 末行模式
:(冒号)
末行模式 --> 编辑模式
ESC键
退出文件:
末行模式:
1、:q! 不保存退出
2、:wq 保存退出
3、:x 保存退出
编辑模式:
4、ZZ 保存退出
编辑文本:#(以下命令) #代表数字
光标移动:
1、字符间移动:h,j,k,l
2、单词间跳转:
w:下一个单词词首
b:当前单词或前一个单词的词首
e:当前单词或下一个单词的词尾
行内移动:
^:移动到行首第一个非空白字符
$:移动到行尾
0:移动到绝对行首
句子间移动:
)
(
段落间移动:
}
{
行间移动:
#G:直接跳转至#号
G:最后一行
编辑命令:
x:删除光标所在处的字符
d:删除命令。结合光标跳转字符使用,删除跳转字符内的字符;
dd:删除光标所在行
d$:删除光标到行尾的的内容。等于D
注意:最后一次删除的内容会被保存至缓冲区;
p:paste,粘贴,在光标所在行的下方
P:粘贴,在光标所在行的上方;
y:yank,复制
Y:相当于yy
c:change,修改。先删除,再转换为输入模式;
cc、C:删除光标所在处的整行再转换为输入模式;
撤销命令:
u:undo,撤销删除
#u:
撤销此前的撤销操作:
Ctrl + r
重复前一条命令:
.(点号)
vimtutor - 帮助教程
vim:
末行模式:
s/查找模式/要替换成的内容/gi
查找模式:可以使用正则表达式
要替换成的内容:不能使用正则模式,仅能使用引用;
g:global,全行替换
i:不区分字符大小写
内容界定:
startpos,endpos
#:第#行
.:当前行
%:全文相当1,$
10,$-1
w:将选定内容另存到某文件 w [path]...
r:将选定内容读取到某文件 r [path]...
可视化模式:
v:光标走过的字符
V:光标走过的行
文本查找:
用法同less命令
/pattern
?pattern
n 向下找
N 向上找
翻屏:
Ctrl + f:向文件尾部翻一屏
Ctrl + b:向文件首部翻一屏
Ctrl + d:向文件尾部翻半屏
Ctrl + u:向文件首部翻半屏
j:
k:
多文件模式:
:next 下一个文件
:previous 上一个文件
:last 最后一个文件
:first 第一个文件
:wqall 保存所有
多窗口模式:
多文件
o:上下分屏显示多个文件 vim -o 文件1,文件2。。。
O:左右分屏显示多个文件 vim -O 文件1,文件2。。。
ctrl+w切换下个文件 左右箭头
单文件
ctrl+w,s:水平分割
ctrl+w,v:垂直分割
窗口属性定义:
:set nu :显示行号
nonu :取消显示行号
ai 自动缩进
noai 取消自动缩进
ic 大小写
noic 忽略大小写
sm 括号高亮
nosm 忽略括号高亮
hlsearch 高亮搜索
nohlsearch 取消高亮搜索
语法高亮 :syntax on|off
:set
配置文件:
全局:/etc/vimrc
用户:~/.vimrc 不定存在,可以新建
vim回顾:
编辑-->输入
i,I
a,A
o,O
c,C
跳转:
h,j,k,l
w,b,e
^,$,0
),(
},{
d,y,c
u,Ctrl + r
vim + # FILE
第六课
bash编程:
bash进程:解释器
type
shell脚本:
第一行,顶格:
#!/bin/bash
其他的以#开头的行均为注释,会被解释器忽略。
过程式编程语言:
顺序执行
选择执行:条件分支
循环执行
bash:
-n file 语法测试
-x file 单步执行:
变量类别:
本地变量
环境变量:export:导出
局部变量
位置变量:$1,...,$n,${10}
特殊变量:
$?,
$#:传递给脚本参数的个数
$*:所有参数
$@:引用传递给脚本的所有参数
shift [n]:同时取出N个参数 踹出几个
bash的循环语句:
for:遍历有限的元素列表;
while:
until:
for语句的格式:
for VAR_NAME(变量) in LIST(列表);(分号可忽略)
do
循环体
done
LIST:列表,中间包括一个或多个元素
生成数值列表:
1. {start...end} :起始值...结束值
2. seq: (起始值) 结束值
例:添加301-310用户
for uno in {301...310}
for uno in $(seq 301 310)
do
useradd user${uno}
done
bash弱类型:
变量=值 (等号间不能有空格BASH会当成参数)
任何变量无需事先声明,可直接使用;
值默认都是字符型
unset :撤销变量
算术运算:bash会对数字执行隐式的类型转换
let Var_Name=VALUES
bash的算术运算的方式:
let Var_Name=EXPRESSION
$[EXPRESSION]
$((EXPRESSION))
bash的算术运算方式:
expr ARG1 OP ARG2 (中间要有空格)
for 循环:
遍历LIST元素,遍历结束,循环退出;
bash中的字符串连接:
变量引用后方跟直接字符串时,变量名要加${}
echo 可以用单引号将命令放置其中输出 如
echo "This is 'id -u test'";
实现某种操作:总是 测试 前提是否满足
逻辑运算:
布尔运算:真,假
与 &&,或 ||,非(取反),异或(相同为假,不同为真)
命令都有其状态返回值:
成功:0,真
失败:1--255,假
bash条件测试:
0为真;1为假
命令执行成功与否即为条件测试;
test EXPR 比较运算
[ EXPR ] - 比较或单目用中括号
[[ EXPR ]]
比较运算:
>,<,>=,<=,==,!=
测试类型:根据比较时的操作数的类型
整型测试
字符测试
文件测试:判断文件的存在及属性等
注意:比较运算通常只在同一种类型间进行;
条件测试:
整型测试:
-gt,-lt,-eq,-ge,-ne,-le
字符串测试:
>,<,==,!=,=~(模式匹配),-n,-z
-z:为空则为真,不空则为假
-n:为空则为假,不空则为真
-a:与
-o:或
-not:非
例: [[ "$var" =~ PATTERN ]] 模式匹配变量
文件测试:
组合条件测试:在多个条件间实现逻辑运算
过程式编程:
顺序
选择
循环:for
选择:if 和 case
if:三种使用格式
单分支的if语句:
if (!取反空格)测试条件;then
选择分支
fi 闭合标签
echo $? - 输出最近上一步结果
type exit - 结束SHELL进程
自定义shell进程的状态返回值:
exit [n]-数值
双分支的if语句:
if 测试条件;then
选择分支1
else
选择分支2
fi
两个分支仅执行其中一个;
注意:如果把命令执行成功与否当做条件,则if语句后必须只跟命令本身,而不能引用;
多分支if语句:
if 条件1;then
分支1
elif 条件2;then
分支2
...
else
分支n
fi
if命令: 在bash运行至if时,其后的命令会被执行
bash编程之条件测试:
条件测试:
-a,-e:如果文件存在则为真;
-f :文件存在且是普通文件;
-d:存在并且为目录文件;
-L/-h:存在并且为符号链接文件;
-b:块设备
-c:字符设备
-S:套接字设备
-p:命名管道
-s:存在并且为非空文件;
-r:
-w:
-x:存在可执行
FILE1 -nt FILE2:FILE1的mtime新于FILE2
FILE1 -ot FILE2:旧于
read 交互式可以用help read 查下手册
-t 秒