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 root16.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
执行动作
fi16.6 for 循环控制
根据值循环
for 变量名 in 值1 值2 值3 do 执行动作 done根据命令循环
for 变量名 in `命令` do 执行动作 done根据条件循环
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