host-only 模式将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只与主机相互通讯。
在虚拟机中配置网络时,一般使用VMnet1
桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥接模式下,虚拟机ip地址需要与主机在同一个网段,如需联网,则网关与dns需与主机网卡一致。
在虚拟机中配置网络时,一般使用VMnet0
nat模式是借助虚拟NAT设备(路由器)和虚拟DHCP服务器,使虚拟机可以联网。主机和虚拟机需使用同一个网卡,ip地址不一致,宿主主机作为一个NAT设备,虚拟机发送请求时,先发送到宿主主机转换ip,再通过宿主主机ip联网。
NAT模式类型有三种: 静态NAT,动态NAT和端口NAT
在虚拟机中配置网络时,一般使用VMnet8
语法:
shutdown [选项] [时间] [消息内容]
功能描述: 关机命令
选项说明:
-k
: 并不是真的关机,只发送警告信息给登录用户
-r
: 在将系统的所有服务关闭之后立刻重新启动系统
-h
: 将系统的所有服务关闭之后 ,立刻关机。
-c
: 取消已经在进行的 shutdown 命令操作。
参数说明:
时间 :指定系统关机的时间 !若没有这个参数,默认1分钟后自动执行关机操作
消息内容:内容显示在当前屏幕中
例子:
现在立刻关机:shutdown -h now
10分钟后关机:shutdown -h 10
系统时间到17:20关机:shutdown -h 17:20
立即重启:shutdown –r now
文件存储在硬盘上,硬盘的最小存储单位是扇区,每个扇区储存512字节,8个扇区(Sector)组成文件块(block),块是文件存储的最小单位,
操作系统一次性读取文件块。
inode(索引节点)一般储存着文件的元数据信息,一般在系统中以数组的形存储着,inode包含了以下信息:
系统在硬盘格式化时会自动分成两个区域,一个是block area(存放文件数据块),另一个是inode table(存放inode所包含的信息)下面展示访问文件过程:
查看每个硬盘分区的inode总数和已使用的数量:
df -i
查看每个inode节点大小:sudo dumpe2fs -h/dev/sda 9|grep "Inode size"
查看文件名对应的inode号:df -i 文件名
/ls -i 文件名
查看某个文件或目录的inode信息:stat 文件名
硬链接
在Unix/Linux系统上允许多个文件名指向同一个inode编号,可用不同的文件名访问同样的内容,对内容进行修改会影响到所有文件名,但删除一个文件名不影响另一个文件名的访问
创建硬链接:ln 源文件 目标文件
软链接
文件1和文件2的inode编号虽然不同,但文件1内容是文件2的路径,读取文件1时系统会自动将访问者指向文件2,这时文件1称为文件2的软链接或符号链接
创建软链接:ln -s 源文文件或目录 目标文件或目录
查看软链接:ls -li 文件2 文件1
语法:
ls [选项]
功能描述: 查询当前目录下的目录与文件 (list)
命令所在路径: /bin/ls
选项说明:
-a
:显示隐藏文件
-l
:显示详细信息
-d
:显示目录属性
-i
:显示文件或目录的inode号
-R
(recursive):递归查询
-r
(reverse):依相反次序排列
-t
:以文件修改时间排序
-F
:显示文件类型
语法:
cd 目录名称
功能描述: 切换目录 (change directory),
命令所在路径: /bin/cd
例子:
回到上一级目录:cd ..
切换指定目录:cd /etc/
返回上两级目录:cd ../..
语法:
pwd [选项]
功能描述: 显示目前所在目录(Print Working Directory)
命令所在路径: /bin/pwd
选项说明:
-p
:显示出确实的路径,非使用连结 (link) 路径
语法:
mkdir [选项] 目录名称
功能描述: 创建目录 (make directories),
命令所在路径: /bin/mkdir
选项说明:
-p
(parents):递归创建多个目录
-v
:每次创建新目录都显示信息
-m
(mode):创建目录的同时设置目录权限 (mkdir -m 764 file_name)
语法:
touch [选项] 文件名称
功能描述: 创建新的文件,如果文件存在则修改文件的时间属性
命令所在路径: /bin/touch
选项说明:
-a
:修改文件的访问时间为当前系统时间
-m
:修改文件的修改时间为系统当前时间
-d
:将文件的修改时间修改为指定的时间
其他用法:
touch –r 源文件名 目标文件名
将源文件的时间,更新到目标文件上,使两个文件的时间相同
语法:
rmdir [选项] [目录名称]
功能描述: 删除目录 (remove directory)
命令所在路径: /bin/rmdir
选项说明:
-p
:递归删除
-r
:删除空目录和非空目录
-f
:强制删除而不被提示
语法:
rm [选项] 文件名称
功能描述: 删除文件或目录 【会删除通过cat复制的文件】(remove )
命令所在路径: /bin/rm
选项说明:
-i
:删除前抛出提示确认
-f
:强制删除
-r
(recursive):递归删除
-v
:显示删除的详细过程
rm与inode:
删除原文件的inode,把数据块放到空闲列表中,此时误删的数据还可以恢复,如果有新文件导入,会通过超级块查找,哪些块已经被使用,哪些块还有剩余,则会重新获取新的inode,在分配空闲块,此时之前删除的文件就不能恢复了。
语法:
cp [选项] 文件名称/目录名称
功能描述: 复制文件或目录 (copy)
命令所在路径: /bin/cp
选项说明:
-a
:复制目录时保留文件连接文件属性,并可递归复制目录
-f
:强制复制
-i
:覆盖之前进行确认
-p
:保留原文件或目录的属性
-r
:递归复制
语法:
mv [选项] 源文件/目录 目标文件/目录
功能描述: 移动文件或目录位置,如果源文件和目标文件都是操作同一个文件则重命名文件名或目录名 (move)
命令所在路径: /bin/mv
选项说明:
-b
:如果目标文件存在,则覆盖前为其创建一个备份
-f
:强制覆盖
-i
:询问是否覆盖
mv与inode:
如果在一个分区,就是仅仅改了指针映射的位置,inode没有变化。如果不在一个分区,就是先复制数据到目标文件,然后删除源文件。
1、cat命令
cat是一个文本文件查看和连接的工具
语法:
cat [选项] 文件名
功能描述: 从第一行查看文件内容 | 合并文件 | 添加内容 (catenate)
命令所在路径: /bin/cat
选项说明:
-n
:查看文件时设置行号
-b
:查看文件时设置行号(忽略空行)
-s
:连续两行以上的空白行,合并成一行
-A
:显示所有隐藏字符
例子:
cat 文件 > 新文件
复制文件:如果新文件是存在的话,文件内容直接覆盖新文件中的
cat 1文件名 >> 2文件名
追加内容:把1文件内容追加到2文件的尾部,
cat 文件名1 文件名2 ... 文件名n > 新文件名
合并文件:把多个文件合并成1个文件
2、tac命令
语法:
tac 文件名
功能描述: 从最后一行查看文件内容
命令所在路径: /bin/tac
3、more命令
语法:
more 文件名
功能描述: 一页一页翻动查看文件内容
命令所在路径: /bin/more
选项说明:
-n
:设置一页显示多少行记录
操作说明:
操作 | 描述说明 |
---|---|
空格键/F键 | 向下翻一页 |
Enter键 | 向下翻一行 |
/字串 | 向下搜寻这个关键字 |
[shift]+:键+f键 | 输出文件名和当前行的行号 |
q键 | 退出more |
b键 或 [ctrl]键+b键 | 往回翻页,不过这动作只对文件有用,对管道对象无用 |
4、less命令
语法:
less 文件名
功能描述: 一页一页翻动查看文件内容
命令所在路径: /usr/bin/less
选项说明:
-N
:显示每一行的行号
操作说明:
操作 | 描述说明 |
---|---|
空格键 / F键 | 向下翻一页 |
⬇ / Enter键 | 向下翻动一行 |
⬆ | 向上翻动一行 |
b键盘 / [ctrl]键+b键 | 向上翻回上一页 |
/字串 | 向下搜寻这个关键字 |
?字串 | 向上搜寻这个关键字 |
n | 重复前一个搜寻 (与 / 或 ? 有关!) |
N | 反向的重复前一个搜寻 (与 / 或 ? 有关!) |
q | 离开 less ,不过不会把记录继续留在终端显示 |
5、head命令
语法:
head [选项] 文件名
功能描述: 查看文件内容前几行
命令所在路径: /usr/bin/head
选项说明:
-n
:显示文件前几行 (-n 指定行数)
例子:
查看file1文件的第300-500行的内容:cat file1| head -n 500 | tail -n +300 #
6、tail命令
语法:
tail [选项] 文件名
功能描述: 查看文件内容后几行
命令所在路径: /usr/bin/tail
选项说明:
-n
:显示文件后几行
-f
:动态显示文件末尾内容,要等到按下[ctrl]-c才会结束tail的动态滚动显示
使用 ls -l
命令查看文件目录时,可以采用开头第一个字符来判断文件类型:
第一个字符 | 表示意义 | |
---|---|---|
d | 目录 | |
- | 文件 | |
l | 链接文件 |
使用 ls
命令查看文件目录时,可以通过文件或目录名称的字体颜色来区分文件类型:
字体颜色 | 表示意义 | 字体颜色 | 表示意义 |
---|---|---|---|
黑色/白色 | 普通文件 | 蓝色 | 目录 |
绿色 | 可执行文件 | 红色 | 压缩文件 |
浅蓝色 | 链接文件 | 红色闪烁 | 链接文件有问题 |
黄色 | 表示设备文件 | 紫色 | 表示图形文件 |
灰色 | 表示其他文件 |
字母表示 | 权限说明 | 在文件或目录下的作用 | 数据表示 |
---|---|---|---|
r | 读权限 | 可以查看文件或目录的内容 | 二进制为 100,十进制是4 |
w | 写权限 | 可以修改文件内容,以及在目录种修改和删除文件 | 二进制为 010,十进制是2 |
x | 执行权限 | 可以执行文件,以及进目录 | 二进制为 001,十进制是1 |
注意:新建文件是默认没有x权限
语法:
chmod [选项] 修改权限 文件或目录
|chmod [{ugoa}{+-=}{rwx}] [文件或目录]
(u:所属主,g:所属组,o:其他组,a:全部)
功能描述: 改变文件或目录权限(change the permissions mode of a file),会刷新ctime
命令所在路径: /bin/chmod
选项说明:
-r
:递归更改文件权限
用法示例
给其他组添加写权限:chmod o+w abc
所属主何其他组去掉执行权限,所属组去掉读权限,所属组其他组增加写权限chmod uo-x,go+w,g-r admin
所属主只有读写权限,所在组只有写执行权限,其他组只有读写权限chmod u=rw,g=wx,o=rw admin
赋给所属主读和写权限,所属组写和执行权限,其他人读权限:chmod 636 234.zip
语法:
chown [选项] 属主名[:属组名] 文件名
功能描述: 改变文件或目录的所有者 (change file ownership)
命令所在路径: /bin/chown
选项说明:
-r
:递归更改文件所属主
示例:
修改文件的拥有者:chown zhs abc
修改目录及其目录下所有文件的拥有者 :chown zhs download -R
语法:
chgrp [选项] 属组名 文件名
功能描述: 改变文件或目录的所属组 (change file group ownership )
命令所在路径: /bin/chgrp
选项说明:
-r
:递归更改文件所属组
用户信息文件/etc/passwd: 存放用户的信息(:为分隔符)
影子文件/etc/shadow: 针对用户文件,存放用户的密码信息(:为分隔符)
组信息文件/etc/group: 存放组的信息(:为分隔符)
组密码文件/etc/gshadow: 存放组密码(:为分隔符)
用户的家目录:
超级用户:/home/用户名 ($)
普通用户:/root (#)
用户邮箱:
/var/spool/mail/用户名
用户模板用户:
/etc/skel
1、su命令
语法:
su [选项] 用户名
功能描述: 切换当前用户身份 (switch user)
命令所在路径:
选项说明:
-
:用户和环境变量一起切换,建议切换用户时需要使用su - 用户名
-c
:仅执行一次命令不切换用户身份
实例:
su - root -c “useradd user3”
2、sudo命令
语法: sudo linux命令
功能描述: 以系统管理者的身份执行指令(super user do)
sudo和su命令的区别:
当普通用户使用su 命令时,直接把控制系统的完整权限赋予给普通用户;
1、who命令
2、id命令
3、w命令
语法:
useradd [选项] 用户名
功能描述: 添加新用户
命令所在路径: /usr/sbin/useradd
选项说明:
-u
:指定用户的UID (useradd -u UID
)
-d
:指定用户的家目录(useradd -d 家目录
)
-c
:指定用户的用户的说明(useradd -c 用户说明
)
-g
:指定用户的初始组(useradd -g 组名
)
-G
:指定用户的附加组(useradd -G 组名
)
-s
:指定用户登录shell,默认\bin\bash(useradd -s shell
)
实例:
增加附加组root且用户id为581添加用户说明:useradd -u 581 -G root,bin -d /home/num1 -c "this is a test user!!" -s /bin/bash testname
命令执行后会直接创建指定参数的用户,如果不指定选项也可以直接创建用户,不过会按照 /etc/default/useradd 或 /etc/login.defs 文件中的配置内容设置
语法:
passwd [选项] [用户名]
没用用户名的话则修改当前用户的密码
功能描述: 设置或修改用户密码
命令所在路径: /usr/bin/passwd
选项说明:
-d
:删除密码,只能系统管理员才能使用
-f
:强制性执行
-l
:锁住密码,只能系统管理员才能使用
-u
:解开已上锁的账号
-S
:查询用户密码的状态,只能系统管理员才能使用
--stdin
:通过管道符输出的数据作为密码
语法:
usermod [选项] 用户名
功能描述: 修改用户信息
选项说明:
-u
:修改用户的UID号(-u UID)
-c
:修改用户的说明信息(-c 用户说明)
-G
:修改用户的附加组(-G 组名)
-L
:临时锁定用户
-U
:解锁用户锁定
语法:
change [选项 ]用户名
功能描述: 修改用户密码状态
选项说明:
-l
:列出用户的详细密码状态
-d
:修改密码最后一次更改日期(-d 日期)
-m
: 两次密码修改间隔(-m 天数)
-M
:密码有效期(-M 天数)
-W
:密码过期前警告天数(-W 天数)
-I
:密码过期后宽限天数(-I 天数)
-E
:账号失效时间(-E 日期)
语法:
userdel [选项 ]用户名
功能描述: 删除指定用户
选项说明:
-r
:删除用户的同时删除用户家目录
语法:
groupadd [选项] 组名
功能描述: 添加用户组
选项说明:
-g
:指定组ID (groupadd -g GID
)
语法:
groupmod [选项] 组名
功能描述: 修改所属组属性
选项说明:
-g
: 修改组ID (groupmod -g GID
)
-n
:修改组名(groupmod -n 旧组名 新组名
)
语法: groupdel [选项] 组名
功能描述: 删除组
选项说明:
-g
:指定用户的主组 (useradd -g 组名 用户名
)
groupadd tg
useradd -g tg lamp # 指定他的初始组是tg
useradd -G tg lamp1 # 指定他的附加组
# 直接删除lamp 无法删除,需要先删除初始用户再删除用户组
语法:
gpasswd [选项] 组名
功能描述: 添加或删除组内用户
选项说明:
-a
:把用户加入组 (gpasswd -a 用户名 组名
)
-d
:把用户从组中删除 (gpasswd -d 用户名 组名
)
语法:
id [选项] USERNAME
功能描述: 用于查看系统中已存在用户账号的属性信息
选项说明:
-u
:只查看用户的ID号uid
-g
:只查看用户的组ID号gid
-G
:只查看用户的附加组id号GID
-n
:查看用户信息以名称显示,不以ID号显示,搭配-u -g -G一起使用。
语法:
find [搜索范围] [匹配选项 匹配条件]
(搜索范围默认当前目录下)
功能描述: 在指定范围内搜索符合条件的文件
命令所在路径: /bin/chgrp
匹配选项说明:
-name
:按照文件名查找文件
-perm
:按照文件权限来查找文件
-user
:按照文件属主来查找文件
-group
:按照文件所属的组来查找文件
-size
:文件大小 (+number 大于;-number 小于;number 等于)
-a
:两个条件同时满足
-o
:两个条件满足任意一个即可
-type
:根据文件类型查找 (f 普通文件,d 目录,p 管道文件,l 符号链接文件)
-mtime
:指文件内容被修改的时间+n:大于n,-n:小于n
-atime
:文件被读取或执行的时间
-ctime
:文件状态改变的时间 (通过chmod改变权限时会刷新该时间)
-size n:查找文件长度为n块的文件,单位带c表示文件长度以字节计算
实例:
在/etc下查找大于80MB小于100MB的文件:find /etc -size +163840 -a -size -204800
在根目录下查找所有者为shenchao的文件 :find /home -user shenchao
在根目录下查找大于100MB的文件:find / -size +204800
查找以init开头的文件:find /etc -name init???
语法:
locate 文件名
功能描述: 功能与find相似,但locate在文件资料库中查找文件
命令所在路径: /usr/bin/locate
语法:
which 命令
功能描述: 在指定或默认的PATH路径下搜索某个系统命令的位置并返回第一条搜索记录
命令所在路径: 搜索命令所在目录及别名信息
语法:
whereis [命令名称]
功能描述: 搜索命令所在目录及帮助文档路径
选项说明:
-b
:查找二进制文件
-m
:帮助文件
-s
:源代码文件
命令所在路径: /usr/bin/whereis
语法:
grep [选项] "搜索内容" [文件目录]
|grep [选项] [-e 正则表达式 | -f 文件内容]
功能描述: 查找文件里符合条件的字符串 (Global search Regular Expression and Print out the line)
命令所在路径: /bin/grep
选项说明:
-i
:忽略大小写
-n
:输出行号
-v
:反向查找,结果取反
--color=auto
:搜索出的关键字用颜色显示(never、always、auto)
语法:
man 命令或配置文件名
功能描述: 查询指定命令的帮助信息(manual)
命令所在路径: /usr/bin/man
语法:
whatis 命令
功能描述: 查询命令的简单介绍信息(what is ls)
语法:
help 命令
功能描述: 查询Shell内置命令的帮助信息
命令所在路径: shell内置命令
缓存与缓冲的区别: 缓存是用来加速数据从硬盘中“读取”的,而缓冲是用来加速数据“写入”硬盘的
cat /proc/cpuinfo
语法:
vmstat [选项] [ delay [count]]
功能描述: 查看cpu使用率与内存使用情况、虚拟内存交换情况和IO读写情况
选项说明:
-a
|--active
:显示活跃和非活跃内存
-f
|--forks
:显示从系统启动至今的fork数量
-m
|--slabs
:显示slabinfo
-n
|--one-header
:只在开始时显示一次各字段名称
-s
|--stats
:显示内存相关统计信息及多种系统活动数量
-d
|--disk
:显示磁盘相关统计信息
-p
|--partition
:显示指定磁盘分区统计信息
-S
|--unit
:按照指定单位显示结果,{ k 、K 、m 、M }
参数说明:
delay :采集数据的时间间隔
count:采样的次数
语法:
mpstat [选项] [
[ ]]
功能描述: cpu核的信息
选项说明:
-P
:指定的cpu编号
参数说明:
interval:相邻的两次采样的间隔时间
count:采样的次数
语法:
pidstat [选项] [
[ ]] [-e ]
功能描述: 监控全部或指定进程占用系统资源的情况
选项说明:
-u
:显示各个进程的cpu使用统计
-r
:显示各个进程的内存使用统计
-d
:显示各个进程的IO使用情况
-p
:指定进程号
-w
:显示每个进程的上下文切换情况
-t
:显示选择任务的线程的统计信息外的额外信息
-h
:在一行上显示了所有活动,这样其他程序可以容易解析。
-T
: 指定pidstat监控 {TASK
(报告独立的task) |CHILD
(报告进程下所有线程统计信息) |ALL
(报告独立task和task下的所有线程)}
语法:
free [选项]
功能描述: 显示内存使用情况
选项说明:
-b
:以Byte为单位显示内存使用情况
-k
:以KB为单位显示内存使用情况
-m
:以MB为单位显示内存使用情况
-g
:以GB为单位显示内存使用情况
-h
:以合适的单位显示内存使用情况
-s
:每隔几秒打印出内存使用状况 (free -s N
)
-t
:显示内存总和列
附加知识:
buffer在操作系统中指buffer cache(缓存区)。
cache在操作系统中指page cache(页高速缓存,是内核实现的磁盘缓存,主要用来减少对磁盘的I/O操作)通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为物理内存的访问
当内核要读一个文件时,它会先检查这个文件的数据是不是已经在页告诉缓存中,如果在就但其访问磁盘,直接从内存中读取,这个行为称为缓存民众。如果数据不在缓存中则是未命中缓存,此时内核就要调度块I/O操作从磁盘去读取数据,然后内核将读来的数据放入页高速缓存中
扇区是设备的最小寻址单元,也叫“硬扇区 ”或“设备块”;块是操作系统中文件系统的最小寻址单元,也叫“文件块”或“I/O块”。每个块包含一个或多个扇区,但大小不能超过一个页面,所以一个页可以容纳一个或多个内存中的块。
语法: uptime [选项]
功能描述: 能够打印系统总共运行了多长时间和系统的平均负载
选项说明:
-p
| --pretty
:以易读的格式显示系统运行时长
-h
| --help
:查看帮助
-s
| --since
:查看系统启动时间
-V
| --version
:查看该命令的版本
语法:
uname [选项]
功能描述: 显示系统信息
选项说明:
-a
:查看系统所有的相关信息
-r
:查看内核版本
-s
:查看内核名称
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是操作系统进行资源分配和调度的一个独立单位。
进程一般存放到/proc
目录下,ls /proc
列出系统里所有的进程
语法:
ps [选项] [参数]
功能描述: 查看服务器当前的进程情况
选项说明:
-a
:列出所有的进程
-e
:列出进行中的进程
-A
:显示所有进程
-f
:显示全部的列(显示全字段)
-w
:显示加宽可以显示较多的资讯
-u
:显示指定用户信息
-au
: 显示较详细的资讯
-aux
:显示所有包含其他使用者的行程
-o
:指定列
–
参数说明:
u
:以用户角度查看进程的使用资源情况
USER: 进程拥有者 PID:该进程的ID
PPID:其上级父程序的ID C:占用的 CPU 使用率
%MEM:占用的记忆体使用率 VSZ:虚拟内存大小
RSS:实际内存大小 TTY :终端的次要装置号码
S/STAT :该行程的状态(R睡眠进程,S正在运行,+前台操作) START:行程开始时间
TIME:执行的时间 CMD:所执行的指令
常用组合命令:
ps -ef | grep 进程名称 #查看指定进程名称的进程
ps -u 用户名 #显示指定进程用户信息
ps -le # 使用Linux标准命令格式
ps aux #使用BSD操作系统的格式
语法:
top [选项]
功能描述: 实时查看服务器当前的进程情况
选项说明:
-d
: 改变显示的更新速度
-q
: 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
-c
: 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称
-S
: 累积模式,会将己完成或消失的子进程 ( dead child process ) 的 CPU time 累积起来
-s
: 安全模式,将交谈式指令取消, 避免潜在的危机
-p
:指定进程(top -p 进程号
)
-u
:指定用户名(top -u 用户名
)
-i
: 设置间隔时间(top -i 时间
)
-n
: 循环显示的次数,完成后将会退出 top (top -n 次数
)
-b
: 批次档模式,搭配 “n” 参数一起使用,可以用来将 top 的结果输出到档案内
常用组合命令:
top d 5 # 动态显示系统当前的进程和状态,每隔 5 秒的时间刷新一次
top -p pid1,pid2,pid3 # 监测指定id的进程状态``
后台进程也叫守护进程,独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。
守护进程一般在系统启动时开始运行,除非强行终止,否则直到系统关机都保持运行。常见的守护进程包括系统日志进程syslogd、 web服务器httpd、邮件服务器sendmail和数据库服务器mysqld等。守护进程的名称通常以d结尾,比如sshd、xinetd、crond等。
1、添加后台进程
语法:
命令 &
| ctrl键+z键
功能描述: 进程在后台运行
2、查看后台进程
nice 值越高,表示优先级越低;nice值越低,表示优先级越高。普通用户只能将自己的进程nice设为0~19,不过普通用户只能设置nice值越来越高
开启vim并且指定程序优先级: nice -n -5 vim &
(nice命令不允许普通系统用户增加命令的优先级)
语法: renice -n 优先级数字 进程pid
功能描述: 修改一个正在运行的进程优先级
语法:
pstree [选项]
功能描述:
选项说明:
-p
:显示进程PID
-u
:显示进程的所属用户
语法:
kill [选项] [信号] [进程号]
功能描述:
选项说明:
-l
:显示可用的进程信号
-9
/KILL
:杀死一个进程
-1
/HUP
:重新加载进程
-15
/TERM
:正常停止一个进程
常用组合命令:
kill -9 pid # 彻底杀死进程
kill -9 $(ps -ef | grep user_name) / kill -u user_name # 杀死指定用户所有进程
语法:
killall [选项] [信号] 进程号
功能描述: 按照进程名杀死进程
选项说明:
-i
:交互式,询问是否杀死某个进程
-I
:忽略进程名的大小写
语法:
pkill [选项] [信号] 进程号
功能描述:
选项说明:
-t 终端号
:按照终端号踢出用户
1、service
service命令本质是执行/etc/init.d
目录下的脚本
启动服service务:
service 服务名 start
终止服务:service 服务名 stop
重启服务:service 服务名 restart
2、systemctl
systemctl 命令是linux系统最新的初始化系统,同时systemctl兼容了service命令也会查找/etc/init.d
目录,systemctl 是由service和chkconfig这两个命令整合而来。
语法:
systemctl [参数] [服务名]
功能描述:
参数说明:
start
:启动服务
stop
:停止服务
restart
:重启服务
enable
:设置开机启动
disable
:禁止开机启动后
status
:查看服务状态
daemon-reload
:重载服务配置文件
list-unit-files
:列出所有服务
实例:
查看当前已经启动的服务 :systemctl list-units
查看当前防火墙的状况 / 关闭防火墙 / 开启防火墙:systemctl status firewalld
/systemctl stop firewalld
/systemctl start firewalld
语法:
df [选项] [目录或文件名]
若不指明目录或文件名则将系统内所有的文件系统列出来
功能描述: 检查文件系统的磁盘空间占用情况 (disk free)
选项说明:
-a
:列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k
:以 KBytes 的容量显示各文件系统;
-m
:以 MBytes 的容量显示各文件系统;
-h
:以易读的 GBytes, MBytes, KBytes 等容量格式显示;
-H
:以 M=1000K 取代 M=1024K 的进位方式;
-T
:显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
-i
:以 inode 的数量来显示。
语法:
du [选项] 文件或目录名称
功能描述: 查看指定的目录或文件所占用的磁盘空间 (disk usage)
选项说明:
-a
:列出所有的文件与目录容量;
-h
:以易读的容量格式 (G/M) 显示;
-s
:列出总量而已,而不列出每个各别的目录占用容量;
-S
:不包括子目录下的总计,与 -s 有点差别。
-k
:以 KBytes 列出容量显示;
-m
:以 MBytes 列出容量显示;
语法:
fdisk [选项] 装置名称
若不指明装置名称则将会把整个系统内能够搜寻到的装置的分区均列出来
功能描述: 用于磁盘分区
选项说明:
-l
:输出后面接的装置所有的分区内容。
语法:
mkfs [选项] 装置文件名
功能描述: 对文件系统的格式化(make filesystem)
选项说明:
-t
:可以接文件系统格式,(mkfs -t 文件系统格式
) 装置文件名
语法:
fsck [选项] 装置名称
功能描述: 检查和维护不一致的文件系统 (file system check)
选项说明:
-t
: 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数 (fsck -t 文件系统 [-ACay] 装置名称
)
-s
: 依序一个一个地执行 fsck 的指令来检查
-A
: 对/etc/fstab 中所有列出来的 分区(partition)做检查
-C
: 显示完整的检查进度
-d
: 打印出 e2fsck 的 debug 结果
-p
: 同时有 -A 条件时,同时有多个 fsck 的检查一起执行
-R
: 同时有 -A 条件时,省略 / 不检查
-V
: 详细显示模式
-a
: 如检查有错则自动修复
-r
: 如果检查有错则由使用者回答是否修复
-y
: 选项指定检测每个文件是自动输入yes,在不确定那些是不正常的时可以执行 fsck -y` 全部检查修复。
语法:
mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 装置文件名 挂载点
|umount [-fn] 装置文件名或挂载点
功能描述: 磁盘挂载与卸除
选项说明:
-f
:强制卸除
-n
:不升级 /etc/mtab 情况下卸除
语法:
dd if=源文件 of=目标文件 bs=字节数 count=个数
功能描述: 磁盘拷贝
选项说明:
if=源文件
:指定的输入文件或设备
of=目标文件
:指定的输出文件 或设备
bs=字节数
:指定一次输入/输出多少个字节
count=个数
:指定输入/输出多少个数据块
语法:
ifconfig [选项] [网卡名] [参数]
功能描述: 查看网卡情况
选项说明:
-a
:显示全部网络网卡信息
-s:显示网卡的概要信息
参数说明:
down
:停止网络设备(ifconfig 网卡名 down
)
up
:启动网络设备(ifconfig 网卡名 up
)
语法:
netstat [选项]
功能描述: 监控进出网络的包和网络接口统计
选项说明:
-t
:显示tcp传输协议的连接状况
-u
:显示updp传输协议的连接状况
-l
:显示处于监听状态的网络连接
-p
:显示应用PID和程序名称
-n
:显示ip地址
-a
:显示所有连接
-o
:显示计时器
-i
:显示网络接口
ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的进行。
MAC是真正的电脑唯一标识,知道MAC地址即可
语法:
arp [选项] [参数]
功能描述: 查询、修改或删除目标设备的MAC地址(Address Resolution Protocol)
选项说明:
-a
:显示 arp 缓冲区的所有条目
-s
:设置指定的主机的 IP 地址与 MAC 地址的静态映射
-d
:删除指定主机的 arp 条目
语法:
ifstat [选项] [ PATTERN [ PATTERN ] ]
功能描述: 统计网络接口活动状态
选项说明:
-a
:忽略历史记录
-d
:对每个统计数据和secs进行抽样
-e
:显示错误信息
-j
:以json形式输出信息
-p
:美化格式输出信息
语法:
tcpdump [选项] [输出数据栏位] [参数]
功能描述:
选项说明:
-a
:将网络和广播地址转换成名称
-c
:在收到指定的包的数目后,tcpdump就会停止
-d
:以易读的形式显示结果数据
-nn
:不把主机的网络地址与协议转换成名字
-w
:输出内容保存到指定的文件里 (tcpdump -w 文件名
)
-i
:指定抓包网卡 (tcpdump -i 网卡
)
参数说明:
and:连接参数 (tcpdump -i 网卡 -nn host ip地址 and port 端口号
)
host:主机名 (tcpdump host ip地址
)
port:源端口号(tcpdump port 源端口号
)
src:源ip (tcpdump src 源ip地址
)
dst:目标ip
net:网段
dst port:目标ip的端口
语法:
cut [选项] 文件名
功能描述: 提取内容
选项说明:
-f
:提取第几列,-f 列号1,列号2
-d
:按照指定分隔符分割列,-d 分隔符
-c
:从第start个到第end个字符切割 (cut -c start-end)
eg:
cut -d ":" -f 1,3 /etc/passwd
cat /etc/passwd| grep /bin/bash | grep -v root | cut -d ":" -f 1
# 如果空格为分隔符的话需要使用awk命令
df -h | cut -d " " -f 5
语法:
printf '输出类型输出格式' 输出内容
功能描述: 格式化命令输出
输出类型:
数据格式 | 描述说明 |
---|---|
%ns | 输出字符串 (n代表输出几个字符) |
%ni | 输出整数 |
%m.nf | 输出浮点数 |
转义字符:
转义字符 | 描述说明 | 转义字符 | 描述说明 |
---|---|---|---|
\a | 输出警告声音 | \b | 输出退格键 |
\f | 清除屏幕 | \n | 换行 |
\r | 回车 | \t | 水平输出退格键 |
\v | 垂直输出退格键 |
printf %s 1 2 3 4 5
printf %s %s %s 1 2 3 4 5
printf '%s %s %s' 1 2 3 4 5
printf '%s %s %s\n' 1 2 3 4 5 6
printf '%s\n' $(ls)
printf '%s' $(cat 文件名)
print和printf的区别:
1、print会在每个输出之后自动加入一个换行符。在linux中没有print,print只能在awk中可以使用。
2、printf是标准格式输出命令,并不会自动加入换行符
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。
语法:
awk '条件1{动作1}条件2{动作2}...' 文件名
条件: 一般使用关系表达式做条件
动作: 格式化输出语句和流程控制语句
选项说明:
-F
:fs指定输入分隔符,fs可以是字符串或正则表达式 (-F fs)
-v
:赋值一个用户定义变量,将外部变量传递给awk(-v var=value)
-f
:从脚本文件中读取awk命令(-f scripfile )
-m
:对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。(-m[fr] val)
基本结构: awk 'BEGIN{ print "语句块" } pattern{ 条件命令 } END{ print "语句块" }' file
awk的工作原理:
1.首先执行BEGIN语句块
2.从文件中读取第一行,然后执行pattern语句或其他动作,再读取第二行以此类推
3.最后执行END语句块
awk内置变量
内置变量 | 描述说明 | 内置变量 | 描述说明 |
---|---|---|---|
$n | 当前记录的第n个字段 | $0 | 这个变量包含执行过程中当前行的文本内容 |
NF | 表示字段数,在执行过程中对应于当前的字段数 | NR | 表示记录数,在执行过程中对应于当前的行号。 |
FS | 字段分隔符(默认是任何空格) | RS | 记录分隔符(默认是一个换行符) |
# 统计文件的行数
wc filename|awk 'BEGIN{print "the total oflines:"}{print $1}' # wc -l filename 或 awk '{print NR}' filename|tail -n 1 若需要统计非空行的则需要先提取非空数据再处理awk '/^$/' filename
# 流程控制语句:
awk 'BEGIN{
test=100;
if(test>90){
print "very good";
}
else if(test>60){
print "good";
}
else{
print "no pass";
}
}'
# 循环语句
awk 'BEGIN{
test=100;
total=0;
while(i<=test){
total+=i;
i++;
}
print total;
}'
# for循环
awk 'BEGIN{
for(k in ENVIRON){
print k"="ENVIRON[k];
}
}'
#do循环
awk 'BEGIN{
total=0;
i=0;
do {total+=i;i++;} while(i<=100)
print total;
}'
数组是awk的灵魂,处理文本中最不能少的就是它的数组处理。因为数组索引(下标)可以是数字和字符串在awk中数组叫做关联数组(associative arrays)。
eg:
awk '{printf $2 "\t" $6 "\n"}' 先读取第一行数据,再执行命令并赋值给位置变量,$0代表整行
df -h |awk '{print $1 "\t" $5 "\t" $6 }'
# 提取已占用80%的进程情况:
df -h | grep sda5 |awk '{print $5}' | cut -d "%" -f 1
awk 'BEGIN{printf"This is a transcript \n"} {printf $2 "\t" $6 "\n"}' 文件名 # 在执行printf $2 "\t" $6 "\n"之前执行{printf"This is a transcript \n"}
cat /etc/passwd|grep "/bin/bash"|awk 'BEGIN {FS=":"} {printf $1 "\t" $3 "\n"}' # FS内置变量指定分隔符 (awk默认识别的分隔符是制表符和分隔符) 也可以这样 cat /etc/passwd|grep "/bin/bash"|awk -F ':' '{printf $1 "\t" $3 "\n"}'
#关系运行算符
cat 文件名 |grep -v Name|awk '$6>=87{printf$2 "\n"}' # 先执行判断$6>=87条件再执行{printf$2 "\n"}
sed是Linux的轻量级流编辑器,sed主要用来将数据进行选取、替换、删除、新增的命令。相比vi命令,它不光可以修改文件也可以修改管道命令传过来的结果。
语法:
sed [选项] '[动作]' 文件名
功能描述:
选项说明:
-n
:只输出经过sed命令处理的行(一般sed命令会把所有数据都输出到屏幕)
-e
:可执行多条sed命令
-i
:修改结果的同时修改文件,一般sed命令只修改结果不修改文件
动作:
动作 | 描述说明 |
---|---|
a\ |
追加,在当前行后添加一行或多行。添加多行时,除最后 一行外,每行末尾需要用“\”代表数据 |
c\ |
行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需用“\”代表数据未完结。 |
i\ |
插入,在当期行前插入一行或多行。插入多行时,除最后 一行外,每行末尾需要用“\”代表数据未完结。 |
d |
删除指定行 |
p |
打印指定行 |
s |
字串替换,用一个字符串替换另外一个字符串。格式为“行范围s/旧字串/新字串/g”(和vim中的替换格式类似)。 |
字符串替换:sed 's/旧字符1/新字符1/g;s/旧字符2/新字符2/g' 文件名
eg:
# 查看文件第二行
sed '2p' 文件名
sed -n '2p' 文件名
# 删除第二行到第四行的数据,但不修改文件本身
sed '2,4d' 文件名
# 在第二行后追加hello
sed '2a hello' 文件名
# 在第二行前插入两行数据
sed '2i hello world' 文件名
# 数据替换
sed '2c No such person' 文件名
注意:只能处理相邻的重复行
语法:
sort [选项] [文件名]
功能描述: 将文本文件内容加以排序
选项说明:
-u
:结果去重
-r
:降序排序输出
-n
:按数值的大小排序
-o
:结果重定向。(sort -o 输出文件
)
语法:
uniq [选项] [文件名]
功能描述: 检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。
选项说明:
-c
|--count
:在每列旁边显示该行重复出现的次数
-d
|--repeated
:仅显示重复出现的行列
-u
|--unique
:仅显示唯一的行列
-s
:忽略比较指定的字符uniq -s <字符位置>
语法:
wc [选项] 文件名
功能说明: 统计文件或者管道传输的内容字数
选项说明:
-c
:统计字节数。
-l
:统计行数。
-m
:统计字符数。这个标志不能与 -c 标志一起使用。
-w
:统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
-L
:打印最长行的长度。
-help
:显示帮助信息
-version
:显示版本信息
语法:
crontab [选项]
功能描述:
选项说明:
-e
:编辑crontab定时任务
-l
:查询crontab任务
-r
:删除当前用户所有的crontab任务
语法:
date [选项]
功能描述: 显示或设定系统的日期与时间
选项:
-R
:(–rfc)以RFC 5322格式显示日期和时间
-u
:(–utc,–universal)以世界标准时间(UTC)格式显示日期
-s
:(–set=String)修改系统时间
-d
:(–date=String)显示字符串指定时间,而不是当前时间
+format
:控制输出格式
语法:
hwclock [function] [option]
功能描述: 显示与设定硬件时钟
选项说明:
-r
:(–show) 显示当前硬件的始终,默认选项。
-s
:(–hctosys) 根据硬件时钟设置系统时钟。
-w
:(–systohc) 根据系统时钟设置硬件时钟,并更新/etc/adjtime中的时间戳。
语法:
cal [选项] [[day] month] yuear]
功能描述: 显示日历
选项说明:
-1
|--one
:只显示当前月份
-3
|--three
:显示上个月、当月和下个月
-s
|--sunday
:周日作为一周第一天
-m
|--monday
:周一作为一周第一天
-y
|--year
:输出整年
练习题:
# 1、查看date的man帮助
# 2、获取5周后的日期
# 3、获取下个月的日期
# 4、获取下周日的日期
# 5、获取美国洛杉矶的当前时间
命令:
rpm [-ivh] 包全名
选项:
-i
:安装 (install)
-v
:显示详细信息(verbose)
-h
:显示进度(hash)
--nodeps
:不检查依赖性
-U
:升级(upgrade)
-e
:卸载(erase)
-q
:查询(query)
-i
:查询软件信息(information)
-p
:查询未安装包信息(package)
-l
:列表(list)
-f
:查询系统文件属于哪个RPM包
-R
:查询软件包的依赖性(requires)
-V
:校验指定RPM包中的文件(verify)
实例:
RPM安装:rpm [-ivh] 包全名
RPM包升级:rpm [-Uvh] 包名
查询是否安装:rpm [-q] 包名
查询软件包详细信息:rpm [-qi] 包名
查询包中文件安装位置:rpm [-ql] 包名
查询系统文件属于哪个RPM包:rpm [-qf] 系统文件名
查询软件包的依赖性:rpm [-qR] 系统文件名
RPM包检验:rpm [-V] 已安装的报名
查询所有已经安装的RPM包:rpm -qa
语法:
yum [选项] [参数]
功能描述:
选项说明:
-h
: 显示帮助信息
-y
: 对所有的提问都回答yes
-c
:指定配置文件| -q | 安静模式
-v
:详细模式
-d
:设置调试等级(0-10)
-e
:设置错误等级(0-10)
-R
:设置yum处理一个命令的最大等待时间
-C
:完全从缓存中运行,而不去下载或者更新任何头文件。
参数说明:
install
:安装rpm软件包
update
:更新rpm软件包
check-update
: 检查是否有可用的更新rpm软件包
remove
:删除指定的rpm软件包
list
:显示软件包的信息
search
:检查软件包的信息
info
:显示指定的rpm软件包的描述信息和概要信息
clean
:清理yum过期的缓存
shell
:进入yum的shell提示符
resolvedep
:显示rpm软件包的依赖关系
localinstall
:安装本地的rpm软件包
localupdate
: 显示本地rpm软件包进行更新
deplist
:显示rpm软件包的所有依赖关系
实例:
查询所有可用软件包列表:yum list
搜索服务器上所有和关键字相关的包:yum search 关键字
安装:yum -y install 包名
更新升级:yum -y update 包名
卸载:yum -y remove 包名
列出所有可用的软件组列表:yum grouplist
安装指定软件组,组名可以由grouplist查询出来:yum groupinstall 软件组名
卸载指定软件组:yum groupremove 软件组名
语法:
tar [主选项] [辅助选项] [参数]
功能描述: 为Linux的文件和目录创建归档
选项说明:
主选项:每条命令只能由一个主选项
-c
(create):新建一个压缩文档
-x
(extract) :解压压缩文件
-t
(list) :查看压缩文档中的所有内容
-r
(append):向压缩文件中追加文件
-u
(update):更新原压缩文件中的文件
辅助选项:
-z
:支持gzip解压文件
-j
:支持bzip2解压文件
-Z
:支持compress解压文件
-v
:显示操作过程
-f
:指定压缩文件
-t
:显示压缩文件的内容
-d
:记录文件的差别
-W
:确认压缩文件的正确性
-l
:文件系统边界设置
-k
:保留原文件不覆盖
-m
:保留文件不被覆盖
语法:
gzip [选项] [参数]
功能描述: 为Linux的文件和目录创建归档
选项说明:
-a
:使用ASCII模式
-d
:解压文件
-l
:列出压缩文件的详细信息
-r
:递归处理
-v
:显示指令执行过程
-num
:使用指定数字num调整压缩的速度
dpkg ---- deb
yum -----rpm
apt-get — deb
tar ----- bz2
unzip ------ zip
Shell是一个用c语言编写的脚本解释器,适合处理纯文本类型数据,shell脚本属于一种弱类型语言,无需声明变量类型,直接定义使用。
shelly有分
shebang指的是出现在文本文件的第一行前两个字符#!
,在unix系统中,程序会分析shebang后面内容,判断使用哪个解析器解析脚本。
#!/bin/sh
开头的文件,程序在执行的时候会指定bash解析器执行
#!/usr/bin/python开头的文件,代表指定python解析器执行
如果脚本未指定shebang时,系统默认使用当前shell去解析脚本
语法:
bash 脚本文件名
/sh 脚本文件名
功能描述: 指定bash解析器执行,文件没有执行权限或没有shebang都可以使用该命令
执行要求: 脚本文件无需执行权限可直接运行
语法:
source 脚本文件名
/. 脚本文件名
功能描述: 执行脚本,.代表source
执行要求: 脚本文件无需执行权限可直接运行
语法:
./脚本文件名
功能描述: 执行脚本
执行要求: 脚本文件必须有可执行的权限
语法:
echo [选项] 输出内容
功能描述: 输出字符串
选项说明:
-e
:支持字符转义
语法: read [选项] [变量名]
功能描述: 键盘键入的值赋给指定变量
选项说明:
-p
: 在等待read,(read -p ”提示信息“ 变量名
)
-t
:指定等待时间,超过时间后跳过输入操作,-t “秒数”
-n
:指定接受的字符数,-n 字符数
-s
:隐藏输入的数据
语法: printf format-string [arguments...]
功能描述: 输出字符
参数说明:
format-string:格式控制字符串
arguments: 参数列表。
注意:搭配管道符无效,若要处理别的命令输出的结果需这样使用 printf '%s' $(命令)
eg:printf “%-10s %-8s %-4.2f\n” 杨过 男 48.6543
命令 | 描述说明 |
---|---|
command > file | 将输出重定向到 file。 |
command < file | 将输入重定向到 file。 |
command >> file | 将输出以追加的方式重定向到 file。 |
command 2> file | 将错误输出重定向到 file。 |
command > file 2>&1 | 正确和错误的输出都覆盖保存到同一个文件中 |
command > file 2>&1 | 正确和错误的输出都追加保存到同一个文件中 |
command &> file | 正确输出和错误输出都覆盖保存到同一个文件中 |
command &>> file | 正确输出和错误输出都追加保存到同一个文件中 |
command >>file1 2>>file2 | 正确输出追加重定向到文件1,错误输出追加重定向到文件2 |
n > file | 将文件描述符为 n 的文件重定向到 file。 |
n >> file | 将文件描述符为 n 的文件以追加的方式重定向到 file。 |
n >& m | 将输出文件 m 和 n 合并。 |
垃圾箱:/dev/null
1、字符串
字符串可以用单引号,也可以用双引号,也可以不用引号。
2、数组
语法:
Variable_name=value
|set Variable_name
功能描述: 定义变量,如果未指定值,则该变量值将被设为NULL
作用范围: 当前的shell有效
变量名可以字母和下划线开头,由字母、数字和下划线组成。在bash中,变量默认类型都是字符串类型,如需进行数值运算需知名
语法: echo $Variable_name
语法:
export 变量名=value
功能描述: 设置环境变量,export是声明全局变量
作用范围:
当前用户:echo $UDER
当前路径:echo $PWD
当前用户UID:echo $UID
命令搜索路径:echo $PATH
语言和字符集:echo $LANG
用户的宿主目录:echo $HOME
产生 0—32767的随机数:$RANDOM
# 产生0-100的随机数
$RANDOM%100
#产生2-8的随机数
$RANDOM%7+2
#产生0-99的随机数
$RANDOM%99
#产生6-48的随机数
$RANDOM%43+6
PS1:定义系统提示符的变量
提示符变量 | 描述说明 | 提示符变量 | 描述说明 |
---|---|---|---|
\d | 显示日期,星期 月 日 | \h | 显示简写主机名 |
\t | 显示24小时制时间,HH:MM:SS | \T | 显示12小时制时间,HH:MM:SS |
\A | 显示24小时制时间,HH:MM | \u | 显示当前用户名 |
\w | 显示当前所在目录的完整名称 | \W | 显示当前所在目录的最后一个目录 |
# | 执行的第几个命令 | $ | 提示符,如果是root用户提示#,如果是普通用户提示$ |
例子:
PS1='[\u@\t\w]$'
PS1='[\u@\@\h#\W\]$'
PS1='[\u@\h\W]$'
环境变量配置文件:
source 配置文件 / . 配置文件 强制生效配置文件
/etc/profile :在etc目录中对所有用户都生效
/etc/profile.d/*.sh :
/etc/bashrc :
~/.bash_profile :
~/.bashrc :
开机前会直接读取/etc/profile的文件读取所有的系统默认环境变量,然后调用/etc/profile.d下所有的.sh文件同时启动/etc/bashrc文件在读取到的默认环境变量中加入:$HOME/bin目录,
传参进去,使用位置变量能接收传参的值
位置变量符 | 描述说明 |
---|---|
$n | n为数字,$0代表命令本身,$1- 9 代 表 第 一 个 到 第 九 个 参 数 , 10 以 上 的 参 数 需 要 使 用 大 括 号 来 表 示 9代表第一个到第九个参数,10以上的参数需要使用大括号来表示 9代表第一个到第九个参数,10以上的参数需要使用大括号来表示{11} |
$* | 这个变量代表命令行中所有的参数,但会将所有参数当作一个整体 |
$@ | 这个变量代表命令行中所有的参数,会把每个传参都区分 |
$# | 统计传参的个数 |
#!/bin/bash
sum=$(($1+$2))
echo $sum
#!/bin/bash
for i in "$*"
do
echo "the parameters is:$i"
done
for y in "$@"
do
echo "the parameters$x is:$y"
x=$(($x+1))
done
返回元素个数:$#
返回所有元素:$*
返回上一条命令的状态:$?
如果为0代表上一个命令执行正确
当前执行的脚本或命令的名称:$0
把各个参数加上双引号分隔成n份的参数列表:$@
当前进程的进程号:$$
后台运行最后一个进程的进程号:$!
eg:
echo "the current process is $$"
find /root -name hello.sh &
echo "the last one daemon process is $!"
变量名=“value” 或 ‘value’
变量叠加
phone=130
phone="$phone"4208 / ${phone}4208 # 取变量值时需要使用${}的形式括起来
set 查看系统当前所有的变量
unset 变量名
参数处理:
参数 | 描述说明 | 参数 | 描述说明 |
---|---|---|---|
$# |
传递到脚本的参数个数 | $* |
以一个单字符串显示所有向脚本传递的参数 |
$$ |
脚本运行的当前进程ID号 | $! |
后台运行的最后一个进程的ID号 |
$@ |
与$*相同,但是使用时加引号,并在引号中返回每个参数。 | $- |
显示Shell使用的当前选项,与set命令功能相同。 |
$? |
显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 | $n |
获取参数的值,当n>=10时,需要使用${n}来获取参数。 |
语法:
declare [+/-][选项] 变量名
选项: 声明变量类型
-
:给变量设定类型属性
+
:取消变量的类型属性
-i
:将变量声明为整数型
-x
:将变量声明为环境变量
-p
:显示指定变量的被声明的类型
数值运算:
a=1
b=10
# 方法一:
declare -i c=$a+$b
# 方法二:
c=$(expr $a + $b) # +号两侧必须有空格
c=$(let $a + $b) # +号两侧必须有空格
# 方法三: $((运算式)) / $[运算式]
c=$(($a+$b))
c=$[$a+$b]
运算符:
+
、-
、*
、/
、%
、++
、--
运算命令:let 运算表达式
运算表达式:expr 表达式
/$[表达式]
是一款表达式计算工具,使用它能完成表达式的求值操作。
a=5
num1=`expr $a+10`
num2=$(($a+10))
num3=$[$a+10]
((num4=$a+10))
let num5=$a+10
运算符 | 描述说明 |
---|---|
number1 -eq number2 |
检测两个数是否相等,相等返回 true。 |
number1 -ne number2 |
检测两个数是否不相等,不相等返回 true。 |
number1 -gt number2 |
检测左边的数是否大于右边的,如果是,则返回 true。 |
number1 -lt number2 |
检测左边的数是否小于右边的,如果是,则返回 true。 |
number1 -ge number2 |
检测左边的数是否大于等于右边的,如果是,则返回 true。 |
number1 -le number2 |
检测左边的数是否小于等于右边的,如果是,则返回 true。 |
运算符 | 描述说明 |
---|---|
! |
非运算,表达式为 true 则返回 false,否则返回 true。 |
-o |
或运算,有一个表达式为 true 则返回 true。 |
-a |
与运算,两个表达式都为 true 才返回 true。 |
&&: 逻辑的 AND
| | :逻辑的 OR
运算符 | 描述说明 |
---|---|
string1 == string1 |
检测两个字符串是否相等,相等返回 true。 |
string1 != string1 |
检测两个字符串是否不相等,不相等返回 true。 |
-z string |
检测字符串长度是否为0,为0返回 true。 |
-n string |
检测字符串长度是否不为 0,不为 0 返回 true。 |
$ |
检测字符串是否为空,不为空返回 true。 |
1、文件判断运算符
运算符 | 描述说明 | 运算符 | 描述说明 |
---|---|---|---|
-b file | 检测文件是否是块设备文件,如果是,则返回 true。 | -c file | 检测文件是否是字符设备文件,如果是,则返回 true。 |
-d file | 检测文件是否是目录,如果是,则返回 true。 | -f file | 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 |
-e file | 检测文件(包括目录)是否存在,如果是,则返回 true。 | -g file | 检测文件是否设置了 SGID 位,如果是,则返回 true。 |
-k file | 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 | -p file | 检测文件是否是有名管道,如果是,则返回 true。 |
-u file | 检测文件是否设置了 SUID 位,如果是,则返回 true。 | -r file | 检测文件是否可读,如果是,则返回 true。 |
-w file | 检测文件是否可写,如果是,则返回 true。 | -x file | 检测文件是否可执行,如果是,则返回 true。 |
-s file | 检测文件是否为空(文件大小是否大于0),不为空返回 true。 | -S file | 判断某文件是否 socket。 |
-L file | 检测文件是否存在并且是一个符号链接。 |
2、文件权限判断运算符
运算符 | 描述说明 | 运算符 | 描述说明 |
---|---|---|---|
-r file | 检测文件是否存在同时是否有读权限(有读权限为真) | -w file | 检测文件是否存在同时是否有写权限(有写权限为真) |
-x file | 检测文件是否存在同时是否有执行权限(有执行权限为真) | -u file | 检测文件是否存在同时是否有SUID权限(有SUID权限为真) |
-g file | 检测文件是否存在同时是否有SGID权限(有SGID权限为真) | -k file | 检测文件是否存在同时是否有SBit权限(有SBit权限为真) |
3、文件比较运算符
运算符 | 描述说明 | 运算符 | 描述说明 |
---|---|---|---|
file1 -nt file2 | 判断文件1修改时间是否比文件2的新(新则返回真 | file1 -ot file2 | 判断文件1修改时间是否比文件2的旧(旧则返回真 |
file1 -ef file2 | 判断两个文件是否为同一个文件 |
运算符 | 描述说明 |
---|---|
判断语句1 -a 判断语句2 |
逻辑与,判断1和判断2都成立,最终结果才为真 |
判断语句1 -o 判断语句2 |
逻辑或,判断1和判断2有一个成立,最终结果才为真 |
! 判断语句 |
逻辑非,使原始的判断式取反 |
变量置换方式 | 变量y没有设置 | 变量y为空值 | 变量y设置值 |
---|---|---|---|
x=${y-新值} |
x=新值 | x为空 | x=$y |
x=${y:-新值} |
x=新值 | x=新值 | x=$y |
x=${y+新值} |
x为空 | x=新值 | X=新值 |
x=${y:+新值} |
x为空 | x为空 | x=新值 |
x=${y=新值} |
x=新值 y=新值 | x为空 y值不变 | x=$y y值不变 |
x=${y:=新值} |
x=新值 y=新值 | x=新值 y=新值 | x=$y y值不变 |
x=${y?新值} |
新值输出到标准错误输出(屏幕) | x为空 | x=$y |
x=${y:?新值} |
新值输出到标准错误输出 | 新值输出到标准错误输出 | x=$y |
语法:
history [选项] [历史命令保存文件]
功能描述: 查看历史命令
选项说明:
-c
:清空历史命令
-w
:把缓存中的历史命令写入历史命令保存文件中 (默认保存在~/.bash_history)
操作 | 描述说明 |
---|---|
上、下箭头 | 调用当前终端使用过的命令 |
!n |
n代表历史命令的行数,执行第n条历史命令 |
!! |
执行上一条命令 |
!字符串 |
执行最后一条以该字符串开头的命令 |
语法:
alias
功能描述: 查看系统里所有的命令别名
语法:
alias 别名='原命令'
功能描述: 给原命令设置命令别名
注意: 如果要让别名永久生效需将命令写入到/root/.bashrc 文件中
语法:
unalias 别名
功能描述: 删除别名
bash常用快捷键
command1 ;command2
顺序执行,命令之间没有任何逻辑关系
command1 &&command2
命令1正确执行则命令2才会执行
command1 ||command2
命令1执行不正确则命令2才会执行;命令1正确执行则命令2不会执行
eg:date;sudo dd if=/dev/zero of=/testfile bs=1k count=100000;date
统计复制磁盘时需要多长时间
ls && echo yes || echo no
ls || echo yes && echo no
语法:
command1 | command2
功能描述: 命令1输出的内容作为命令2的操作对象
常用命令组合:
ls -a /etc/ |more
netstat -au|grep “ESTAVLISHED”
通配符 | 描述说明 |
---|---|
? |
匹配一个任意字符 正则:匹配0或1个字符 |
* |
匹配0个或任意多个任意字符 正则:匹配0个或多个字符 |
[-] |
匹配中括号中任意一个字符,-代表一个范围 |
[^] |
逻辑非,表示匹配不是中括号内的一个字符 |
符号 | 描述说明 |
---|---|
'...' |
单引号,在单引号中所有特殊符号都没有特殊含义,“$”,“`” 都没有特殊含义 |
"..." |
双引号,在单引号中"$“(调用变量的值),”`“(引用命令)和”"(转移符)是有其特殊含义,其他特殊符号都没有特殊含义 |
反括号 | 反引号,括起来的内容是系统命令。 |
$() |
和反引号作用一样,用来引用系统命令 |
# |
注释符号 |
$ |
用于调用变量的值,如需调用变量age的值时,需要使用$age命令才能得到变量的值 |
\ |
转义符 |
第一种结构:
for var in item1 item2 .. itemN
do
command_1
command_2
...
command_N
done
#写成一行: for var in item1 item2 .. itemN; do command1; command2… done;
# for i in {0..9}
# for i in $(seq 10)
# for i in $(seq 5 -1 1)
# for i in $(cat /root/users.txt)
# for i in `seq ${#u_uid[@] }`
# for r in 192.168.1.{1..254}
第二种结构:
for ((i=1;i<=5;i++));
do
command_1
command_2
;
done
while condition
do
command
done
until condition
do
command
done
1、break
语法:
break
功能描述: 跳出所有循环(终止执行后面的所有循环)
2、continue
语法:
continue
功能描述: 仅仅跳出当前循环
3、exit
语法:
exit [状态值]
功能描述: 退出目前的shell
注意: 状态值不作为退出层数,只作为退出函数后$?
的值
语法: test 判断语句
/ [ 判断语句 ]
功能描述: 检查某个条件是否成立
搭配
if condition_1; then
command_1
[elif condition_2; then
command_2
.. ]
else
command_N
fi
case $variable_name in
模式1 )
command_1
command_2
;;
模式2 )
command_1
command_2
;;
* )
command_1
;;
esac
例子:
#!/bin/bash
read -p"" a
if[${#a}-ne 1];then
[ function ] funname [()]
{
action;
[return int;]
}
1、监控 Linux 系统的内存
在这里插入代码片
#备份mysql数据库
#判断是否启动阿帕奇
# 使用ps查看进程可能会出现进程还在但无法判断服务正常
# 使用netstat -tlun 判断端口也无法去顶服务是否可以连接,其他的网页服务也是占用80端口
# 使用nmap命令远程扫描服务器
# nmap -sT 192.168.1.156