# **Linux命令使用:**
## **History**
展示历史命令
**参考菜鸟 : [Linux 命令大全 | 菜鸟教程 (runoob.com)](https://www.runoob.com/linux/linux-command-manual.html)**
## **Ls:**
* a 显示所有文件及目录 (**.** 开头的隐藏文件也会列出)
* l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
* r 将文件以相反次序显示(原定依英文字母次序)
* t 将文件依建立时间之先后次序列出
* h 以人可读常用单位展示大小
* A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
* F 在列出的文件名称后加一符号;例如可执行档则加 "\*", 目录则加 "/"
* R 若目录下有文件,则以下之文件亦皆依序列出
### **eg:`ls -lhtr /home/`**
## **Cp:**
* a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
* d:复制时保留链接。这里所说的链接相当于 Windows 系统中的快捷方式。
* f:覆盖已经存在的目标文件而不给出提示。
* i:与 **f** 选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答 **y** 时目标文件将被覆盖。
* p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
* r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
* l:不复制文件,只是生成链接文件。
### **eg:`cp -rf /home/packageA/* /home/cp/packageB/`**
## **Scp:**
* 1: 强制scp命令使用协议ssh1
* 2: 强制scp命令使用协议ssh2
* 4: 强制scp命令只使用IPv4寻址
* 6: 强制scp命令只使用IPv6寻址
* B: 使用批处理模式(传输过程中不询问传输口令或短语)
* C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
* p:保留原文件的修改时间,访问时间和访问权限。
* q: 不显示传输进度条。
* r: 递归复制整个目录。
* v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
* c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
* F ssh\_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
* i identity\_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
* l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
* o ssh\_option: 如果习惯于使用ssh\_config(5)中的参数传递方式,
* P port:注意是大写的P, port是指定数据传输用到的端口号
* S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
1.本地文件或目录复制到远程
**eg:`scp -r local_file remote_username@remote_ip:remote_folde`**
或
**eg:`scp -r local_file remote_ip:remote_folder`**
2.远程复制到本地:只要将从本地复制到远程的命令的后2个参数调换顺序即可
3.远程服务器防火墙有为scp命令设置了指定的端口,我们需要使用 -P 参数来设置命令的端口号
**eg:`scp -P 4588 remote@www.runoob.com:/usr/local/sin.sh /home/administrator/`**
## **Nc:**
1. 实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口
2.端口的扫描,nc可以作为client发起TCP或UDP连接
3.机器之间传输文件
4.机器之间网络测速
### **参数:**
\-g 设置路由器跃程通信网关,最多可设置8个。
\-G 设置来源路由指向器,其数值为4的倍数。
h 在线帮助。
\-i 设置时间间隔,以便传送信息及扫描通信端口。
\-l 使用监听模式,管控传入的资料。
\-n 直接使用IP地址,而不通过域名服务器。
\-o 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
\-p 设置本地主机使用的通信端口。
\-r 乱数指定本地与远端主机的通信端口。
\-s 设置本地主机送出数据包的IP地址。
\-u 使用UDP传输协议。
\-v 显示指令执行过程。
\-w 设置等待连线的时间。
\-z 使用0输入/输出模式,只在扫描通信端口时使用。
### **示例:**
$ nc -l 9999 # 开启一个本地9999的TCP协议端口,由客户端主动发起连接,一旦连接必须由服务端发起关闭
$ nc -vw 2 192.168.21.248 11111 # 通过nc去访问192.168.21.248主机的11111端口,确认是否存活;可不加参数
$ nc -ul 9999 # 开启一个本地9999的UDP协议端口,客户端不需要由服务端主动发起关闭
$ nc 192.168.21.248 9999 < test # 通过192.168.21.248的9999TCP端口发送数据文件
$ nc -l 9999 > zabbix.file # 开启一个本地9999的TCP端口,用来接收文件内容
### **测试网速:**
A机器操作如下:
$yum install -y dstat # A机器安装dstat命令
$ nc -l 9999 > /dev/null
B机器开启数据传输
nc 10.0.1.161 9999 </dev/zero
A机器进行网络监控
$ dstat
## **vi:**
### **1、进入vi**
在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面:
$ vi myfile
首先会进入「命令行模式(command mode)」
a) 切换至插入模式(Insert mode)编辑文件
在「命令行模式(command mode)」下按一下字母「i」就可以进入「插入模式(Insert mode)」,这时候你就可以开始输入文字了。 按ESC退回命令行模式
b) 退出vi及保存文件
在「命令行模式(command mode)」下,按一下「:」冒号键进入「Last line mode」,例如:
: w filename (输入 「w filename」将文章以指定的文件名filename保存)
: wq (输入「wq」,存盘并退出vi)
: q! (输入q!, 不存盘强制退出vi)
按ESC退回命令行模式
### **2、命令行模式(command mode)功能键**
1). 插入模式
按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件;
按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。
2). 从插入模式切换为命令行模式
按「ESC」键。
3). 移动光标
vi可以直接用键盘上的光标来上下左右移动,但正规的vi是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格。
按「ctrl」+「b」:屏幕往“后”移动一页。
按「ctrl」+「f」:屏幕往“前”移动一页。
按「ctrl」+「u」:屏幕往“后”移动半页。
按「ctrl」+「d」:屏幕往“前”移动半页。
按数字「0」:移到文章的开头。
按「G」:移动到文章的最后。
按「$」:移动到光标所在行的“行尾”。
按「^」:移动到光标所在行的“行首”
按「w」:光标跳到下个字的开头
按「e」:光标跳到下个字的字尾
按「b」:光标回到上个字的开头
按「#l」:光标移到该行的第#个位置,如:5l,56l。
4). 删除文字
「x」:每按一次,删除光标所在位置的“后面”一个字符。
「#x」:例如,「6x」表示删除光标所在位置的“后面”6个字符。
「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符。
「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符。
「dd」:删除光标所在行。
「#dd」:从光标所在行开始删除#行
5). 复制
「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
「#yw」:复制#个字到缓冲区
「yy」:复制光标所在行到缓冲区。
「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
6). 替换
「r」:替换光标所在处的字符。
「R」:替换光标所到之处的字符,直到按下「ESC」键为止。
7). 回复上一次操作
「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复。
8). 更改
「cw」:更改光标所在处的字到字尾处
「c#w」:例如,「c3w」表示更改3个字
9). 跳至指定的行
「ctrl」+「g」列出光标所在行的行号。
「#G」:例如,「15G」,表示移动光标至文章的第15行行首。
### **3、Last line mode下命令简介**
在使用「last line mode」之前,请记住先按「ESC」键确定您已经处于「command mode」下后,再按「:」冒号即可进入「last line mode」。
A) 列出行号
「set nu」:输入「set nu」后,会在文件中的每一行前面列出行号。
B) 跳到文件中的某一行
「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。
C) 查找字符
「/关键字」:先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。
「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。
D) 保存文件
「w」:在冒号输入字母「w」就可以将文件保存起来。
E) 离开vi
「q」:按「q」就是退出,如果无法离开vi,可以在「q」后跟一个「!」强制离开vi。
「qw」:一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。
「Z」:和qw一样具有保存功能
## **Chmod:**
其中参数:
·u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
·\+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
·r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
其他参数说明:
·\-c : 若该文件权限确实已经更改,才显示其更改动作
·\-f : 若该文件权限无法被更改也不要显示错误讯息
·\-v : 显示权限变更的详细资料
·\-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
·\--help : 显示辅助说明
·\--version : 显示版本
### **实例**
将文件 file1.txt 设为所有人皆可读取 :
chmod ugo+r file1.txt
将文件 file1.txt 设为所有人皆可读取 :
chmod a+r file1.txt
将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
chmod ug+w,o\-w file1.txt file2.txt
为 ex1.py 文件拥有者增加可执行权限:
chmod u+x ex1.py
将目前目录下的所有文件与子目录皆设为任何人可读取 :
chmod \-R a+r \*
此外chmod也可以用数字来表示权限如 :
chmod 777 file
语法为:
chmod abc file
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
r=4,w=2,x=1
·若要 rwx 属性则 4+2+1=7;
·若要 rw- 属性则 4+2=6;
·若要 r-x 属性则 4+1=5。
## **chown:**
**参数** :
* user : 新的文件拥有者的使用者 ID
* group : 新的文件拥有者的使用者组(group)
* c : 显示更改的部分的信息
* f : 忽略错误信息
* h :修复符号链接
* v : 显示详细的处理信息
* R : 处理指定目录以及其子目录下的所有文件
* \-help : 显示辅助说明
* \-version : 显示版本
### **实例**
把 /var/run/httpd.pid 的所有者设置 root:
* chown root /var/run/httpd.pid
将文件 file1.txt 的拥有者设为 runoob,群体的使用者 runoobgroup :
* chown runoob:runoobgroup file1.txt
将当前前目录下的所有文件与子目录的拥有者皆设为 runoob,群体的使用者 runoobgroup:
* chown -R runoob:runoobgroup \*
把 /home/runoob 的关联组设置为 512 (关联组ID),不改变所有者:
* chown :512 /home/runoob
## **Top、Htop:**
### **参数:**
top: -d delay -n iterations [-u user | -U user] -p pid [,pid ...]
-d 每[延迟]秒更新一次
-n 更新[计数]次
-u 查看指定使用者
-p 查看指定任务id
htop:
-C--无颜色使用单色配色方案
-d--delay设置更新之间的延迟,以十分之一秒为单位
-h--帮助打印此帮助屏幕
-s--sort key=按列排序(try--sort key=列表帮助)
-u--user=USERNAME仅显示给定用户的进程
-p--pid,[,pid,pid…]仅显示给定的PID
-v--版本打印版本信息
### **区别:**
* htop提供了正在运行的完整进程列表,而不是最消耗资源的进程
* htop使用颜色并提供关于处理器,交换和内存状态的视觉信息。
* htop支持鼠标操作,top不支持
### **解析使用:**
top: [https://www.cnblogs.com/zhoug2020/p/6336453.html](https://www.cnblogs.com/zhoug2020/p/6336453.html)
htop: [https://www.cnblogs.com/yqsun/p/5396363.html](https://www.cnblogs.com/yqsun/p/5396363.html)
## **Free:**
### **参数:**
usage: free [-b|-k|-m|-g|-h] [-l] [-o] [-t] [-s delay] [-c count] [-V]
-b,-k,-m,-g 以字节、KB、MB或GB为单位显示输出
-h 人类可读输出(自动单位缩放)
-l 显示详细的低内存和高内存统计信息
-o 使用旧格式(无-/+缓冲区/缓存线)
-t 显示RAM+交换的总计
-s 每[延迟]秒更新一次
-c 更新[计数]次
-a 如果由内核导出,则显示可用内存(>每行80个字符)
-V 显示版本信息并退出
### **常用:**
$ free -h -s 10 -c 6 # 每10秒刷新一次,共刷新6次,测试终止任务查看内存释放,可配合重定向使用(free -h -s 10 -c 6 > ./log.free &)
## **Netstart:**
### **参数:**
-a (all) 显示所有选项,默认不显示LISTEN相关。
-t (tcp) 仅显示tcp相关选项。
-u (udp) 仅显示udp相关选项。
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服务状态。
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
### **使用:**
1、列出所有端口 $netstat -a
2、列出所有 tcp 端口 $netstat -at
3、列出所有 udp 端口 $netstat -au
4、只显示监听端口 $netstat -l
5、只列出所有监听 tcp 端口 $netstat -lt
6、只列出所有监听 udp 端口 $netstat -lu
7、列出所有监听 UNIX 端口 $netstat -lx
8、显示所有端口的统计信息 $netstat -s
9、显示 TCP 或 UDP 端口的统计信息 $netstat -st 或 -su
10、 输出中显示 PID 和进程名称 $netstat -p
11、netstat 输出中不显示主机,端口和用户名 (host, port or user)
当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。
同样可以加速输出,因为不用进行比对查询。
$netstat -an
如果只是不想让这三个名称中的一个被显示,使用以下命令
$netsat -a --numeric-ports
$netsat -a --numeric-hosts
$netsat -a --numeric-users
12、持续输出 netstat 信息 #netstat -c
13、找出程序运行的端口 #netstat -ap | grep ':80'
14、查看连接某服务端口最多的的IP地址(前20个)
$netstat -nat | grep "10.1.62.23:443" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20
15、TCP各种状态列表
$netstat -nat |awk '{print $6}'
统计数量
$netstat -nat |awk '{print $6}'|sort|uniq -c
排序
$netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
$netstat -n | awk '/^tcp/ {++S\[$NF\]} END {for(a in S) print a, S\[a\]}'
16、直接统计tcp数量监听的数量
$netstat -ant | wc -l
17、监控端口使用情况(常用)
$netstat -nltp