unset 撤销变量
变量可以不声明
readonly申明只读变量
declare声明变量 -r声明为只读 -x声明为环境变量
只读变量不可撤销
本地变量只在本shell中有效
a=
a
?
40
如
果
a
无
值
就
给
40
,
e
x
p
o
r
t
可
以
把
变
量
转
成
环
境
变
量
e
x
p
o
r
t
P
A
T
H
=
/
U
S
R
/
L
O
C
A
L
/
A
P
A
C
H
E
/
B
I
N
:
{a?40}如果a无值就给40, export 可以把变量转成环境变量 export PATH=/USR/LOCAL/APACHE/BIN:
a?40如果a无值就给40,export可以把变量转成环境变量exportPATH=/USR/LOCAL/APACHE/BIN:PATH 添加路径
printenv /env查看环境变量
?
用
来
返
回
上
次
命
令
程
序
执
行
状
态
的
返
回
值
(
红
帽
)
命
令
替
换
:
用
单
引
号
替
换
或
用
?用来返回上次命令程序执行状态的返回值(红帽) 命令替换:用单引号替换 或用
?用来返回上次命令程序执行状态的返回值(红帽)命令替换:用单引号替换或用()替换(红帽)
用配置文件 保存变量 然后开
bash:
全局: /etc/profile , /etc/profile.d/, /etc/bashrc
个人: /.bash_profile,/.bashrc
bash运行方式:
交互式/etc/profile—>/etc/profile.d/—>/.bash_profile—>/.bashrc—>etc/bashrc(变量设置以后为主)
非交互式~/.bashrc—>/etc/bashrc—>/etc/profile.d/*
profile 1.设定环境变量2.启动之前运行命令文件
bashrc 1.设定本地变量2.设定命令别名
source 文件让机器重新读取配置文件(.+/文件名)
命令别名:eg:alias cls=clear撤销:eg:unalias cls
如果命令和别名相同要使用原名用 /+命令
脚本可编译:bash+脚本名
写脚本要在第一行写:#!/bin/bash(指定解释器)
~/.bash_profile中加shutdown -h now 会使电脑刚登陆就关机
#!/bin/bash
DESTDIR=’/tmp/test’
mkdir DESTDIR
touch DESTDIR /file-date +%f-%h-%s
(命令替换要用反引号)
cp -r /etc/profile.d/ /tmp/test/
输入/输出重定向、管道
程序的默认输入设备,叫标准输入 stdin,键盘 0
程序默认输出设备,叫标准输出,stdout,mintor(显示器)1
程序默认错误信息输出设备, 标准错误输出, stderr,mintor 2
输出重定向 eg:
ls/etc>/etc(把命令执行结果放到etc文件)覆盖输出
set -c/+c 关闭/开启输出重定
| 强制输出重定向
命令 >>FLIE ,追加输出
/dev/null 数据黑洞(丢失数据)
/Dev/zero,泡泡机(产生0)
/dev/random /Dev/urandom 生成随机数
输入重定向
命令< file
eg:tr ‘a-z’ ‘A-Z’ </etc
命令<<“EOF”生成文档 (写着遇到EOF 就结束了)
错误输出 :命令 2>FILE(只记录错误的)
2>> 追加的方式实现
COMMAND>FILE 2>FILE2(把执行结果输送到file和file2)
COMMAND>FILE 2>&1(把执行结果都输送到file)
COMMAND>FILE &>FILE(同上)
管道:只传递正确执行结果
eg:echo “the first line.” |tr ‘a-z’ ‘A-Z’
THE FIRST LINE.
echo “the first line.” | tr ‘a-z’ ‘A-Z’ | cut -d’ ’ -f2
FIRST
less 分页显示
查看文件类型
eg:
cd /var/log
file 'ls /var/log ’
sort 排序命令 sort -u(uniq)
uniq 移除重复内容
COMMAND |tee file|命令(先保存在tee后的文件里,再执行命令)
glob :文件名称通配
- 任意长度的任意字符
? 任意单个字符
[] 指定范围内的字符、
[^] 指定范围外的字符
grep搜索字符:全局搜索正则表达式(文本过滤工具)
能够实现根据指定模式逐行搜索文件内容,并将匹配到行显示出来。
模式:是由正则表达式字符,其他字符组成的匹配条件
basic RE
extended RE
使用:grep ‘字符’ 搜索路径
基本正则表达式元字符
. :匹配任意单个字符
[] :匹配指定范围内的单个字符
次数匹配(贪婪模式)
: 匹配其前的字符0,1或多次 abc/abc/abbc/ac/abbbc
eg: grep 'a[[:space:]]b’ grep.txt([:space:]是一个集合)
?:其前字符0或一次 ab?c/abc/ac
(m,n): (m,):至少每次 ;(0,n):至多n次 ;(m): m次
锚定符:
<:锚定词首 ;>:锚定词尾(eg:<r…t>\){# grep " <[0-9]{2,3}>" /etc/passwd找两位数}
^:行首锚定;
锚
定
行
尾
;
r
o
o
t
[
[
:
s
p
a
c
e
:
]
]
?
锚定行尾;root [[:space:]]?
锚定行尾;root[[:space:]]?(可以有符号也可以没有)或标点符号
[^]: 指定范围外的单个字符
.:表示出现任意字符
分组字符:
eg: x*(ab)y/xabababy/xaby/…
前向引用:\1,\2,\3(\1表示与第一个左括号匹配的内容,以此类推)
eg;(l…e).\1r(注:\1代表引用括号里的)
grep本身选项:
-v:显示不被匹配的行
-i:不区分大小写匹配
-o:只显示匹配到的串
-A 数字:还显是其后的数字行
eg:-A 2(多显示2行)
-B:同-A用法一样 显示其前行
-C:前后都有
-e:
-E:解析成扩展表达式
/etc/passwd
用户名
密码点位符
UID
GID用户的基本组的ID 用户finger信息
用户的家目录
用户默认使用的shell
passwd[]…username
-l 锁定用户
-u 解锁用户
–stdin 设置密码只需输入一次
eg:echo ‘hello’ | passwd --stdin wangshuai >/dev/null
创建用户
useradd,adduser
useradd []… username
-u UID
-g GID,为用户指定一个已经存在的组为其基本组
-G GID,为用户制定一个或多个已经存在的组为其基组
-c “comment”指定注释
-d /path/to/somewhere 指定一个路径且文件夹不存在
-s /path/to/shell(可用shell,一般为etc下的shell)
-r 创建系统用户,1-499(系统用户不能登录)
/etc/group
组名
组密码点位符
组ID
以此组为其额外组用户的用户列表
一般不指定就创建一个同名组名
创建组eg:groupadd my(组名)
/default:里面有一些用户默认信息
文件属组可以改
用户登录过就会在/var/spool/mail
用户密码保存在/etc/shadow
用户名 密码 密码最近一次修改时间 密码最长使用期限 离密码过期还有多少天开始向用户发送警告 用户账号的非活动期限 用户账号的有效期限 保留段
如果禁用密码: !!密码
加密方式:单向加密
定长输出
蝴蝶效应
原文一样,结果一样
不可逆
md5,sha1,加密工具
密码策略:
随机密码
至少包含四类字符中的三种
长度8位以上
定期修改
id 用户名:查看用户账号信息
-u 显示
-g 显示组名
-G
-n
finger 用户名:显示用户信息
who 显示登录信息
w 显示登录信息和干了什么
who am i 显示用户自己信息
修改用户属性:
usermod
chage改时间eg:chage -m2 -M 50 fedore
chfn改注释信息
chsh改默认shell
usermod:
-u
-g
-G(修改组)-a-G(追加)
-n
-l(登录名)
删除用户: userdel[]…username 删除家目录 -r
groupadd
-g GID
-r 创建系统组
groupmod
-g
-n(改组名)
groupdel 组名(删除组)
gpasswd 组名(给组加密码)
newgrp 组名 切换基本组
usermod 修改家目录
usermod -d 路径 用户名
linux用户权限和文件权限深入解析
r w x
-
-
- 000
-
-
- x 001
- w - 002
- w x 003
r - - 004
r - x 005
r w - 006
r w x 007
如果一个文件权限显示为640,rw-r-----
文件:属主 属组 其他
— — —
更改文件权限:
1.8进制
chmod *** /路径/文件
改目录不修改里面的文件
-R可以一起修改目录里的文件
2.只操作一类用户的权限:
chmod u/g/o/a(前三个都有)=— 文件
3.只操作某类用户权限
chmod o/u/g+x/r/w 文件名
改变文件的属组属主(只有管理员可以)
chown 目的用户 文件路径
chgrp 目的属组 文件路径
chown 目的用户:目的属组 文件路径
chown :目的属组 文件路径
使用- R选项
用户切换:su–>exit(回到管理模式)
su 用户名(非登录式切换,只切换了用户名和用户身份)
su - 用户名(登录式切换)
su -l 用户名(登录式切换)
su 用户名(前三个都行) -c command(用另外一个用户身份执行命令并送回)
sudo
显示命令
echo“”
-n不在换行
-e转义字符不在生效
“\033[1(字体);5(闪烁);3(3前景色,4背景色) 3(颜色)m 字符\033[0m(结束)”
printf“”(输出不自动换行)
bash算数运算符
±*/
++ –
let sum=2+3 sum=expr 2+3 declare -i sum=2+3此三个表达式等义不会想sum=2+3似的显示2+3
$[表达式]:算术运算表达式
KaTeX parse error: Expected 'EOF', got '&' at position 79: …>scale=6->表达式 &̲&与 ||或 可以使用短路用…a>
b
]
命
令
[
[
b]命令[[
b]命令[[a>$b]]关键字
文本编辑器:
行编辑器(sed,stream,editor)
全屏编辑器(nano,emacs,vim,vi)
vi(模式化编辑器):
1.编辑模式,命令,x(删除光标所在区域)
2.输入模式
3.末行模式
vim
1.管理员可以强制保存只读
2.i当前光标所在前插入
3.a当前光标所在后插入(光标后移一位剩下同上)
4.o当前光标所在行下方新增空白行并转换成输入
5.I当前光标所在行的行首插入
6.A当前所在行行尾插入
7.O当前所在行上方新增空白行插入
末行回编辑敲两次esc
w:下一个单词词首
e:当前或下一个单词词尾
b:跳转至前面一个词首
^非空白行首
0 绝对行首
绝
对
行
尾
末
行
模
式
删
除
:
注
:
怎
么
删
除
一
行
中
的
后
半
部
分
?
d
:
删
除
所
在
行
n
d
:
执
行
n
次
操
作
e
g
:
:
1
,
50
d
(
删
除
1
−
50
行
)
地
址
定
界
a
d
d
1
,
a
d
d
2
e
g
:
.
,
绝对行尾 末行模式删除: 注:怎么删除一行中的后半部分? d:删除所在行 nd:执行n次操作 eg::1,50d(删除1-50行) 地址定界 add1,add2 eg:.,
绝对行尾末行模式删除:注:怎么删除一行中的后半部分?d:删除所在行nd:执行n次操作eg::1,50d(删除1−50行)地址定界add1,add2eg:., d
.表示当前行
$表示最后一行
add1,+n
eg:.,+5(当前行加5行,减法同)
粘贴命令:
p:删除或复制的是整行,在当前光标所在行的下方粘贴
删除的单词或行的部分,在当前光标所在处的后方粘贴
P:删除或复制的是整行,在当前光标所在行的上方粘贴
删除的单词或行的部分,在当前光标所在处的前方粘贴
y:复制
yy复制光标所在行
和d命令差不多
可视化模式:
v:按字符选取
V:按行选取
编辑模式->输入模式
c:先删除指定部分,再转换输入模式
C:先删除光标到行尾,再转换输入模式
撤销编辑操作:
u:撤销上次编辑操作(可连续50次只适用于编辑模式)
Ctrl+r:撤销最近一次的撤销操作
搜索:
/keyword
?keyword
搜索到的内容高亮显示(因为以后也高亮显示,所以我们关闭高亮功能)
查找替换:
再末行模式下使用s命令
:定界s/查找的内容/替换的内容/gi(修饰符)
查找的内容支持正则表达式,替换内容不支持正则,必须字符串,支持前向引用
修饰符:
g:全局替换
i:忽略大小写
eg:
:1,20s/uname/UNAME/g
:1.20s/<u([[:alpha:]]){3}e>/U\1/g(以u开头e结尾的单词中的u换成大写)
vim中:
&:用于引用查找整个字符串
:1,20s/n…e>/&r/g(在以n…e结尾的后加r)
定界符
- $,%s全文查找
eg:
:%s//etc/sysconfig/network/&s/g
:%s/[[:space:]]*#[[:space:]]*([[:space:]].)/\1/g替换以非空白字符开头有#+空白字符+非空白字符成1
:%s/[a-z]//g删除所有的小写字母
:%s/^#[[:space:]]//g删除行收的#和后面字符
末行模式的介入使用方法:
:!ls /var 查看var(与shell交互)
将当前文件一部分存到另一个文件
定界符w /路径
分窗口显示文件:
水平拆:ctrl+w松开+s
垂直拆:Ctrl+w松开+v
切换下面窗口:ctrl-+w松开+pgdn
切换上面窗口:ctrl-+w松开+pgup
(左右拆类似)
关闭窗口:ctrl+w松开+q
vim打开多个文件:
1>.vim /file1 /file2
2>.在末行模式下用next切换文件
3>.prev切换为前一个文件
4>.first切换为第一个文件
5>.last切换为最后一个文件
6>.wqall所有文件退出
打开多个文件并拆分显示:
vim -o /file1 /file2(水平)
vim -O /file1 /file2(垂直)
定制vim的工作属性:
:set 命令
eg:
:set [no]nu 显示行号
:set [no]ai 自动缩进
:set [no]ic 忽略大小写
:set all显示所有属性
:syntax on/off 打开/关闭语法高亮
:set [no]hlsearch开关高亮
配置文件:
全局: /vetc/vimrc
个人: ~/.vimrc
若不想影响别人可以在个人的编辑属性
不想用的属性可用"注释掉
vim tutor做练习题
条件测试:
test表达式
test[表达式]
test[[表达式]]
整数测试:
-eq
-gt
lt
-ne不等于
-ge
-le
字符串测试:
!
,<,>=,<=
-z $var字符串空了为真,不空为假
-n $var同上面相反
文件测试:
-e /路径(判断是否存在)
-f (判断是否普通文件)
-d(判断是否目录)
-l(判断是否链接)
-r(判断读权限)
-w(判断写权限)
-x(判断是否可执行文件)
如何组合条件测试:
!取反
-a 与条件
-o 或条件
source /路径 让文件生效
eg:[-e /etc/init.d/functions]&& source /etc/init.d/functions如果存在,就生效
[-x /etc/init.d/network]&& /etc/init.d/network start如果可执行就启动文件
[-x /bin/hostname]&& NAME=/bin/hostname