系统常用命令
# Linux关机重启指令
# 关机
shutdown -h now
# 重启
shutdown -r now
# 查看系统,CPU信息
# 查看系统内核信息
uname -a
# 查看系统内核版本
cat /proc/version
# 查看当前用户环境变量
env
cat /proc/cpuinfo
# 查看有几个逻辑cpu, 包括cpu型号
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
# 查看有几颗cpu,每颗分别是几核
cat /proc/cpuinfo | grep physical | uniq -c
# 查看当前CPU运行在32bit还是64bit模式下, 如果是运行在32bit下也不代表CPU不支持64bit
getconf LONG_BIT
# 结果大于0, 说明支持64bit计算. lm指long mode, 支持lm则是64bit
cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l
# 查看内存cpu状态
free -h
# sshkey
# 创建sshkey
ssh-keygen -t rsa -C your_email@example.com
#id_rsa.pub 的内容拷贝到要控制的服务器的 home/username/.ssh/authorized_keys 中,如果没有则新建(.ssh权限为700, authorized_keys权限为600)
# 后台运行命令
# 后台运行,并且有nohup.out输出
nohup xxx &
# 后台运行, 不输出任何日志
nohup xxx > /dev/null &
# 后台运行, 并将错误信息做标准输出到日志中
nohup xxx >out.log 2>&1 &
# 配置dns
vim /etc/resolv.conf
# nslookup,查看域名路由表
nslookup google.com
# 设置固定ip
ifconfig em1 192.168.5.177 netmask 255.255.255.0
# 查看进程内加载的环境变量
# 也可以去 cd /proc 目录下, 查看进程内存中加载的东西
ps eww -p XXXXX(进程号)
权限相关
权限分级和chmod
字符权限:r、w、x分别为读、写、执行,-为无权限
数字权限:4读、2写、1执行
文件的权限格式:10位文件格式,例如drw-r--r--
第一位表示文件类型,d位文件夹,l为链接,-为普通文件
后9个字符,三个为一组,代表创建者、创建者所在组、其他用户权限
因此drw-r--r--代表该文件级,创建者可读可写,所在组和其他用户仅可读
使用chmod可以对单个文件的读写执行权限进行授权
chmod 777 filename
chmod 751 filename
这里的7=1+4+3即读写执行,5=1+4即可读可执行
需注意的是,直接chmod 777 * -R
不能修改隐藏文件权限
权限归属和chown
chown(英文全拼:change owner)命令用于设置文件所有者和文件关联组的命令,chown 需要超级用户 root 的权限才能执行此命令
# 在k8s中修改属主和属组给service用户
chown 1100:1100 /home/test
# -R递归修改所有子目录和文件权限
chown -R 1100:1100 /home/test
# 修改属组,属主保留
chown :1100 /home/test
添加用户配置权限
# 新增用户
useradd 用户名
passwd 用户名
#增加sudo权限
vim /etc/sudoers
# 修改文件里面的
# root ALL=(ALL) ALL
# 用户名 ALL=(ALL) ALL
进程相关
# 查看进程启动路径
cd /proc/xxx(进程号)
ls -all
# cwd对应的是启动路径
# 强制关闭进程名包含xxx的所有进程
ps aux|grep xxx | grep -v grep | awk '{print $2}' | xargs kill -9
# 查询进程
pp 查java进程 ps -ef | grep java 也可以查java进程
# 强制输出某时刻的堆栈信息
kill -3 PID
-0:EXIT 程序退出时收到信息
-2:INT 即ctrl+c效果,结束进程
-3:QUIT 退出
-11:SEGV 段错误
-9:KILL 杀死
-15:TERM 正常结束
磁盘和文件相关
# 查看磁盘, 文件目录基本信息
# 查看磁盘挂载情况
mount
# 查看磁盘分区信息
df
# 查看目录及子目录大小
du -H -h
# 查看当前目录下各个文件, 文件夹占了多少空间, 不会递归
du -sh *
# 移动、复制文件
# 复制文件
cp 文件 目标路径(带文件名可以改名)
# 移动文件不保留原始文件
mv 文件 目标路径(带文件名可以改名)
# 建立软连接
ln -s /usr/local/jdk1.8/ jdk
还有一个很重要的ls命令列出文件及目录,可选参数如下:
# -l 列出文件及目录,一般带参数用,不然在当前目录不加参数输出的就是一个点
ls -l
# -d 仅列当前目录本身
ls -ld xx/yy # 列出xx/yy这个目录的详细信息
# -a 列出隐藏文件
ls -a
文本/日志相关
字符统计 - wc命令
# wc命令
# 查看文件里有多少行
wc -l filename
# 看文件里有多少个word
wc -w filename
# 文件里最长的那一行是多少个字
wc -L filename
# 统计字节数
wc -c
# 统计字符数
wc -m
vim编辑器
# vim操作
#normal模式下 g表示全局, x表示查找的内容, y表示替换后的内容
:%s/x/y/g
#normal模式下
0 # 光标移到行首(数字0)
$ # 光标移至行尾
shift + g # 跳到文件最后
gg # 跳到文件头
# 显示行号
:set nu
# 去除行号
:set nonu
# 检索
/xxx(检索内容) # 从头检索, 按n查找下一个
?xxx(检索内容) # 从尾部检索
# 打开只读文件,修改后需要保存时(不用切换用户即可保存的方式)
# 在normal模式下
:w !sudo tee %
cat检索
# 查看, 去除特殊字符
# 查看特殊字符
cat -v xxx.sh
# 去除特殊字符
sed -i 's/^M//g’ env.sh 去除文件的特殊字符, 比如^M: 需要这样输入: ctrl+v+enter
# 处理因系统原因引起的文件中特殊字符的问题
# 可以转换为该系统下的文件格式
cat file.sh > file.sh_bak
# 先将file.sh中文件内容复制下来然后运行, 然后粘贴内容, 最后ctrl + d 保存退出
cat > file1.sh
# 在vim中通过如下设置文件编码和文件格式
:set fileencodings=utf-8 ,然后 w (存盘)一下即可转化为 utf8 格式,
:set fileformat=unix
# 在mac下使用dos2unix进行文件格式化
find . -name "*.sh" | xargs dos2unix
# 在压缩包中搜索内容,展示前xx行
zcat “name” xxx.zip | head -1000
more - 分页展示
# 常用操作
空格 下一行
b 上一页
# 参数
-num 一次显示的行数
-p 显示下一页时先清屏
-s 连续空行合并
less命令
分页显示但更强大,more不能向前翻,less可以
# 常用操作
d 向后半页
u 向前半页
b 向前一页
y 向前一行
回车 向后一行
空格 向后一页
pageup、pagedown 向前/后一页
# 参数
-f 强制打开
-I 忽略大小写
-s 合并连续空行
grep检索
# grep
# 反向匹配, 查找不包含xxx的内容
grep -v xxx
# 排除所有空行
grep -v '^/pre>
# 返回结果 2,则说明第二行是空行
grep -n “^$” 111.txt
# 查询以abc开头的行
grep -n “^abc” 111.txt
# 同时列出该词语出现在文章的第几行
grep 'xxx' -n xxx.log
# 计算一下该字串出现的次数
grep 'xxx' -c xxx.log
# 比对的时候,不计较大小写的不同
grep 'xxx' -i xxx.log
# grep的查找路径也可以是模糊的
grep ‘xxx’ /log/mylog*.log
# 取文件的时候只取最后一个,只取头可以head,找特定可以grep
grep 'xxx' xxx.log | tail -1
# grep常用参数
-i:忽略大小写
-l:只输出匹配内容
-n:显示行号
-c:只输出匹配行数
-v 反向匹配
awk辅助检索
# awk辅助检索
# 以':' 为分隔符,如果第五域有user则输出该行
awk -F ':' '{if ($5 ~ /user/) print $0}' /etc/passwd
# 统计单个文件中某个字符(串)(中文无效)出现的次数
awk -v RS='character' 'END {print --NR}' xxx.txt
find查找
# find检索命令
# 在目录下找后缀是.mysql的文件
find /home/eagleye -name '*.mysql' -print
# 会从 /usr 目录开始往下找,找最近3天之内存取过的文件。
find /usr -atime 3 –print
# 会从 /usr 目录开始往下找,找最近5天之内修改过的文件。
find /usr -ctime 5 –print
# 会从 /doc 目录开始往下找,找jacky 的、文件名开头是 j的文件。
find /doc -user jacky -name 'j*' –print
# 会从 /doc 目录开始往下找,找寻文件名是 ja 开头或者 ma开头的文件。
find /doc \( -name 'ja*' -o- -name 'ma*' \) –print
# 会从 /doc 目录开始往下找,找到凡是文件名结尾为 bak的文件,把它删除掉。-exec 选项是执行的意思,rm 是删除命令,{ } 表示文件名,“\;”是规定的命令结尾。
find /doc -name '*bak' -exec rm {} \;
tail和head
# tail和head
tail -f 循环读取
tail -n 行数
sed - 流编辑器
# 格式
sed的命令格式:sed [options] 'command' file(s);
sed的脚本格式:sed [options] -f scriptfile file(s);
# 选项
-e :直接在命令行模式上进行sed动作编辑,此为默认选项;
-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作;
-i :直接修改文件内容;
-n :只打印模式匹配的行;
-r :支持扩展表达式;
-h或--help:显示帮助;
-V或--version:显示版本信息
# 参数
文件:指定待处理的文本文件列表。
# 编辑器常用命令
a\ 在当前行下面插入文本;
i\ 在当前行上面插入文本;
c\ 把选定的行改为新的文本;
d 删除,删除选择的行;
D 删除模板块的第一行;
s 替换指定字符;
h 拷贝模板块的内容到内存中的缓冲区;
H 追加模板块的内容到内存中的缓冲区;
g 获得内存缓冲区的内容,并替代当前模板块中的文本;
G 获得内存缓冲区的内容,并追加到当前模板块文本的后面;
l 列表不能打印字符的清单;
n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令;
N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码;
p 打印模板块的行。 P(大写) 打印模板块的第一行;、
q 退出Sed;
b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾;
r file 从file中读行;
t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾;
T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾;
w file 写并追加模板块到file末尾;
W file 写并追加模板块的第一行到file末尾
! 表示后面的命令对所有没有被选定的行发生作用;
= 打印当前行号;
# 把注释扩展到下一个换行符以前;
# sed替换标记
g 表示行内全面替换;
p 表示打印行;
w 表示把行写入一个文件;
x 表示互换模板块中的文本和缓冲区中的文本;
y 表示把一个字符翻译为另外的字符(但是不用于正则表达式);
\1 子串匹配标记;
& 已匹配字符串标记;
# sed元字符集
^ 匹配行开始,如:/^sed/匹配所有以sed开头的行;
$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行;
. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d;
* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行;
[] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed;
[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行;
\(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers;
& 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**;
\< 匹配单词的开始,如:/\
\> 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行;
x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行;
x\{m,\} 重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行;
x\{m,n\} 重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行;
awk命令
awk逐行读取文本,默认以空格或Tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或条件执行编辑命令
awk的格式如下:awk ‘{命令 内容}’
在结合管道和k8s命令时,可以快速搜索pod:
kubectl get pods | grep myservice | awk '{print $1}'
# 获取全部pod
# 查找叫myservice的
# awk命令执行print,输出占位符为$1的部分
awk和xargs结合可以实现一些循环操作
tee命令 - 标准输入输出
用于读取标准输入的数据,并将其内容输出成文件
参数:
-a:附加模式,不覆盖
-l:忽略中断信号
tee file1 file2 # 在两个文件之间复制内容
网络相关
crul命令
# curl 发送请求
curl -k -X POST -H 'Authorization:token' -H 'Content-Type: application/json' -d '{"name": "vipTest1","vpcId": "1546774307671072768","subnetId": "96e6148f-486b-41ce-8694-16f249002d96","fixedIp": "192.168.10.222"}' localhost:8080/vpc/v1/vips
-H 请求头
-k 跳过整数验证,如果有SSL验证不通过可以加
-d POST内容
-X 请求协议
nc命令
nc www.baidu.com 80 # 与百度建立连接
ping和telnet
ping ip
telnet ip port
打包压缩相关
# 打包不压缩
tar -czvf name.tar 源文件
# 解包不解压缩
tar -xzvf name.tar
# 打包同时压缩成gz
tar -czvf name.tar.gz 源文件
# 解包同时解压缩,到对应目录
tar -xzvf name.tar.gz -C /data/
# 压缩为zip格式
zip -f mytxt.zip t3.txt
# 解压zip格式文件
unzip name.zip
# gzip压缩
gzip -c file > newname.gz 不影响源文件
gzip -f file 覆盖源文件压缩
# gzip解压
guinzip file.gz
split - 分割
split [--help][--version][-<行数>][-b <字节>][-C <字节>][-l <行数>][要切割的文件][输出文件名]
-<行数> : 指定每多少行切成一个小文件
-b<字节> : 指定每多少字节切成一个小文件,也可以指定 K、M、G、T 等单位
--help : 在线帮助
--version : 显示版本信息
-C<字节> : 与参数"-b"相似,但是在切 割时将尽量维持每行的完整性
[输出文件名] : 设置切割后文件的前置文件名, split会自动在前置文件名后再加上编号
压缩+分割经典案例如下:
tar czf - test.text | split -b 1m - dest_split.
top命令
top命令结果说明
top命令的结果分为两部分:
统计信息:前五行是系统的整体统计信息。
进程信息:统计信息下方类似表格的区域显示的是进程的详细信息,默认5秒刷新一次。
统计信息说明:
第1行:top任务队列信息(系统运行状态及平均负载),与uptime命令结果相同。
第一段:系统当前时间,例如:10:57:04
第二段:系统运行时间,未重启的时间,时间越长系统越稳定。例如:up 778 days, 17:53;
格式:up xx days, HH:mm
第三段:登录用户数,例如:3 users,表示当前有3个用户登录。
第四段:系统负载,即任务队列的平均长度,3个数值分别统计最近1、5、15分钟的系统平均负载。
系统平均负载:单核CPU情况下,0.00表示没有任何负载,1.00表示刚好满负荷,超过1表示超
负荷,理想值是0.7。
多核CPU负载:CPU核数*0.7理想值=理想负荷,例如:8核CPU负载不超过5.6表示没有出现高负载。
第2行:Tasks任务进程相关信息
第一段:进程总数,405 total表示总共运行405个进程。
第二段:正在运行的进程数,例如:1 running表示有一个正在运行的进程。
第三段:正在睡眠的进程数,例如:404 sleeping。
第四段:停止的进程数,例如:0 stopped。
第五段:僵尸进程数,例如:0 zombile。
第3行:CPU相关信息,如果是多核CPU,按数字1可以显示多核CPU信息,此时第一段将转换为CPU核数,数字1可以来回切换。
第一段:us用户空间占用CPU百分比,例如:Cpu(s):5.8%us。
第二段:sy内核空间占用CPU百分比,例如:1.2%sy。
第三段:ni用户进程空间内改变过优先级的进程占用的百分比,例如:0.00%ni。
第四段:id空闲CPU百分比,例如:94.2%id。
第五段:wa等待输入输出的CPU时间百分比,例如:0.00%wa。
第六段:hi CPU服务于硬件中断所耗费的时间总额,例如:0.0%hi。
第七段:si CPU服务软中断所耗费的时间总额,例如:0.0%si。
第八段:st Steal time 虚拟机被hypervisor偷去的CPU时间(如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)。
第4行:Mem 内存相关信息(Mem: 32815228k total, 32146340k used, 668888k free, 73948k buffers)
第一段:物理内存总量,例如: 32815228k total。
第二段:使用的物理内存总量,例如:Mem: 32815228k total。
第三段:空闲内存总量,例如:668888k free。
第四段:用作内核缓存的内存量,例如:73948k buffers。
第5行:Swap 交换分区相关信息(Swap: 8524272k total, 7075992k used, 1448280k free, 7757408k cached)
第一段:交换区总量,例如:Swap: 8524272k total。
第二段:使用交换区总量,例如:7075992k used。
第三段:空闲交换区总量,例如:1448280k free。
第四段:缓冲的交换区总量,例如: 7757408k cached。
进程信息说明
进程信息说明:
在top命令中按f可以查看显示的列信息,按对应的字母来开启或者关闭列,大写字母表示开启,小写字母表示关闭,带*号的标识默认列。
* A: PID = Process Id(进程ID)
* E: USER = User Name(进程所有者的用户名)
* H: PR = Priority(优先级)
* I: NI = Nice value(nice值,负值表示高优先级,正值表示低优先级)
* O: VIRT = Virtual Image (kb)(进程使用的虚拟内存总量,单位kb,VIRT=SWAP+RES)
* Q: RES = Resident size (kb)(进程使用的,未被换出的物理内存大小,单位kb,RES=CODE+DATA)
* T: SHR = Shared Mem size (kb)(共享内存大小,单位kb)
* W: S = Process Status(进程状态,D=不可终端的进程状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
* K: %CPU = CPU usage(上次更新到现在的CPU时间占用百分比)
* N: %MEM = Memory usage (RES)(进程使用的物理内存占用百分比)
* M: TIME+ = CPU Time, hundredths(进程使用的CPU时间占比,单位1/100秒)
b: PPID = Parent Process Pid(父进程ID)
c: RUSER = Real user name
d: UID = User Id(进程的所有者的用户ID)
f: GROUP = Group Name(进程所有者的组名)
g: TTY = Controlling Tty(启动进程的终端名,不是从终端启动的进程则显示为?)
j: P = Last used cpu (SMP)(最后使用的CPU,仅在多CPU环境下有意义)
p: SWAP = Swapped size (kb)(进程使用的虚拟内存中,被换出的大小,单位kb)
l: TIME = CPU Time(进程使用的CPU时间总计,单位秒)
r: CODE = Code size (kb)(可执行代码占用物理内存大小,单位kb)
s: DATA = Data+Stack size (kb)(可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb)
u: nFLT = Page Fault count(页面错误次数)
v: nDRT = Dirty Pages count(最后一次写入到现在,被修改过的页面数)
y: WCHAN = Sleeping in Function(若该进程在睡眠,则显示睡眠中的系统函数名)
z: Flags = Task Flags <sched.h>(任务标志)
* X: COMMAND = Command name/line(命令名/命令行)
top命令选项
-b:以批处理模式操作;
-c:显示完整的治命令;
-d:屏幕刷新间隔时间;
-I:忽略失效过程;
-s:保密模式;
-S:累积模式;
-i<时间>:设置间隔时间;
-u<用户名>:指定用户名;
-p<进程号>:指定进程;
-n<次数>:循环显示的次数
top命令交互
黑屏操作:
常用交互操作
1 基础操作
1:显示CPU详细信息,每核显示一行
d / s :修改刷新频率,单位为秒
h:可显示帮助界面
n:指定进程列表显示行数,默认为满屏行数
q:退出top
2 面板隐藏显示
l:隐藏/显示第1行负载信息;
t:隐藏/显示第2~3行CPU信息;
m:隐藏/显示第4~5行内存信息;
3 进程列表排序
M:根据驻留内存大小进行排序,或shift+m也可以
P:根据CPU使用百分比大小进行排序;
T:根据时间/累计时间进行排序;
4 详细交互指令:h / ? 可显示帮助界面,原始为英文版,简单翻译如下:
Help for Interactive Commands - procps version 3.2.8
Window 1:Def: Cumulative mode Off. System: Delay 3.0 secs; Secure mode Off.
Z,B Global: 'Z' change color mappings; 'B' disable/enable bold
Z:修改颜色配置;B:关闭/开启粗体
l,t,m Toggle Summaries: 'l' load avg; 't' task/cpu stats; 'm' mem info
l:隐藏/显示第1行负载信息;t:隐藏/显示第2~3行CPU信息;m:隐藏/显示第4~5行内存信息;
1,I Toggle SMP view: '1' single/separate states; 'I' Irix/Solaris mode
1:单行/多行显示CPU信息;I:Irix/Solaris模式切换
f,o . Fields/Columns: 'f' add or remove; 'o' change display order
f:列显示控制;o:列排序控制,按字母进行调整
F or O . Select sort field 选择排序列
<,> . Move sort field: '<' next col left; '>' next col right 上下移动内容
R,H . Toggle: 'R' normal/reverse sort; 'H' show threads
R:内容排序;H:显示线程
c,i,S . Toggle: 'c' cmd name/line; 'i' idle tasks; 'S' cumulative time
c:COMMAND列命令名称与完整命令行路径切换;i:忽略闲置和僵死进程开关;S:累计模式切换
x,y . Toggle highlights: 'x' sort field; 'y' running tasks
x:列排序;y:运行任务
z,b . Toggle: 'z' color/mono; 'b' bold/reverse (only if 'x' or 'y')
z:颜色模式;b:粗体开关 仅适用于x,y模式中
u . Show specific user only 按用户进行过滤,当输入错误可按Ctrl + Backspace进行删除
n or # . Set maximum tasks displayed 设置进程最大显示条数
k,r Manipulate tasks: 'k' kill; 'r' renice
k:终止一个进程;r:重新设置一个进程的优先级别
d or s Set update interval 改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s;
W Write configuration file 将当前设置写入~/.toprc文件中
q Quit 退出
( commands shown with '.' require a visible task display window )
注意:带.的命令需要一个可见的任务显示窗口
Press 'h' or '?' for help with Windows, any other key to continue
其他命令
模拟给cpu加压
dd if=/dev/zero of=/dev/null &
评论区