工作中用到的Linux命令合集
1.ping #
ping是简单且重要的指令,ping主要通过ICMP封包来进行整个网络的状况报告,最简单直接的测试连通性。
作用:
ping用来检查网络是否通畅或者网络连接速度的指令。
原理:
利用网络上机器IP地址的唯一性,给目标IP地址发送一个ICMP数据包,再要求对方返回一个同样大小的ICMP数据包来确定两台网络机器是否连接相同,延迟是多少。
注意:
并不是ping不通就表示没有连通,有可能对方设置了禁ping,这时就需要配合其他高级一些的命令测试。
为什么有的时候要禁ping?
ping指的是端对端连通,通常用来作为可用性的检查,但是某些病毒木马会强行大量远程执行ping命令抢占你的网络资源,导致系统变慢,网络变慢。严禁ping入侵作为大多数防火墙的一个基本功能提供给用户进行选择。通常的情况下你如果不用做服务器或者进行网络测试,可以放心的选中它,保护你的电脑。
格式:
ping (选项) (参数)
选项:
-d:使用Socket的SO_DEBUG功能;
-s<数据包大小>:设置数据包的大小;
-R:记录路由过程;
-v:详细显示指令的执行过程。
参数:
目的主机:指令发送ICMP报文的目的主机。
使用:
ping 10.55.15.129
2.telnet #
telnet命令用于登录远程主机,对远程主机进行管理。telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式。
作用:
telnet是用来探测指定ip是否开放指定端口。
注意:
telnet不通不一定代表网络不通。
格式:
telnet (选项) (参数)
选项:
-a:尝试自动登入远端系统;
-b<主机别名>:使用别名指定远端主机名称;
-c:不读取用户专属目录里的.telnetrc文件;
-d:启动排错模式;
-e<脱离字符>:设置脱离字符;
-E:滤除脱离字符;
-f:此参数的效果和指定"-F"参数相同;
-F:使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机;
-k<域名>:使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名;
-K:不自动登入远端主机;
-l<用户名称>:指定要登入远端主机的用户名称;
-L:允许输出8位字符资料;
-n<记录文件>:指定文件记录相关信息;
-r:使用类似[rlogin](http://man.linuxde.net/rlogin "rlogin命令")指令的用户界面;
-S<服务类型>:设置telnet连线所需的[ip](http://man.linuxde.net/ip "ip命令") TOS信息;
-x:假设主机有支持数据加密的功能,就使用它;
-X<认证形态>:关闭指定的认证形态。
参数:
远程主机:指定要登录进行管理的远程主机;
端口:指定telnet协议使用的端口号。
使用:
telnet www.baidu.com 80
以下两种情况都是通的:
以下情况是不通:
注:Escape character is '^]'
,“^”是Ctrl键的意思。这个提示的意思是按Ctrl + ]
会呼出telnet的命令行。
报错解决:
报错:
-bash: telnet: command not found
解决:安装telnet服务 【centos、ubuntu】安装telnet命令的方法:
yum list telnet* 列出telnet相关的安装包 yum install telnet-server 安装telnet服务 yum install telnet.* 安装telnet客户端
3.wget #
wget是一个从网络上自动下载文件的自由工具,支持通过HTTP、HTTPS、FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理。wget名称的由来是“World Wide Web”与“get”的结合,它也可以用来测试端口的连通性具体用法。
作用:
- 下载文件
- 测试端口连通性
格式:
wget ip:port
ip:测试主机的ip地址
port:测试主机的端口
如果远程主机不存在端口则会一直提示连接主机。
如果远程主机存在端口则会看到响应的信息。
使用:
4.curl #
在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。这个工具可以帮助我们在服务器上很好的模拟http的行为。
作用:
- 上传、下载
- 模拟http请求
- 测试连通性
格式:
curl url 返回整个网页的内容
curl -I url 返回这个网页的header
curl -i url 返回网页header + 内容
使用:
curl --request POST --url http://10.55.14.162:8989/piles-message/v1/sms --header 'Content-Type: application/json' --data '{"appNumber":"nmrs","mobile":"18844544681","content":"手机验证码为641287,验证码的有效期为5分钟。若有疑问请致电12333。","extMsg":"","bizNumber":"UCA-715","bizName":"验证码发送"}'
成功:
失败:
另附一些别的curl:
- 请求没回应:
- 请求回应方法有问题:
5.nginx相关命令 #
- 启动:
/opt/nginx/sbin/nginx
- 停止:
/opt/nginx/sbin/nginx -s stop
,./nginx -s stop
- 重启:
./nginx -s reload
–必须是启动状态才能重启,停止状态不能重启。
6.lsof #
lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。
作用:
- 查看所有端口及端口对应的服务(暂时用到的)
格式:
lsof [options] filename
lsof abc.txt 显示开启文件abc.txt的进程
lsof -c abc 显示abc进程现在打开的文件
lsof -c -p 1234 列出进程号为1234的进程所打开的文件
lsof -g gid 显示归属gid的进程情况
lsof +d /usr/local/ 显示目录下被进程开启的文件
lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长
lsof -d 4 显示使用fd为4的进程
lsof -i 用以显示符合条件的进程情况
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 --> IPv4 or IPv6
protocol --> TCP or UDP
hostname --> Internet host name
hostaddr --> IPv4地址
service --> /etc/service中的 service name (可以不止一个)
port --> 端口号 (可以不止一个)
输出信息含义:
在终端下输入lsof即可显示系统打开的文件,因为lsof需要访问核心内存和各种文件,所以必须以root用户的身份运行它才能够充分地发挥其功能。
直接输入lsof部分输出位:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
init 1 root cwd DIR 8,1 4096 2 /
init 1 root rtd DIR 8,1 4096 2 /
init 1 root txt REG 8,1 150584 654127 /sbin/init
udevd 415 root 0u CHR 1,3 0t0 6254 /dev/null
udevd 415 root 1u CHR 1,3 0t0 6254 /dev/null
udevd 415 root 2u CHR 1,3 0t0 6254 /dev/null
udevd 690 root mem REG 8,1 51736 302589 /lib/x86_64-linux-gnu/libnss_files-2.13.so
syslogd 1246 syslog 2w REG 8,1 10187 245418 /var/log/auth.log
syslogd 1246 syslog 3w REG 8,1 10118 245342 /var/log/syslog
dd 1271 root 0r REG 0,3 0 4026532038 /proc/kmsg
dd 1271 root 1w FIFO 0,15 0t0 409 /run/klogd/kmsg
dd 1271 root 2u CHR 1,3 0t0 6254 /dev/null
每行显示一个打开的文件,若不指定条件默认将显示所有进程打开的所有文件。
lsof输出各列信息的意义如下:
COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等 TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
FD 列中的文件描述符cwd 值表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改,txt 类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序。
其次数值表示应用程序的文件描述符,这是打开该文件时返回的一个整数。如上的最后一行文件/dev/initctl,其文件描述符为 10。u 表示该文件被打开并处于读取/写入模式,而不是只读 ® 或只写 (w) 模式。同时还有大写 的W 表示该应用程序具有对整个文件的写锁。该文件描述符用于确保每次只能打开一个应用程序实例。初始打开每个应用程序时,都具有三个文件描述符,从 0 到 2,分别表示标准输入、输出和错误流。所以大多数应用程序所打开的文件的 FD 都是从 3 开始。
与 FD 列相比,Type 列则比较直观。文件和目录分别称为 REG 和 DIR。而CHR 和 BLK,分别表示字符和块设备;或者 UNIX、FIFO 和 IPv4,分别表示 UNIX 域套接字、先进先出 (FIFO) 队列和网际协议 (IP) 套接字。
使用:
实用命令:
lsof `which httpd` //那个进程在使用apache的可执行文件
lsof /etc/passwd //那个进程在占用/etc/passwd
lsof /dev/hda6 //那个进程在占用hda6
lsof /dev/cdrom //那个进程在占用光驱
lsof -c sendmail //查看sendmail进程的文件使用情况
lsof -c courier -u ^zahn //显示出那些文件被以courier打头的进程打开,但是并不属于用户zahn
lsof -p 30297 //显示那些文件被pid为30297的进程打开
lsof -D /tmp 显示所有在/tmp文件夹中打开的instance和文件的进程。但是symbol文件并不在列
lsof -u1000 //查看uid是100的用户的进程的文件使用情况
lsof -utony //查看用户tony的进程的文件使用情况
lsof -u^tony //查看不是用户tony的进程的文件使用情况(^是取反的意思)
lsof -i //显示所有打开的端口
lsof -i:80 //显示所有打开80端口的进程
lsof -i -U //显示所有打开的端口和UNIX domain文件
lsof -i UDP@[url]www.akadia.com:123 //显示那些进程打开了到www.akadia.com的UDP的123(ntp)端口的链接
lsof -i tcp@ohaha.ks.edu.tw:ftp -r //不断查看目前ftp连接的情况(-r,lsof会永远不断的执行,直到收到中断信号,+r,lsof会一直执行,直到没有档案被显示,缺省是15s刷新)
lsof -i tcp@ohaha.ks.edu.tw:ftp -n //lsof -n 不将IP转换为hostname,缺省是不加上-n参数