目 录CONTENT

文章目录

Linux常用命令

FatFish1
2024-11-18 / 0 评论 / 0 点赞 / 71 阅读 / 0 字 / 正在检测是否收录...

系统常用命令

# 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 &

0

评论区