Shell 编程

本文介绍了Shell编程的基础知识,包括Shell的概述、脚本执行方式、Bash的常用功能如输入输出重定向、历史命令、预定义变量等。此外,还详细讲解了环境变量配置文件的作用和内容,如/etc/profile、~/.bash_profile等,并探讨了服务管理和进程管理的相关命令。文章最后提到了Shell的快捷键和定时任务设置,帮助读者更好地理解和掌握Shell编程。
摘要由CSDN通过智能技术生成

Shell 编程入门

一.Shell概述

1.shell是什么

Shell是一个命令行解释器,给用户提供了一个可以向Linux内核发送请求来运行程序的界面系统级程序,用户可以用shell来启动挂起停止应用程序

应用程序==》shell命令解释器==》内核==》硬件

功能强大的编程语言 易编写 易调试 灵活性较强 shell 是解释执行的脚本语言 在shell中可以直接调用Linux 系统命令

2.shell 分类

1.Bourne Shell 1979 年用于 Unix 主文件sh ksh Bash(linux) psh zsh

2.C shell 主要是BSD 版的Unix 系统中使用 语法和C 相识而得名 csh tcsh

注意:语法彼此不兼容

3.Bash Bash 和sh 兼容 现在使用的Linux就是使用Bash作为用户的基本Shell

二.Shell 脚本的执行方式

1.echo

echo [选项] [输出内容] 输出内容有空格 字符串用“” 包起来所有内容 有 ! 用 ‘’包起来所有内容

选项 -e 支持反斜线控制的字符转换

支持颜色输出

2.脚本执行

chmod 755 xxx.sh

./xxx.sh

bash xxx.sh

注意:

[root@localhost shellDemo]# ./hello.sh 
/bin/bash: 标记是bash shell 脚本  必须要写: 没有那个文件或目录
[root@localhost shellDemo]# sh hello.sh 
sff is a good man in the world     ###可以看出问题  原因是脚本是在windows环境编辑 但是windows和linux 的换行符不一致 出现问题
##win  换行 ^\M    linux是\M
[root@localhost shellDemo]# cat -A hello.sh 
#!/bin/bash   M-fM- M-^GM-hM-.M-0M-fM-^XM-/bash shell M-hM-^DM-^ZM-fM-^\M-,  M-eM-?M-^EM-iM-!M-;M-hM-&M-^AM-eM-^FM-^Y$
#M-fM-3M-(M-iM-^GM-^J M-eM-^OM-/M-iM-^@M-^I M-dM-=M-^\M-hM-^@M-^E M-gM-^IM-^HM-fM-^\M-, M-gM--M-^IM-dM-?M-!M-fM-^AM-/$
#M-dM-=M-^\M-hM-^@M-^EM-oM-<M-^Zsff$
echo "sff is a good man in the world " $
[root@localhost shellDemo]# dos2

2.history

history [选项]

-c 清空历史命令

-w 缓存里面的命令写入文件~./bash_history (原来的写入时间是用户退出登录是写入文件 )

默认保存 1000 在/etc/profile中history 中 有histsize 修改大小

三.Bash 的基本功能

1.输入输出

设备设备文件名文件描述符类型
键盘/dev/stdin0标准输入
显示器/dev/stdout1标准输出
显示器/dev/stderr2标准错误输出

2.输出重定向

类型符号作用
标准输出重定向命令>文件覆盖方式输出到文件或者设备
命令>>文件追加方式输出到文件或者设备
标准错误输出重定向错误命令2>文件覆盖方式
错误命令2>>文件追加方式
[sff@localhost ~]$ date >log.txt 
[sff@localhost ~]$ cat log.txt 
2021年 08月 25日 星期三 20:24:45 CST
[sff@localhost ~]$ lst 2>> abc
[sff@localhost ~]$ cat abc 
-bash: lst: 未找到命令

类型符号作用
正确的和错误的一起保存命令 > 文件 2>&1覆盖方式 正确和错误的同时保存到一个文件
命令>>文件 2>&1追加方式 正确和错误的同时保存到一个文件
命令&>文件覆盖方式 正确和错误的同时保存到一个文件
命令&>>文件追加方式 正确和错误的同时保存到一个文件
命令>>文件1 2>> 文件2正确-》文件1
错误-》文件2

3.输入重定向

wc [选项] [文件名]

-c 统计字节

-w 统计单词

-l 统计行数

4.多命令与管道符

多命令

多命令执行符格式作用
命令1 ;命令2多命令顺序执行,没有逻辑关系
&&命令1 &&命令2命令1 正确执行后 才会执行命令2
命令1不正确后不会执行命令2
||命令1 命令21不正确 2执行
1正确 2不会执行

管道符

命令1|命令2
#命令1的正确输出 作为命令2 的操作对象
[root@localhost dev]# netstat -an |grep ESTABLISHED
tcp        0      0 192.168.141.130:22      192.168.141.1:59240     ESTABLISHED
tcp        0     36 192.168.141.130:22      192.168.141.1:59017     ESTABLISHED
###所有端口是ESTABLISHED 状态的信息  
## netstat -an 的输出对象 作为 grep ESTABLISHED 的操作对象

5.grep 命令

grep [选项] “搜索内容” 文件名

命令解释
-n输出行号
-i忽略大小写
-v反向查找
–color=auto搜索出关键字用颜色显示{有的不加也会有颜色}
[root@localhost dev]# grep -n   "root" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

6.通配符和其他特殊符号

通配符解释
匹配一个任意字符
*匹配0个或任意多个字符,也就是可以匹配任务内容
[]匹配中括号中任意一个字符
[-]匹配中括号中任意一个字符 -代表一个范围 例如:【a-z】 代表匹配一个小写字母
[^]逻辑非,表示匹配不是中括号内的一个字符。例如【^0-9】代表匹配一个不是数字的
符号解释
‘ ’所有特殊符号都没有特殊意义 $ ` 等
“ ”所有特殊符号都没有特殊意义 $ \ ` 例外
``内容是系统命令 在Bash 会先执行 和 一样推荐使用 {}一样 推荐使用 一样推荐使用{} 反 引号容易看错
${}应用系统命令 和``一样
#表示注释
$调用变量 调用name ==> $name
\\之后的特殊符号失去特殊含义

四.Bash 变量与运算

概念:计算机内存的单元 存放任意改变的信息,当shell脚本要保存一些信息是,比如一个文件名或者是一个数字,就把它存放在一个变量中,每个变量有一个名字 可以去引用它

组成:字母数字 下划线 数字不能开头

运算:bash 中 默认变量类型是字符串 如果要数值运算 必须指定变量的类型是数值型

变量用等号连接不能有空格 值有空格的话 用“”包起来

环境变量建议大写

变量分类

  • 自定义变量
  • 环境变量 保存操作系统先关的的数据
  • 位置参数变量 脚本中作为参数传递使用 变量名是固定的不能自定义
  • 预定义变量 Bash 中定义好的 变量名是固定的不能自定义 作用也是固定的
[sff@localhost ~]$ echo $name   ##调用变量
sc
[sff@localhost ~]$ set  	 ##查看系统所有变量
.........
_=sc
colors=/home/sff/.dircolors
name=sc
[sff@localhost ~]$ unset name   #变量删除
[sff@localhost ~]$ echo $name


1.用户自定义变量

自己定义的变量 怎么使用 作用都是自己定义的

2.环境变量

用户自定义变量只在当前的shell中生效,而环境变量会在当前shell和这个shell的子shell中生效 ,如果把环境变量写入相应的配置文件,那么环境变量就在所有的shell中生效

[root@localhost dev]# bash  ##在进一个 bash shell
[root@localhost dev]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
        ├─VGAuthService
        ├─auditd───{auditd}
        ├─bash
        ├─chronyd
        ├─crond
        ├─dbus-daemon───{dbus-daemon}
        ├─firewalld───{firewalld}
        ├─irqbalance
        ├─login───bash
        ├─lvmetad
        ├─master─┬─pickup
        │        └─qmgr
        ├─polkitd───5*[{polkitd}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd─┬─sshd───bash───bash───bash───pstree  ##bash 就是子shell
        │      └─sshd───sshd───bash
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tuned───4*[{tuned}]
        └─vmtoolsd───{vmtoolsd}

export 变量名=变量值
##声明变量

env
#查询环境变量

##常用环境变量
PATH=/usr/local/jdk/jdk1.8.0_51//bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
##path 路径里面保存我们常用的命令  ls cd 等等  不需要写全路径  
当输出 ls  cd 等 会现在path 里面查询
PS1:系统提示符的变量
[root@localhost dev]# set |grep PS1
PS1='[\u@\h \W]\$ '
用户@主机 最后一级目录  ==[root@localhost dev]
符号解释
\d显示日期 星期 月 日
\h简写主机名 localhost
\t24 小时制 HH:MM:SS
\T12小时制 HH:MM:SS
\A24 小时制 HH:MM
\u当前用户
\w完整目录
\W所在目录最后一级目录
#执行的第几个目录
$提示符 root 提示# 普通用户$

3.位置参数变量

位置参数变量作用
$nn为数字 0 代表本身 1 − 9 代表第一个到第九个参数十以上需要大括号 0代表本身 1-9代表第一个到第九个参数 十以上需要大括号 0代表本身19代表第一个到第九个参数十以上需要大括号{10}
$*代表命令行中的所有参数 把所有参数看做是一个总体
$@代表命令行中的所有参数 $@ 是区别对待 {可以遍历}
$#代表命令行中的所有参数的个数
#示例1
[root@localhost sh]# vim echodemo.sh
#!/bin/bash
echo $0
echo $1
echo $2
#					#$0			#$1		#$2		#$3
[root@localhost sh]# ./echodemo.sh nihao  wphao  dajiahaop
./echodemo.sh  #$0
nihao  #$1
wphao  #$2
#示例二
[root@localhost sh]# vim showp.sh
#!/bin/bash
echo $*
echo $@
echo $#
[root@localhost sh]# ./showp.sh 45 45  21 56
45 45 21 56  #显示所有
45 45 21 56  #显示所有
4  #x显示个数

4.预定义变量

预定义变量作用
$?最后一次执行命令的发挥状态 0表示正确,非0表示不正确
$$当前进程的进程好PID
$!后台运行的最后一个进程的进程号 PID
[root@localhost sh]# ldfs
-bash: ldfs: 未找到命令
[root@localhost sh]# echo $?
127
[root@localhost sh]# ls
add.sh  echodemo.sh  showp.sh
[root@localhost sh]# echo $?
0

[root@localhost sh]# echo $$
1482

[root@localhost sh]# echo 111 &   #  & 表示后台运行
[1] 1556
111
[root@localhost sh]# echo $!
1556
[1]+  完成                  echo 111

5.接受键盘输入

read [选项] [变量名]

预定义变量作用
-p “提示信息”等待输入是 输出提示信息
-t 秒数等待输入的时间
-n 字符数指定输入字符的长度
-s隐藏输入
#!/bin/bash
read -n 3  -t 5 -p "输入名字:" name
echo "name = $name"
##输入三个字符  等待5S 提示信息是 输入名字

6.数值运算和运算符

方法1 declare [+/-] [选项] 变量名

命令解释
-:变量设定类型属性
+:取消变量类型属性
-i声明为整型integer
-x变量声明为环境变量
-p显示指定变量被声明的类型

方法2 let / expr 都可以

[root@localhost sh]# aa=11
[root@localhost sh]# bb=22
[root@localhost sh]# cc=$aa+$bb
[root@localhost sh]# echo $cc
11+22
[root@localhost sh]# declare -i dd=$aa+$bb
[root@localhost sh]# echo $dd
33
[root@localhost sh]# 
[root@localhost sh]# ee=$(expr $aa + $bb)  ##注意必须有空格
[root@localhost sh]# echo $ee
33

方法3 $((运算)) 或 $[运算式] 推荐使用

[root@localhost sh]# gg=$(( $aa+$bb))
[root@localhost sh]# echo $gg
33
[root@localhost sh]# hh=$[$aa+$bb]
[root@localhost sh]# echo $hh
33

7.内容替换

在这里插入图片描述

五.环境变量配置文件

修改配置文件后需要注销/重新登录才会生效 执行下面立刻生效

source 配置文件 或者 **.**配置文件

1.简介

主要是定义对操作系统的操作环境生效的系统默认环境变量 比如PATH HISTSIZE PSI HOSTNAME 等默认环境变量

主要的文件有

  • /etc/profile #全用户
  • /etc/profile.d/*.sh #全用户
  • ~/.bash_profile #当前用户
  • ~/.bashrc #当前用户
  • /etc/bashrc #全用户

在这里插入图片描述

注意 越是在后面定义的优先级越高 因为会覆盖前面相同的配置项

2.作用

/etc/profile作用

  • USER
  • LOGNAME
  • MAIL
  • PATH
  • HOSTNAME
  • HISTSIZE
  • umask
  • 调用/etc/profile.d/*.sh
#PATH 追加
pathmunge () {
    case ":${PATH}:" in
        *:"$1":*)
            ;;
        *)
            if [ "$2" = "after" ] ; then
                PATH=$PATH:$1
            else
                PATH=$1:$PATH
            fi
    esac
}


if [ -x /usr/bin/id ]; then
    if [ -z "$EUID" ]; then
        # ksh workaround
        EUID=`/usr/bin/id -u`
        UID=`/usr/bin/id -ru`
    fi
    USER="`/usr/bin/id -un`"
    LOGNAME=$USER
    MAIL="/var/spool/mail/$USER"
fi

# Path manipulation  # 
#[root@localhost sh]# vim /etc/profile
#[root@localhost sh]# echo $PATH
#/usr/local/jdk/jdk1.8.0_51/bin   #z最后添加的
#:/usr/local/sbin   #下面四个是这里添加的
#:/usr/local/bin
#:/usr/sbin
#:/usr/bin
#:/root/bin  ==》 .bash_profile 文件添加的
if [ "$EUID" = "0" ]; then
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
else
    pathmunge /usr/local/sbin after
    pathmunge /usr/sbin after
fi

HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=1000
if [ "$HISTCONTROL" = "ignorespace" ] ; then
    export HISTCONTROL=ignoreboth
else
    export HISTCONTROL=ignoredups
fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002
else
    umask 022
fi
###调用/etc/profile.d/*.sh 
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
    if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then
            . "$i"
        else
            . "$i" >/dev/null
        fi
    fi
done

unset i
unset -f pathmunge


export JAVA_HOME=/usr/local/jdk/jdk1.8.0_51/
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH

~/.bash_profile作用

if [ -f ~/.bashrc ]; then
        . ~/.bashrc  ##继续调用
fi

# User specific environment and startup programs
#:/root/bin  ==》 .bash_profile 文件添加到PATH
PATH=$PATH:$HOME/bin  

export PATH

~/.bashrc 作用

alias rm='rm -i'  ##方法
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc  ##、继续调用
fi
~          

/etc/bashrc作用

if [ "$PS1" ]; then
  if [ -z "$PROMPT_COMMAND" ]; then
    case $TERM in
    xterm*|vte*)
      if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
          PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
      elif [ "${VTE_VERSION:-0}" -ge 3405 ]; then
          PROMPT_COMMAND="__vte_prompt_command"
      else
          PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
      fi
      ;;
    screen*)
      if [ -e /etc/sysconfig/bash-prompt-screen ]; then
          PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen
      else
          PROMPT_COMMAND='printf "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
      fi
      ;;
    *)
      [ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=/etc/sysconfig/bash-prompt-default
      ;;
    esac
  fi
  # Turn on parallel history
  shopt -s histappend
  history -a
  # Turn on checkwinsize
  shopt -s checkwinsize
  ### 这个是定义 PSI 命令行格式
  [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
  # You might want to have e.g. tty in prompt (e.g. more virtual machines)
  # and console windows
  # If you want to do so, just add e.g.
  # if [ "$PS1" ]; then
  #   PS1="[\u@\h:\l \W]\\$ "
  # fi
  # to your custom modification shell script in /etc/profile.d/ directory
fi
#####这里是不使用用户名密码登录时候调用的  切换用户的时候
if ! shopt -q login_shell ; then # We're not a login shell
    # Need to redefine pathmunge, it get's undefined at the end of /etc/profile
    pathmunge () {
        case ":${PATH}:" in
            *:"$1":*)
                ;;
            *)
                if [ "$2" = "after" ] ; then
                    PATH=$PATH:$1
                else
                    PATH=$1:$PATH
                fi
        esac
    }

    # By default, we want umask to get set. This sets it for non-login shell.
    # Current threshold for system reserved uid/gids is 200
    # You could check uidgid reservation validity in
    # /usr/share/doc/setup-*/uidgid file
    if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
       umask 002
    else
       umask 022
    fi

    SHELL=/bin/bash
    # Only display echos from profile.d scripts if we are no login shell
    # and interactive - otherwise just process them to set envvars
    for i in /etc/profile.d/*.sh; do
        if [ -r "$i" ]; then
            if [ "$PS1" ]; then
                . "$i"
            else
                . "$i" >/dev/null
            fi
        fi
    done

    unset i
    unset -f pathmunge
fi

3.其他配置文件和登录信息

注销的时候生效的环境变量

~/.bash_logout

# ~/.bash_logout

#没有命令  可以自定义退出时执行的语句

~/.bash_history

所有的历史命令 本次登录的命令在缓存中需要注销的时候才会写入该文件

4.shell 登录信息

开机后显示的内容

在这里插入图片描述

[root@localhost ~]# cat /etc/issue   ##w文件位置
\S
Kernel \r on an \m

可以修改

选项作用
\d日期
\s操作系统名称
\l终端号
\m隐藏输入
\n硬件结构
\o域名
\r内核版本
\t系统当前时间
\u当前登录用户的序列号

注意:/etc/issue.net

这个文件区别于上面文件 是登录以后才提示的信息;

六.正则表达式

正则表达式:文件中 匹配符合条件的字符串 正则是包含匹配 grep.awk sed 都支持

通配符是匹配符合条件的文件名,通配符是完全匹配 ls find cp 不支持正则表达式 所以只能使用shell自己的通配符来进行匹配

正则表达式

选项作用
*前一个字符 匹配0 次或任意次数
.匹配除了换行符外任意一个字符
^匹配行首
$匹配行尾
[]匹配【】里面的任意一个字符
[^]匹配 除了【】里面的任意一个字符
\转义符
\ {n \ }表示其前面的字符恰好n次
\ {n, \ }表示其前面的字符大于n次
\ {n, m\ }表示其前面的字符出现次数为n到吗次 m>n

1.字符串命令cut

cut -f 列 文件 默认分隔符是空格

cut -d “:” f 列 文件 分隔符是:

2.字符串命令 awk

printf 和 print 只能在awk 中使用

printf 支持格式输出

%ns

%ni

%m.nf

printf   '%S\t' aa
#打印aa 加TAB

print 会自动加入一个换行符

awk {t条件1}{动作1} {t条件2}{动作2} 。。文件

3.sed

修改的是文件的输出内容 还没有修改原本的文件 如果想要影响到原来的文件需要加参数-i

4.排序

选项作用
-f忽略大小写
-n以数值来进行排序默认时字符串行排序
-r反向排序
-t指定分隔符 默认的分隔符是制表符
-k n[,m]按照指定的字段范围排序 n 开始 m 结束

六.条件判断

1.文件判断

在这里插入图片描述

2.权限判断

在这里插入图片描述

3.文件比较

在这里插入图片描述

4.数值比较

在这里插入图片描述

[root@localhost sff]# [ 11 -ge 22 ] &&echo 1 || echo 2
2
[root@localhost sff]# [ 11 -le 22 ] &&echo 1 || echo 2
1

5.字符串判断

在这里插入图片描述

七.流程控制

1.if

单分支

写法一

if [条件判断];then

​ 程序

fi

=====================

写法二

if [条件判断]

​ then

程序

fi

多分支

if [ 条件判断]

​ then

​ 条件成立 执行

else

​ 条件不成立 执行

fi

=========================

if [条件]

then

程序

elif [条件]

then

​ 程序

elif [条件]

then

​ 程序

else

​ 程序

fi

2.CASE

case $cho in

​ “case1” )

​ echo"Your choose is yes!"

​ ;;

​ “case2” )

​ each “Your choose is yes!”

​ ;;

​ * )

​ each “Your choose is yes!”

​ ;;

3.for

for((初始值;循环控制条件;变量变化))

do

​ 程序

done

4.while

while [ 条件 ] //条件成立执行

​ do

​ 程序

​ done

八.服务管理

1.服务自启动

/etc/rc.d/rc.local

修改文件 把自启动脚本写入

[root@localhost sff]# cd /etc/rc.d
[root@localhost rc.d]# cat rc.local 
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local
##启动脚本

ntsysv 也是可以 但是推荐上一个方式

九.进程管理

1.进程简介

进程i正在执行的一个程序或者命令,每一个经常都是一个运行的实体,都有自己的实体空间,并占用一定的系统资源

2.进程管理的作用

  • 判断服务器的健康状态
  • 查看系统中的所有进程
  • 杀死进程

3.查看进程

[root@localhost rc.d]# ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3 193616  6632 ?        Ss   8月28   0:02 /usr/lib/systemd/systemd --switched-root --system --deseriali
root          2  0.0  0.0      0     0 ?        S    8月28   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    8月28   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   8月28   0:00 [kworker/0:0H]
root          7  0.0  0.0      0     0 ?        S    8月28   0:00 [migration/0]

VSZ:虚拟内存 KB

RSS:实际物理内存 KB

TTY:该进程是在那个终端中进行的 tty1-tty7 代表是本地控制台终端 1~6是字符终端 7 是图形终端 pts0~255是虚拟终端

STAT:R运行 S: 休眠状态 T :停止 +:后台运行

TIME:占用CPU 运行时间

COMMAND:进程名

top 判断服务器的健康状态

top 【选项】

选项作用
-dtop更新的间隔 默认3 s
在top命令的交互模式中执行一下命令
? 或者 h显示交互模式的帮助
PCPU 占用来排名 默认就是这个选项
M以内存的使用率排序
N以PID排序
q退出top
[root@localhost ~]# top -d 10
##第1行
top - 22:38:32 up 1 day,  4:21,  2 users,  load average: 0.00, 0.01, 0.05
##第2行
Tasks: 118 total,   1 running, 117 sleeping,   0 stopped,   0 zombie
##第3行
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
#第4行
KiB Mem :  1865308 total,  1408452 free,   153752 used,   303104 buff/cache
#第5行
KiB Swap:  2097148 total,  2097148 free,        0 used.  1513328 avail Mem 
   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                   
  2490 root      20   0  162100   2340   1600 S   0.2  0.1   0:00.28 top                                                       
    37 root      20   0       0      0      0 S   0.1  0.0   0:32.91 kworker/1:1                                               
   691 root      20   0  298940   6300   4952 S   0.1  0.3   1:08.93 vmtoolsd                                                  
  1049 root      20   0  573844  19064   6044 S   0.1  1.0   0:10.37 tuned                                                     
     1 root      20   0  193616   6632   4120 S   0.0  0.4   0:02.11 systemd     

**第1行 ** 系统运行信息

top - 22:38:32 up 1 day,  4:21,  2 users,  load average: 0.00, 0.01, 0.05
内容说明
22:38:32系统当前时间
up 1 day, 4:21系统的运行时间 1天4 小时21 分钟
2 users当前有两个用户
load average: 0.00, 0.01, 0.051,5,15 分钟的平均负载 小于1 负载小 大于1 负载较大

第2行 进程信息

Tasks: 118 total,   1 running, 117 sleeping,   0 stopped,   0 zombie
内容说明
Tasks: 118 total系统中的进程总数
1 running系统中运行的进程总数
117 sleeping睡眠的进程
0 stopped正在停止的进程
0 zombie僵尸进程 如果不是0 需要手动检查该进程

第3行 cpu信息

%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
内容说明
%Cpu(s): 0.0 us用户模式占用CPU百分比
0.0 sy系统模式占用CPU百分比
0.0 ni改变优先级的进程占用CPU百分比
100.0 id空闲占用CPU百分比
0.0 wa等待输入输出的进程占用CPU百分比
0.0 hi硬CPU中断
0.0 si软CPU中断
0.0 st虚拟时间CPU百分比

第4行 内存信息

KiB Mem :  1865308 total,  1408452 free,   153752 used,   303104 buff/cache
内容说明
KiB Mem : 1865308 total物理内存总量
1408452 free空闲的物理内存
153752 used已使用物理内存总量
303104 buff/cache缓存的内存的数量

第5行 交换分区的swap 的信息

KiB Swap:  2097148 total,  2097148 free,        0 used.  1513328 avail Mem 
内容说明
KiB Swap: 2097148 total交换分区/虚拟内存 的大小
2097148 free,已使用的交换分区
0 used空闲的交换分区
1513328 avail Mem作为缓存的交换分区大小

3.pstree

查看进程树 -p 带pid

[root@localhost ~]# pstree -p
systemd(1)─┬─NetworkManager(733)─┬─{NetworkManager}(745)
           │                     └─{NetworkManager}(748)
           ├─VGAuthService(690)
           ├─agetty(712)
           ├─auditd(655)───{auditd}(656)
           ├─chronyd(684)
           ├─crond(702)
           ├─dbus-daemon(682)───{dbus-daemon}(689)
           ├─firewalld(715)───{firewalld}(855)
           ├─irqbalance(680)
           ├─lvmetad(518)
           ├─master(1325)─┬─pickup(2513)
           │              └─qmgr(1329)
           ├─polkitd(678)─┬─{polkitd}(692)
           │              ├─{polkitd}(696)
           │              ├─{polkitd}(698)
           │              ├─{polkitd}(705)
           │              └─{polkitd}(713)
           ├─rsyslogd(1047)─┬─{rsyslogd}(1055)
           │                └─{rsyslogd}(1057)
           ├─sshd(1046)─┬─sshd(1753)───bash(1757)───top(2490)
           │            └─sshd(2491)───bash(2495)───pstree(2533)
           ├─systemd-journal(492)
           ├─systemd-logind(681)
           ├─systemd-udevd(529)
           ├─tuned(1049)─┬─{tuned}(1421)
           │             ├─{tuned}(1422)
           │             ├─{tuned}(1423)
           │             └─{tuned}(1436)
           └─vmtoolsd(691)───{vmtoolsd}(719)


4.杀进程

1).kill

[root@localhost ~]# kill -l ### L
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	

在这里插入图片描述

常用
kill -1 PID
kill -9 PID
kill -15 PID

2)killall

killall -9 进程名 会杀死进程名下面的所有进程

3)pkill

按照终端号提出用户

pkill -9 -t pts/1

5.工作管理

1.命令放入后台

方法1

命令 + & 后台执行

方法2

top 后 ctrl+Z

十.系统资源查看

1.查看系统位数

file /bin/ls 查看如何文件都可以

2.demsg 查看开机信息

3.free 内存信息

4.cache 和buff

区别 cache 是加速数据读取

buffer 加速数据的写入 只能是被内核直接使用

5.uptime

系统运行时间 ==top 第一行

6.查看内核

uname

-a 所有

-r 内核版本

-s 操作系统

十一.系统的定时任务

[root@localhost rc.d]# ps -ef |grep crond
root        702      1  0 8月28 ?       00:00:00 /usr/sbin/crond -n
root       2595   1757  0 23:39 pts/0    00:00:00 grep --color=auto crond

crond 是自启动的

1.用户的crotab 设置

crontab [选项]

选项作用
-e编辑crontab 任务
-l查询crontab 任务
-r删除当前用户的所有crontab任务
[root@localhost rc.d]# crontab -e
no crontab for root - using an empty one

* * * * * command  ### 启动命令
#corn 表达式

在这里插入图片描述

在这里插入图片描述

-etdncc6t-1630389446446)]

常用
kill -1 PID
kill -9 PID
kill -15 PID

2)killall

killall -9 进程名 会杀死进程名下面的所有进程

3)pkill

按照终端号提出用户

pkill -9 -t pts/1

5.工作管理

1.命令放入后台

方法1

命令 + & 后台执行

方法2

top 后 ctrl+Z

十.系统资源查看

1.查看系统位数

file /bin/ls 查看如何文件都可以

2.demsg 查看开机信息

3.free 内存信息

4.cache 和buff

区别 cache 是加速数据读取

buffer 加速数据的写入 只能是被内核直接使用

5.uptime

系统运行时间 ==top 第一行

6.查看内核

uname

-a 所有

-r 内核版本

-s 操作系统

十一.系统的定时任务

[root@localhost rc.d]# ps -ef |grep crond
root        702      1  0 8月28 ?       00:00:00 /usr/sbin/crond -n
root       2595   1757  0 23:39 pts/0    00:00:00 grep --color=auto crond

crond 是自启动的

1.用户的crotab 设置

crontab [选项]

选项作用
-e编辑crontab 任务
-l查询crontab 任务
-r删除当前用户的所有crontab任务
[root@localhost rc.d]# crontab -e
no crontab for root - using an empty one

* * * * * command  ### 启动命令
#corn 表达式

[外链图片转存中…(img-6f3KPMiC-1630389446447)]

[外链图片转存中…(img-u4IuzAqY-1630389446448)]

十一. shell 快捷键

快键键含义
ctrl+a回到行首
ctrl+e跳到行尾
ctrl+u清空命令
ctrl+p上条指令
ctrl+n下条指令
ctrl+b回退
ctrl+f前进
ctrl+ddelete 光标后面的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值