Skip to content

shell 与常用命令

一、服务状态

#启动一个服务
systemctl start firewalld.service
#关闭一个服务
systemctl stop firewalld.service
#重启一个服务
systemctl restart firewalld.service
#显示一个服务的状态
systemctl status firewalld.service
#在开机时启用一个服务
systemctl enable firewalld.service
#在开机时禁用一个服务
systemctl disable firewalld.service
#查看服务是否开机启动
systemctl is-enabled firewalld.service;echo $?
#查看已启动的服务列表
systemctl list-unit-files|grep enabled

二、开放防火墙端口

#centos7以后:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
#contos7以前:
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 8080 -j ACCEPT

#删除开放端口
firewall-cmd --zone=public --remove-port=8080/tcp --permanent

#查看在使用的开放端口
netstat -ntpl
#查看防火墙开放的端口
firewall-cmd --zone=public --list-ports
#永久关闭防火墙
systemctl disable firewalld
#永久开启防火墙
systemctl enable firewalld

三、下载包

wget 下载地址

四、软连接的查询与删除

#列出当前目录下的软连接    蓝色
ls
#删除软连接
rm -rf 文件名(连接名)

五、查找文件 根据文件名

find -name 'filename'
#查看历史命令
history|grep scp

六、查看进程

#查看进程并且查看cpu、内存占用比例
ps -ef | grep 进程名

#查看端口进程
lsof -i:80

#ps aux | grep 进程名
USER       PID  %CPU    %MEM  VSZ  RSS TTY      STAT  START  TIME COMMAND

字段含义:USER 进程运行用户;PID 进程编号;%CPU 进程的 cpu 占用率;%MEM 进程的内存占用率;VSZ 进程所使用的虚存的大小;RSS 进程使用的驻留集大小;TTY 与进程关联的终端;STAT 进程状态(R/S/I/Z/D/P/W/N/T);START 进程启动时间和日期;TIME 进程使用的总 cpu 时间;COMMAND 正在执行的命令行命令;NI (nice) 优先级;PRI 进程优先级编号;PPID 父进程的进程 ID;SID 会话 ID;WCHAN 进程正在睡眠的内核函数名称;FLAGS 与进程相关的数字标识。

七、查看日志

#查看某个日志的行数
awk '{print $1}' access.log |wc -l
#$后面数字表示只显示某个字段的信息 more表示所有  可以输入后几行
awk '{print $1}' access.log |uniq -c |more

八、复制命令

#将/etc/sys.conf文件复制到home目录下
cp /etc/sys.conf /home/
#在同目录下复制
cp /usr/local/zookeeper/zookeeper-3.4.13/conf/zoo_sample.cfg  /usr/local/zookeeper/zookeeper-3.4.13/conf/zoo.cfg

#将 /home/user1目录下的所有东西拷到/root/temp/下而不拷贝user1目录本身。
cp -Rf /home/user1/* /root/temp/

scp -r local_folder remote_username@remote_ip:remote_folder

#清除scp密码痕迹
grep "scp" /var/log/auth.log | sed 's/password.*$/password ********/'

九、linux 用户管理

#用户组添加
groupadd sunline
#用户添加,useradd只增加用户,不会在home下新增目录。需要-r添加,adduser会新增目录
useradd -m -g sunline lcy 或者 adduser -g sunline lcy

#查看用户所在的分组
groups lcy

#设置密码
passwd lcy
chown -R lcy:wheel 路径
#root用户授权(在home目录下)
chmod 0775 -R  路径 lcy

#添加管理员用户
sudo adduser -g wheel username          # 添加有管理员权限用户
sudo usermod -G wheel username          # 追加管理员权限

#仅仅删除用户
userdel 用户名
#删除用户并且删除相关文档
userdel -r 用户名
#强制删除用户(如果在登录中)
userdel -f 用户名
#查看所有的用户信息
cat /etc/passwd
#查找某个用户
cat /etc/passwd|grep 用户名
#查看所有组信息
cat /etc/group
#用于查找某个用户组
cat /etc/group|grep 组名
#查看当前登录用户的组内成员
groups
#查看test用户所在的组,以及组内成员
groups test
#查看当前登录用户名
whoami

十、修改密码最小长度

authconfig --passminlen=8 --update

十一、查看目录大小

#带有单位显示目录信息
du -h /home
#查看当前目录的空间
df -h /home

#这个是我想要的结果  a表示显示目录下所有的文件和文件夹(不含子目录),h表示以人类能看懂的方式,max-depth表示目录的深度。
du -ah --max-depth=1

#du 命令用来查看目录或件所占用磁盘空间的大小。常用选项组合
du -sh

十二、查看当前系统使用率(cpu、内存等)

使用 top 命令实时更新。 %us:表示用户空间程序的 cpu 使用率(没有通过 nice 调度) %sy:表示系统空间的 cpu 使用率,主要是内核程序。 %ni:表示用户空间且通过 nice 调度过的程序的 cpu 使用率。 %id:空闲 cpu %wa:cpu 运行时在等待 io 的时间 %hi:cpu 处理硬中断的数量 %si:cpu 处理软中断的数量 %st:被虚拟机偷走的 cpu

十三、查看当前连接状态

#查看当前tcp连接
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
ss -s

十四、修改主机名

hostnamectl set-hostname xxx

十五、启动脚本

#创建启动脚本,这里不介绍脚本
cd /etc/init.d/
vi start.sh
chmod a+x start.sh
chkconfig --add start.sh
chkconfig start.sh on
#查看配置
chkconfig --list
#删除配置
chkconfig --del start.sh

十六、Shell 与文本三剑客

16.1 grep 命令

  • grep 应用场景:通常对数据进行行的提取

  • 语法:grep [选项]... [内容]... [file]

    • -v:对内容进行取反提取
    • -n:对提取的内容显示行号
    • -w:精确匹配
    • -i:忽略大小写
    • ^:匹配开头行首
    • -E:正则匹配

16.2 处理海量数据之 cut 命令

  • cut 应用场景:通常对数据进行列的提取

  • 语法:cut [选项]... [file]

注意:不加 -d 选项,默认为制表符(tab 键),不是空格

  • -d:指定分割符
  • -f:指定截取区域
  • -c:以字符为单位进行分割
#以':'为分隔符,截取出/etc/passwd的第一列跟第三列
cut -d ':' -f 1,3 /etc/passwd
#以':'为分隔符,截取出/etc/passwd的第一列到第三列
cut -d ':' -f 1-3 /etc/passwd
#以':'为分隔符,截取出/etc/passwd的第二列到最后一列
cut -d ':' -f 2- /etc/passwd

#截取/etc/passwd文件从第二个字符到第九个字符
cut -c 2-9 /etc/passwd
#截取linux上面所有可登陆普通用户
grep '/bin/bash' /etc/passwd | cut -d ':' -f 1 | grep -v root

16.3 awk 命令

awk 的简介:其实一门编程语言,支持条件判断、数组、循环等功能,与 grep、sed 被称为 Linux 三剑客。之所以叫 AWK 是因为取其三位创始人 Alfred Aho、Peter Weinberger、Brian Kernighan 的 Family Name 的首字符。

  • awk 的应用场景:通常对数据进行列的提取

  • 语法:

    • awk '条件 {执行动作}' 文件名
    • awk '条件1 {执行动作} 条件2 {执行动作} ...' 文件名
    • awk [选项] '条件1 {执行动作} 条件2 {执行动作} ...' 文件名
  • 参数:

    • -F:指定分割符
    • BEGIN:在读取所有行内容前就开始执行
    • FS:BEGIN 时定义分割符
    • END:结束的时候执行
    • NR:行号
    • print:打印出内容,默认会自动换行
    • \t:制表符
    • \n:换行符
    • printf:格式化输出,不会自动换行
    • %ns:字符串型,n 代表有多少个字符
    • %ni:整型,n 代表输出几个数字
    • %.nf:浮点型,n 代表的是小数点后有多少位小数
#格式化输入参数
printf '%s\t%s\t%s\t%s\t%s\t%s\n' 1 2 3 4 5 6
#硬盘使用率
df -h |grep /dev/vda1 | awk '{printf "硬盘的使用率是:"} {print $5 }'
df -h |grep /dev/vda1 | awk '{print $5}'
#解决bc计算器小数点前面的0丢失问题
echo "scale=2; 0.13 + 0.1" | bc | awk '{printf "%.2f\n", $0}'
#指定分隔符
cat /etc/passwd | awk -F":" '{print $1}'
cat /etc/passwd | awk 'BEGIN {FS=":"} {print $1}'
#获取第二行的第五列数据
df -h | awk 'NR==2 {print $5}'

16.4 sed 命令

  • sed 的应用场景:主要对数据进行处理(选取 / 新增 / 替换 / 删除 / 搜索)

  • sed 语法:sed 选项 文件名

  • 参数:注意,如果不加 -i 参数,都是对输出内容进行操作,不会对源文件进行操作

    • -n:把匹配到的行输出打印到屏幕
    • p:以行为单位进行查询,通常与 -n 一起使用
    • d:删除
    • a:在行的下面插入新的内容
    • i:在行的上面插入新的内容
    • c:替换
    • -i:对源文件进行修改(高危操作,慎用,用之前需要备份源文件)
    • -e:表示可以执行多条动作
#查询第二行的数据
df -h | sed -n '2p'
#删除第二行
df -h |sed '2d' df.txt
#在第二行下面插入新行
df -h |sed '2a 1234567890'
#在第二行上面插入新行
df -h |sed '2i 1234567890'
#替换内容 将0%替换成100%
df -h |sed 's/0%/100%/g'
#在文件中搜索100%的的行
df -h | sed -n '/100%/p'
#执行多条命令,先替换值再输出
df -h | sed -n -e 's/0%/100%/g' -e '/100%/p'

16.5 if 循环控制

单分支:

if [ 条件判断 ];
        then
        执行动作
fi

增加 else 判断:

if [ 条件判断 ];
        then
        执行动作
else
        执行动作
fi

多分支:

if [ 条件判断 ];
        then
        执行动作
elif [ 条件判断 ];
        then
        执行动作
elif [ 条件判断 ];
        then
        执行动作
fi

16.6 for 循环控制

  1. 根据值循环

    for 变量名 in 值1 值2 值3
    do
            执行动作
    done
  2. 根据命令循环

    for 变量名 in `命令`
    do
            执行动作
    done
  3. 根据条件循环

    for ((条件))
    do
            执行动作
    done

16.7 case 循环控制

应用场景:case 循环常使用于多重分支;if 可以判断多个条件,case 一次只能判断一种条件。

case 变量 in
值1 )
执行动作1
;;
值2 )
执行动作2
;;
值3 )
执行动作3
;;
esac

十七、while 循环

应用场景:while 循环是条件循环也是不定循环,只要条件判断式成立,循环就会一直进行。直到判断式不成立或选择跳出循环。注意结束条件,防止死循环

while [ 条件判断式 ]
do
        执行动作
done

如:

i=0;
sum=0;
while [ $i -lt 10 ]
do
sum=$(($sum+$i))
i=$((i+1))
done
echo 'sum='$sum