Linux常用命令与技巧

1. ncdu

一个可以替代du命令的工具,ncdu命令是对传统du命令功能上的增强,不需要像du那样输入大量的命令,就可以计算文件及目录大小并可以按照大小或文件名进行排序。它是基于ncurses库开发的,因此还支持很多丰富的交互式命令。

1.1. 安装

1
2
3
4
5
6
# CentOS
yum -y install epel-release
yum -y install ncdu

# Ubuntu
apt-get install ncdu

1.2. 使用方法

执行ncdu命令,回车,即可列出当前目录下的文件及目录的大小,默认按照大小进行排序,并且使用斜杠和回车键进行目录切换十分方便。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@Linux /]# ncdu

ncdu 1.16 ~ Use the arrow keys to navigate, press ? for help
--- / ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
316.3 GiB [##############################] /data
24.8 GiB [## ] /ssdimg
5.1 GiB [ ] /samba
4.5 GiB [ ] /usr
1.4 GiB [ ] /var
149.3 MiB [ ] /boot
45.7 MiB [ ] /etc
. 35.1 MiB [ ] /run
5.4 MiB [ ] /home
2.4 MiB [ ] /root
1.8 MiB [ ] /tmp
260.0 KiB [ ] .readahead
. 0.0 B [ ] /proc
0.0 B [ ] /sys
0.0 B [ ] /dev
0.0 B [ ] /opt
@ 0.0 B [ ] lib64
@ 0.0 B [ ] sbin
@ 0.0 B [ ] lib
@ 0.0 B [ ] bin
e 0.0 B [ ] /srv
e 0.0 B [ ] /mnt
e 0.0 B [ ] /media
0.0 B [ ] .autorelabel

1.3. 常用快捷键

  • up,k - 用于向上移动光标
  • down,j - 用于向下移动光标
  • 右键,输入,l> - 打开所选目录
  • left,<,h - 这将打开父目录
  • n - 按名称排序(再次按降序排列)
  • s - 按文件大小排序(再次按降序排列)
  • d - 删除所选文件或目录
  • g - 显示百分比和/或图表
  • t - 排序时在文件之前切换dirs
  • c - 切换子项目计数的显示
  • b - 当前目录中的Spawn shell
  • i - 显示有关所选项目的信息
  • r - 刷新/重新计算当前目录
  • q - 退出ncdu

2. nmap

Nmap用于在远程机器上探测网络,执行安全扫描,网络审计和搜寻开放端口。它会扫描远程在线主机,该主机的操作系统,包过滤器和开放的端口。

2.1. 安装

1
2
3
4
5
# CentOS
yum install -y nmap

# Ubuntu
apt-get install nmap

2.2. 扫描类型

1
2
3
4
5
6
7
8
9
-sT    TCP connect() 扫描,这是最基本的 TCP 扫描方式。这种扫描很容易被检测到,在目标主机的日志中会记录大批的连接请求以及错误信息。
-sS TCP 同步扫描 (TCP SYN),因为不必全部打开一个 TCP 连接,所以这项技术通常称为半开扫描 (half-open)。这项技术最大的好处是,很少有系统能够把这记入系统日志。不过,你需要 root 权限来定制 SYN 数据包。
-sF,-sX,-sN 秘密 FIN 数据包扫描、圣诞树 (Xmas Tree)、空 (Null) 扫描模式。这些扫描方式的理论依据是:关闭的端口需要对你的探测包回应 RST 包,而打开的端口必需忽略有问题的包(参考 RFC 793 第 64 页)。
-sP ping 扫描,用 ping 方式检查网络上哪些主机正在运行。当主机阻塞 ICMP echo 请求包是 ping 扫描是无效的。nmap 在任何情况下都会进行 ping 扫描,只有目标主机处于运行状态,才会进行后续的扫描。
-sU UDP 的数据包进行扫描,如果你想知道在某台主机上提供哪些 UDP(用户数据报协议,RFC768) 服务,可以使用此选项。
-sA ACK 扫描,这项高级的扫描方法通常可以用来穿过防火墙。
-sW 滑动窗口扫描,非常类似于 ACK 的扫描。
-sR RPC 扫描,和其它不同的端口扫描方法结合使用。
-b FTP 反弹攻击 (bounce attack),连接到防火墙后面的一台 FTP 服务器做代理,接着进行端口扫描。

2.3. 扫描参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-P0    在扫描之前,不 ping 主机。
-PT 扫描之前,使用 TCP ping 确定哪些主机正在运行。
-PS 对于 root 用户,这个选项让 nmap 使用 SYN 包而不是 ACK 包来对目标主机进行扫描。
-PI 设置这个选项,让 nmap 使用真正的 ping(ICMP echo 请求)来扫描目标主机是否正在运行。
-PB 这是默认的 ping 扫描选项。它使用 ACK(-PT) 和 ICMP(-PI) 两种扫描类型并行扫描。如果防火墙能够过滤其中一种包,使用这种方法,你就能够穿过防火墙。
-O 这个选项激活对 TCP/IP 指纹特征 (fingerprinting) 的扫描,获得远程主机的标志,也就是操作系统类型。
-I 打开 nmap 的反向标志扫描功能。
-f 使用碎片 IP 数据包发送 SYN、FIN、XMAS、NULL。包增加包过滤、入侵检测系统的难度,使其无法知道你的企图。
-v 冗余模式。强烈推荐使用这个选项,它会给出扫描过程中的详细信息。
-S <IP> 在一些情况下,nmap 可能无法确定你的源地址 (nmap 会告诉你)。在这种情况使用这个选项给出你的 IP 地址。
-g port 设置扫描的源端口。一些天真的防火墙和包过滤器的规则集允许源端口为 DNS(53) 或者 FTP-DATA(20) 的包通过和实现连接。显然,如果攻击者把源端口修改为 20 或者 53,就可以摧毁防火墙的防护。
-oN 把扫描结果重定向到一个可读的文件 logfilename 中。
-oS 扫描结果输出到标准输出。
--host_timeout 设置扫描一台主机的时间,以毫秒为单位。默认的情况下,没有超时限制。
--max_rtt_timeout 设置对每次探测的等待时间,以毫秒为单位。如果超过这个时间限制就重传或者超时。默认值是大约 9000 毫秒。
--min_rtt_timeout 设置 nmap 对每次探测至少等待你指定的时间,以毫秒为单位。
-M count 置进行 TCP connect() 扫描时,最多使用多少个套接字进行并行的扫描。

2.4. example

  • 获取远程主机系统类型和开放端口
1
2
3
nmap -A IP
或者
nmap -sS -P0 -sV -O IP
  • 探测内网在线主机(使用IP地址)
1
nmap -sP 192.168.0.0/24
  • 扫描多台主机
1
nmap 192.168.0.101 192.168.0.102 192.168.0.103 
  • 使用IP地址的最后一个字节扫描多台服务器
1
nmap 192.168.0.101,102,103 
  • 扫描一个IP地址范围
1
nmap 192.168.0.101-110
  • 排除一些主机后再扫描

    在执行全网扫描或用通配符扫描时你可以使用“-exclude”选项来排除某些你不想要扫描的主机。

1
nmap 192.168.0.* --exclude 192.168.0.100
  • 扫描操作系统信息和路由跟踪

    使用Nmap,你可以检测远程主机上运行的操作系统和版本。为了启用操作系统和版本检测,脚本扫描和路由跟踪功能,我们可以使用NMAP的“**-A**“选项。

1
nmap -A 192.168.0.101
  • 启用Nmap的操作系统探测功能

    使用选项“**-O”和“-osscan-guess**”也帮助探测操作系统信息。

1
nmap -O www.example.com
  • 扫描主机侦测防火墙

    下面的命令将扫描远程主机以探测该主机是否使用了包过滤器或防火墙。

1
nmap -sA 192.168.0.101
  • 扫描主机检测是否有防火墙保护

    扫描主机检测其是否受到数据包过滤软件或防火墙的保护。

1
nmap -PN 192.168.0.101
  • 执行快速扫描

    你可以使用“**-F**”选项执行一次快速扫描,仅扫描列在nmap-services文件中的端口而避开所有其它的端口。

1
nmap -F 192.168.0.101
  • 顺序扫描端口

    使用“-r”选项表示不会随机的选择端口扫描。

1
nmap -r 192.168.0.101
  • 打印主机接口和路由

    你可以使用nmap的“–iflist”选项检测主机接口和路由信息。

1
nmap --iflist
  • 扫描特定的端口

    使用Nmap扫描远程机器的端口有各种选项,你可以使用“-P”选项指定你想要扫描的端口,默认情况下nmap只扫描TCP端口。

1
nmap -p 80 www.example.com
  • 扫描多个端口

    你还可以使用选项“-P”来扫描多个端口。

1
nmap -p 80,443 192.168.0.101
  • 扫描指定范围内的端口

    您可以使用表达式来扫描某个范围内的端口。

1
nmap -p 80-160 192.168.0.101

3. axel

axel是linux下一个多线程下载工具

安装

1
2
3
4
5
6
7
# centos7
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install -y axel

# debian/ubuntu
apt-get install -y axel

参数

1
2
3
4
5
6
7
8
9
10
11
12
--max-speed=x , -s x 最高速度x
--num-connections=x , -n x 连接数x
--output=f , -o f 下载为本地文件f
--search[=x] , -S [x] 搜索镜像
--header=x , -H x 添加头文件字符串x(指定 HTTP header)
--user-agent=x , -U x 设置用户代理(指定 HTTP user agent)
--no-proxy , -N 不使用代理服务器
--quiet , -q 静默模式
--verbose ,-v 更多状态信息
--alternate , -a Alternate progress indicator
--help ,-h 帮助
--version ,-V 版本信息

用法

1
axel [options] url1 [url2] [url...]

用例

1
2
3
4
5
使用10线程下载http服务器上的test.jpg:
axel -n 10 http://abcd.com/test.jpg

使用10线程下载ftp服务器上的test.jpg:
axel -n 10 ftp://username:passwd@ftp.abc.com/test.jpg

4. Linux命令使用技巧

4.1. 在一个命令中运行多个命令

假设您必须一个接一个地运行几个命令。您是否在等待第一个命令完成运行,然后执行下一个命令?

那么,您可以使用“;”分隔符。这样,您可以在一行中运行许多命令。无需等待先前的命令完成后再执行其他任务。

1
command_1; command_2; command_3

4.2. 仅在上一个命令成功的情况下,才能在一个命令中运行多个命令

在上一个命令中,您了解了如何在一个命令中运行多个命令以节省时间。但很多时候你必须确保命令不会失败才能执行下一条命令,那怎么半?

比如您要构建代码,然后在构建成功的情况下才接着运行make。

在这种情况下,可以使用&&分隔符。&&确保下一条命令仅在上一条命令成功执行时运行。

1
command_1 && command_2

此命令的一个很好的例子是当您使用 sudo apt update && sudo apt upgrade 升级系统时。

4.3. 轻松搜索您使用过的命令

想象一下一种情况,您在几分钟/几小时前使用了很长的命令,而您不得不再次使用它。问题是您不再记得确切的命令了。

反向搜索是您的救星。您可以使用搜索词在历史记录中搜索命令。

只需使用ctrl + r键即可启动反向搜索并键入命令的某些部分。它将查询历史记录,并向您显示与搜索词匹配的命令。

1
ctrl + r 搜索词

默认情况下,它将仅显示一个结果。要查看更多与您的搜索字词匹配的结果,您将不得不反复使用ctrl + r。要退出反向搜索,只需使用Ctrl + C。

在命令历史记录中进行反向搜索

请注意,在某些Bash Shell中,还可以在搜索词中使用Page Up和Down键,它将自动完成命令。

4.4. 解除Linux终端意外冻结的 Ctrl + S

在很多类Unix 的系统上,Ctrl-S 都有特殊的含义:它会“冻结”终端(它曾经被用来暂停快速滚动)。因为“保存”一般也是用这个快捷键,所以经常会有人不假思索地按下这个快捷键,结果大多数人都会被搞糊涂(我也经常犯这个错误)。解冻终端是用Ctrl-Q,所以如果你忽然发觉终端看起来被冻结了,试一下Ctrl-Q,看能不能释放它。

4.5. 移至行首或行尾

假设您正在键入一个长命令,并且在途中您意识到必须在开始时进行一些更改。您将使用几次向左键击移动到行的开头。并且类似地进行到该行的末尾。

当然,您可以在此处使用Home和End键,但是也可以使用Ctrl + A转到行的开头,并使用Ctrl + E转到结尾。

移至该行的开头或结尾

我发现它比使用Home和End键更方便,尤其是在笔记本电脑上。

4.6. 读取压缩日志而不解压缩

服务器日志通常被gzip压缩以节省磁盘空间。这给分析日志的开发人员或系统管理员带来了一个问题。您可能必须将其scp到本地,然后提取它来访问文件,因为有时您没有提取日志的写权限。

值得庆幸的是,在这种情况下,z命令可以帮助您。z命令提供了用于处理日志文件(例如less,cat,grep等)的常规命令的替代方法。

这样您就可以使用zless,zcat,zgrep等命令查看压缩包的内容,甚至不必显式提取压缩文件。

1
[linuxidc@localhost ~/www.linuxidc.com]$zcat linuxidc_log.zip | more

不解压缩读取压缩文件

4.7. 使用 less读取文件

要查看文件的内容,cat不是最佳选择,特别是如果文件很大。cat命令将在屏幕上显示整个文件。

您可以使用Vi,Vim或其他基于终端的文本编辑器,但是如果您只想读取文件,则 less 命令是更好的选择。

1
less -N linuxidc.txt//按下v键来编辑文件//退出编辑器后,你可以继续用less浏览了

您可以在更少的范围内搜索字词,按页移动,高亮与行号等。

4.8. 使用 !$ 重新使用上一个命令中的最后一项

在许多情况下,使用上一个命令的参数很方便。

假设您必须创建一个目录,然后进入新创建的目录。那么,您可以使用!$选项。

使用 !$

更好的方法您可以使用使用alt + . 。在最后一个命令的选项之间来回移动的次数。

4.9. 用!!重用当前命令中的上一个命令。

您可以使用!!调用前面的整个命令。当您必须运行一个命令并意识到它需要root特权时,这一点特别有用。

一个快速 sudo !! 省去了很多击键。

用!!重用当前命令中的上一个命令。

4.10. 使用别名来修正错别字

您可能已经知道Linux中的别名命令是什么。你能做的是,用它们来修正打字错误。

例如,您可能经常将grep输入为gerp。如果您以这种方式在您的bashrc中放置一个别名:

1
alias gerp=grep

这样,您无需再次输入命令。

-------------本文结束感谢您的阅读-------------