Linux
[TOC]
UNIX发展史
- 1969年 美国贝尔实验室的肯.汤姆森(Ken Thompson)在PDP-机器上开发出了UNIX系统
- 1971年 Dennis M.Ritchie(丹尼斯.里奇)发明了C语言 与ken Thompson一起开发UNIX系统
- 1973年 UNIX大部分的源码用C语言重写,因此提高了UNIX系统的可移植性
Linux发展史
Linux系统诞生于1993年,由芬兰大学生李纳斯(Linus Torvalds)和后来陆续加入的众多的爱好者共同开发完成。
Linux是开源软件,源代码开放的UnIX
支撑互联网的开源技术(LAMP)
- LINUX 操作系统
- Apache Web操作系统
- MySQL 数据库
- PHP 编程语言
nano编辑器
vi 和vim模式的切换
命令行下输入 vim
文件名 进入一般模式(正常模式) 可以创建新文件也可以修改已有文件
正常模式下输入i或者a或者o进入编辑模式 退出编辑模式使用ESC
正常模式下输入:
或/
进入命令行模式 ,退出命令行模式使用ESC
插入
:set numer/nu
设置行号
:set nonu
取消行号
a
在光标所在字符后插入
A
在光标所在行尾插入
i
在光标所在字符前插入
I
在光标所在行首插入
o
在光标下插入新行
O
在光标上插入新行
gg
到文件的第一行
G
到文件的最后一行
nG
到文件的第n行
:n
到文件的第n行
0
移动到行首
$
移动到行尾
删除
x
删除光标所在处的字符
nx
删除光标所在处后的n个字符
dd
删除光标所在行
ndd
删除n行
dG
删除光标到行尾的所有的内容
D
删除光标所在处到该行行尾所在行的所有内容
:n1,n2d
删除n1到n2的行所有内容
复制粘贴
yy
复制当前行的内容
nyy
复制当前以下的n行
dd
剪切当前行
ndd
剪切当前以下的n行
p
粘贴在当前光标的下一行
P:粘贴在当前光标的上一行
保存
在命令行模式下 :wq
保存当前内容并且退出 :q!
不保存当前内容且强制退出 :q
是不做任何修改时,退出。若做了修改,需要使用:q!
才可以强制退出
ZZ
相当于:wq
保存修改并退出
:w
保存修改不退出
:w 指定的目录文件
另存为指定文件
:wq!
文件的所有者以及root可以使用
(带有:的是在命令行模式下,其他都在正常模式下进行,都需要退出插入模式)
替换
R
从光标开始处开始进行字符替换,esc结束
u
取消上一次操作
/string
搜索指定的字符串 :set ic
搜索时忽略大小写 n
搜索结果向下翻
%s/替换的目标/替换的值/g
全文替换指定的字符串 g
询问提示 c
不询问提示
8,16s/替换目标/替换的值/g
在8到16行内替换指定的字符串
为vim定义快捷键
:map Ctrl V Ctrl P I#<ESC>
Ctrl P 为光标所在行加上注释并退出
:map Ctrl V Ctrl B 0x
Ctrl B 去掉本行的注释
导入命令
:r 文件目录
将文件的内容导入此vim编辑器中
:r !命令
将命令的结果导入vim编辑器中
关机重启
shutdown -h now
立即关机
halt
立即关机
shutdown -h 1
一分钟后关机
reboot
立即重启
shutdown -r now
立即重启
用户管理
创建用户: useradd 用户名
(此时默认的分组名是用户名)
设定密码 : passwd 用户名
指定组名 : useradd -d 组名 用户名
who
: 查看用户登陆信息
第一个root 代表服务器启动时root登陆
第二个root代表远程登陆(XShell)
第三个root代表服务器启用终端登陆
:0代表本地登陆
pts代表远程登陆 使用不同的数字区分不同的远程终端
w
:查看用户登陆的详细信息
uptime
查看用户登陆一些基本信息
删除用户
userdel 用户名
查询用户信息
id 用户名
切换用户
su - 用户名
高权限用户向普通用户切换时不需要密码 反之则需要
exit
返回之前用户
创建组
groupadd 组名
useradd - g 组名 用户名
:将用户分配到指定的组中
-d
和-g
给用户分配组名的区别: 前者给用户创建一个之前不存在的组名,后者给用户分配已经创建完成的组
删除组
groupdel 组名
更换用户所在组
usermod -g :新的组名 用户
用户和组的相关的文件
/etc/passwd
: 用户的配置文件 记录用户的各种信息
/etc/shadow
: 口令的配置文件
/etx/group
: 组的配置文件 记录linux包含组的信息
Linux运行级别
- 0 系统停机状态 系统默认运行级别不能设置为0,否则不能正常启动
- 1 单用户工作状态,root权限,同于系统维护,禁止远程登陆
- 2 多用户状态(没有NFS),不支持网络
- 3 完全的多用户状态(有NFS),登陆后进入控制台命令模式
- 4 系统未使用,保留
- 5 Xll控制台,登陆后进入图形GUI模式
- 6 系统正常关闭并重启。默认级别不能设为6,否则不能正常启动
runlevel
:查看当前运行级别
帮助指令
man [指令] /配置文件
查看命令或者配置文件的帮助信息,当查看配置文件时不用加配置文件的绝对路径 ,直接加配置文件名即可
whatis 命令
查询命令的简单介绍
apropos 配置文件
查询配置文件信息
命令 --help
获取命令的主要的信息
info 命令
和man差不多
help 命令
查看linux内置的命令
实用指令
usr
: unix system resource
var
: Variable Data File 存储运行时数据
dev
: echo “…” > /dev/null 可以向其中写入任何东西(好比垃圾桶)
文件目录类
pwd
: 显示当前工作目录的绝对路径
ls [选项] 【文件或目录】
选项包括 a
, l
ls -l
: 表示以列表的形式显示当前目录下所有的文件
ls -a
表示显示当前目录下所有的文件包括隐藏的文件或文件夹
ls -d
显示当前目录的信息
ls -F
查看文件的类型
创建目录和删除
mkdir 目录名
创建一层目录
mkdir -p 目录名
创建多级目录
rmdir 目录名
删除空的目录
rm -rf 目录名
删除不为空的目录
创建空的文件
man touch: touch - change file timestamps
确实tocuh的作用是改变文件的时间戳 如果没有则创建文件
touch 文件名
复制文件
scp file_source file_target
用于Linux之间复制文件和目录
eg: scp local_file remote_username@remote_ip:remote_folder
从本地复制到远程
cp resource target
将resource复制到目标目录下
cp -r resouce taget
使用递归将文件夹下所以的文件全部复制到目标目录下
\cp -r resouce taget
强制覆盖以存在的文件
cp -p
保存文件的原有属性
删除文件
rm 【选项】文件名或目录名
选项 :-r
删除整个目录 -f
强制删除没有提示信息
mv
重命名文件或者移动文件
当在同一个目录下移动文件就是重命名 mv oldFileName newFileName
当前后目录不同时就是移动文件夹 mv oldFileName /root/
;将oldFileName移动到root目录下
查看文件
cat用于连接文件并打印到标准输出设备上
查看日志文件不要使用cat 如果日志文件过大会卡死 应该使用less命令
cat 【选项】文件名 | more
:只读的方式 | 分页的形式查看文件 选项为 -n
: 可以显示行号
more指令
more 文件
:分页的形式查看文件
enter
:一行一行看
空格
一页一页查看
ctrl+B
: 查看上一页
ctrl+f或f
查看下一页
q或Q
立即离开文件内容
=
显示当前的行号
:f
显示文件名和当前的行号
less指令
less 文件
方便查看大型文件 ,一次只加载一页
enter
一次查看一行
空格
一次查看一页
上箭头
:向上翻页
下箭头
向下翻页
q
退出该文件
/字符串
向下查找字符串 n
向下查找 N
向上查找
?字符
串 向上查找字符 n
向上查找 N
向下查找
>
和 >>
指令
文件 >
文件 覆盖写 指令的意思是将左边的文件写入到右边的文件中 若右边的文件不存在则创建 存在则覆盖
文件 >> 文件
追加写
ls -l > 文件
将当前目录下的文件列表写入到文件中
cat 文件1 > 文件2
将文件1的内容覆盖写到文件2 ( >> 追加写入)
echo "内容" > 文件
将内容覆盖写入文件中 ( >> 追加写入)
echo
echo 输入内容
: echo $PATH
输入环境变量
echo hello
向控制台输入hello
head&tail
head 文件
查看文件的前(默认)10行
head -n N 文件
查看文件的前N行
tail 文件
查看文件的后(默认)10行
tail -n M 文件
查看文件的后M行
tail -f 文件
实时追踪该文档的所有更新, 工作中很常用
ln指令 (软连接)
1 | ln -s /root linkToRoot # 将linkToRoot链接到root目录下 |
当我们使用pwd查看绝对路径时仍然是当前路径
rm - rm linkToRoot
删除软链接
alias指令
alias
: 列出目前所有的别名
给命令设置别名(服务器重启后该设置失效): alias croot=cd /root
通过修改配置文件的方式(永久生效)
1 | vim ~/.bashrc |
1 | .bashrc |
1 | # 让配置生效 |
history指令
history
显示所有的历史命令
history M
显示前M个历史指令
!N
执行第N个历史指令
时间日期类
date指令
date
显示当前的时间
date"+%Y-%m-%d %H:%M:%S"
格式化日期显示时间 (+号不可省略)
date -s "时间"
修改时间
cal
显示当前月份的日历
cal 年份
显示一年的日历
timedatectl set-time 2018-01-03 23:00:00
设置当前系统时间
搜寻查找类
find 【目录】 查找类型 文件名
1 | find /home -name hello.txt # 查找home目录下文件名为hello.txt的文件 |
1 | find /home -user admin # 查找用户名为admin的文件 |
1 | find / -size +20M # 查找当前系统下大于20M的文件 -20M(小于20M的文件) 20M(等于20M的文件) (M大写 k可以小写 不可以大写) |
1 | find /etc -cmin -5;# 在etc目录下查找5分钟内被修改过文件属性的文件和目录 |
-a
and 同时满足两个条件
-o
or 两个条件满足其中一个即可
-type 【选项】
【选项】:-f
普通文件 -d
目录 -l
软连接
1 | find /etc -size +20M -a -size -50M -type f # 查找etc目录下文件大小在20M~50M之间的文件 |
1 | find /etc -name *init* -exec 执行操作命令 {} \; # 对搜索结果进行操作(严格区分空格) |
1 | find /etc -name *init* -ok 执行操作命令 {} \; # 带有询问 |
找到test目录下java的文件且带有询问的删除
1 | find . -inum inod号 -exec rm -rf {} \; # 根据inode号来删除当前目录下的文件 |
locate
locate 文件
用于快速定位文件 基于数据库查找 不用遍历整个文件系统
刚创建的文件,需要使用命令updatedb
更新数据库,才可以查找到该文件
在/tmp中创建的文件不可以被locate找到
grep和管道符
管道是进程中通信的手段 也是一个文件
mkfifo filename
创建一个管道文件
ls / | tee file | wc -l
grep
过滤查找
grep password filename
在文件中过滤查找
|
将前一个命令查找的结果输出传递给后一个命令输入
cat hello.txt| grep -n hello
查找hello.txt文件 并且在该文件中查找hello并显示所在的行号
-n
显示行号
-i
忽略大小写
-v 字符串
排除指定的字符串 ^N
以N开头的字符串
whereis which
which
用来查看命令的文件路径以及是否有别名
whereis
用来查看命令所在的目录以及帮组文档的路径
高阶查找
xargs 配合管道符一块使用
find 文件目录 -name “*.java” | xargs -I {} cat {} | wc -l 查看目录中以java结尾的文件中所有的行数
解压和压缩类
gzip 文件
: 压缩
gunzip 文件.gz
解压(不常用) 使用gzip
命令压缩文件时不会保留源文件且不可以对目录压缩
zip 【选项】文件 压缩目录
压缩 选项可以为 -r
递归压缩整个目录 文件是压缩后的文件名
unzip【选项】解压目录 文件
解压 选项可以为-d<目录>
指定解压后存放的目录 文件是解压前的文件名
tar
打包的文件以.tar.gz结尾
c
:产生.tar打包文件
v
显示详细信息
f
指定打包的文件名
z
打包同时压缩
x
解压.tar文件
tar -zcvf 压缩后的文件名 目标文件名/目录
压缩文件
tar -zxvf 将要解压的文件 解压到的目录
解压文件
bzip2
zip的升级班 增加了可以保留源文件的选项
bzip2 -k 源文件
压缩文件并保留源文件
bunzip2 -k 压缩文件
解压文件且保留压缩包
tar -cjf 压缩后的文件名 源文件
生成.tar.bz2的压缩文件
tar -xjf
解压以.tar.bz2结尾的压缩文件
tar -tvf backup.tar
查看tar文件的内容而不提取
tar -zxvf backup.tar -C /usr/local
解压到其他目录
排序类
1 | # ip.txt,每行一条ip记录,共若干行,已排好序,统计出现次数最多的前3个ip及其次数 |
Linux组管理
查看文件的所有者
ls -ahl
修改文件的所有者
chown 用户名 文件名
改变单个文件的所有者
chown -R 用户名 文件目录名
改变目录下的所有文件或目录(递归) 的所有者
修改文件所在组
chgrp 新组名 文件名
改变单个文件的所在组
chgrp -R 新组名 文件目录名
改变目录下所有文件索目录的所在组
改变用户所有组
usermod -g 新组名 用户名
查看缺省文件创建的权限
umask -S
权限
从左到右:
d
代表文件类型是目录-
代表普通的文件l
代表软连接c
字符设备【键盘,鼠标】b
块文件 硬盘rwx
表示文件所有者的权限r
代表写的权限w
代表读的权限x(execute)
代表可执行的权限r-x
代表与文件拥有者同一组的用户所拥有的权限 可以写和执行但不能读r-x
代表不与文件拥有者同组的其他用户所拥有的权限 (以上3个一组-
代表不具有该权限rwx
可以用数字表示r
等于4w
等于2x
等于1)3或者1 如果是文件 数字代表硬连接数目 如果是目录则代表该目录下的子目录数(不包括文件 包括隐藏目录)
root 代表文件的所有者
root 代表文件所在的组名
19 如果是文件 表示文件的大小(字节) 如果是目录
时间代表最后一次修改的时间
rwx权限详解
rwx作用文件:
- r代表read 可以读取,查看
- w代表write 可以修改,但是不代表可以删除该文件,删除一个文件的前提是要有对该文件有写的权限,才可以删除该文件
- x代表可执行,可以被执行
rwx作用目录
- r代表可读 ls可以查看目录内容
- write代表可写 代表可以修改 在目录内创建-删除-重命名目录
- x代表可以执行 可以进入该目录
删除一个目录下文件的关键不是该文件是否具有w(写)权限,而是该文件所在的目录是否具有w权限即对文件的创建,删除权限
修改权限 (通过 + - = 变更权限)
u
代表所有者 g
代表所有组 o
代表其他人 a
代表所有人(u+g+o)
chmod u=rwx,g=rx,o=x 文件目录名
将该文件的权限修改为 rwxr-x–x
chmod o+w 文件目录名
增加其他人对该文件读的权限
chmod a-x
移出所有人对该文件的执行权限
chmod -R
遍历修改目录下所有文件或者目录的权限
修改权限 (通过数字变更权限)
chmod 751 文件目录名
7 = r+w+x
5 = w+x
1 = x
任务调度
任务调度是指系统在某个时间执行特定的命令或者程序
crontab -e
编辑定时任务的
crontab -l
查询crontab的任务
crontab -r
删除当前用户下所有的crontab任务
tail -f /var/log/cron
查看定时任务的执行日志
*/1 * * * * ls-l >/tmp/to.txt
: 每小时的每分钟执行ls-l >/tmp/to.txt
命令
5个占位符说明
项目 | 含义 | 范围 |
---|---|---|
第一个* | 一小时中的第几分钟 | 0-59 |
第二个* | 一天的第几小时 | 0-23 |
第三个* | 一月的第几天 | 1-31 |
第四个* | 一年的第几个月 | 1-12 |
第五个* | 一周的星期几 | 0-7(0和7都代表周日) |
磁盘查询指令
df- lh
: 查询系统整体磁盘使用的情况
du-h /目录
: 查询指定目录的磁盘占用情况 默认为当前目录
- -s 指定目录占用大小总汇
- -h带计量单位
- -a含文件
- –max-depth=1 子目录深度
- -c 列出明细的同时,增加汇总值
统计目录下文件的个数
man wc
查看wc命令的用法
ls -l /home |grep "^-"| wc -l
统计home目录下文件的个数
统计目录下目录的个数
ls -l /home |grep "^d"| wc -l
统计home目录下目录的个数
统计目录下所有的文件个数(包括子文件)
ls -lR /home |grep "^-"| wc -l
统计home目录下所有的文件个数
统计目录下所有的目录个数(包括子目录)
ls -lR /home |grep "^d"| wc -l
统计home目录下所有的目录个数
网络命令
ip
last
查看目前和过去所有登陆过系统的用户的信息
lastlog -u 用户id号
查看具体用户登陆的详细信息
traceroute 主机
查看数据包到路径之间的路径
netstat
显示网络有关的信息
-a
显示所有选项 默认不显示LISTEN相关-t
TCP协议-u
UDP协议 UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议-l
监听-r
路由-n
显示IP和端口号-p
显示建立相关链接的程序名
netstat -ntlp
查看本机监听的端口及应用名称
netstat -tlun
查看本机监听的端口
netstat -an
查看本机所有的网路连接
netstat -rn
查看本机路由表
setup
配置网络
mount
挂载命令
tcpdump -nn -i eth0 port 80
对网络上的数据包进行截获的包分析工具
route -n
显示和查看路由表 -n
表示不解析名字
arp -n
显示和修改ARP
dig
curl www.baidu.com -I
查看http的头部信息
进程管理
在linux中 服务命令中带有d(daemon)表示后台进程 >> mysqld
ps命令是用来查看目录中,有哪些正在执行,以及他们执行的状况,可以不加任何参数
ps -a
: 显示当前终端所有进程信息
ps -u
: 以用户的格式显示进程
ps -x
: 显示后台进程运行的参数
- user:用户名
- PID:进程的id
- %CPU:进程占用CPU的百分比
- %MEN:进程占用物理内存的百分比
- VSZ:进程占用虚拟内存的大小(KB)
- RSS:进程占用的物理内存大小(KB)
- TTY:终端名称缩写
- STAT:进程状态。S表示休眠 s表示该进程是会话的先到程序 N表示进程拥有比普通进程优先级更低的优先级 R表示正在运行 D表示短期等待 Z 表示僵死进程 T表示被跟踪或被停止
- START:进程的启动时间
- TIME:进程使用CPU的总时间
- COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
查看单个进程
ps -aux | grep 单个进程的名称
ps -aux | grep 单个进程的名称| grep -v grep
: 过滤掉grep操作
查看父进程
ps -ef
: 以全格式显示当前所有的进程,查看进程的父进程 -e
:显示所有进程 -f
:全格式
- UID: 用户ID
- PID: 进程ID
- PPID: 父进程ID
- C: CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低,数值越小,表明进程是I/O密集型运算,执行优先级会提高
终止进程
kill 进程号
强制非法用户下线
killall 进程名称
: 通过名称终止多个进程
kill -9 进程号
: 强制终止某个进程
查看进程树
pstree 【选项】
【选项】 -p
显示进程的PID -u
显示进程的所属用户名
strace命令
服务管理
systemctl status firewalld
查看当前防火墙的状态(重启restart,终止stop,开始,start)
查看服务名
setup
或者 systemctl list-unit-files
动态监控服务
top -u 用户名
: 监视特定用户
top 回车 k 回车 进程号
: 选择要终止的进程
设定动态刷新的时间(默认是3秒)
top -d 时间间隔(s)
字母q可以退出动态监控界面
监控网络状态
netstat -anp
查看系统所有的网络服务 -an
:按一定顺序排列输出 -p
:显示哪个进程在调用 -t
:显示TCP传输协议的连线状况
netstat -anp | grep 网络服务名称
查看单个网络服务
rpm
安装未安装的rpm包时,使用rpm包全名且后跟rpm包的路径,而查询或者卸载时直接使用包名,系统会从数据库中寻找该rpm包的信息,所以可以在任意位置查询或卸载该rpm包
1 | rpm -qa | grep 包名; # 查询rpm安装包 |
-i
代表安装(install)
-v
代表显示详细信息 verbose
-h
显示详细信息 hash
--nodeps
不检测依赖性
rpm -ql
查询rpm包的安装位置 l
list q
query p
package查询未安装包将要安装的信息(加全包名)
rpm -qf 系统文件
查询系统文件属于那个rpm包
rpm -qR 包名
查询已安装包的依赖
rpm -qRp 包全名
查询未安装包的依赖 R requires
yum
yum只是在线管理rpm包的命令,并不存在yum包,可以解决包和包之间的依赖
yum list | grep 包名
查看系统是否存在该rpm包
yum install 包名
安装rpm文件
yum remove 包名
卸载rpm包
yum update 包名
升级rpm包 不加包名会升级所有的rpm包括linux内核,导致系统崩溃
-y 选项
自动回答yes
yum install -y man-pages
安装函数使用手册
yum install -y lsof
yum install -y nc
Shell
脚本的执行方式
- bash xx.sh
- sh xx.sh
- ./sh
- bash -x xxx.sh 查看脚本的执行过程
交互式定义变量(read)
read [options] variables
- -p 定义提示用户的信息
- -n 定于字符数
- -s 不显示用户输入的内容
- -t 定义超时时间
1 | # 从文件中读取一行数据复制给name |
定义有类型的变量(declare)
declare [options] variables=value
unset variables: 取消赋值操作
- -i 将变量看成整数
- -r 定义只读变量
- -a 定义为普通数组
- -A 定义关联数组
- -x 将变量通过环境导出
变量的分类
本地变量
当前用户自定义的变量。当前进程中进程有效(一个bash终端就是一个进程), 其他进程以及当前进程的子进程无效
环境变量
当前进程有效, 并且能够被子进程调用
- env 查看当前用户的环境变量
- set 查询当前用户的所有变量(临时变量和环境变量)
1 | # 导出环境变量 |
全局变量
1 | # 当前用户的bash信息 用户登陆时读取 |
1 | # 当前用户的环境变量, 用户登陆时读取 |
1 | # 当前用户退出当前shell时读取 |
1 | # 全局的bash信息, 所有的用户都生效 |
1 | # 全局环境变量信息 |
用户登系统读取相关文件的顺序
/etc/profile
$HOME/.bash_profile
$HOME/.bashrc
/etc/bashrc
$HOME/.bash_logout
系统变量(内置bash变量)
内置变量 | 含义 |
---|---|
$? | 上一条命令执行返回后的状态; 状态值为0表示正常执行, 非0表示执行异常或者错误 |
$0 | 当前执行的程序或脚本名 |
$# | 脚本后面接的参数个数 |
$* | 脚本后面所有参数, 参数当成一个整体输出, 每一个变量变量之间以空格隔开 |
$@ | 脚本后面所有的参数, 参数是独立的, 也是全部输出 |
$1-$9 | 脚本后面的参数位置 $1表示第一个位置参数 |
${10} - ${n} | 扩展位置参数 {2个数字以上括起来} |
$$ | 当前所在进程的进程号 |
$! | 后台运行的最后一个进程号 |
!$ | 调用最后一条命令历史中的参数 |
1 | echo "\$0 = $0" |
1 | ./test.sh a b c d e f g h i j |
1 | $0 = ./test.sh |
四则运算
- $(()) echo $((1+1))
- $[] echo $[3+2]
- expr expr 10 * 5 (需要将*转义, 且操作数和*号之间一定要有空格)
- let n=1; let n+=1(不可以有空格)
- 2**2 次方运算 (expr不支持)
- bc
条件判断
- test 条件表达式
- [ 条件表达式 ]
- [[ 条件表达式 ]] : 支持正则 (注:两边中括号和表达式之间都有空格
判断文件类型
判断参数 | 含义 |
---|---|
-e | 判断文件是否存在(任何类型文件) |
-f | 判段文件是否存在并且是一个普通文件 |
-d | 判断文件是否存在并且是一个目录 |
-L | 判断文件是否存在并且是一个软链接文件 |
-b | 判断文件是否存在并且是一个块设备文件 |
-S | 判断文件是否存在并且是一个套接字文件 |
-c | 判断文件是否存在并且是一个字符文件 |
-p | 判断文件是否存在并且是一个命名管道文件 |
-s | 判断文件是否存在并且是一个非空文件 |
判断文件权限
判断参数 | 含义 |
---|---|
-r | 当前用户对其是否可读 |
-w | 当前用户对其是否可写 |
-x | 当前用户对其是否可读 |
-u | 是否有suid 高级权限冒险位 |
-g | 受否有sgid 高级权限强制位 |
-k | 当是否育t位 高级权限强制位 |
判断整数
判断参数 | 含义 |
---|---|
-eq | 相等 |
-ne | 不等 |
-gt | 大于 |
-lt | 小于 |
-ge | 大于等于 |
-le | 小于等于 |
判断字符串
判断参数 | 含义 |
---|---|
-z | 判断是否为空字符串(长度为0即为空) |
-n | 判断是否为非空字符串 |
= | 判断字符串是否相等 |
!= | 判断字符串是否不相等 |
多重条件判断符
判断符号 | 含义 | 举例 |
---|---|---|
-a(all) 和 && | 逻辑与 | [ $(id -u) -eq 0 ] && echo “admin” [ 0 -lt 1 -a 1 -lt 0 ]; echo $? |
-o(or) 和 || | 逻辑或 | [ 0 -lt 1 -o 1 -lt 0 ]; echo $? |
注: && 前面的表达式为真时, 才会执行后面的代码
|| 前面的表达式为假, 才会执行后面的代码
; 用于分割命令或者表达式
条件判断(C风格)
(( 1 == 3)); echo $?
[ "hello" = "world" ]; echo $?
当使用[]时用加引号
a="hello";b="world";[ "$a" = "$b" ]; echo $?
[[ hello = hello ]]; echo $?
使用[[]]时不用加引号