Shell学习
结合网课、课内教材、网文学习
常用指令
指令/参数 | 使用/作用 |
---|---|
$? | 保存前一个命令的返回码 |
$* | 传给脚本或函数的参数组成的单个字符串,即除脚本名称后从第一个参数开始的字符串,每个参数以$IFS分割(一般内部域分隔符$IFS为一个空格) |
$# | 传给脚本/函数的参数的个数 |
颜色字体
-e “\033[3m内容\033[0m” 也可以是 4m;后面如果是1m就后面的颜色都变化
指令/参数 | 使用/作用 |
---|---|
-d file | 返回真的条件,file存在并且是一个目录 |
-e file | File 存在 |
-f file | file存在并且是一个普通文件 |
select语句,配合case语句使用
sed ‘/^/&123’在每行行首插入123
grep -E “正则表达式”文件 (不加-E不会有输出)
awk ‘{print $1}’ 打印第一列
awk -F: ‘print$1’ 以“:”冒号为分隔符,打印第一列
find 目录 -maxdepth 最深遍历层数 -name “文件名” 或者 -type 类型(比如f,就是普通文件)-mtime +30(三十天以前的,要是要今天的,可以是 -1)
-exec 指令 {} \ ; 大括号就是等于前面执行的指令获取的结果
|xargs rm -f {} ; 看情况2个都可以不用 ;
下面是运维的增量备份、全备份使用
tar -g 文件,全备份
echo `date +%d` 日; `date +%u` 周几;
运维根据恶意访问(22端口多次输入密码错误,强封IP)
运维根据脚本同步不同服务器的文件rsync
Shell批量监控服务发送邮件报警
web开发自己用到的常用Linux指令
1. Linux远程服务器文件的上传、下载
- sz:将选定的文件发送(send)到本地机器
- rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive)
2. linux下的文本去重方法
基础使用
awk命令去重输出:awk ‘!x[$0]++’ filename
应用扩展1:cat Afile Bfile|awk ‘!x[$0]++’ >Cfile
依次输出A、B两个文件内容,去掉B中与A重复的行,输出到C;多应用于日志拼接。
灵活扩展2:cat Afile|awk ‘!x[$0]++’
也可以写作:awk ‘!x[$0]++’ Afile
去掉重复的行,输出A文件
复制.bash_history到本地(配合sz指令)
先到当前用户根目录,使用ls -a确保有.bash_history文件
使用去重指令把去重后的文件复制出来。
cat .bash_history|awk ‘!x[$0]++’ > historyXXXX.txt
使用sz指令把文件传到本地
sz historyXXXX.txt
3. MongoDB的启动和停止
MongoDB启动
sudo systemctl start mongod.service
MongoDB停止
sudo systemctl stop mongod.service
MongoDB重启
sudo systemctl restart mongod.service
4. 查看进程指令
查看指定的程序是否运行
ps -ef|grep ‘程序名’
查看mongod是否启动
ps -ef|grep ‘mongod’
查看是否有java程序运行中(比如springboot项目)
ps -ef|grep java
5. 查看系统信息
top指令(类似windows的任务管理器)
查看总的内存使用情况
1
free -m | sed -n '2p' | awk '{print""($3/$2)*100"%"}'
linux 下 取进程占用 cpu 最高的前10个进程
1
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
linux 下 取进程占用内存(MEM)最高的前10个进程
1
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head
查看系统运行内存
1
2
3free -m
(Gb查看)
free -g查看硬盘大小
1
df -hl
6. ICMP检测服务器是否可连通
- ping指令
7. 简单文件操作
简单写一句话到文件中
echo ‘我是一句废话’ > test.txt
删除文件(-r 递归,通常用于删除文件夹及子目录;-f强制删除,不询问)
rm -rf xxxx
查看文件
less 文件名 (空格下一页,B上一页)
监听文件(比如查看实时变化的日志文件)
tail -f 文件名
修改文件权限(4r读+2w写+1x执行=7)
rwx 读写执行,777三个分别表示文件拥有者用户权限、用户组权限、其他人权限
数字设定法
chmod 777 文件名or目录名
字符设定法
chmod [who] [+|-|=] [mode] 文件名
who表示操作对象
u表示用户;g表示用户组;o表示其他用户;a表示所有用户
操作符号含义
+表示添加权限 ;-表示取消权限;=表示删除其他所有权限后重新赋予权限
mode表示执行的权限
r只读;w只写;x可执行
查看当前目录文件
不包括隐藏文件
ls -l
包括隐藏文件
ls -al
创建目录
mkdir 目录名
打印当前目录
pwd
查找文件
find <指定目录> <指定条件> <指定动作>
从根目录起最大深度查找7层,查找名字带有‘.txt’的文件
find / -maxdepth 7 -name ‘*.txt’
从根目录起最大 深度查找2层,查找类型为‘f’(普通文件类型)的文件
find / -maxdepth 2 -type f
在logs目录中查找更改时间在5日以前的文件并删除它们
find logs -type f -mtime +5 -exec rm { } \
在/etc目录中查找文件名以host开头的文件,并将查找到的文件输出到标准输出
find / etc -name “host*” -print
8. 查看端口占用
Linux查看端口号占用命令
netstat -pan | grep 12345
lsof -i :8080
通过进程ID查找程序
ps -aux | grep 12345
通过关键字查找进程
ps -ef | grep java
netstat -unltp|grep fdfs
使用nmap工具
查看本机开放的端口
1
nmap 127.0.0.1
9. 强制结束某进程
- kill -9 进程号
10. 后台运行程序
nohup
这里举例后台运行springboot程序(后台运行,并指定日志输出位置)
nohup java -jar SpringBoot的jar包文件.jar > /xxxx/yyy/logs.txt &
nohup java -jar 自己的springboot项目.jar >日志文件名.log 2>&1 &
nohup java -jar 自己的springboot项目.jar >/dev/null 2>&1 &
11. 查看、修改网络接口配置
ifconfig
查看自己的公网IP即信息
1
2
3curl ifconfig.me
不起效可以用下面这条
curl cip.cc
12. 网络通讯TCP/UDP等
nc
检测UDP端口是否连通(发UDP包)
nc -vuz IPv4地址 端口号
例如 nc -vuz 123.123.123.123 12345
tcpdump
Linux抓包(比如监听UDP包接收发送等)
tcpdump -vvv -X -n udp port 端口号
例如tcpdump -vvv -X -n udp port 12345
13. Docker操作RabbitMQ
docker安装RabbitMQ后,启动
1
docker run -d --name rabbitmq3.8.2 -p 5672:5672 -p 15672:15672 -v `pwd`/data:/var/lib/rabbitmq --hostname XX-xxx-Docker-RabbitMQ-主机名 -e RABBITMQ_DEFAULT_VHOST=XX-xxx-Docker-RabbitMQ-vhost -e RABBITMQ_DEFAULT_USER=用户名 -e RABBITMQ_DEFAULT_PASS=密码 docker中RabbitMQ的imageID
docker使用国内的加速源
1
vim /etc/docker/daemon.json
修改上述json文件为以下内容
1
{"registry-mirrors": ["http://95822026.m.daocloud.io","https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://almtd3fa.mirror.aliyuncs.com"]}
14. 用户操作
切换用户
1
su 用户名
15. 网络检测
查看是否被木马开后门(查看建立连接的程序)
1
netstat -nb