写点什么

【玩转 Linux】史上最详细的 Linux 命令大全和线上问题排查手册

  • 2021 年 11 月 11 日
  • 本文字数:4942 字

    阅读完需:约 16 分钟

mv 源文件 目标文件

6、查看文件内容

cat file.log | grep "test"


more -c -10 +100 file.log #显示文件 file 的内容,每 10 行显示一次,而且在显示之前先清屏。从 100 行开始


less file.log

7、文件权限


user:该文件的拥有者对文件的操作权限


group:跟拥有者同组的其他用户对该文件的操作权限


other:其他用户对该文件的操作权限


a)对于文件而言:


r:可读 w:可写 x:可执行


b)对于目录而言:


r:可以用 ls 命令查看目录中的内容


w:表示可以在该目录下建立或删除文件及子目录


x:表示可以用 cd 命令进入该目录

8、改变文件或目录的权限

chmod [ugo][+-][rwx] 文件


chmod u=rwx 文件


chmod -R 755 目录

9、改变文件或目录的拥有者

chown 用户名 文件名


chown -R 用户名 目录

10、改变文件或目录的所属组

chgrp 用户名 文件名


chgrp -R 用户名 目录


chgrp -R 用户名:用户名 目录

11、文件下载(wget)

wget URL:下载单个文件


wget -O xxx.zip URL:下载并重命名


wget –limit-rate=300k URL:下载限速


wget -c URL:断点续传


wget -b URL:后台下载


wget –spider URL:测试下载链接


wget -i 文件:下载多个文件 (文件中含多个 URL)


wget –mirror -p –convert-links -P ./LOCAL URL :下载整个网站到本地


wget –reject=gif url:过滤指定格式下载整个网址


wget -r -A 下载指定格式文件:下载整个网址指定格式文件

12、文件搜索(find)

find / -name file :从 '/' 开始进入根文件系统搜索文件和目录


find / -user yunfan:搜索属于用户 'yunfan' 的文件和目录


find /home/yunfan -name *.bin:在目录 '/ home/yunfan' 中搜索带有'.bin' 结尾的文件


find /usr/bin -type f -atime +100:搜索在过去 100 天内未被使用过的执行文件


find /usr/bin -type f -mtime -10:搜索在 10 天内被创建或者修改过的文件

13、统计文件大小

du -h:显示文件大小


du -H:显示文件大小(K,M,G 是以 1000 为换算单位)


du -c:统计总和


du|sort -nr|more:按照空间大小排序


du -h --max-depth=1:子目录所占的空间


du -sh ./*:统计当前路径的所有目录大小


三、用户操作



1、用户切换

su - root #普通用户->超级用户


su 用户名 #超级用户->普通用户

2、修改密码

passwd + 用户名 #超级用户


passwd #普通用户

3、用户新增

useradd 用户名 #新增用户:


useradd -m -d 路径 用户名 #新增用户时,指定主目录

4、用户删除

userdel 用户名 #删除用户


userdel -r 用户 #删除用户,同时删除宿主目录

5、Linux 中与用户管理相关的文件

/etc/passwd #存放用户的密码信息


/etc/shadow #用户密码的影子文件


/etc/group #用户的组文件


/etc/gshadow #组的影子文件


这四个文件一般都不用手工更改,都是通过命令来实现。


四、压缩和打包



1、gzip 压缩后的文件是.gz 格式

压缩:gzip 文件名 或 gzip -r 目录


解压缩:gunzip 压缩文件 或 gzip -d 压缩文件

2、zip 压缩后的文件为.zip 格式(压缩、解压缩都保留原文件)

压缩:zip 压缩文件 源文件 1 源文件 2 ….


zip -r 压缩文件 源文件 1 源文件 2….


解压缩:unzip 压缩后的文件

3、bzip2 压缩后的扩展名是.bz2

压缩:bzip2 文件名


解压缩:bunzip2 压缩文件 或 bzip2 -d 压缩文件

4、将 a、b、c、d 这四个文件打包成一个文件:file.tar

tar -cvf file.tar a b c d

5、解这种包

tar -xvf file.tar

6、打包同时进行压缩

tar -zcvf file.tar.gz a b c d

7、解这种包

tar -zxvf file.tar.gz

8、查看包

tar -tf file.tar


五、系统性能



1、查看物理 CPU 个数

cat /proc/cpuinfo| grep "physical id"| wc -l

2、查看每个物理 CPU 中 core 的个数(即核数)

cat /proc/cpuinfo | grep "cpu cores" | uniq

3、查看 CPU 型号

cat /proc/cpuinfo | grep 'model name' |uniq

4、查看逻辑 CPU 的个数

cat /proc/cpuinfo| grep "processor"| wc -l

5、查看内存

cat /proc/meminfo | grep MemTotal

6、查看磁盘空间

fdisk -l #看到的是物理磁盘大小(包括 swap 分区的物理大小)


df -h #看到的是文件系统使用状况(不包括 swap 分区)

7、检查内存使用情况

[root@localhost ~]# free -h -s 3


total used free shared buff/cache available


Mem: 1.7G 835M 67M 568K 831M 748M


Swap: 0B 0B 0B


  • Mem:是内存的使用情况。

  • Swap:是交换空间的使用情况。

  • total:系统总的可用物理内存和交换空间大小。

  • used:已经被使用的物理内存和交换空间。

  • free:还有多少物理内存和交换空间可用使用,是真正尚未被使用的物理内存数量。

  • shared:被共享使用的物理内存大小。

  • buff/cache:被 buffer(缓冲区) 和 cache(缓存) 使用的物理内存大小。

  • available:还可以被应用程序使用的物理内存大小,它是从应用程序的角度看到的可用内存数量,available ≈ free + buffer + cache。

8、查看 CPU 总体消耗(top)

top 可以查看 CPU 总体消耗,包括分项消耗,如 User,System,Idle,nice 等。


  • Shift + H:显示 java 线程;

  • Shift + M:按照内存使用排序;

  • Shift + P:按照 CPU 使用时间(使用率)排序;

  • Shift + T:按照 CPU 累积使用时间排序。


[root@localhost ~]# top


top - 01:30:19 up 83 days, 55 min, 1 user, load average: 0.00, 0.01, 0.05


Tasks: 79 total, 1 running, 78 sleeping, 0 stopped, 0 zombie


%Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st


KiB Mem : 1776244 total, 69352 free, 855920 used, 850972 buff/cache


KiB Swap: 0 total, 0 free, 0 used. 766020 avail Mem


PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND


23712 mysql 20 0 1894384 505420 9084 S 0.3 28.5 241:46.61 mysqld


1 root 20 0 43420 2712 1480 S 0.0 0.2 3:54.43 systemd


第一行:01:30:19 up 83 days, 1 user, load average: 0.00, 0.01, 0.05:01:30:19 系统时间,up 83 days 运行时间,1 user 当前登录用户数,load average 负载均衡情况,分别表示 1 分钟,5 分钟,15 分钟负载情况。


第二行:Tasks: 79 total, 1 running, 78 sleeping, 0 stopped, 0 zombie:总进程数 79,运行数 1,休眠 78,停止 0,僵尸进程 0。


第三行:%Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st:用户空间 CPU 占比 0.2%,内核空间 CPU 占比 0.2%,改变过优先级的进程 CPU 占比 0%,空闲 CPU 占比 99.7,IO 等待占用 CPU 占比 0%,硬中断占用 CPU 占比 0%,软中断占用 CPU 占比 0%,当前 VM 中的 cpu 时钟被虚拟化偷走的比例 0%。


第四和第五行表示内存和 swap 区域的使用情况。


第七行表示:


  • PID:进程 id

  • USER:进程所有者

  • PR:进程优先级

  • NI:nice 值。负值表示高优先级,正值表示低优先级

  • VIRT:虚拟内存,进程使用的虚拟内存总量,单位 kb。VIRT=SWAP+RES

  • RES:常驻内存,进程使用的、未被换出的物理内存大小,单位 kb。RES=CODE+DATA

  • SHR:共享内存,共享内存大小,单位 kb

  • S:进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程

  • %CPU:上次更新到现在的 CPU 时间占用百分比

  • %MEM:进程使用的物理内存百分比

  • TIME+:进程使用的 CPU 时间总计,单位 1/100 秒

  • COMMAND:进程名称(命令名/命令行)

9、查看 CUP 总体消耗占比(sar)

[root@localhost ~]# sar -u 3


Linux 3.10.0---------- x86_64 (2 CPU)


01:34:13 AM CPU %user %nice %system %iowait %steal %idle


01:34:16 AM all 0.17 0.00 0.17 0.00 0.00 99.67


01:34:19 AM all 0.17 0.00 0.17 0.00 0.00 99.67


01:34:22 AM all 0.17 0.00 0.00 0.00 0.00 99.83


01:34:25 AM all 0.00 0.00 0.17 0.00 0.00 99.83


01:34:28 AM all 0.17 0.00 0.17 0.00 0.00 99.67


01:34:31 AM all 0.00 0.00 0.00 0.00 0.00 100.00


01:34:34 AM all 0.00 0.00 0.17 0.00 0.00 99.83


  • %user:用户空间的 CPU 使用。

  • %nice:改变过优先级的进程的 CPU 使用率。

  • %system:内核空间的 CPU 使用率。

  • %iowait:CPU 等待 IO 的百分比 。

  • %steal:虚拟机的虚拟机 CPU 使用的 CPU。

  • %idle:空闲的 CPU。


在以上的显示当中,主要看 %iowait 和 %idle:


  • 若 %iowait 的值过高,表示硬盘存在 I/O 瓶颈;

  • 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量;

  • 若 %idle 的值持续低于 10,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU;

10、找到进程中最耗 CPU 的线程

[root@localhost ~]# ps -Lp 20379 cu


USER PID LWP %CPU NLWP %MEM VSZ RSS TTY STAT START TIME COMMAND


yunfan 20379 20379 0.0 27 9.5 2948364 170444 ? Sl Jan22 0:00 java


yunfan 20379 20390 0.0 27 9.5 2948364 170444 ? Sl Jan22 0:01 java


yunfan 20379 20391 0.0 27 9.5 2948364 170444 ? Sl Jan22 1:54 java


yunfan 20379 20392 0.0 27 9.5 2948364 170444 ? Sl Jan22 0:00 java


yunfan 20379 20393 0.0 27 9.5 2948364 170444 ? Sl Jan22 0:00 java


yunfan 20379 20394 0.0 27 9.5 2948364 170444 ? Sl Jan22 0:00 java


yunfan 20379 20395 0.0 27 9.5 2948364 170444 ? Sl Jan22 1:09 java


yunfan 20379 20396 0.0 27 9.5 2948364 170444 ? Sl Jan22 0:28 java


yunfan 20379 20397 0.0 27 9.5 2948364 170444 ? Sl Jan22 0:00 java


yunfan 20379 20398 0.0 27 9.5 2948364 170444 ? Sl Jan22 33:32 java


yunfan 20379 20403 0.0 27 9.5 2948364 170444 ? Sl Jan22 1:22 java


看 TIME 列可以看出那个线程耗费 CPU 多,根据 LWP 列可以看到线程的 ID 号,但是需要转换成 16 进制才可以查询线程堆栈信息。


获取线程 id 的十六进制码


[root@localhost ~]# printf '%x\n' 20398


4fae


使用 jstack 获取堆栈信息


[root@localhost ~]# jstack 20379 | grep -A 10 4fae


"VM Periodic Task Thread" os_prio=0 tid=0x00007f31e40ef800 nid=0x4fae waiting on condition


JNI global references: 987:

11、查看线程是否存在死锁

[root@localhost ~]# jstack -l 20379


2021-03-21 02:05:24


Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.131-b11 mixed mode):


"Attach Listener" #33 daemon prio=9 os_prio=0 tid=0x00007f31b8002800 nid=0x4251 waiting on condition [0x0000000000000000]


java.lang.Thread.State: RUNNABLE


Locked ownable synchronizers:


  • None


"http-nio-8080-exec-11" #32 daemon prio=5 os_prio=0 tid=0x00007f31b4314800 nid=0x1b7b waiting on condition [0x00007f31cf9f8000]


java.lang.Thread.State: WAITING (parking)


at sun.misc.Unsafe.park(Native Method)

12、查看磁盘详细读写情况

[root@localhost ~]# iostat


Linux 3.10.0----------- x86_64 (2 CPU)


avg-cpu: %user %nice %system %iowait %steal %idle


9.97 0.00 0.12 0.02 0.00 89.89


Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn


vda 3.77 5.27 22.17 37802473 159078788


六、其他高级命令



1、重定向

">":输出重定向,将本来输出在屏幕上的内容输出到文件中,会将以前的内容清空。


">>":追加重定向,在原有内容的基础上进行追加,保持原有内容不变,新增加内容。


"<":输入重定向,相当于从一个文件中读取内容。


"2>":错误重定向输出符号,覆盖原文件内容。


"2>>":错误重定向输出符号,有文件内容追加的功能。

2、统计(Word Count)

wc -l:统计行数


wc -w:统计字数


wc -c:统计字节数


wc -m:统计字符数


wc -L:打印最长行的长度


wc -help:显示帮助信息


wc -version:显示版本信息

3、网络

ifconfig #查看 Linux 的 IP 地址


ping 主机地址 #检查网络之间的逻辑连通性

4、命令执行规则

命令 1|命令 2:将前一个命令的结果作为后一个命令的输入


命令 1;命令 2:依次执行命令 1 和命令 2


命令 1 && 命令 2:只有命令 1 执行成功后命令 2 才能执行

评论

发布
暂无评论
【玩转Linux】史上最详细的Linux命令大全和线上问题排查手册