GO
1. Linux的一些常用快捷键
快捷键 | 功能 |
---|---|
stty -echoctl | 取消在屏幕上显示控制的字符,比如Ctrl+C的^C |
Ctrl+c | 取消命令的输入,中断进程 |
Ctrl+z | 暂停命令(fg恢复) |
Ctrl+a | 光标到行首 |
Ctrl+e | 光标到行尾 |
Ctrl+u | 删除光标前所有字符 |
Ctrl+k | 删除光标后所有字符 |
Ctrl+l | 清屏(clear命令也可清屏) |
Ctrl+d | 退出登陆 == exit (logout也可退出登陆) |
Ctrl+s | 锁住命令终端使其定身,按任何键都不会有反应 |
Ctrl+q | 解锁命令终端 |
Ctrl+r | 搜索命令历史以执行该条历史命令 |
TAB | 文件名补全,命令补全等 |
2. 时间管理命令
date
:显示系统时间clock
:显示硬件时间hwclock -W
:把系统时间同步到硬件时间hwclock -s
:把硬件时间同步到系统时间date -s "2015-03-21 20:08:50"
:手动更改时间ntpdate 时间服务器
(常用的微软时间服务器:time.windows.com):自动更改时间(这个方式很标准)cal
:显示日历cal 2017
:显示2017年的日历
3. 基础命令的补充
- seq
seq命令用于产生从某个数到另外一个数之间的所有整数。
语法:
seq [选项] ... 尾数
seq [选项] ... 首数 尾数
seq [选项] ... 首数 增量 尾数
选项:
- -f, –format=格式 使用printf 样式的浮点格式
- -s, –separator=字符串 使用指定字符串分隔数字(默认使用:\n)
- -w, –equal-width 在列前添加0 使得宽度相同
实例:
- -f选项:指定格式:1234#seq -f"%3g" 9 1191011
%
后面指定数字的位数 默认是%g
,%3g
那么数字位数不足部分是空格。
|
|
这样的话数字位数不足部分是0,%
前面制定字符串。
- -w选项:指定输出数字同宽
|
|
不能和-f
一起用,输出是同宽的。
- -s选项:指定分隔符(默认是回车)
|
|
要指定/t做为分隔符号:
指定\n作为分隔符号:
得到的是个错误结果,不过一般也没有这个必要,它默认的就是回车作为分隔符。
- source 或 .
source 配置文件
和. 配置文件
的作用是相同的,就是让指定的配置文件生效。
- type
type 命令
:用来查看一个命令的类型,是bash的内置命令,还是命令别名,或是其它的命令。
- runlevel
runlevel
:查看当前系统的运行级别
- sleep
sleep 100
:休眠100秒
- ldd
ldd 命令的绝对路径
:查看该命令所依赖的”动态链接库”文件
- 重启命令
reboot
init 6
shutdown -r now(或0)
- 关机命令
init 0
halt
shutdown -h now(或0)
- 关于语系
系统默认语系的配置文件是: /etc/sysconfig/i18n
- LANG=”zh_CN.UTF-8”
- 只要将等号后面的值更改即可更改系统的语系
4. xargs 与 exec
这两个工具都可以实现相同的功能,exec主要是和find一起配合使用,而xargs就要比exec用的地方要多。
4.1. xargs应用
用一个例子来说明:
echo "121212121212" > 123.txt
ls 123.txt | xargs cat
(输出结果: 121212121212)- 说明:它的作用就是把管道符前面的输出作为xargs后面命令的输入。它的好处在于就可以把本来两步或多步才能完成的任务简单一步就能完成。
xargs常常和find命令一起使用:
- 比如,查找当前目录创建时间大于10天的文件,然后再删除
- 具体命令为:
find . -mtime +10 | xargs rm
- 说明:这种应用是最为常见的,xargs后面的rm也可以加选项,当是目录时,就需要加-r选项了
这个功能更神奇:
- 现在我有这样一个需求“查找当前目录下所有.txt文件,然后把这些.txt文件变成.txt_bak。正常情况下,我们不得不写脚本去实现,但是使用xargs就一步能实现这个目的。
- 命令操作如下:
mkdir test
cd test
touch 1.txt 2.txt.3.txt.4.txt.5.txt
ls *.txt | xargs -n1 -i{} mv {} {}_baka
- 说明:
xargs -n1 -i{}
类似for循环,-n1
意思是一个一个对象去处理,-i{}
把前面的对象使用{}
取代,mv {} {}_bak
相当于mv 1.txt 1.txt_bak
。(其实,-n1这个选择可以不加,只用-i选项即可) - 建议记住这个应用方法,很实用
4.2. exec应用
exec其实是find命令的一个选项,只能与find一起用。使用find命令时,经常使用一个选项就是这个exec了,可以达到和xargs同样的效果。
比如,查找当前目录创建时间大于10天的文件并删除它们:
find . -mtime +10 -exec rm -rf {} \;
- 说明:这个命令中也是把
{}
作为前面find出来的文件的替代符,后面的\
为;
的脱义符,不然shell会把分号作为该行命令的结尾。
另一个使用exec的实用功能,就是它同样可以实现刚刚上面批量修改文件名的需求:
find ./*_bak -exec mv {} {}_bak \;
5. 不中断命令行工具介绍
需求:要执行一个命令或者脚本,但是需要几个小时甚至几天,这就要考虑到一个问题,就是中途断网或出现其他意外情况,执行的任务中断了怎么办?你可以把命令或者脚本丢到后台去运行,不过这样做也不保险。下面就介绍两种方法来避免这样的问题发生。
5.1. nohup命令
nohup sh /usr/local/sbin/sleep.sh &
说明:直接加一个”&”虽然丢到后台了,但是当退出该终端很有可能这个脚本也会退出的,而在前面加上nohup就没有问题了。nohup的作用就是不挂断地运行命令,把运行命令产生的日志都记录到nohup文件里,这个文件是在nohup执行后在当前目录下面生成的nohup.out。
这个工具的缺点就是不能实时地控制和查看所进行的任务。
5.2. screen命令
介绍:简单来说,screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。scrren中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真是的SSH连接窗口那样。
如果系统中没有screen命令,请用yum install -y screen
安装。
下面介绍一个screen的简单应用:
- 打开一个会话,直接输入
screen
命令然后回车,进入screen会话窗口 screen -ls
查看已经打开的screen会话(在会话前会显示编号)Ctrl+a 再按d
退出该screen会话,只是退出,并没有结束- 结束会话输入
Ctrl+d
或者exit
- 退出后还想再次登陆某个screen会话,使用
screen -r [scrren标号]
,当只有一个screen会话时,后面的编号是可以省略的。当你有某个需要长时间运行的命令或者脚本时就打开一个screen会话,然后运行该任务。按Ctrl+a
再按d
退出会话,不影响终端窗口上的任何操作。
创建新的screen时,指定自定义名称:
scrren -S aming
- 要想进入该screen,可以直接
screen -r aming
6. 几个与网络有关的命令
- crul命令
curl命令是Linux系统命令行下用来简单测试web访问的工具。几个常用的选项要掌握:
curl 网址
查看网站的HTML源代码-x
指定一个代理,简单地指定一个hosts。可以指定ip和端口,省略写hosts,方便实用,格式:curl -xip:port www.baidu.com
-l
可以把访问的内容省略掉,只显示状态码;-v
可以显示详细过程。如:curl -lv http://www.baidu.com
- 几个常用的状态码如下:
- 200:正常状态
- 302:跳转状态
- 301:跳转状态
- 404:找不到
- 500:服务器报错
- 几个常用的状态码如下:
-u
可以指定用户名和密码,因为有些网站只有登陆后才能查看到内容:curl -u user:password http://123.com
-O(大写)
直接下载页面或者对象:curl -O http://study.lishiming.net/index.html
- 还可以使用
-o
自定义所下载的文件的名字:curl -o index2.html http://study.lishiming.net/index.html
- ping
ping命令用来测试主机之间网络的连通性。执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
语法:ping [选项] [参数]
选项 | 作用 |
---|---|
-d | 使用Socket的SO_DEBUG功能 |
-c<完成次数> | 设置完成要求回应的次数 |
-f | 极限检测 |
-i<间隔秒数> | 指定收发信息的间隔时间 |
-I<网络界面> | 使用指定的网络界面送出数据包 |
-l<前置载入> | 设置在送出要求信息之前,先行发出的数据包 |
-n | 只输出数值 |
-p<范本样式> | 设置填满数据包的范本样式 |
-q | 不显示指令执行过程,开头和结尾的相关信息除外 |
-r | 忽略普通的Routing Table,直接将数据包送到远端主机上 |
-R | 记录路由过程 |
-s<数据包大小> | 设置数据包的大小 |
-t<存活数值> | 设置存活数值TTL的大小 |
-v | 详细显示指令的执行过程 |
参数:
- 目的主机:指定发送ICMP报文的目的主机
实例:
- tty
Linux tty命令用于显示终端机连接标准输入设备的文件名称。
在Linux操作系统中,所有外围设备都有其名称与代号,这些名称代号以特殊文件的类型存放于/dev目录下。你可以执行tty(teletypewriter)指令查询目前使用的终端机的文件名称。
语法:tty [选项]
选项 | 作用 |
---|---|
-s | 不显示任何信息,只回传状态代码 |
–silent | 同上 |
–quiet | 同上 |
–help | 在线帮助 |
–version | 显示版本信息 |
实例:
- 显示当前终端12# tty/dev/pts/4
- wall
wall命令用于向系统当前所有打开的终端上输出信息。通过wall命令可将信息发送给每位同意接收公众信息的终端机用户,若不给予其信息内容,则wall命令会从标准输入设备读取数据,然后再把所得到的数据传送给所有终端机用户。
语法:wall [参数]
参数:
- 消息:指定广播消息
实例:
- write
write命令用于向指定登录用户终端上发送信息。通过write命令可传递信息给另一位登入系统的用户,当输入完毕后,键入EOF表示信息结束,write命令就会将信息传给对方。如果接收信息的用户不只登入本地主机一次,你可以指定接收信息的终端机编号。
语法:write [参数]
参数:
- 用户:指定要接受信息的登录用户
- 登陆终端:指定接收信息的用户的登录终端
实例:
传信息给Rollaend,此时Rollaend只有一个连线 :
接下来就是将信息打上去,结束请Ctrl+C:
传信息给Rollaend、Rollaend的连线有pts/2、pts/3:
接下来就是将信息打上去,结束请Ctrl+C:
若对方设定mesg n
,则此时信息将无法传给对方。
- telnet
telnet命令用于登录远程主机,对远程主机进行管理。telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。但仍然有很多别的系统可能采用了telnet方式来提供远程登录,因此弄清楚telnet客户端的使用方式仍是很有必要的。
语法:telnet [选项] [参数]
选项 | 作用 |
---|---|
-8 | 允许使用8位字符资料,包括输入与输出 |
-a | 尝试自动登入远端系统 |
-b<主机别名> | 使用别名指定远端主机名称 |
-c | 不读取用户专属目录里的.telnetrc文件 |
-d | 启动排错模式 |
-e<脱离字符> | 设置脱离字符 |
-E | 滤除脱离字符 |
-f | 此参数的效果和指定”-F”参数相同 |
-F | 使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机 |
-k<域名> | 使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名 |
-K | 不自动登入远端主机 |
-l<用户名称> | 指定要登入远端主机的用户名称 |
-L | 允许输出8位字符资料 |
-n<记录文件> | 指定文件记录相关信息 |
-r | 使用类似rlogin指令的用户界面 |
-S<服务类型> | 设置telnet连线所需的ip TOS信息 |
-x | 假设主机有支持数据加密的功能,就使用它 |
-X<认证形态> | 关闭指定的认证形态 |
参数:
- 远程主机:指定要登陆进行管理的远程主机
- 端口:指定TELNET协议使用的端口号
实例:
- traceroute
traceroute命令用于追踪数据包在网络上的传输时的全部路径,它默认发送的数据包大小是40字节。
通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。
traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其ip地址。
语法:traceroute [选项] [参数]
选项 | 作用 |
---|---|
-d | 使用Socket层级的排错功能 |
-f<存活数值> | 设置第一个检测数据包的存活数值TTL的大小 |
-F | 设置勿离断位 |
-g<网关> | 设置来源路由网关,最多可设置8个 |
-i<网络界面> | 使用指定的网络界面送出数据包 |
-I | 使用ICMP回应取代UDP资料信息 |
-m<存活数值> | 设置检测数据包的最大存活数值TTL的大小 |
-n | 直接使用IP地址而非主机名称 |
-p<通信端口> | 设置UDP传输协议的通信端口 |
-r | 忽略普通的Routing Table,直接将数据包送到远端主机上 |
-s<来源地址> | 设置本地主机送出数据包的IP地址 |
-t<服务类型> | 设置检测数据包的TOS数值 |
-v | 详细显示指令的执行过程 |
-w<超时秒数> | 设置等待远端主机回报的时间 |
-x | 开启或关闭数据包的正确性检验 |
参数:
- 主机:指定目的主机IP地址或主机名
实例:
记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是ms,其实就是-q
的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果用traceroute -q 4 www.58.com
,表示向每个网关发送4个数据包。
有时我们traceroute一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。
有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台DNS出现问题时,不能解析主机名、域名时,也会 有延时长的现象;您可以加-n
参数来避免DNS解析,以IP格式输出数据。
如果在局域网中的不同网段之间,我们可以通过traceroute 来排查问题所在,是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时,我们用到traceroute 追踪数据包所经过的网关,提交IDC服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。
- dig
dig命令是常用的域名查询工具,可以用来测试域名系统工作是否正常。
语法:dig [选项] [参数]
选项 | 作用 |
---|---|
@<服务器地址> | 指定进行域名解析的域名服务器 |
-b IP地址 | 当主机具有多个IP地址,指定使用本机的哪个IP地址向域名服务器发送域名查询请求 |
-f<文件名称> | 指定dig以批处理的方式运行,指定的文件中保存着需要批处理查询的DNS任务信息 |
-P | 指定域名服务器所使用端口号 |
-t<类型> | 指定要查询的DNS数据类型 |
-x IP地址 | 执行逆向域名查询 |
-4 | 使用IPv4 |
-6 | 使用IPv6 |
-h | 显示指令帮助信息 |
参数:
- 主机:指定要查询域名主机
- 查询类型:指定DNS查询的类型
- 查询类:指定查询DNS的class
- 查询选项:指定查询选项
实例:
- nc/netcat
nc命令是netcat命令的简称,都是用来设置路由器。如果没有这个命令,请安装netcat。
语法:nc/netcat [选项] [参数]
选项 | 作用 |
---|---|
-g<网关> | 设置路由器跃程通信网关,最多设置8个 |
-G<指向器数目> | 设置来源路由指向器,其数值为4的倍数 |
-h | 在线帮助 |
-i<延迟秒数> | 设置时间间隔,以便传送信息及扫描通信端口 |
-l | 使用监听模式,监控传入的资料 |
-n | 直接使用ip地址,而不通过域名服务器 |
-o<输出文件> | 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存 |
-p<通信端口> | 设置本地主机使用的通信端口 |
-r | 指定源端口和目的端口都进行随机的选择 |
-s<来源位址> | 设置本地主机送出数据包的IP地址 |
-u | 使用UDP传输协议 |
-v | 显示指令执行过程 |
-w<超时秒数> | 设置等待连线的时间 |
-z | 使用0输入/输出模式,只在扫描通信端口时使用 |
参数:
- 主机:指定主机的IP地址或主机名称
- 端口好:可以是单个整数或者是一个范围
实例:
- 远程拷贝文件
从server1拷贝文件到server2上。需要先在server2上,用nc激活监听。
server2上运行:
server1上运行:
- 克隆硬盘或分区
操作与上面的拷贝是雷同的,只需要由dd获得硬盘或分区的数据,然后传输即可。克隆硬盘或分区的操作,不应在已经mount的的系统上进行。所以,需要使用安装光盘引导后,进入拯救模式(或使用Knoppix工 具光盘)启动系统后,在server2上进行类似的监听动作:
server1上执行传输,即可完成从server1克隆sda硬盘到server2的任务:
完成上述工作的前提,是需要落实光盘的拯救模式支持服务器上的网卡,并正确配置IP。
- 端口扫描
|
|
- 保存Web页面
|
|
- 聊天
nc还可以作为简单的字符下聊天工具使用,同样的,server2上需要启动监听:
server1上传输:
这样,双方就可以相互交流了。使用Ctrl+D正常退出。
- 传输目录
从server1拷贝nginx-0.6.34目录内容到server2上。需要先在server2上,用nc激活监听,server2上运行:
server1上运行:
- ss
ss命令用来显示处于活动状态的套接字信息。ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间。
天下武功唯快不破。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。
语法:ss [选项]
选项 | 作用 |
---|---|
-h | 显示帮助信息; |
-V | 显示指令版本信息; |
-n | 不解析服务名称,以数字方式显示; |
-a | 显示所有的套接字; |
-l | 显示处于监听状态的套接字; |
-o | 显示计时器信息; |
-m | 显示套接字的内存使用情况; |
-p | 显示使用套接字的进程信息; |
-i | 显示内部的TCP信息; |
-4 | 只显示ipv4的套接字; |
-6 | 只显示ipv6的套接字; |
-t | 只显示tcp套接字; |
-u | 只显示udp套接字; |
-d | 只显示DCCP套接字; |
-w | 仅显示RAW套接字; |
-x | 仅显示UNIX域套接字。 |
实例:
- 显示ICP连接
|
|
- 显示Sockets 摘要
|
|
列出当前的established, closed, orphaned and waiting TCP sockets
- 列出所有打开的网络连接端口
|
|
- 查看进程使用的socket
|
|
- 找出打开套接字/端口应用程序
|
|
- 显示所有UDP Sockets
|
|
OK