简述
这是一篇记录集,后续将持续记录工作中所遇到的Linux shell相关问题。
文章目录
- 简述
- IF中判空操作方法
- 常用的 -z -e -o -a 说明
- 常用的文件比较运算符说明
- 数字变量的运算
- 变量内容截取操作(##\*,%%\*)
- Vim查找小技巧
- Linux部分服务器信息查看
- Linux下基于SSH服务的登录转接命令
- 查看进程运行的线程数
- Linux运行脚本出现 “ /bin/bash^M: bad interpreter: 没有那个文件或目录”异常
- Linux 查看用户Home目录
- 查看Linux各个句柄数限制配置
- 查看指定端口连接数
- linux之间文件传输命令scp
- Shell脚本中的变$开头的变量说明
- 查看Linux系统日志
- Linux 上传下载工具
- Memcache 通用启动命令
- 列举挂载目录
- 在文件夹的所有文件中查找某字符
- 时间校正同步
- Linux中 sda, sdb, sdc, sda1, sda2科普
- Linux版本信息查看
- Linux重启指令
- 统计指定文件夹下文件数[find | wc]
IF中判空操作方法
if [ ! -n $1]; then
echo "IS NULL"
else
echo "NOT NULL"
fi
常用的 -z -e -o -a 说明
表达式 | 说明 |
---|---|
-z | 字符串为空 |
-o | 逻辑或,SC2166 中推荐更友好的 && 替代,e.g [ “$1” = “test” -a -z “$2” ] 修改为 [ “$1” = “test” ] && [ -z “$2” ] |
-a | 逻辑与,SC2166 中推荐更友好的 |
常用的文件比较运算符说明
表达式 | 说明 |
---|---|
-x filename | 如果 filename 可执行,则为真 |
-e filename | 如果 filename 存在,则为真 |
-d filename | 如果 filename 为目录,则为真 |
-L filename | 如果 filename 为符号链接,则为真 |
-r filename | 如果 filename 可读,则为真 |
-w filename | 如果 filename 可写,则为真 |
filename1 -nt filename2 | 如果 filename1 比 filename2 新,则为真 |
filename1 -ot filename2 | 如果 filename1 比 filename2 旧,则为真 |
数字变量的运算
假设有变量 a="1"
方法 | 说明 |
---|---|
双括号运算符 | $((a+1)) |
let 声明 | let b=a+1 或 let a+=1 或 let b=`expr a+1` |
变量内容截取操作(##*,%%*)
假设有字符串变量a
表达式 | 说明 |
---|---|
${a#*/} | 删除掉第一个’/'及其左边的字符串 |
${a##*/} | 删除掉最后一个’/'及其左边的字符串 |
${a%*/} | 删除掉第一个’/'及其右边的字符串 |
${a%%*/} | 删除掉最后一个’/'及其右边的字符串 |
Tips:其中‘/’可以是其他需要的字符 |
Vim查找小技巧
- 命令模式下敲斜杆( / )这时在状态栏(也就是屏幕左下脚)就出现了 “/” 然后输入你要查找的关键字敲回车就可以了。
如果你要继续查找此关键字,敲字符 n 就可以继续查找了。
敲字符N(大写N)就会向前查询; - 命令模式下输入":nu"显示当前行号;输入":set nu"显示所有行号
Linux部分服务器信息查看
linux查看CPU信息
grep "model name" /proc/cpuinfo | cut -f2 -d:
linux查看机器内存大小
grep MemTotal /proc/meminfo | cut -f2 -d:
linux查看当前系统版本
more /etc/redhat-release
linux查看CPU位数
getconf LONG_BIT
linux查看磁盘空间
df -hl
补充说明:df是以磁盘分区为单位来查看文件系统。/dev/hdb2 75G 75G 0 100% /, 以此为例。就是HD硬盘接口的第二个硬盘(b)上,里面的第二个分区(2),容量是75G,用了75G,可用是0,因此利用率是100%, 他被挂载到根分区目录上(/)。
查看单个目录磁盘占用空间
du -bs dir_name
linux查看机器硬盘信息
lsblk
Linux下基于SSH服务的登录转接命令
ssh -p 端口 ip
查看进程运行的线程数
根据进程号进行查询
pstree -p 进程号
top -Hp 进程号
根据进程名字进行查询
pstree -p `ps -e | grep server | awk '{print $1}'`
pstree -p `ps -e | grep server | awk '{print $1}'` | wc -l
补充说明:上述两条命令利用了管道和命令替换,关于命令替换,就是用``括起来的命令会优先执行,然后以其输出作为其他命令的参数。
Linux运行脚本出现 “ /bin/bash^M: bad interpreter: 没有那个文件或目录”异常
问题分析
linux和windows之间的不完全兼容,我在windows下编辑的脚本,所以有可能有不可见字符。脚本文件是DOS格式的, 即每一行的行尾以 来标识, 其ASCII码分别是0x0D, 0x0A.
验证是否包含隐藏字符,操作如下
vi test.sh
进入命令模式->:set ff?
如果出现fileforma=dos那么就可以确定是兼容问题
修复方法
:set fileformat=unix 或者 :set ff=unix
:wq
Linux 查看用户Home目录
echo ~username
查看Linux各个句柄数限制配置
ulimit -a
查看指定端口连接数
netstat -n | grep tcp | grep 侦听端口 | wc -l
linux之间文件传输命令scp
复制本地文件目标服务器:
命令格式:
scp local_file remote_username@remote_ip:remote_folder
or
scp local_file remote_username@remote_ip:remote_file
or
scp local_file remote_ip:remote_folder
or
scp local_file remote_ip:remote_file
复制整个目录到目标服务器:
命令格式:
scp -r local_folder remote_username@remote_ip:remote_folder
or
scp -r local_folder remote_ip:remote_folder
带端口复制命令:
scp -P 65422 1.txt winupon@remote_ip:/opt/1.txt
Shell脚本中的变$开头的变量说明
变量名 | 说明 |
---|---|
$$ | Shell本身的PID(ProcessID) |
$! | Shell最后运行的后台Process的PID |
$? | 最后运行的命令的返回值 |
$- | 使用Set命令设定的Flag一览 |
$* | 所有参数列表。如"$*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 |
$@ | 所有参数列表。如"$@“用「”」括起来的情况、以"$1" “ 2 " … " 2" … " 2"…"n” 的形式输出所有参数。 |
$# | 添加到Shell的参数个数 |
$0 | Shell本身的文件名 |
$1~$n | 添加到Shell的各参数值。$1是第1参数、$2是第2参数…。 |
查看Linux系统日志
cat /var/log/messages
一般搭配grep命令使用,一般用于查看系统活动,例如排查Redis无故宕机。如图
Linux 上传下载工具
上传命令:rz -be
下载命令:sz file1 file2 .....
补充:
使用yum安装rz sz工具
yum install -y lrzsz
Memcache 通用启动命令
ps -ef|grep "memched"
kill -s 9 Pid
/usr/local/memcached/bin/memcached -d -m 100 -u root -p 11212
列举挂载目录
df -Th
在文件夹的所有文件中查找某字符
grep -r -e string directory
时间校正同步
/usr/sbin/ntpdate time.nist.gov >>/root/t.log && /sbin/clock --systohc
其中time.nist.gov为时间同步源
Linux中 sda, sdb, sdc, sda1, sda2科普
sda-sdc分别对应系统第一到第三块硬盘,sda1和sda2对应的第一块硬盘sda的两个分区,详细如下:
第一个软驱 /dev/fd0.
第二个软驱 /dev/fd1.
第一块硬盘 /dev/sda.
第二块硬盘 /dev/sdb, 以此类推.
Linux版本信息查看
查看版本当前操作系统内核信息
uname -a
查看当前操作系统版本信息
cat /proc/version
查看当前操作系统发行版信息
cat /etc/redhat-release
查看cpu相关信息,包括型号、主频、内核信息等
cat /proc/cpuinfo
Linux重启指令
- 立即重启
reboot
shutdown -r now
统计指定文件夹下文件数[find | wc]
统计当前目录下文件数量
find -type f|wc -l
统计指定文件夹下指定文件数量
find 文件夹路径 -name 文件名 | wc -l
路漫漫其修远兮,吾将上下而求索。