文件处理命令
1.1 ls -> 列出目录中的信息
-l 详细信息
-d 当前目录本身, 而非目录里面的数据
-a 隐藏文件
-h 文件大小人性化展示
-i i节点
ls -hld /htx
1.2 mkdir -> 创建目录
-p 递归创建
mkdir -p /a/b/c
mkdir -p /a/b/c /d/e/f
1.3 cp -> 复制文件或目录
-r 复制目录
-p 保留源文件属性
1.4 rm -> 删除文件或目录
-r 删除目录
-f 强制执行
1.5 touch -> 创建空文件
touch [文件名]
1.6 cat -> 显示文件内容
cat [文件名]
-n 显示行号
1.7 tac -> 显示文件内容(反向展示)
1.8 more -> 分页展示文件内容
more [文件名]
空格 / f: 下一页
回车键: 下一行
q: 退出浏览
1.9 less -> 分页展示文件内容(可向上翻页)
输入less命令后, 键入: "/关键字" -> 查找信息并高亮展示 -> n/enter 查找下一个匹配
1.10 head -> 显示文件前几行
-n 指定行数
1.11 tail -> 显示文件后几行
-n 指定行数
-f 动态展示文件末尾内容
tail -n 10 a.txt
tail -n 10 -f a.txt
tail -10f a.txt
1.12 ln -> 生成链接文件
-s 创建软链接
ln -s [源文件] [目标文件]
ln -s a b -> 创建a文件软链接 b
ln a b -> 创建a文件硬链接 b
软链接: 类似于windows中快捷方式
权限: lrwxrwxrwx, 真实权限为源文件权限
文件大小不等于源文件大小, 只是符号链接
硬链接: 相当于文件拷贝(cp -p) + 同步更新
修改目标文件, 源文件同步更新
权限处理命令
linux权限
rw- r-- r--
u 所有者 g 所属组 o 其他人
r:读, w:写, x:执行
r w x
文件 查看文件内容(cat,more..) 修改文件内容 (vim..) 执行文件
目录 可以列出目录内容(ls) 可以在目录中创建删除文件(touch..) 可以进入目录(cd)
2.1 chmod -> 改变文件或目录权限
-R 递归修改
chmod 777 a.txt
r: 4
w: 2
x: 1
chmod o+x a.txt
chmod u-x a.txt
2.2 chown -> 改变文件或目录所有者
chmod [用户名] [文件或目录]
2.3 chgrp -> 改变文件或目录所属组
chgrp [所属组] [文件或目录]
2.4 umask -> 显示设置文件的缺省权限
-S 以rwx形式显示新建文件缺省权限
umask -S -> u=rwx,g=rx,o=rx
新建目录, mkdir d1 -> drwxr-xr-x
新建文件, touch f1 -> -rw-r--r-- -> 在linux中,默认新建的文件是不具有执行权限的.
示例:
umask -> 0022, 第一个0为特殊权限
777 rwx rwx rwx
022 --- -w- -w-
--------------------------- 逻辑与
目录: 755 rwx r-x r-x
文件: rw- rw- r--
修改默认缺省:
希望新建目录权限为 700
777 rwx rwx rwx
-> 077 --- rwx rwx
--------------------------- 逻辑与
目录: 700 rwx --- ---
文件: rw- --- ---
-> 得到 umask 权限 077
执行命令: umask 077
默认创建目录权限 -> 700
文件搜索命令
3.1 find -> 文件搜索 (少用, 占用大量系统资源)
find [搜索范围] [匹配条件]
根据文件名搜索 -name, -iname(不区分大小写)
find /dir -name file_name
find /dir -name *abc* (* 代表任意字符)
find /dir -name abc???(? 代表单个字符)
根据文件大小搜索 -size (+n代表大于, -n代表小于, n代表等于 n -> 0.5kb)
find /dir -size +204800
根据文件所有者搜索 -user, 根据文件所属组搜索 -group
find /dir -user root
根据文件时间属性查找 -amin(access): 访问时间, -cmin(change): 文件属性修改时间, -mmin(modify): 文件内容修改时间
find /dir -amin -5 (五分钟之内访问过)
find /dir -cmin +5 (属性修改时间超过五分钟)
find /dir -mmin 5 (文件内容修改时间距离现在五分钟)
-a: 多个条件同时满足
-o: 多个条件满足一个
find /dir -size +204800 -a -size -409600
-type: 查找类型, f: 文件, d: 目录, l: 软链接文件
find /dir -size +204800 -o -type d
-inum: 根据i节点查找
find /dir -inum 1851668
-exec/-ok: 对搜索结果执行操作, 结尾 {} \; 为固定写法, 搜索结果放入{}中, -ok相对于-exec,对每个查询结果进行操作时,需要确认
find /dir -name file_name -exec ls -l {} \; -> 查找指定名称文件, 并展示详细信息(ls -l)
find /dir -name file_name -exec rm -rf {} \; -> 删除指定名称文件
find /dir -name file_name -exec cp {} / \; -> 复制指定文件到 / 目录
3.2 locate -> 在文件资料库中查找文件.
locate [文件名]
新建的文件不会立即同步到资料库中, 使用locate命令可能检索不到. 可以使用 updatedb 命令更新资料库
-i: 不区分大小写
3.3 which -> 搜索"命令"所在的目录
which [命令名]
which ls -> /bin/ls
3.4 whereis -> 搜索"命令"所在的目录及帮助文档路径
whereis [命令名]
whereis ls -> ls: /bin/ls /usr/share/man/man1/ls.1.gz
3.5 grep -> 文件内容搜索
grep [筛选字符串] [文件]
-i: 不区分大小写
-v: 排除指定字符串
grep hello file -> 检索file, 排除包含"hello"的一整行
-A: 结果往后多打印
grep -A 5 hello file -> hello后面多打印5行
-B: 结果往前多打印
-C: 结果前后多打印
--color=auto: 筛选结果高亮
-n: 显示行号
帮助命令
4.1 man -> 获得命令/配置文件帮助信息.
man [命令/配置文件]
man ls -> 查看ls命令文档
man services -> 查看services配置文件的帮助
示例: man passwd -> 由于linux中既有passwd命令, 又有passwd配置文件, 所以同时存在passwd命令的帮助信息和passwd配置文件的帮助信息. 默认查看passwd命令的帮助信息
whereis passwd
-> passwd: /usr/bin/passwd(命令) /etc/passwd(配置文件) /usr/share/man/man1/passwd.1.gz(命令帮助) /usr/share/man/man1/passwd.1ssl.gz /usr/share/man/man5/passwd.5.gz(配置文件帮助)
指定查看配置文件帮助:
man 5 passwd
4.2 whatis -> 查看命令/配置文件帮助信息简介
whatis [命令/配置文件]
whatis ls -> ls (1) - list directory contents
whatis services -> services (5) - Internet network services list
whatis passwd -> passwd (1ssl) - compute password hashes
passwd (1) - change user password
passwd (5) - the password file
4.3 info -> 类似于man
4.4 help -> 获得shell内置命令的帮助信息
help [命令]
help umask -> 查看umask命令帮助信息(umask为shell内置命令, 通过which找不到路径)
help if
help where
用户管理命令
5.1 useradd -> 添加新用户
useradd [新用户名]
useradd username1
5.2 passwd -> 设置用户密码
passwd [用户名]
passswd username1 -> 提示输入密码和确认密码
5.3 who -> 查看登录用户信息
who
登录用户名 登录终端(tty->本地终端, pts->远程终端) 登录时间 登录主机ip
5.2 w -> 查看用户登录信息
压缩解压命令
6.1 gzip -> GNU zip 压缩文件, /bin/gzip, 压缩后文件格式为.gz; gzip只能压缩文件,不能压缩目录; 压缩后不保留源文件
gzip [文件]
-d 解压文件
gzip -d hello.gz
6.2 gunzip -> 解压文件, /bin/gunzip, 解压格式为.gz的压缩文件
gunzip [压缩文件]
6.3 tar -> 可以打包目录为文件, 并且压缩文件. 压缩后的文件格式为.tar.gz
tar 选项[-zcf] [压缩后文件名] [目录]
-c: 打包
-x: 解包
-v: 显示详细信息
-f: 指定文件名
-z: 打包同时压缩
eg1:
tar -cvf hello.tar hello
将hello目录打包成hello.tar文件
gzip hello.tar
将hello.tar文件压缩, 生成 hello.tar.gz
eg2:
tar -cvzf hello.tar.gz hello
将hello目录打包并压缩成hello.tar.gz
eg3:
tar -xvzf hello.tar.gz
解压hello.tar.gz
6.4 zip -> 压缩文件或目录
zip 选项[-f] [压缩后文件名] [文件或目录]
zip -r [压缩目录]
eg1:
zip hello.zip hello
eg2:
zip -r hellodir.zip hellodir
6.5 unzip -> 解压缩zip压缩文件
unzip [压缩文件/目录]
eg1:
unzip hello.zip
6.6 bzip2 -> 压缩文件, 保留源文件, 压缩后文件格式为.bz2
bzip2 选项[-k] [文件]
-k: 保留源文件
eg1:
bzip2 -k hello
eg2: 打包目录并压缩成bz2
tar -cjf hellodir.tar.bz2 hellodir
6.7 bunzip2 -> 解压缩bzip2
bunzip2 选项[-k] 压缩文件
-k: 保留压缩文件
eg1:
bunzip2 -k hello.bz2
eg2:
tar -xjf hellodir.tar.bz2
网络命令
7.1 ping -> 测试网络连通性
ping [选项] IP地址/域名
-c: 指定发送次数
7.2 ifconfig -> 查看和设置网卡信息
7.3 last -> 列出用户登录系统记录
7.4 lastlog -> 列出所有用户最近登录记录
7.5 netstat -> 显示网络相关信息
netstat [选项]
-t: TCP协议
-u: UDP协议
-l: 监听
-r: 路由
-n: 显示ip地址和端口号
-p: 显示pid
eg1:
netstat -tlun -> 查看本机监听的端口
eg2:
netstat -an -> 查看本机所有网络连接
eg3:
netstat -rn -> 查看本机路由表
eg4:
netstat -nat|grep -i "8066"|wc -l -> 查看8066端口连接数
7.6 mount -> 挂载命令
mount [-t 文件系统] 设备文件名 挂载点
umount -> 卸载命令
Vim 常见命令
vim 三种模式
命令模式: 输入a/i/o进入插入模式, 输入:进入编辑模式
插入模式: ESC退出插入模式进入命令模式
编辑模式: 输入命令后ENTER回车结束编辑模式, 进入命令模式
1. 插入命令, 在命令模式输入 -> 进入插入模式
a 在光标所在字符后插入
A 在光标所在行尾插入
i 在光标所在字符前插入
I 在光标所在行首插入
o 光标下插入新行
O 光标上插入新行
2. 定位命令
:set nu -> 设置行号
:set nonu -> 取消设置行号
gg -> 到第一行
G -> 到最后一行
nG -> 到第n行
:n -> 到第n行
$ -> 光标移动到行尾
0 -> 贯标移动到行首
3. 删除命令
x -> 删除光标所在字符
nx -> 删除光标所在处后n个字符
dd -> 删除所在行
ndd -> 删除n行
dG -> 删除光标所在行至文件末尾内容
D -> 删除光标所在行至行尾内容
:n1,n2d -> 删除指定范围行
3. 复制/剪切命令
yy -> 复制当前行
nyy -> 复制当前行以下n行
dd -> 剪切当前行
ndd -> 剪切当前行以下n行
p/P -> 粘贴在当前行上面/下面
4. 替换, 取消命令
r -> 取代光标所在处字符
R -> 从光标所在处开始替换字符, 按ESC结束
u -> 取消上一步操作
5. 搜索和搜索替换
/string -> 搜索指定字符串
:set ic -> 搜索忽略大小写
:set noic -> 搜索区分大小写
n -> 搜索结果查找下一个
:%s/old/new/g -> 全文替换, old替换为new
:n1,n2/old/new/g -> n1~n1行之间替换, old替换为new
6. 保存和退出命令
:w -> 保存修改
:w new_filename -> 另存为filename
:wq -> 保存并退出
ZZ -> 保存退出快捷键, 同:wq
:q! -> 不保存退出
:wq! -> 保存并退出, 文件所有者和root用户可以使用(文件只读)
linux进程管理
1.1 查看系统所有进程
ps aux
ps -ef
1.2 查看系统健康
top [选项]
-d seconds: 每隔几秒更新
? / h: 帮助
P: 按照cpu使用率排序(默认)
M: 按照内存使用率排序
N: 按照PID排序
q: 退出top
1.3 查看进程树
pstree [选项]
-p: 显示进程的pid
-u: 显示所属用户
1.4 杀死进程
kill -l -> 显示可用的进程信号
1 SIGHUP 重启
9 SIGKILL 强制杀死进程
15 SIGTERM 正常结束进程(默认)
1.5 查看后台任务
jobs [选项]
任务进入后台执行:
1. 命令 & -> 后台会执行此任务
2. ctrl + z -> 任务放在后台, 但是暂停执行
查看后台任务
jobs -l
后台暂停任务恢复前台执行
fg %任务号 -> %可以省略
后台暂停任务恢复后台执行
bg %任务号 -> %可以省略
linux用户管理
1.1 相关配置文件
/etc/passwd -> 用户信息文件
/etc/shadow -> 影子文件
/etc/group -> 组信息文件
/etc/gshadow -> 组密码文件
1.2 用户管理相关文件
用户home目录:
root: /root, 默认权限为550: dr-xr-x---. 27 root root 4096 May 30 08:44 /root
普通用户: /home/用户名/, 默认权限尾700: drwx------. 28 hetianxiang hetianxiang 4096 May 27 20:45 /home/hetianxiang/=
1.3 用户管理命令
用户添加命令 -> useradd
修改用户密码 -> passwd
修改用户信息 -> usermod
修改用户密码状态 -> chage
删除用户 -> userdel
-r: 删除用户的同时, 删除home目录
用户切换 -> su
1.4 用户组管理命令
添加用户组 -> groupadd [选项] 组明
-g GID: 指定GID
修改用户组 -> groupmod [选项] 组名
-g GID: 指定GID
-n 新组名: 修改组名
删除用户组 -> groupdel [组名]
组内添加/删除用户 -> gpasswd [选项] 组名
-a 用户名: 组内添加用户
-d 用户名: 组内删除用户
linux 定时任务
linux 定时任务
用户的crontab设置 -> crontab [选项]
-l: 查询crontab定时任务
-e: 编辑crontab定时任务
-r: 删除当前用户所有的crontab任务
其他命令
history -> 查看历史命令, 保存在home目录.bash_history中
-c: 清空历史命令
alias -> 命令别名
alias 别名 = '原命令' -> 起别名
alias -> 查询所有别名命令
unalias -> 删除别名
unalias [别名]
文件系统常用命令
1.1 df -> 文件系统查看命令
df [选项] [挂载点]
-a: 显示所有文件系统信息
-h: 人性化显示容量
-T: 显示文件系统类型
-m: 以MB为容量单位显示
-k: 以KB为容量单位显示(默认)
1.2 du -> 统计目录或文件大小
du [选项] [目录或者文件名]
-a: 显示每个子文件的磁盘占用量
-h: 人性化显示容量
-s: 统计总占用量, 不列出子目录和子文件的占用量
du -sh /dir -> 统计/dir目录总占用容量
linux输入输出
linux输入输出
标准输入输出:
设备 设备文件名 文件描述符 类型
键盘 /dev/stdin 0 标准输入
显示器 /dev/stdout 1 标准输出
显示器 /dev/stderr 2 标准错误输出
输出重定向
类型 符号 作用
标准输出重定向 [命令] > 文件 覆盖, 把[命令]的正确输出 -> 输出到指定文件中
[命令] >> 文件 追加, 把[命令]的正确输出 -> 输出到指定文件中
标准错误输出重定向 [命令] 2>文件 覆盖, 把[命令]的错误输出 -> 输出到指定文件中
[命令] 2>>文件 追加, 把[命令]的错误输出 -> 输出到指定文件中
标准输出和错误输出同时保存 [命令] >文件 2>&1 覆盖, 正确输出和错误输出 -> 同时输出到文件中
[命令] >>文件 2>&1 追加, 正确输出和错误输出 -> 同时输出到文件中
[命令] &>文件 覆盖, 正确输出和错误输出 -> 同时输出到文件中
[命令] &>>文件 追加, 正确输出和错误输出 -> 同时输出到文件中
[命令]>>文件1 2>>文件2 追加, 正确输出 -> 文件1, 错误输出 -> 文件2
[命令] &> /dev/null -> 正确输出,错误输出都输出到/dev/null, 即丢弃
输入重定向
wc [选项名] [文件名]
-c: 统计字节数
-w: 统计单词数
-l: 统计行数
linux 多命令顺序执行
linux 多命令顺序执行
; -> 命令1;命令2 -> 多个命令顺序执行, 命令之间没有任何逻辑关系
&& -> 命令1&&命令2 -> 逻辑与, 命令1正确执行才执行命令2, 命令1错误执行不执行命令2
|| -> 命令1||命令2 -> 逻辑或, 命令1正确执行则命令2不执行, 命令1错误执行则命令2执行
[命令] && echo 'yes' || echo 'no' -> 命令执行成功, 输出yes; 命令执行失败, 输出no
linux 管道符 | -> 命令你1 | 命令2 -> 命令1的正确输出,作为命令2的操作对象
eg1: ls -la | grep more -> 当前目录ls分页显示
eg2: netstat -an | grep 'ESTABLISHED' -> 当前所有网络连接中的远程连接
其他特殊符号
'' -> 单引号, 在单引号中的所有特殊符号都没有特殊含义, 即为字符串
"" -> 双引号, 在双引号中的一般特殊符号没有特殊含义, 但是 $ ` \例外. $ -> 调用变量值, ` -> 引用命令, \ -> 转义符
`` -> 反引号, 在``中的为系统命令, 在Bash中会首先执行此命令, 等同于 $()
$() -> 等同于``, 里面为系统命令, Bash优先执行
# -> 在shell中, 以#开头为注释
$ -> 用于调用变量的值, 若要获得变量name的值, 使用$name即可
\ -> 转义符, 跟在\后面的特殊符号失去特殊含义, 如\$代表$, 而不是当做变量引用
linux 变量
linux 变量
自定义变量(本地变量) -> 只在当前shell中生效
变量设置规则
变量以字母,数字,下划线组成, 不能以数字开头
变量默认的类型为字符串类型, 若要进行数值运算, 变量类型需指定为数值型
变量赋值时, =左右不能有空格
赋值时,如果值有空格,需要用""或'' -> name='hello world'
变量的值,可以使用转义符\
若需要增加变量的值,可以进行变量值的叠加. 变量需要 -> "$变量名" 或者 ${变量名}
定义 -> 变量名=变量值
name='hello world'
变量叠加
param=hello
param="$param world"
param="${param} world"
查看所有变量 -> set
set | grep param
取消设置变量 -> unset
unset param
环境变量 -> 对当前shell和所有子shell生效, 若把环境变量写入配置文件中, 则对所有shell生效
定义环境变量
export 变量名=变量值 -> 申明环境变量
env -> 查询环境变量
unset 环境变量 -> 删除环境变量
配置文件 -> 定义了系统默认环境变量, 比如PATH, HISTSIZE, PS1, HOSTNAME等
环境变量配置文件 -> /etc目录下的配置文件针对所有用户生效, home目录~下的环境变量针对指定用户生效
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc
位置参数变量 -> 向脚本传递参数或数据, 变量名不能自定义, 变量的作用是固定的
位置参数变量类型
$n: n为数字, $0为命令本身, $1-$9代表第1-第9个参数, 第10个参数开始需要用{}包含, 例如${10}
./start.sh param1 param2 -> 在start.sh中, 通过$1获取param1, $2获取param2
$*: 代表命令行中所有参数, 获得的是一个整体
$@: 代表命令行中所有参数, $@对每个参数独立, 可以使用for循环获取
$#: 代表命令行中参数个数
预定义变量 -> Bash已经定义好的变量, 变量名不能自定义
预定义变量类型
$?: 上一个执行命令的返回状态. 若$?为0, 则上一个命令正确执行 -> 可以用于判断上一个命令是否正确执行
echo $?
$$: 当前进程的进程号(pid)
$!: 后台运行的最后一个进程的进程号(pid)
接收键盘输入 -> read [选项] [变量名]
-p: 提示信息, 在等待read输入时, 输出提示信息
-t 秒数: read等待用户输入, 等待时间(超时时间)
-n 字符数: read命令接受指定的字符数后自动执行
-s: 隐藏输入的数据
declare 申明变量类型
declare [+/-] [选项] [变量名]
-: 给变量设定类型属性
+: 取消变量的类型属性
-i: 将变量类型置为整数型
-x: 将变量置为环境变量
-p: 显示指定变量被声明的类型
declare -i sum=$param1+$param2 -> 能正确获得两个值的和, 而不是组装成的字符串
等同于 sum=$(expr $param1 + $param2) -> +左右必须有空格
等同于 sum=$(($param1+$param2))
等同于 sum=$[$param1+$param2]
正则表达式, 通配符
正则表达式, 通配符
正则表达式
包含匹配, 在文件中匹配符合条件的字符串. grep, awk, sed等命令都支持正则表达式
通配符
完全匹配, 用来匹配符合条件的文件名. ls, cp, find等命令不支持正则表达式, 支持通配符
? -> 匹配一个任意字符
* -> 匹配一个或多个任意字符, 即匹配任意内容
[] -> 匹配[]中的任意一个字符, [abc] -> a或者b或者c
[-] -> [a-z] -> 匹配a-z中任意一个字符
[^] -> 逻辑非, [^a-z] -> 匹配a-z中之外的字符
eg1: rm -rf * -> 删除当前目录下所有文件
eg2: ls -l [a-z]* -> 列出当前目录下所有a-z开头的文件
字符截取命令
字符截取命令
cut -> 文件每行切割
cut [选项] 文件名
-f列号: 提取第几列
-d分隔符: 按照指定分隔符分割列, 不指定默认是制表符
eg1: cut -f 1,3 file.txt -> file.txt中每一行按照制表符分割, 取第1列和第3列
eg2: cut -f 1,3 -d ":" file.txt -> file.txt中每一行按:分割, 取第1列和第3列
eg3: cat /etc/passwd | grep /bin/bash | grep -v root | cut -f 1,5 -d ":" -> /etc/passwd文件中, 筛选出包含/bin/bash的行, 不包含root, 然后按:分割, 取第1列和第5列
awk -> 字符截取 awk '条件1{操作1} 条件2{操作2}...' 文件
df -h | awk '{print $1, $3}' -> df -h 打印第一列和第三列
df -h | grep vda1 | awk 'BEGIN{printf "/dev/vda1 磁盘使用率为: "} {printf $5} END{print " end"}' -> /dev/vda1 磁盘使用率为: 21%, BEGIN为初始执行, END在所有数据执行完之后执行
awk 'BEGIN{FS=":"} {print $1,$3}' /etc/passwd -> /etc/passwd 按照:分割, 取第一列和第三列
sed -> 支持对流数据进行编辑, sed [选项] '[操作]' 文件名
选项
-n: 只输出经过sed命令处理的结果
-e: 允许对输入数据应用多条sed命令编辑
-i: sed命令直接修改源数据
操作
a: 新增, c: 替换, i: 插入, d: 删除, p: 打印, s: 字串替换
sed 2p file.txt -> 输出file.txt的第二行, 同时完整文件也会输出
sed -n 2p file.txt -> 只输出file.txt的第二行
字符处理命令
sort -> 排序命令 sort [选项] 文件m
-f: 忽略大小写
-n: 按照数值型进行排序, 默认是按照字符串型进行排序
-r: 反向排序
-t: 指定分隔符, 默认分隔符是\t制表符
-k n,m: 按照指定字段范围排序
sort /etc/passswd -> 每一行按照首字母排序
sort -t ":" -k 3,3 /etc/passwd -> 以:为分隔符, 取第三个字段排序
wc -> 统计命令 wc [选项] 文件名
-l: 只统计行数
-w: 只统计单词数
-m: 只统计字符数
wc /etc/passwd -> 统计指定文件行数,单词数,字符数 -> 31 39 1608 /etc/passwd
条件判断
条件判断
test 选项 文件
[ 选项 文件 ] -> []前后有空格
按照文件类型判断, 执行结果可以通过 echo $? 判断, 0为true
-d 文件: 文件存在且是目录文件 -> true
-e 文件: 文件存在 -> true
-f 文件: 文件存在且是普通文件 -> true
-s 文件: 文件是否存在且非空 -> true
test -e /etc/passwd
[ -e /etc/passwd ]
[ -e /etc/passwd ] && echo 'true' || echo 'false' -> 若/etc/passwd文件存在, 则输出true, 否则输出false
按照文件权限判断, 执行结果可以通过 echo $? 判断, 0为true
-r 文件: 文件存在且有读权限 -> true
-w 文件: 文件存在且有写权限 -> true
-x 文件: 文件存在且有执行权限 -> true
test -x /etc/passwd -> 指定文件是否有执行权限
文件之间判断
文件1 -nt 文件2: 文件1修改时间比文件2更近 -> true
文件1 -ot 文件2: 文件1修改时间比文件2更早 -> true
文件1 -ef 文件2: 文件1和文件2lnode号一致(同一个文件) -> true
两个整数比较
n1 -eq n2: 相等 -> true
n1 -ne n2: 不相等 -> true
n1 -gt n2: n1>n2 -> true
n1 -lt n2: n1<n2 -> true
n1 -ge n2: n1>=n1 -> true
n2 -le n2: n1<=n2 -> true
[ 22 -gt 21 ] && echo true || echo false
两个字符串判断
-z str: str为空 -> true
-n str: str非空 -> true
str1 == str2: 相等 -> true (==左右空格)
str1 != str2: 不相等 -> true (!=左右空格)
[ -z "$name" ] && echo true || echo false -> 若name为空, 输出true
多重条件判断
判断1 -a 判断2: 两个都为true -> true
判断1 -o 判断2: 有一个为true -> true
!判断: 判断为true, !判断为false