zoukankan      html  css  js  c++  java
  • shell 基本语法介绍

    一、介绍

    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 ewLine 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的时候就表明系统在超负荷运转了。

    Tasks — 任务(进程),系统现在共有210个进程,其中处于运行中的有2个,208个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。

     

    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时间

     第一行时物理内存,第二行是虚拟内存。

    509248k total — 物理内存总量(509M)
    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 '' ' '

    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",为:1cpu8Intel(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:为64CentOS6.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

     

  • 相关阅读:
    【下载源码】在线生成网页缩略图.超越Snap.com:WebSnap Beta 1.1 发布。感谢博客园的“萧寒”重写的底层。开源。
    有时候看.neter的表现,真的很奇怪。那种近在眼前而不见的茫然,真的让你为之着急——说说XML的无效字符
    初来乍到,发布一个杀手应用:snap.com的web预览图功能,我给它取名叫“WebSnap”
    湖南长沙火车站,我为你感到羞愧。
    也谈UpdatePanel与UrlRewrite一起work时出现Form Action属性的问题
    JAVA的内存管理
    Handler+looper+Message的分享教程。 转
    更改TabHost标签的背景
    多线程任务的优化1:探讨AsyncTask的缺陷【转】
    聊天类android应用的一些技术细节
  • 原文地址:https://www.cnblogs.com/wzx1blog/p/12941268.html
Copyright © 2011-2022 走看看