Linux云服务器常用操作和命令超级详细超级全

1. 什么是linux服务器load average?

Load是用来度量服务器工作量的大小,即计算机cpu任务执行队列的长度,值越大,表明包括正在运行和待运行的进程数越多。
参考资料:http://en.wikipedia.org/wiki/Load_average 
 

2. 如何查看linux服务器负载?

可以通过w,top,uptime,procinfo命令,也可以通过/proc/loadavg文件查看。
procinfo工具安装请参考Linux环境下安装软件。 
 

3. 服务器负载高怎么办?

服务器负载(load/load average)是根据进程队列的长度来显示的。
当服务器出现负载高的现象时(建议以15分钟平均值为参考),可能是由于CPU资源不足,I/O读写瓶颈,内存资源不足等原因造成,也可能是由于CPU正在进行密集型计算。
建议使用vmstat -x,iostat,top命令判断负载过高的原因,然后找到具体占用大量资源的进程进行优化处理。 

腾讯云最新服务器活动--云服务器免费送。

试用领取有人能领到180天。

腾讯云领取优惠券地址

阿里云领取优惠券地址

4. 如何查看服务器内存使用率?

可以通过free,top(执行后可通过shitf+m对内存排序),vmstat,procinfo命令,也可以通过/proc/meminfo文件查看。 
 

5. 如何查看单个进程占用的内存大小?

可以使用top -p PID,pmap -x PID,ps aux|grep PID命令,也可以通过/proc/$process_id(进程的PID)/status文件查看,例如/proc/7159/status文件。 
 

6. 如何查看正在使用的服务和端口?

可以使用netstat -tunlp,netstat -antup,lsof -i:PORT命令查看。 
 

7. 如何查看服务器进程信息?

可以使用ps auxww|grep PID,ps -ef,lsof -p PID,top -p PID命令查看。 
 

8. 如何杀死进程?

可以使用kill -9 PID(进程号),killall 程序名(比如killall cron)来杀死进程。
如果要杀死的是僵尸进程,则需要杀掉进程的父进程才有效果,命令为: kill -9 ppid(ppid为父进程ID号,可以通过ps -o ppid PID查找,例如ps -o ppid 32535)。 

# ps -o ppid 1466
 PPID
    1

9. 如何查找僵尸进程?

可以使用top命令查看僵尸进程(zombie)的总数,使用ps -ef | grep defunct | grep -v grep查找具体僵尸进程的信息。 
 

10. 为什么启动不了服务器端口?

服务器端口的启动监听,需要从操作系统本身以及应用程序查看。
linux操作系统1024以下的端口只能由root用户启动,即需要先运行sudo su –获取root权限后再启用服务端口。
应用程序问题,建议通过应用程序启动日志来排查失败原因,例如端口冲突(腾讯服务器系统使用端口不能占用,比如36000),配置问题等。 
 

11. 常用的linux服务器性能查看命令有哪些?

命令名称 说明
top 进程监控命令,用来监控系统的整体性能。

可以显示系统负载,进程,cpu,内存,分页等信息,常用shift+m和shift+p来按memory和cpu使用对进程进行排序。

vmstat 系统监控命令,重点侧重于虚拟内存,也可以监控cpu,进程,内存分页以及IO的状态信息。

例如,vmstat 3 10,每隔3秒输出结果,执行10次。

iostat 用于输出cpu状态和IO状态的工具,可以详细展示系统的IO信息。

例如iostat -dxmt 10,每10秒以MB的格式输出IO的详细信息。

df 用来检查系统的磁盘空间占用状况。

例如:df -m,以MB为单位展现磁盘使用状况。

lsof (list open files)列举系统中被打开的文件,由于linux是以文件系统为基础,此命令在系统管理中很有帮助。

例如:

lsof  filename 显示打开指定文件的所有进程
lsof -a 表示两个参数都必须满足时才显示结果
lsof -c string   显示COMMAND列中包含指定字符的进程所有打开的文件
lsof -u username  显示所属user进程打开的文件
lsof -g gid 显示所属gid的进程情况
lsof +d /DIR/ 显示目录下被进程打开的文件
lsof +D /DIR/ 同上,但是会递归搜索,但是会搜索目录下的所有目录,时间相对较长
lsof -d FD 显示指定文件描述符的进程
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
lsof -p  <pid>  查看指定进程打开的文件
lsof -i[46] [protocol][@hostname|@hostaddr][:service|port]
            46 --> IPv4 or IPv6
            protocol --> TCP or UDP
            hostname --> Internet host name
            hostaddr --> IPv4地址
            service --> /etc/services 中的 service name (可以不只一个)
            port --> 端口号 (可以不只一个)

 

ps 进程查看命令,可以用来显示进程的详细信息。

常用命令参数组合为,ps -ef,ps aux,推荐使用ps -A -o来自定义输出字段。
例如:
ps -A -o pid,stat,uname,%cpu,%mem,rss,args,lstart,etime |sort -k6,6 -rn,按所列字段输出并以第六个字段进行排序 
ps -A -o comm |sort -k1 |uniq -c|sort -k1 -rn|head,列出运行实例最多的进程。


其他常用的命令和文件,free -m,du,uptime,w,/proc/stat,/proc/cpuinfo,/proc/meminfo。 
参考资料:http://en.wikipedia.org/wiki/Template:Unix_commands,http://www.linuxmanpages.com/ 
 

12. Cron不生效怎么办?

排查步骤如下:
1. 确认crontab是否正常运行。
可以运行命令crontab -e添加如下测试条目*/1 * * * * /bin/date >> /tmp/crontest 2>&1 &,然后观察/tmp/crontest文件。 
如果有问题,建议使用ps aux|grep cron查找cron的pid,kill -9 PID结束cron进程,然后通过/etc/init.d/cron start重新启动cron。 

2. 确认cron条目中的脚本路径为绝对路径。
3. 查看运行cron的用户帐号是否正确,同时查看/etc/cron.deny中是否包含此账户。
4. 检查脚本的执行权限,脚本目录以及日志的文件权限。
5. 建议通过后台方式运行脚本,在脚本条目后添加“&”,例如,*/1 * * * * /bin/date >> /tmp/crontest 2>&1 & 
 

13. 如何设置云服务器开机任务?

Linux内核启动顺序为:
/sbin/init进程启动,
然后依次执行init初始脚本,
运行级别脚本/etc/rc.d/rc*.d,*号值等于运行模式,可以在/etc/inittab中查看,
最后是/etc/rc.d/rc.local。
 

如果需要配置开机任务,可以在/etc/rc.d/rc*.d中的S**rclocal文件配置,也可以在/etc/rc.d/rc.local中配置。

实际上是软链接

lrwxrwxrwx 1 root root 13 3月 10 2015 /etc/rc.local -> rc.d/rc.local

[root@steven ~]# ls /etc/rc.d/rc.local 
/etc/rc.d/rc.local

 
 

14. 为什么服务器硬盘只读?

硬盘只读的常见原因如下:
1. 磁盘空间满
可以通过df -m命令查看磁盘使用情况,然后删除多余的文件释放磁盘空间(非第三方文件不建议删除,如果需要请联系企业QQ确认); 
2. 磁盘inode资源占用完
可以通过df -i命令查看,确认相关的进程; 
3. 硬件故障
 

如果hosting应用通过上述方式仍无法确认原因,请通过企业QQ联系运维支持协助定位。 
 

15. 如何查看linux系统日志?

系统级别的日志文件存放路径为/var/log。
常用的系统日志为/var/log/messages 。
 

16. 如何查找文件系统大文件?

可以首先通过df命令查看磁盘分区使用情况,比如df -m;
然后:
通过du命令查看具体文件夹的大小,比如du -sh ./*,du -h --max-depth=1|head -10;
使用ls命令列出文件以及大小,比如ls -lSh;

-S 以文件大小排序。
另外,也可以通过find命令直接查看特定目录下的文件大小,比如find / -type f -size +10M -exec ls -lrt {} \; 
-r, –reverse 依相反次序排列

17. 如何查看服务器操作系统版本?

可以通过下列命令查看系统版本:
uname -a,cat /proc/version,cat /etc/issue 
 

# cat /proc/version
Linux version 2.6.32-504.8.1.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) ) #1 SMP Wed Jan 28 21:11:36 UTC 2015 家里centos
# cat /proc/version
Linux version 2.6.32-504.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) ) #1 SMP Wed Oct 15 04:27:16 UTC 2014 腾讯云

18. 为什么linux终端显示中文会出现乱码?

服务器本身没有对显示语言有限制,如果是终端软件影响中文的显示
可以尝试调整 选项-会话选项-外观(secureCRT设置,其他版本软件请查找相关设置);
如果是纯Linux shell出现乱码,请使用export命令查看用户环境变量,查看LANG,LC_CTYPE等环境变量设置。
set命令也可以看环境变量

19. 如何设置通过SecureCRT连接云服务器的超时时间?

可以通过如下设置,使SecureCRT连接云服务器时,不断开连接:
打开secureCRT选项(Options),选择会话选项(Session Opetions),点击终端(Terminal),在右侧反空闲(Anti-idle)的框中勾选发送协议NO-OP(Send protocol NO-OP),时间设置为每120秒(every 120 seconds)。 
 

20. 为什么删除linux服务器上的文件,硬盘空间不释放?

现象:
登录linux服务器,执行 rm 命令删除文件,用 df 命令查看硬盘空间,发现删除文件后,可用的硬盘空间没有增加。
原因:
通过 rm 命令删除文件的时候,如果正好有其它进程在访问该文件,通过 df 命令查看,删除的文件占用的空间是没有立即释放的。
解决方法:
使用root权限执行 lsof |grep deletedfilename ,查看正在使用被删除文件的进程的PID,通过命令 kill -9 PID 杀掉对应的进程即可。 


 地方

反代

地方

lsof简介
http://blog.csdn.net/guoguo1980/article/details/2324454

lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。
大多数与 lsof 相关的信息都存储于以进程的 PID 命名的目录中,即 /proc/1234 中包含的是 PID 为 1234 的进程的信息。


lsof使用
lsof输出信息含义

在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。

COMMAND    PID      USER   FD      TYPE     DEVICE     SIZE       NODE      NAME
init       1         root  cwd      DIR       3,3       1024       2         /
init       1         root  rtd      DIR       3,3       1024       2         /
init       1         root  txt      REG       3,3       38432      1763452  /sbin/init
init       1         root  mem      REG       3,3       106114     1091620  /lib/libdl-2.6.so
init       1         root  mem      REG       3,3       7560696    1091614  /lib/libc-2.6.so
init       1         root  mem      REG       3,3       79460      1091669  /lib/libselinux.so.1
init       1         root  mem      REG       3,3       223280     1091668  /lib/libsepol.so.1
init       1         root  mem      REG       3,3       564136     1091607  /lib/ld-2.6.so
init       1         root  10u      FIFO      0,15                  1309     /dev/initctl

每行显示一个打开的文件,若不指定条件默认将显示所有进程打开的所有文件。lsof输出各列信息的意义如下:

COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识) 文件inode
NAME:打开文件的确切路径


FD 列表示文件描述符
cwd 表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改。

txt 表示的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序。

u 表示该其次数值表示应用程序的文件描述符,这是打开该文件时返回的一个整数。如上的最后一行文件/dev/initctl,
其文件描述符为 10。
文件被打开并处于读取/写入模式,而不是只读或只写模式。同时还有大写的W表示该应用程序具有对整个文件的写锁。
该文件描述符用于确保每次只能打开一个应用程序实例。初始打开每个应用程序时,都具有三个文件描述符,
从 0 到 2,分别表示标准输入、输出和错误流。所以大多数应用程序所打开的文件的 FD 都是从 3 开始。



Type 列表示文件类型
文件和目录分别称为 REG 和 DIR
CHR 和 BLK,分别表示字符和块设备
UNIX、FIFO 和 IPv4,分别表示 UNIX 域套接字、先进先出 (FIFO) 队列和网络协议 (IP) 套接字





lsof常用参数
lsof 常见的用法是查找应用程序打开的文件的名称和数目。可用于查找出某个特定应用程序将日志数据记录到何处,或者正在跟踪某个问题。
例如,linux限制了进程能够打开文件的数目。通常这个数值很大,所以不会产生问题,并且在需要时,应用程序可以请求更大的值(直到某
个上限)。如果你怀疑应用程序耗尽了文件描述符,那么可以使用 lsof 统计打开的文件数目,以进行验证。lsof语法格式是:

lsof [options] filename

常用的参数列表:
lsof  filename 显示打开指定文件的所有进程
lsof -a 表示两个参数都必须满足时才显示结果
lsof -c string   显示COMMAND列中包含指定字符的进程所有打开的文件
lsof -u username  显示所属user进程打开的文件
lsof -g gid 显示所属gid的进程情况
lsof +d /DIR/ 显示目录下被进程打开的文件
lsof +D /DIR/ 同上,但是会递归搜索,但是会搜索目录下的所有目录,时间相对较长
lsof -d FD 显示指定文件描述符的进程
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
lsof -p  <pid>  查看指定进程打开的文件
lsof -i[46] [protocol][@hostname|@hostaddr][:service|port]
            46 --> IPv4 or IPv6
            protocol --> TCP or UDP
            hostname --> Internet host name
            hostaddr --> IPv4地址
            service --> /etc/services 中的 service name (可以不只一个)
            port --> 端口号 (可以不只一个)

            
            
lsof使用实例

一、查找谁在使用文件系统

在卸载文件系统时,如果该文件系统中有任何打开的文件,操作通常将会失败。那么通过lsof可以找出那些进程在使用当前要卸载的文件系统,如下:

# lsof  /GTES11/
COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
bash    4208 root  cwd    DIR    3,1 4096    2 /GTES11/
vim     4230 root  cwd    DIR    3,1 4096    2 /GTES11/



二、恢复删除的文件
当Linux计算机受到入侵时,常见的情况是日志文件被删除,以掩盖攻击者的踪迹。管理错误也可能导致意外删除重要的文件,比如在清理旧日志时,意外地删除了数据库的活动事务日志。
有时可以通过lsof来恢复这些文件。
当进程打开了某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中。这意味着,进程并不知道文件已经被删除,它仍然可以像打开该文件时提供给它的文件描述符进行读取和写入。
除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录索引节点inode。


在/proc 目录下,其中包含了反映内核和进程树的各种文件。/proc目录挂载的是在内存中所映射的一块区域,所以这些文件和目录并不存在于磁盘中,因此当我们对这些文件进行读取和写入时,实际上是在从内存中获取相关信息。大多数与 lsof 相关的信息都存储于以进程的 PID 命名的目录中,即 /proc/1234 中包含的是 PID 为 1234 的进程的信息。每个进程目录中存在着各种文件,它们可以使得应用程序简单地了解进程的内存空间、文件描述符列表、指向磁盘上的文件的符号链接和其他系统信息。lsof 程序使用该信息和其他关于内核内部状态的信息来产生其输出。所以lsof 可以显示进程的文件描述符和相关的文件名等信息。也就是我们通过访问进程的文件描述符可以找到该文件的相关信息。
ll /proc/8775/exe
lrwxrwxrwx 1 root root 0 Mar 29 19:02 /proc/8775/exe -> /usr/sbin/sshd



当系统中的某个文件被意外地删除了,只要这个时候系统中还有进程正在访问该文件,那么我们就可以通过lsof从/proc目录下恢复该文件的内容。 假如由于误操作将/var/log/messages文件删除掉了,那么这时要将/var/log/messages文件恢复的方法如下:

首先使用lsof来查看当前是否有进程打开/var/logmessages文件,如下:
# lsof |grep /var/log/messages
syslogd   1283      root    2w      REG        3,3  5381017    1773647 /var/log/messages (deleted)

从上面的信息可以看到 PID 1283(syslogd)打开文件的文件描述符为 2。同时还可以看到/var/log/messages已经标记被删除了。因此我们可以在 /proc/1283/fd/2 (fd下的每个以数字命名的文件表示进程对应的文件描述符)中查看相应的信息,如下:

# head -n 10 /proc/1283/fd/2
Aug  4 13:50:15 holmes86 syslogd 1.4.1: restart.
Aug  4 13:50:15 holmes86 kernel: klogd 1.4.1, log source = /proc/kmsg started.
Aug  4 13:50:15 holmes86 kernel: Linux version 2.6.22.1-8 ([email protected]) (gcc version 4.2.0) #1 SMP Wed Jul 18 11:18:32 EDT 2007
Aug  4 13:50:15 holmes86 kernel: BIOS-provided physical RAM map:
Aug  4 13:50:15 holmes86 kernel:  BIOS-e820: 0000000000000000 - 000000000009f000 (usable)
Aug  4 13:50:15 holmes86 kernel:  BIOS-e820: 000000000009f000 - 00000000000a0000 (reserved)
Aug  4 13:50:15 holmes86 kernel:  BIOS-e820: 0000000000100000 - 000000001f7d3800 (usable)
Aug  4 13:50:15 holmes86 kernel:  BIOS-e820: 000000001f7d3800 - 0000000020000000 (reserved)
Aug  4 13:50:15 holmes86 kernel:  BIOS-e820: 00000000e0000000 - 00000000f0007000 (reserved)
Aug  4 13:50:15 holmes86 kernel:  BIOS-e820: 00000000f0008000 - 00000000f000c000 (reserved)

如果可以通过文件描述符查看相应的数据,那么就可以使用 I/O 重定向将其复制到文件中,如:
cat /proc/1283/fd/2 > /var/log/messages

对于许多应用程序,尤其是日志文件和数据库,这种恢复删除文件的方法非常有用

 

查找误删文件具体步骤

比如查找/var/log/messages

1、使用lsof查看/var/log下面的文件所用的文件描述符
lsof +D /var/log
COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
auditd    1138   root    5w   REG  253,0   724625 1312257 /var/log/audit/audit.log
rsyslogd  1168   root    1w   REG  253,0     1111 1312269 /var/log/messages
rsyslogd  1168   root    2w   REG  253,0    55962 1312253 /var/log/cron
rsyslogd  1168   root    4w   REG  253,0     1763 1312270 /var/log/secure
mcelog    1493   root    3w   REG  253,0        0 1312155 /var/log/mcelog
zabbix_ag 2054 zabbix    1w   REG  253,0   263546 1312233 /var/log/zabbix/zabbix_agentd.log
zabbix_ag 2054 zabbix    2w   REG  253,0   263546 1312233 /var/log/zabbix/zabbix_agentd.log
zabbix_ag 2058 zabbix    1w   REG  253,0   263546 1312233 /var/log/zabbix/zabbix_agentd.log
zabbix_ag 2058 zabbix    2w   REG  253,0   263546 1312233 /var/log/zabbix/zabbix_agentd.log

2、找到使用/var/log/messages的进程的pid ,和/var/log/messages所使用的文件描述符次数  这里次数为1
ll /proc/1168/fd
total 0
lrwx------ 1 root root 64 Mar 25 11:00 0 -> socket:[10156]
l-wx------ 1 root root 64 Mar 25 11:00 1 -> /var/log/messages
l-wx------ 1 root root 64 Mar 30 10:24 2 -> /var/log/cron
lr-x------ 1 root root 64 Mar 25 11:00 3 -> /proc/kmsg
l-wx------ 1 root root 64 Mar 30 10:24 4 -> /var/log/secure

3、cat一下文件描述符为1的文件
cat /proc/1168/fd/1
Mar 28 10:37:01 steven rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="1168" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
Mar 28 11:49:21 steven fail2ban.filter[2075]: INFO Log rotation detected for /var/log/secure
Mar 28 12:40:12 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 12:40:22 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Mar 28 13:36:27 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 13:36:38 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Mar 28 18:24:48 steven yum[4880]: Installed: sysstat-9.0.4-27.el6.x86_64
Mar 28 19:13:41 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 19:13:53 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Mar 29 12:34:14 steven kernel: e1000: eth0 NIC Link is Down
Mar 29 12:34:23 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Mar 29 19:01:57 steven kernel: e1000: eth0 NIC Link is Down
Mar 29 19:02:09 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None


4、进行比较,发现确实是一样的
at /var/log/messages
Mar 28 10:37:01 steven rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="1168" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
Mar 28 11:49:21 steven fail2ban.filter[2075]: INFO Log rotation detected for /var/log/secure
Mar 28 12:40:12 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 12:40:22 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Mar 28 13:36:27 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 13:36:38 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Mar 28 18:24:48 steven yum[4880]: Installed: sysstat-9.0.4-27.el6.x86_64
Mar 28 19:13:41 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 19:13:53 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Mar 29 12:34:14 steven kernel: e1000: eth0 NIC Link is Down
Mar 29 12:34:23 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Mar 29 19:01:57 steven kernel: e1000: eth0 NIC Link is Down
Mar 29 19:02:09 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None


5、备份下来
cat /proc/1168/fd/1> /var/log/messages

猜你喜欢

转载自blog.csdn.net/qq_42972863/article/details/87911300