一、介绍
shell 是属于弱类型语言,指的是在定义变量时不需要指定变量的类型,就如python也是弱类型语言。一般以:
:.sh结尾的文件
:文件第一行固定为:#!/bin/bash,表示指定以shell进行编程。
:#表示注释
二、shell语法
1、定义变量:变量名=变量值
变量名组成规范:不能以数字,以字母、数字、下划线组成。
释放变量空间:unset 变量名,如unset name
如:name=wzx,输出:echo $name
如:name1="today is a good day",定义变量中带有空格的变量,双引号、单引号均可。
注:单引号、双引号、反单引号的区别:
m="zhangyuqi$name",此时使用的是变量中对应的值
m=’zhangyuqi $name‘,此时输出只是原样输出字符串
m="zhangyuqi \$name",此时输出只是原样输出字符串,与单引号的效果相同。
h=·pwd·,echon h将会输出h对应的shell命令输出当前目录情况。
2、执行shell文件
:当没有执行权限时:sh shell脚本名
:加入执行权限:chmod +x shell脚本名,再执行./shell脚本名
:可以统计有多少个文件:ls -l |wc -l
3、read
read a b:利用键盘输入多个变量,多余的变量将会都给最后一个变量,变量之间用空格隔开
read -p "提示信息" 变量名
4、参数传递:$1,表示接受的第一个参数,$0表示接受执行的文件名,$@,显示全部的参数, $#,统计参数个数
:sh wzx.sh /root
5、重定向:把执行命令的内容输入到文件当中
正确的命令:ls 1>a.txt,将会把正确的命令内容输入文件中这时候时覆盖之前的内容,ls 1>>a.txt,追加到已有的文件中
错误的命令:ls 2>a.txt,将会把错误的命令内容输入文件中这时候时覆盖之前的内容,ls 2>>a.txt,追加到已有的文件中
6、分支结构if else:判断任意目录是否为空
7、逻辑运算符:且:-a 或:-o 非:!
8、比较运算符:相等:-eq 不等:-ne 大于:-gt 小于:-lt 大于等于:-ge 小于等于:-le
9、测试文件的状态:test 参数 变量名
test -e:表示文件存在
test -f:表示文件存在且为文件类型
test -r:表示文件可读
test -w:表示文件可写
test -x:表示文件可执行
10、case分支:
11、for循环:seq start size max表示生成一个序列开始值,步长,最大值
12、while循环:
13、函数:
14、函数返回值的调用:$?
默认正确的返回值为0,错误的返回值为1
15、
获取文件的前5行:head -5 aa.conf
获取文件的前5行后剪取文件的前5个字节:head -5 aa.conf |cut -b 1-4
注意:1个空格是1个字节,1个字母也是1个字节,1个汉字是3个字节。1个空格是1个字符,1个字母也是1个字符,1个汉字是3个字符
获取文件的前5行后剪取文件的前5个字符:head -5 aa.conf |cut -c 1-4
获取文件的前5行后剪取文件的第一个域,-d按域剪取,-f取第几个域:head -5 aa.conf |cut -d ":" -f 1
16、
shell查找某个文件是否包含关键字:grep "root" /etc/group
剪取第一个域:grep "root" /etc/group|cut -d ":" -f 1
17、sed向文件中插入内容
插入文件:sed -i 4a\newLine wzx.txt
三、shell常用命令
1、查看当前文件内容:ll显示文件的详细信息,ls只显示相关的文件名
参数 -a:ll -a显示包括隐藏文件在内的所有文件
2、进入指定文件夹:cd
3、显示当前工作目录:pwd
4、创建目录:mkdir
参数 -p:递归创建文件夹 :mkdir -p 1/2/3
5、删除目录:rmkdir
参数 -p:递归删除文件夹,如果某个文件夹下有内容则不能使用此命令 :rmkdir -p 1/2/3r
6、复制文件:cp
复制一个文件到另一目录:cp 1.txt ../test2
复制一个文件到本目录并改名:cp 1.txt 2.txt
复制一个文件夹a并改名为b:cp -r a b
7、移动:mv
将一个文件移动到另一个目录:mv 1.txt ../test1
将一个文件在本目录改名:mv 1.txt 2.txt
将一个文件一定到另一个目录并改名:mv 1.txt ../test1/2.txt
8、删除文件:rm
参数 -r 可删除目录,-f表示强制删除:rm -rf aa.txt
9、du、df
du命令可以显示目前的目录所占用的磁盘空间,df命令可以显示目前磁盘剩余空间。
du -hs 指定目录 查看指定目录的总大小
10、查看文件内容:cat
查看操作系统版本:cat /etc/issue
查看操作系统内核:cat /proc/version或者uname -a
以压缩空行的方式显示文件:cat -s aa.txt
以显示行号:cat -n aa.txt
11、head、tail
head显示文件的头n行,tail显示文件的尾n行,缺省情况n都为10行。可以通过-n方式指定行数
12、wc
该命令用于统计指定文件中的字节数、字数、行数。-l 统计行数,-w 统计字数,-c 统计字节数
13、grep
通过管道过滤ls -l输出的内容,只显示以a开头的行: ls -l | grep '^a'
显示所有以d开头的文件中包含test的行: grep 'test' d*
显示在aa,bb,cc文件中匹配test的行:grep 'test' aa bb cc
14、scp
将本服务文件拷贝到另一台服务器:scp -r -P 22 glibc-2.18.tar.gz root@192.168.128.171:/home/
15、tar
打包:tar -cvf /tmp/etc.tar /etc
打包并压缩:tar -zcvf /tmp/etc.tar.gz /etc
解压tar.xz文件:tar -xvJf aa.tar.xz
解压tar.gz文件:tar -zxvf vv1579169748.tar.gz
打包文件:tar -cvf python学习.tar 01.py 02.py 03.py(只负责打包不压缩文件)
解包文件:tar -xvf python学习.tar
压缩文件1:tar -zcvf python学习.tar.gz 01.py 02.py 03.py (*.py)
解压文件1:tar -zxvf python学习.tar.gz
解压文件1:tar -zxvf python学习.tar.gz -C demo(直接指定解压后文件路径)
压缩文件2:tar -jcvf python学习.tar.bz2 01.py 02.py 03.py (*.py)
解压文件2:tar -jxvf python学习.tar.bz2
解压文件2:tar -jxvf python学习.tar.bz2 -C demo(直接指定解压后文件路径)
16、find
从根目录下查找某个文件:find / -name aa.txt
17、netstat
查看网络状态:netstat -tnulp |grep nginx
查看端口号:netstat -anp |grep 9090
18、创建连接
创建软连接: mv 01.py demo/b/c ln -s /home/python/Desktop/demo/b/c 01_juedui(绝对路径文件移动后不影响)
创建硬连接: ln /home/python/Desktop/demo/b/c 01_hard(源文件删除不影响)
四、
1、top:监控每个进程的资源占用情况
说明:
09:52:11 — 当前系统时间
790 days, 12:02 — 系统已经运行了790天12小时02分钟(在这期间没有重启过)
3 users — 当前有3个用户登录系统
load average:0.00, 0.01, 0.05 — load average后面的三个数分别是5分钟、10分钟、15分钟的负载情况。 load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。
1.0% us — 用户空间占用CPU的百分比。
0.7% sy — 内核空间占用CPU的百分比。
0.0% ni — 改变过优先级的进程占用CPU的百分比
98.3% id — 空闲CPU百分比
0.0% wa — IO等待占用CPU的百分比
0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比
0.0% si — 软中断(Software Interrupts)占用CPU的百分比
st:这个虚拟机被hypervisor偷去的CPU时间
第一行时物理内存,第二行是虚拟内存。
495964k used — 使用中的内存总量(495M)
13284k free — 空闲内存总量(13M)
25364k buffers — 缓存的内存量 (25M)
swap交换分区
492536k total — 交换区总量(492M)
11856k used — 使用的交换区总量(11M)
480680k free — 空闲交换区总量(480M)
202224k cached — 缓冲的交换区总量(202M)
PID:进程ID,进程的唯一标识符
USER:进程所有者的实际用户名。
PR:进程的调度优先级。这个字段的一些值是'rt'。这意味这这些进程运行在实时态。
NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR:SHR是进程使用的共享内存。共享内存大小,单位kb
S:这个是进程的状态。它有以下不同的值:
- D - 不可中断的睡眠态。
- R – 运行态
- S – 睡眠态
- T – 被跟踪或已停止
- Z – 僵尸态
%CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。
%MEM:进程使用的可用物理内存百分比。
TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)
2、sysstat:性能系统各种资源占用情况工具
下载:yun list sysstat
安装:yun install sysstat(配置文件目录:etc/cron.d/sysstat,数据存放目录:/var/log/sa/)
四、shell
1、获取指定应用的进程号:pgrep java
2、获取指定进程号相关的环境变量,以格式化方式输出:cat /proc/32144/environ | tr '\0' '\n'
3、设置环境变量:export 变量名
例如:HTTP_PROXY=129.12.13.4:213
export HTTP_PROXY
export PATH="$PATH:/home/user/bin"
4、查看服务器内存总量:grep MemTotal /proc/meminfo,=132097828/1024/1024=126G
free 同样提供给我们 b (B), -k (KB), -m (MB), -g (GB) and –tera (TB)这些单位。要显示我们想要的单位,只要选择一个并在 free 后面跟上。下面一个是以GB 为单位的输出样例。:free -g
5、显示系统硬盘大小:fdisk -l |grep Disk,为4600G
6、linux服务器的CPU信息:cat /proc/cpuinfo |grep "model name" && cat /proc/cpuinfo |grep "physical id",为:1cpu8核 Intel(R) Xeon(R) E5-2640 v2 @ 2.00GHz
其实应该通过Physical Processor ID来区分单核和双核。而Physical Processor ID可以从cpuinfo或者dmesg中找到. flags 如果有 ht 说明支持超线程技术 判断物理CPU的个数可以查看physical id 的值,相同则为同一个物理CPU
可以看到上面,这台机器有1核的CPU,ID是0.
7、 查看CPU是核数:cat /proc/cpuinfo |grep "cores"|uniq:为8核
查看CPU个数:cat /proc/cpuinfo |grep "physical id" | uniq |wc -l
查看CPU型号:cat /proc/cpuinfo |grep "model name" | uniq
8、查看逻辑CPU与CPU核数信息:cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c,看到有16个逻辑CPU, 也知道了CPU型号
9、查看物理CPU的个数:cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc:1个物理CPU(常用物理CPU情况)
10、查看逻辑CPU的个数:cat /proc/cpuinfo |grep "processor"|wc :看到有16个逻辑CPU
11、查看操作系统版本:head -n 1 /etc/issue:为64位CentOS6.5
uname -a # 查看内核/操作系统/CPU信息的linux系统信息命令
12、查看操作系统版本:cat /etc/redhat-release
13、CPU情况:1CPU 8核 Intel(R) Xeon(R) CPU E5-2640 v2 @ 2.00GHz
CPU个数:cat /proc/cpuinfo |grep "physical id" | uniq |wc -l
CPU核数:cat /proc/cpuinfo |grep "cores"|uniq
型号:Intel(R) Xeon(R) CPU E5-2640 v2 @ 2.00GHz
14、硬盘大小:df -hl:
15、内存大小:grep MemTotal /proc/meminfo
16、位数:uname -a