一、Linux常用命令:
Expect实现scp 免交互执行命令
远程文件拷贝 scp 基于ssh登陆进行安全的远程文件拷贝命令。(ssh基于SSL加密)
scp -r ./test.sh root@172.16.72.120:/root/
再输入密码登陆。
telnet是明文传输,适用于局域网内。
expect实现免交互:spawn scp -r ........
执行.exp 文件。
示例脚本如下:
#! /bin/expect #使用expect解释器执行
set src_file [ lindex $argv 0 ]
set dest_file [ lindex $argv 1 ]
set host_ip [ lindex $argv 2 ]
set username [ lindex $argv 3 ]
set password [ lindex $argv 4 ]
spawn scp -r $src_file $username@$host_ip:$dest_file
expect {
"yes/no" { send "yes\r"; exp_continue }
"password:" { send "$password\r" } #需要\r结束,回车确认
}
expect 100%
expect eof
# 每行按空格或TAB分割,输出文本中的1、4项
$ awk '{print $1,$4}' log.txt
ifconfig、ip addr、tail、 top、 head/tail
mount :远程挂载windows共享目录命令:mount -t cifs //$ip/$share /mnt -o [user];
挂载U盘: mount /dev/sda4 /mnt/
grep -i或--ignore-case 忽略字符大小写的差别
-v或--revert-match 反转查找
-n 显示行号
-c 查询个数
安装rpm包: rpm -ivh xxx.rpm
文件描述符FD
File Desciption,当应用程序请求内核打开/新建一个文件时,内核会返回一个文件描述符用于对这个打开/新建的文件,是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。
应用程序进程拿到的文件描述符 ID == 进程文件描述符的索引,通过索引拿到文件指针,指向系统级文件描述符表的文件偏移量,再通过文件偏移量找到inode指针,最终对应到真实的文件。
0-标准输入、1-标准输出、2-标准错误
exec 3<file 将file读入到fd3中
exec 4>file 将fd4中的内容写到file中
exec 5<&4 创建fd4中的拷贝-fd5
exec 3<&- 关闭fd3
2> &1 将标准错误重定向到标准输出
make install 2> /dev/null 执行命令时不报错,将错误重定向到null
> 为创建, echo "hello" > out.txt
>> 为追加,echo "helle" >> out.txt :将hello 追加保存到 out.txt的末尾
du :disk usage 用于显示目录或文件的大小,参数:-h或--human-readable 以K,M,G为单位,提高信息的可读性 。
查看文件大小:du -h
df:disk free 命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计-h或--human-readable 以K,M,G为单位,提高信息的可读性 。
查看磁盘空间:df -hl
cat * | wc -l :查询文件的总行数,原理就是统计文件中换行符的数量。
ps -ef | grep test.sh | grep -v grep | wc -l
—统计执行test.sh的进程,过滤掉grep的。单例模式。
查看日志格式化命令: column
查看占用端口: lsof -i:8080
查看Linux内核版本:
uname -a
cat /proc/version
lsb release -a
cat /etc/redhat-release
或者系统日志中查找,dmesg/messages 中搜索 linux version
查看资源限制:
ulimit -a 列出所有当前资源极限
ulimit -n 每个进程可以同时打开的最大文件数
ulimit -s 指定堆栈的最大值
ulimit -v shell可使用的最大的虚拟内存
vi 编辑器批量替换:
例如将文件tihuan中所有的字符auto 替换成 wide,具体步骤如下:
1、vi tihuan 进入编辑模式
2、按ESC键,并在:后输入 %s/auto/wide/g
其中s 表示substitute, %表示所有行,g表示global 全部
如果需要替换指定部分,如文件34行至78行之间,输入 : 34,78s/a/w/
shell脚本转换成unix格式文件:
1、vi编辑器下 :set ff=unix #fileformat
2、在Notepad++等编辑器下修改 文件格式为UNIX
alias 的使用
如何避免rm -rf ? 可以用 rm -i 每次删除都要确认的。
1、在 ~/.zshrc 或者 ~/.bashrc(根据具体shell而定)添加一句 alias rm='rm -i'
2、source ~/.bashrc 立即生效即可。
实现脚本的单例运行:使用Flock 文件锁
方法一:
LOCK_FILE=/tmp/%0.lock
exec 99>"$LOCK_FILE" #表示创建文件描述符99,指向锁文件。
flock -n 99 #非阻塞获取锁文件。没有立即获得锁,直接失败(而不是等待)
if [[ $? -ne 0 ]]
then
echo "$0 is running"
exit 1
fi
echo "now start running sleeep.sh"
sleep 512
方法二: man flock查看
#! /bin/bash
#在需要单例执行的脚本前加上以下一行。
[ "${FLOCKER}" != "$0" ] && exec env FLOCKER="$0" flock -en "$0" "$0" "$@" || :
echo "now start running sleeep4.sh
sleep 512
crontab定时任务中同样可以 添加flock -xn 去单例执行定时任务。
crontab -e #编辑任务
flock -xn /tmp/auto.lock -c /root/test/auto.sh >> /root/test/auto.log 2>&1
环境变量的配置:
系统级别: /etc/profile 用户级别: ~/.bashrc
自定义全局环境变量(需要root权限)
1、在/etc/profile 中定义,有如下3种方法:
A、export 变量名=value #export work_dir=/root/Desktop
B、变量名=value ; export 变量名 #work_dir=/root/Desktop ; export work_dir
C、declare -x 变量名=value #declare -x work_dir=/root/Desktop
2、执行 source /etc/profile 立即生效即可。
应用:Linux系统下设置上网代理:
1、编辑/etc/profile,设置变量
export http_proxy=http://username:password@proxy_ip:port
export https_proxy=http://username:password@proxy_ip:port
2、更新环境文件
source /etc/profile
3、测试连接外网
curl -v www.baidu.com
***注意,当password存在特殊符号@时,如何解决?
将特殊符号转换成ASIIC码输入
~:0x7E !:0x21 @:0x40 #:0x23 *:0x2A
$:0x24 %:0x25 ^:0x5E &:0x26 ?:0x3F
二、如何在后台运行Linux命令?
—在命令后加上符号 & ,将一个进程放在后台运行。用进程ID来恢复/终止对应进程。
例如: ping -c 172.16.72.120 > out.log 2>&1 &
将ping命令重定向到out.log里,遇到错误时也输出,&表示后台执行。
三、Linux下 开机自动重启脚本(该总结参考自微信公众号:良许Linux)
1、在 /etc/rc.local 中去完成开机执行。
2、crontab (定时任务)实现:
首先,crontab -e 编辑定时任务(这个玩法挺高级的)
其次,添加 @reboot /root/script/test.sh,重启时自动执行该脚本。
3、通过Systemd实现:
首先,编写一个名为test的Systemd服务
$ vim /lib/systemd/system/test.service
[Unit]
Description=test
After=default.target
[Service]
ExecStart=/root/script/test.sh
[Install]
WantedBy=default.target
然后,启用这个Systemd服务,开机时就会自动执行该服务对应的脚步
$ systemctl daemon-reload
$ systemctl enable test.service
四、常用Linux版本和内核对照关系
Linux 内核版本号释义,例如 Linux version 3.10.0-693.el7.x86_64
第一项:3 当前内核主版本号
第二项:10 当前内核次版本号;稳定版(次版本号为偶数),开发版(次版本号为奇数)
第三项:0-693 0表示当前内核更新次数,693表示当前内核修补次数
第四项:el7 当前内核为RHEL 7版本
第五项:x86_64 代表64bit系统
普通OS镜像查看路径: install\vmlinuz
live OS镜像路径:\casper\vmlinuz
1、ubuntu(基于Debian)
ubuntu 16.04: linux version 4.4.0-21-generic (buildd@lgw01-21)
ubuntu 16.10: linux version 4.8.0-22-generic (buildd@lgw01-11)
ubuntu 17.04: linux version 4.10.0-19-generic (buildd@lcy01-13)
ubuntu 17.10.1: linux version 4.13.0-21-generic (buildd@lgw01-amd64-037)
ubuntu 18.04.1: linux version 4.15.0-29-generic (buildd@lgw01-amd64-057)
ubuntu 18.04.2: linux version 4.15.0-45-generic (buildd@lgw01-amd64-031)
ubuntu 18.10: linux version 4.18.0-10-generic (buildd@lgw01-amd64-060)
ubuntu 19.04: linux version 5.0.0-13-generic (buildd@lcy01-amd64-020)
2、RHEL/CentOS
Red Hat Enterprise Linux 6.5(64 bit) linux version 2.6.32-431.el6.x86_64
Red Hat Enterprise Linux 6.6(64 bit) linux version 2.6.32-504.el6.x86_64
Red Hat Enterprise Linux 6.7(64 bit) linux version 2.6.32-573.el6.x86_64
Red Hat Enterprise Linux 6.8(64 bit) linux version 2.6.32-642.el6.x86_64
Red Hat Enterprise Linux 6.9(64 bit) linux version 2.6.32-696.el6.x86_64
Red Hat Enterprise Linux 7.0(64 bit) linux version 3.10.0-123.el7.x86_64
Red Hat Enterprise Linux 7.1(64 bit) linux version 3.10.0-229.el7.x86_64
Red Hat Enterprise Linux 7.2(64 bit) linux version 3.10.0-327.el7.x86_64
Red Hat Enterprise Linux 7.3(64 bit) linux version 3.10.0-514.el7.x86_64
Red Hat Enterprise Linux 7.4(64 bit) linux version 3.10.0-693.el7.x86_64
Red Hat Enterprise Linux 7.5(64 bit) linux version 3.10.0-862.el7.x86_64
Red Hat Enterprise Linux 7.6(64 bit) linux version 3.10.0-957.el7.x86_64
Red Hat Enterprise Linux 8.2(64 bit) linux version 4.18.0-193.el8.x86_64
打开ISO镜像,到rpm包的目录里面去找到kernel-********.P这个包,中间的星号那一段就是内核
\Packages\kernel-3.10.0-693.el7.x86_64.rpm
基于Debian的OS:Debian、Ubuntu、Google Chrome OS
基于RedHat:RHEL、CentOS、Oracle Linux
其他:Suse
五、软件包管理
1、rpm是RedHat公司的软件包管理机制,内部自动处理软件包的依赖关系。
yum:基于rpm包管理,从指定服务器自动下载rpm包并安装。
yum(Yellow Dog Updater,Modified) 配置文件:/etc/yum.conf
repo:在/etc/yum.repos.d 目录下增加.repo 文件来配置repo 源的地址,定义不同的仓库源。
更新:yum update
安装:yum install XXX
移除:yum remove XXX
清除已安装过的档案(/var/cache/yum/): yum clean all
列出所有档案:yum list
搭建yum仓库:
yum repolist
vi /abc.repo #创建本地yum源文件
[abc] #文件名
name=abe
baseurl=file:///mnt #指定安装源挂载路径
enabled=1 #开启yum仓库
gpgcheck=0 #不检查软件序列号
RPM命令:
1、安装指定rpm文件: rpm -ivh xxx.rpm
2、更新指定rpm文件: rpm -uvh xxx.rpm
3、删除软件包: rpm -e xxx.rpm
4、查询软件包包含的所有文件列表: rpm -ql xxx
5、查询文件属于哪个
6、查询默认软件包是否安装: rpm -q xxx
5、查询系统已安装的所有软件包: rpm -qa
2、Ubuntu中的软件管理方法 apt-get
更新:sudo apt-get update
安装:sudo apt-get isntall package
移除:sudo apt-get remove package
六、硬件相关
cat /proc/cpuinfo 查看CPU 信息,可看到OS的线程属于哪个物理CPU。
驱动位置: cd /lib/modules/3xxx/kernel/driver/scsi/ modinfo 驱动模块
sosreport 收集系统日志
/var/log/messages 查看驱动
sos_commands/pci/lspci 根据BDF查看PCIe设备和驱动名
U盘格式:U盘作为系统启动盘,建议选择FAT32格式,引导系统启动的兼容性较好;
普通使用时,建议选择exFAT格式。
windows下查看USB驱动版本:右键我的电脑-管理-设备管理器-找到USB设备-右键-属性-驱动程序;
windows下查看VGA驱动版本:CMD运行dxdiag - DirectX诊断工具。
查看物理CPU个数
cat /proc/cpuinfo| grep “physical id”| sort | uniq| wc -l
查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep “cpu cores” | uniq
查看逻辑CPU的个数
cat /proc/cpuinfo| grep “processor”| wc -l
数据库IO:
IO的四种类型:连续读、随机读、连续写、随机写,连续读写的IO size通常比较大(128KB-1MB),主要衡量吞吐量;而随机读写的IO size比较小(小于8KB),主要衡量IOPS和响应时间。
数据库中的全表扫描是连续读IO,索引访问是典型的随机读IO,日志文件是连续写IO,而数据文件是随机写IO。