基本命令
- cd ~ :切换到登陆用户的主目录(/home/用户名)
- cd / :切换到根目录
- cd /home/ :切换到指定目录
- cd .. :切换到上级目录
- ls -al 查看当前目录详细信息
- ls -l 查看文件属性
- pwd: 查看当前所在目录
- rm:删除文件或目录
- hostname:查看当前主机名
- ifconfig:查看网卡信息
- ip addr:查看网卡信息
常用命令
- nohub:应用程序后台启动
- awk:文件内容处理
- head/tail :查看文件前后某些行
- wc:文件单词统计
- diif:文件内容对比
- netstat:网络信息统计
- vmstat:查看进程信息和内存使用
- mpstat:查看多核处理器的使用情况
解压缩文件
tar:解压缩命令
参数:
-
-c:创建的 tar 文件
-
-x:解开 tar 文件
-
-t:列出 tar 文件中办函的文件信息
-
-r:附加新的文件到 tar 中
-
tar -xvf /home/root/a.tar -C /home/ 解压到指定目录
-
tar -cvf /home/root/ 打包/home/root目录下所有文件
服务器之间传输文件
通过 scp 命令在多台服务器中的相互复制 传输文件。为了省下输入密码,可以设置免密登录。
scp -r /home/a.log root@B_ip:/home 将A服务器的的a.log 复制到B服务器的/home 中
动态查看应用的执行结果,如每隔一秒高亮显示网络连接数的变化情况
watch:动态查看命令结果 watch -n 1 netstat -ant
watch -n 1 -d 'pstree | grep http ' 每隔一秒高亮显示http连接数的变化情况
watch -n 10 'cat /proc/loadavg' 每隔十秒输出系统的平均负载
查看磁盘的大小
df -h
抓取数据包并分析网络情况
tcpdump 来抓取网络中的报文 常见参数:
- -i 显示socket文件描述符
- -c 显示指定命令打开的所有文件描述符
- -t 仅显示打开了文件描述符的进程pid
案例:
- tcpdump -i eth0 捕获特定网卡数据包
- tcpdump -c 100 -i eth0 捕获特定个数的数据包
- tcpdump -w a.pcap -i eth0 将捕获的包保存到文件
- tcpdump -i eth0 port 8080 捕获特定端口数据包
- tcpdump -i eth0 arp 捕获特定协议数据包
查看当前网络中的文件连接情况
- lsof -i 列出所有网络连接
- lsof -i udp 列出所有udp网络连接
- lsof -i :3306 列出使用端口的情况
- lsof -i tcp:3306 列出谁在使用特定的tcp端口
- lsof -d 2-3 根据描文件述符范围列出文件信息
使用一个命令进行网络连接并上传相关文件
nc :用来快速构建网络链接。常用来调试客户端程序
nc -z A 30-40 扫描机器A端口在30-40的服务 nc -C A 5000 扫描机器A端口在30-40的服务
安装软件
源码方式安装
- 载解压源码
一般下载下来源码以后都会存在一个
Readme文件,首先应该仔细阅读这个文件,可能有很多需要修复的以前人家遇见的问题都会在上面做记录,以免入坑不回头
- 分析平台环境
- 编译安装软件
当我们输入 make 命令过后即进入了编译阶段,编译时间根据软件的程序规模大小以及硬件配置有关,当输入make install就会开始安装软件,我们可以指定安装目录也可以不指定,系统将给你默认指定目录为 /user/local,这样安装完毕
RPM方式安装
RPM 是Red Hat 公司开发出来的 Linux 下的软件包管理工具。这些以 .rpm结尾的包包含了已经编译好的二进制可执行文件,即将源代码进行编译,安装,然后封装为RPM包
优点即安装简单,方便,因为已经编译完成,安装只是用来验证和解压过程,缺点也比较明显,过于依赖于操作系统,要求RPM包的安装环境必须和RPM封装时的环境保持一致
YUM方式安装
常用案例
- yum install 全部安装
- yum install pakage 安装指定包文件
- yum update 全部更新
- yum update pakage 更新指定包文件
- yum info package 显示安装包信息
- yum list 显示所有已经安装和key安装的程序包
- yum remove package 删除程序包
shell脚本
将用户输入的字符串转换为需要执行程序的終端叫做shell
编写shell
编写shell:新建一个文件将其命名为 a.sh
#! /bin/bash #告诉操作系统使用什么解析器
echo "Hello world !"
执行方式1 : 添加可执行权限 再执行
chmod +x ./a.sh ./a.sh
执行方式2 /bin/sh a.sh
变量使用
变量名和等号之间不能有空格
定义变量注意事项:
- 命名首个字符不能是数字,只能使用英文字母、数字和下划线
- 不能使用标点符号
- 不能使用bash中关键字
- 使用变量(使用变量的过程中,最好加上花括号),只需要在变量前面加上美元符号
- 只读变量在变量后面加 readonly
案例:
#! /bin/bash
s_name="张三"
echo $s_name
删除变量
使用unset删除变量 变量删除以后不能再次使用,且不能删除只读变量 案例:
#! /bin/bash
s_name="张三"
unset s_name
echo $s_name 不会有任何输出
变量类型
- 局部变量
仅当前shell可用
- 环境变量
所有程序都能访问环境变量
- shell变量
通过一部分环境变量和
shell变量保证shell的正常运行
字符串
使用字符串的过程中,既可以用双引号也可以用单引号,也可以不用
- 单引号
单引号内容原样输出,不能包含变量,且不能出现单独单引号
- 双引号
可以出现转义字符
- 长度
使用
#获取字符串长度
- 数组
支持一维数组,数组元素之间通过空格隔开,读取数组,使用
@输出数组所有元素
案例:
#! /bin/bash
array=(value1,value2,value3)
# 读取数组
value1=${array[0]}
# 使用@输出所有元素
echo ${array[@]}
获取数组中数组长度 使用 #
shell传递参数
在执行shell的时候,命令行指定参数,如下所示 "@":所有参数分开
#! /bin/bash
echo "执行文件名为:$0"
echo "第一个参数为:$1"
echo "第二个参数为:$2"
#执行: ./a.sh 1 2
test: 检查某个条件是否成立
特殊字符含义:
- ?# : 传递到脚本的参数个数
- $* :以一个单字符显示所有向脚本传递的参数
- ‘$$’:脚本运行的当前进程Id
- ‘*相同,但是使用时候加引号,并在引号中返回每个参数
- $- :显示shell使用的当前选项
- $? :显示最后命令的退出状态,0表示没有错误,其他值都表示有错
test判断
- -eq 等于
- -ne 不等于
- -gt大于
- -lt 小于
- -le 小于等于
if判断语法
#! /bin/bash
if 条件
then
表达式1
表达式2
fi
if else-if else判断语法
#! /bin/bash
if 条件
then
表达式1
elseif 条件2
then
表达式2
else
表达式3
fi