Linux 命令手册

这是一篇非常不垂直的blog,日常见到用到的linux命令 & shell语法记录在此。

date

shell中date命令+表示非设置
date +%s 显示当前时间戳
date -d @ts +%Y-%m-%d %H:%M:%S 显示时间戳ts的年月日时分秒格式的时间
date -d $1 +%s 显示输入参数$1的时间戳
@后面跟时间戳

date 支持语义的转换 例获取上个月的最后一天
 date -d `date +%y%m01`"-1 day"
echo

echo -e 支持转义符号
echo -n 不换行输出

column -t

列对齐

set -e

set -e如果当前shell脚本运行到某一行,code码非0,退出。
set +e即使code码非0,仍然继续执行下面的逻辑。

引号

shell中的三种引号

curl

语法格式 curl [option] url
option
-o 下载的内容默认输出到屏幕,-o指定输出到指定文件,-o后必须跟文件名 curl -o download.txt url

-O 和-o类似,-O是以下载的文件本名作为文件名,也就不用跟文件名了,curl -O url

-s 静默模式,不展示下载的进度和速度等信息。

-L 支持重定向。

-m设置超时时间,curl -m 3 url

-w 获取curl的附加信息,通过%{有效名称} 的方式,curl -w %{http_code} url
有效名称包括:

名称 含义
http_code HTTP状态码
local_ip 本地ip
local_port 本地端口
redirect_url 重定向URL
remote_ip 远端ip
remote_port 远端端口
size_download 下载的数据总字节数
speed_download 平均每秒的下载速度
time_total 完成一次连接请求的总时间

curl 的用法指南

$

$n 第n个参数,当n=0时,表示这条命令本身
$? bash上一条命令的返回值,0表示执行成功!
$*$@ 都表示全部的参数,不同之处是加了引号后:"$*"将把所有参数攒成一个字符串,"$@"把每个参数作为一个字符串返回。
$# 参数的个数。
$! 当前进程号

awk

awk [options] 'pattern {action}' filelist
-F "xx" 指明输入时的字段分隔符
NF 字段数量
NR 当前行号
示例:
awk '{printf("%6.2f %s\n",\$2*\$3,$0)}' xxx.data | sort 按照第2列和第3列的乘积 排序输出,$0是本行

cat access.log.2019070517 | grep /assistantdesk/desk/student/performance | cut -d " " -f 4 | sort | uniq -c | sort -r |head -10 统计日志中第四个参数(例如ip)出现次数最多的前10名

head -1 access.log.2019070517 | awk -F ' ' '{for(i=1;i<=NF;i++){print $i}}' | cat -n 一条日志 行转列 并加行号

grep

grep [options] pattern 文件路径
常用option:
-i : 忽略字母大小写
-v:取反匹配,==过滤
-w:匹配单词,如果grep -w num,那么number不会出来
-q:静默模式

grep --color=auto 高亮匹配
grep -oP pattern 截断匹配的内容
grep xxx -r * 递归匹配当前目录下的xxx
grep "^$" 过滤空白行
grep -v "^$" 过滤非空白行
grep -E "0{1,2}" -E使grep支持扩展正则,grep -E 可用 egrep代替。非扩展的正则表达式大括号和圆括号都需要转义,很烦。
grep -E 'k1|k2'匹配k1或者k2

sed 上古神兵

sed [options] '匹配条件&操作指令;匹配条件&操作指令;' file
options:

选项 功能
-n ,--silent 因为sed命令默认会向屏幕输出,设置此选项后阻止输出
-r 支持扩展正则,sed默认是不支持扩展正则的
-i [suffix] 直接修改源文件,如果设置了后缀名,sed将将数据备份;sed默认是只修改缓冲区的,并打印到屏幕上
-e 指定需要执行的sed命令,支持使用多个-e参数
-f 指定需要执行的脚本文件,需要提前将sed命令写入文件中

基本操作指令

指令 功能
p 打印当前匹配条件匹配的行
l 打印当前匹配条件匹配的行(显示控制字符)
= 打印行号
a text 在匹配的行后添加字符串text,text是独占一行
i text 在匹配的行前添加字符串text,text是独占一行
d 删除匹配的行
c text 将匹配的行的整行替换为text
r filename 从filename中读取内容添加到匹配的行后面
w filename 将匹配的行的内容写到文件filename中
q [exit code] 立刻退出sed脚本
s/regexp/replace/ 使用正则匹配,替换匹配到的数据,不是整行哦;regexp是正则表达式,replace是用来替换的字符串
s/regexp/replace/g 加个g,如果一行数据中有多个regexp,都替换成replace
s/regexp/replace/number 加个n,如果一行数据中有多个regexp,仅仅替换第n个

数据定位方案

格式 功能
数字 1就是第一行; 1,3就是第一行到第三行;
数字1~数字2 数字1是起始行号,数字2是步长,例如1~3 等于匹配1,4,7,……
数字1,+N 从数组1开始及其后面N行,例 1,+3
$ 匹配最后一行
/regexp/ 正则表达式
\cregexpc 使用正则表达式匹配,c可以是任意字符,\xAAx将匹配AA
反操作
find

find path -name "xxx" 按照文件名进行匹配,支持正则
find path -size +2048 按照文件大小进行匹配,+2048是大于,-2048是小于,2048是等于;
单位是数据块,一个数据块=512字节
find path -group root 查找所属组是root的
find path -user root 查找所有者是root的
find path option time 按照时间进行匹配
option :
-amin访问时间,单位分钟;
-cmin属性被修改时间,单位分钟;
-mmin内容被修改时间,单位分钟;
-mtime内容被修改时间,单位天。

time:
+n超过n单位, -n小于n单位, n等于n单位。

find path -type 类型 根据文件类型进行匹配
类型:f是文件 ,d是目录 ,l是软链接
find path -regex exp 根据正则表达式exp匹配
find -maxdepth n 最多搜索n级子目录;
find -mindepth n 从第n级子目录开始搜索;

find balabala -exec command {} 将find到的路径传给command作为参数

组合使用:
exp. find . -maxdepth 2 -a -name test.php
[①-⑤] -a [①-⑤] and操作
[①-⑤] -o [①-⑤] or操作

xargs

配合find使用,-i 获取管道前的内容放到{}中
find . -type f -name "*.log" | xargs -i cp {} /tmp/k/
find . -type d -name "*.php" | xargs -i rm -rf {}

一些其它搜索:
locate file 在文件资料库中查找文件
updatedb 手动更新资料库

which command 搜索命令所在的目录及别名信息
whereis command 搜索命令所在的目录及帮助文档路径

查看磁盘空间

df -h

du -sh path

scp

推到远端ip
scp -r mypath/dir [email protected]:/remotepath/

拉到我的机器
scp -r [email protected]:/remotepath/dir mypath/

修改登陆

su root
passwd homework(用户名)
passwd 是修改root的登陆密码

rm 命令

1、反向删除 rm -rf !(keep) 除了keep正则匹配的文件都删除
可能会报错,执行 shopt -s extglob 设置bash支持正则匹配,可解决这个问题。

能解决95%以上问题的Linux命令

算数运算

$((2+3)) $[2+3] let 5*4 整数四则运算
bc bc计算器
示例:echo "obase=8;15" | bc 将15转换为8进制

条件判断

[\bexp\b] or [[\bexp\b]] or test exp exp是逻辑判断,\b代表空格,必须有。被测试的表达式exp推荐用双引号引起来。


[][[]]的区别:
[[]]支持逻辑运算符 >、 <、 && 、||、==的模式匹配甚至正则表达式,但是[[]]在部分脚本解释器中有(Bash\Zsh等)。

docker相关

获取容器id,装填到containers
containers=$(docker ps | grep base | awk '{print $1}' | xargs -i echo {})
遍历容器id,获取IP=10.100.244.13的容器id
for c in $containers; do echo $c; docker inspect $c | grep IPAddress | grep '10.100.244.13' ;done

软链硬链

ln -s 源文件路径 软链名称 创建软链
ln 源文件路径 硬链名称 创建硬链
软链和硬链的区别:
1、源文件被删除后,软链失效,硬链照常读写(本质是硬链指向源文件inode号,多个文件名指向同一个inode号码,一个文件名删除,不影响其它文件名访问);
2、软链可以跨磁盘、分区,硬链不行。
3、软链可以指向文件夹或者文件,硬链只能指向文件。

cpu性能指标

cr :https://www.cnblogs.com/hapjin/p/6296296.html

性能监控命令 | CPU

①user cpu执行用户进程占用的时间片比例
②system cpu执行系统内核进程占用的时间片比例
③idle cpu执行系统缺省空闲进程占用的时间片比例
④nice 改变过优先级的进程(nice值不为0)因优先级改变而额外配分配的时间片比例
⑤wait 等待io消耗的时间片比例

定时脚本 crontab

1、安装cron yum -y install cron
2、root用户 编辑 /etc/crontab 文件
一个定时任务的格式为 cron表达式 用户名 命令
例:注意 dellog.sh中的路径不能写相对路径,会找不到!
3、systemctl restart crond.service 启动crontab生效

每小时的第50分钟 执行dellog.sh
查看端口信息

netstat -nltp
lsof -i:8000
netstat -anp | grep ${pid} 查看pid监听的端口,eg.nginx的master进程的pid

你可能感兴趣的:(Linux 命令手册)