Updated on 2018-02-08

https://www.centos.org/

http://man7.org/linux/man-pages/dir_all_alphabetic.html

最近因为要参加全国云计算比赛,需要使用 Linux;所以我把关于 Linux 系统的一些命令整理在这里,以便查阅。

Update:市赛以第一名出线,国赛获得二等奖。

Update 2:学校要求我留下,继续参加下一届比赛。

pwd  #查看当前路径
date #查看当前时间
type #查看命令类型
file #查看文件类型 -i 显示MIME类别
stat #查看文件属性
cat  #查看文件内容     Concatenate
head #查看文件内容头10行
tail #查看文件内容尾10行 -f 监视文件最新增加的内容     Follow
touch #创建空文件
ip -s -h address #查看网卡信息
wc   #统计文本     -l -w -c     行数 单词数 字节数
less #分屏显示     -5 每次显示5行     -N 显示行号
more #分页显示     -5 每次显示5行     推荐使用 less
reset #初始化终端
env #查看环境变量
set #查看环境变量 + Shell 变量

ls

-a #显示隐藏文件
-d #只显示当前文件夹信息
-l #以列表形式显示详细信息
-F #显示类型标识符     /目录 *可执行文件 @符号链接 =Sockets套接字 |FIFO命令管道 普通文件无标识符     Classify(分类)
-h #人性化显示大小
-i #显示inode
-I #排除匹配文件
-r #反向排序     Reverse(相反)
-R #操作文件夹下的所有文件     Recursive(递归)
-S #按文件大小降序排列     Size
-t #按文件时间排序     Time

[root@controller ~]$ ll -Shr #人性化显示大小并按大小升序排列
total 20K
-rw-------. 1 root root 1.2K Mar 29 14:35 anaconda-ks.cfg
-rw-r--r--. 1 root root 3.1K Mar 29 14:34 install.log.syslog
-rw-r--r--. 1 root root 8.9K Mar 29 14:35 install.log
[root@controller ~]$ ls -lF
total 24
-rw-------. 1 root root 1208 Apr 12 14:42 anaconda-ks.cfg
-rw-r--r--. 1 root root 9114 Apr 12 16:22 install.log
-rw-r--r--. 1 root root 3161 Apr 12 14:41 install.log.syslog
drwxr-xr-x. 2 root root 4096 Apr 13 06:06 test/
-rwxr-xr-x. 1 root root    0 Apr 13 06:06 test.sh*
[root@controller ~]$ ls -l
total 20
-rw-------. 1 root root  986 Mar 18 10:14 anaconda-ks.cfg
-rw-r--r--. 1 root root 9072 Mar 18 10:14 install.log
-rw-r--r--. 1 root root 3161 Mar 18 10:13 install.log.syslog
10位     前1(-文件 d目录 l连接)     后9(rw-r--r--)
rw-r--r--(333)
u所属用户     g所属组     o其他人
r读     w写     x执行
1引用计数     root所属用户     root所属组     9072文件大小

Tips :
ll = ls -l
ls `cat 123`     ``包含的命令 bash 会先执行
ll /root/{1,2}     等同于 ll /root/1 /root/2

mkdir

-p #递归创建目录

mkdir -p 1/2/3

cd

cd    #进入当前用户家目录
cd ~  #进入当前用户家目录
cd -  #进入上一次目录
cd .. #进入上一级目录

rmdir

rmdir #删除空白目录,不常用

rm

-r #操作文件夹下的所有文件     Recursive(递归)
-f #不显示确认信息
-v #显示详细信息

rm -rf *
rm -rf `ls | grep -v word` #删除除了 word 之外的所有文件

删除文件名前带有特殊字符的文件
rm -rf -- -1
rm -rf ./-1

创建文件名前带有特殊字符的文件
cp -- 1 -1     -1
cp 1 \\1     \1

chattr

-R #操作文件夹下的所有文件     Recursive(递归)
+ 属性 #开启属性
- 属性 #关闭属性

第二扩展文件系统属性:
a:让文件或目录仅供附加用途
b:不更新文件或目录的最后存取时间
c:将文件或目录压缩后存放
d:将文件或目录排除在倾倒操作之外
i:不得任意更动文件或目录
s:保密性删除文件或目录
S:即时更新文件或目录
u:预防意外删除

[root@controller ~]$ chattr +i 123 #添加 i 属性,保护文件
[root@controller ~]$ lsattr #查看文件的第二扩展文件系统属性
----i--------e- ./123
[root@controller ~]$ rm -rf 123 #不能删除
rm: cannot remove 123: Operation not permitted
[root@controller ~]$ chattr -i 123 #关闭属性
[root@controller ~]$ rm -rfv 123
removed 123

[root@controller ~]$ chattr +a 123 #只能往里面追加内容,不能删除

cp

cp [选项] [原文件或目录] [目标目录]
-u #只复制比目标新的文件
-r #操作文件夹下的所有文件     Recursive(递归)
-p #连带文件属性复制
-d #若原文件是链接文件,则复制链接属性
-a #相当于 -rpd

cp /root/123 .     复制文件到当前目录
cp /root/123{,.bak}     备份文件,相当于 cp /root/123 /root/123.bak

mv

mv [选项] [原文件或目录] [目标目录]
-u #只移动比目标新的文件

mv 123 1 #相当于重命名

ln

ln [原文件]  [目标文件]
-s #创建软链接 soft,不加则创建硬链接 hard,需使用绝对路径

软链接:类似于windows快捷方式,删除原文件,软连接不能使用
硬链接:拥有相同的i节点和存储block块,可以看作同一个文件,删除其中之一,另一个还能使用,可通过i节点识别,不能跨分区和针对目录使用,相当于backup,防止误删。

z

echo '. ~/z.sh' >> .bashrc #安装 z

https://github.com/rupa/z
https://raw.githubusercontent.com/rupa/z/master/z.sh

z.lua

echo 'lua ~/z.lua --init fish once | source' >> ~/.config/fish/config.fish

https://github.com/skywind3000/z.lua
https://raw.githubusercontent.com/skywind3000/z.lua/master/z.lua

locate

yum -y install mlocate #安装 locate
locate [文件名] #在数据库中搜索文件名,速度非常快
updatedb #手动更新数据库

/var/lib/mlocate     数据库位置,默认更新周期为 1/etc/updatedb.conf     locate 配置文件

ZModem

yum -y install lrzsz #安装 ZModem
rz #上传文件     对于 Linux Receive(接收)
sz #下载文件     对于 Linux Send(发送)

parted

yum -y install parted #安装 parted
-l #输出分区信息

交互命令
help [COMMAND]     获取帮助信息
mklabel     设置分区表,如 gpt 和 msdos
mkpart     创建新分区     mkpart PART-TYPE [FS-TYPE] START END
print     输出分区信息,可简写为 p
      free     同时显示磁盘剩余空间
      all     显示所有磁盘信息
      number     显示指定分区信息
rm     删除分区
select     选择设备
quit     退出,可简写为 q

[root@controller ~]$ parted
      select /dev/sdb #选择设备
      p #显示磁盘分区信息
      mklabel gpt #将分区表修改为 gpt 格式
      mkpart primary 265gb 275gb #创建一个大小为 10GB 的主分区,分区起始位置:265gb,分区结束位置:275gb
      mkpart primary 275gb 280gb #创建一个大小为 5GB 的主分区,分区起始位置:275gb,分区结束位置:280gb
      rm 2 #删除大小为 5GB 的分区
      p free #同时查看磁盘剩余空间
      q #退出
[root@controller ~]$ mkfs.ext4 /dev/sdb1 #格式化为 ext4 文件系统
[root@controller ~]$ mkdir /123 #挂载
[root@controller ~]$ mount /dev/sdb1 /123/ #挂载
[root@controller ~]$ df -h|grep 123 #查看挂载分区
/dev/sdb1       9.6G  138M  9.3G   2% /123

[root@controller ~]$ parted /dev/sdb
      mklabel gpt
      mkpart primary 0% 100%
      q
[root@controller ~]$ mkfs.ext4 /dev/sdb1
[root@controller ~]$ mkdir /123
[root@controller ~]$ mount /dev/sdb1 /123

7z

yum -y install p7zip* #安装 7z     p7zip,p7zip-plugins,7za和7zr是7z的精简版,建议使用7z
a     添加到压缩文件
b     基准测试     Benchmark
d     从压缩文件中删除
l     列出压缩文件中的内容
t     测试压缩文件
e     解压到当前目录,但没有目录结构,即所有文件都在同一个目录下
x     以完整路径解压
-o     指定输出文件夹     output
-mx[0,1,3,5,7,9]     指定压缩级别

7z a 123 * #将当前目录下的所有文件和文件夹都压缩到 123.7z 中
7z a /root/123 /tmp/ #将 /tmp 中的所有内容压缩到 /root 目录中的 123.7z 中
7z l 123.7z #列出压缩文件中的内容
7z x 123.7z #解压 123.7z 中的所有文件到当前目录下
7z x 123.7z -o456 #解压 123.7z 中的所有文件到 456 目录中,456 目录会自动创建

7z a 123 123 -mx9 #将当前文件夹里的 123 文件夹以 ultra 级别压缩到 123.7z 中

ncdu

yum -y install ncdu #安装 ncdu

交互命令
n     按文件名排序
s     按文件大小排序
r     重新统计大小
g     切换统计视图
e     显示隐藏文件
d     删除文件/文件夹
i     显示文件/目录信息
↑↓     /
←→     返回/进入

[root@controller ~]$ ncdu /root/
ncdu 1.7 ~ Use the arrow keys to navigate, press ? for help
--- /root -----------------------------------------------------------------------
   16.0kiB [ 13.8% ##########]  .bash_history
   16.0kiB [ 13.8% ##########] /.ssh
   12.0kiB [ 10.3% #######   ]  install.log
    8.0kiB [  6.9% #####     ] /.novaclient
    8.0kiB [  6.9% #####     ] /.m2
    8.0kiB [  6.9% #####     ]  .viminfo
    8.0kiB [  6.9% #####     ] /.karaf
    4.0kiB [  3.4% ##        ]  install.log.syslog
    4.0kiB [  3.4% ##        ]  anaconda-ks.cfg
    4.0kiB [  3.4% ##        ]  .rnd
    4.0kiB [  3.4% ##        ]  .mysql_history
    4.0kiB [  3.4% ##        ]  .bashrc
    4.0kiB [  3.4% ##        ]  .bash_profile
    4.0kiB [  3.4% ##        ]  .tcshrc
    4.0kiB [  3.4% ##        ]  .cshrc
    4.0kiB [  3.4% ##        ]  .bash_logout
 Total disk usage: 116.0kiB  Apparent size:  66.3kiB  Items: 30

nethogs

yum -y install nethogs #安装 nethogs
-d 2 #设置刷新频率为 2 秒,默认 1 秒     delay(延迟)

交互命令
m     切换统计视图     KB/sec -> Total[KB -> B -> MB]
s     按发送流量排序     SEND
r     按接收流量排序     RECEIVED
q     退出

[root@controller ~]$ nethogs eth0 eth1 #同时监视 eth0、eth1 网卡,默认只监视 eth0
NetHogs version 0.8.0
  PID USER     PROGRAM                                DEV        SENT      RECEIVED
2039  qpidd    /usr/sbin/qpidd                        eth0       0.350       0.397 KB/sec
16415 root     sshd: root@pts/4                       eth0       2.509       0.047 KB/sec
28605 root     sshd: root@pts/0                       eth0       0.645       0.047 KB/sec
1885  mysql    /usr/libexec/mysqld                    eth0       0.000       0.000 KB/sec
?     root     unknown TCP                                       0.000       0.000 KB/sec
  TOTAL                                                          3.504       0.491 KB/sec

iftop

yum -y install iftop #安装 iftop
-i eth1 #设定监视网卡

交互命令
n     是否解析 IP
N     是否解析端口
s     是否显示本地 主机
d     是否显示远端 主机
S     是否显示本地 端口
D     是否显示远端 端口
p     是否显示端口连接
P     是否暂停
b     是否显示平均流量刻度条
B     切换刻度条时间单位     2s,10s,40s
l     打开屏幕过滤功能
L     切换刻度条单位
t     切换显示格式
T     是否显示每个连接的总流量
j,k     滚动屏幕
1,2,3     根据右侧3列流量排序
<     根据本地主机名排序
>     根据远端主机名排序

TX     发送Transport     cum     运行到目前的总流量     peak     流量峰值     rates     过去2s,10s,40s的平均流量
RX     接收Received
TOTAL     总流量

                 19.1Mb            38.1Mb            57.2Mb            76.3Mb      95.4Mb
└────────────────┴─────────────────┴─────────────────┴──────────────
192.168.100.10:ssh         => 192.168.100.151:54315        116KB  4.09Kb  4.09Kb  4.06Kb
                           <=                             12.1KB   320b    320b    418b
192.168.100.10:ssh         => 192.168.100.151:53704        687KB   688b    726b   1.49Kb
                           <=                              155KB   160b    160b    311b
────────────────────────────────────────────────────────────────────
TX:             cum:   14.6MB   peak:   11.4Kb           rates:   4.77Kb  4.80Kb  5.54Kb
RX:                     715MB           2.27Kb                     480b    480b    730b
TOTAL:                  729MB           13.7Kb                    5.23Kb  5.27Kb  6.26Kb

tree

yum -y install tree #安装 tree
-a #显示所有文件和目录     all
-d #只显示目录     directory
-f #在文件和目录前显示绝对路径     full
-u #在文件和目录前显示所属用户     user
-g #在文件和目录前显示所属组     group
-s #列出文件和目录大小     size
-h #列出文件和目录大小并人性化显示     human
-p #列出权限标识     purview
-i #不以阶梯状列出文件和目录     Ignore indentation
-C #文件夹显示不同颜色     color

[root@controller ~]$ tree -a /root
/root
├── anaconda-ks.cfg
├── .bash_history
├── .bash_logout
├── .bash_profile
├── .bashrc
├── .cshrc
├── install.log
├── install.log.syslog
├── .novaclient
│   └── 21232f297a57a5a743894a0e4a801fc3
│       ├── keypair-human-id-cache
│       └── keypair-uuid-cache
├── .rnd
├── .ssh
│   ├── id_rsa
│   ├── id_rsa.pub
│   └── known_hosts
├── .tcshrc
└── .viminfo
3 directories, 16 files

ssh

yum -y install openssh-clients #安装 SSH 套件
ssh-keygen #在 ~/.ssh 目录下生成公钥和私钥
ssh-copy-id user@host #将公钥复制到 user@host 下的 ~/.ssh/authorized_keys 以启用无密码 SSH 登录
ssh user@host #以 SSH 方式登陆远程主机

Tips:
干掉弱密码
[root@controller ~]$ openssl rand -hex 30 #十六进制格式
6ae8592f578b0d2ec704a1ac347cdfc9205d41ede0f853eb15cb28786553
[root@controller ~]$ openssl rand -base64 30 #Base64编码
HTUKtp8wVb2m8ZIIsLtXkQDGKc+V8SeSWJg8yU0Z

openssl enc -aes-256-ctr -k 123456 -pbkdf2 -a -p -e -in 1.txt -out 2.txt #加密文件
openssl enc -aes-256-ctr -k 123456 -pbkdf2 -a -p -d -in 2.txt -out 3.txt #解密文件

openssl enc -aes-256-ctr -K 41B2E7F37D50325E29EFF13C247892E53B1813B02388590EBB348A4384633C3E -iv 27B0BD8A2CF2C8568B9AFC9BE79D5C2D -a -p -d -in 2.txt -out 3.txt #通过指定 key 和 iv 解密文件

https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-connectors/native/1.2.14/binaries/tomcat-native-1.2.14-win32-bin.zip

scp

-r #操作文件夹下的所有文件     Recursive(递归)
-P #指定远程主机的 SSH 端口号

[root@controller ~]$ scp -r /tmp/soft root@192.168.100.10:/tmp/ #上传本地目录到远端指定目录
[root@controller ~]$ scp -r root@192.168.100.10:/tmp/soft /tmp/ #从远端下载到本地

rsync -Par -e 'ssh -i key.pem' source/ root@192.168.100.10:/destination # 断点续传

find

find [路径] [模式] [条件]
find / -name 123.log

模式:
-name  #文件名
-iname #不区分大小写
-path  #路径
-ipath #不区分大小写
-nouser #查找没有所有者的文件
-user root #按所有者搜索
-inum 262422 #查找i节点是262422的文件

-atime +10 #查找 10 天前访问的文件
-ctime +10 #查找 10 天前属性改变的文件
-mtime +10 #查找 10 天前修改的文件
+            10            -            now
10 天前      10 天当天      10 天内

-size +25k #查找大于25k的文件
+            25            -            0
大于         等于         小于

find . -name '*.ini' #查找当前目录下以 .ini 结尾的文件
find . -size +20k -a -size -50k #查找当前目录下大于20k小于50k的文件
find . -size +20k -a -size -50k -exec ls -lh {} \; #查找当前目录下大于20k小于50k的文件,并显示详细信息
-o or  逻辑或,两者满足其一即可
-a and 逻辑与,两者都满足
-exec [命令] {} ; 对搜索结果执行命令

Tips :
默认为完全匹配搜索,可使用通配符进行模糊搜索。

sort

-u #去重
-f #忽略大小写
-r #以相反顺序来排序(降序)
-c #检查文件是否已排序
-t ":" #以 : 为列分隔符
-k 2,2 #以第二列为目标排序
-o 1.txt #将结果写入文件

sort -t ":" -k 3,3r -k 1,1f -o 2.txt 1.txt #以 3、1 列为目标排序,其中 3 列为逆序,1 列忽略大小写

grep

grep[选项] 字符串 文件名     在文件当中查找匹配符合条件的字符串
-n #显示行号
-i #忽略大小写
-I #忽略二进制文件
-l #只列出一匹配的文件名称
-L #只列出不匹配的文件名称
-w #只匹配单词
-v #排除指定字符串,取反
-c #只显示匹配到的行的数量
-r #操作文件夹下的所有文件     Recursive(递归)
-e #执行多条匹配命令
-A 3 #显示匹配结果的后 3 行
-B 3 #显示匹配结果的前 3 行
-C 3 #显示匹配结果的前 3 行和后 3 行
-3 #Same as -C
--color=auto #高亮匹配字符

egrep = grep -E     扩展正则表达式
fgrep = grep -F     匹配多个关键字

grep service 1.txt #输出带有 service 字符的行
grep "ls --color=auto" /etc/ -rn #递归查找并显示行号

Tips : 默认为包含匹配,可使用正则表达式进行包含匹配     ^开头     结尾$
grep ^[a-z] /etc/nova/nova.conf #使用正则表达式去掉注释
grep -vn -e '^\s*#' -e '^\s*$' /etc/vsftpd/vsftpd.conf #使用正则表达式取反去掉注释和空行并显示行号

awk

awk '{print $2}' 1.txt             #输出每一行的第二列到屏幕
awk '{print $0 > "2.txt"}' 1.txt   #输出每一行的每一列到文件
awk 'NR==1,NR==2 {print $2}' 1.txt #输出第 1、2 行的第 2 列
awk '/必修/ {sum+=$3} END {print sum}' 1.txt #取带有 必修 字符的行,求和第 3 列     /123/ 模拟grep取行
awk -F ' ' '/read/ {print $2}' 1.txt #以空格为列分隔符,取带有 read 字符的行,输出第 2 列

https://www.ibm.com/developerworks/cn/education/aix/au-gawk/index.html

sed

-i #将修改写入文件
-e #执行多条编辑命令

命令
s #替换
d #删除

sed -i 's/123/456/g'  1.txt #每一行中的 123 替换为 456
sed -i 's/\(^\)/123/' 1.txt #每一行的开头写入 123
sed -i -e '/^$/d' -e '/^#/d' 1.txt #删除 空白行 和 注释行

https://www.gnu.org/software/sed/manual/html_node/sed-commands-list.html#sed-commands-list

mount

mount #查询系统中已经挂载的设备
mount -a #依据配置文件/etc/fstab的内容,自动挂载
mount [-t 文件系统] [-o特殊选项] 设备文件名 挂载点 #挂载设备     type     option
umount [设备文件名或挂载点] #卸载设备

-t #一般不必指定,mount 会自动选择正确的类型
     光盘、光盘镜像:iso9660
     DOS fat16:msdos
     Windows9x fat32:vfat
     WindowsNT ntfs:ntfs
     Windows 网络文件共享:smbfs
     Linux 网络文件共享:nfs
-o #挂载方式
     loop:把一个文件当成硬盘分区挂载
     ro:采用只读方式挂接设备
     rw:采用读写方式挂接设备
     iocharset:指定访问文件系统所用字符集

example:
挂载光盘
mount /dev/cdrom(or `sr0`) /mnt/ #把设备文件挂载到空文件夹(挂载点)上
挂载U盘
fdisk -l #查看分区表
mount /dev/sdb1 /mnt/ #把设备文件挂载到空文件夹(挂载点)上,若中文乱码加上`-o iocharset=cp936`
挂载本地镜像
mount -o loop 1.iso /mnt/

Tips:
[root@controller ~]$ cat /proc/partitions #同样可以查看分区表
major minor  blocks  name
   8        0  488386584 sda
   8        1     204800 sda1
   8        2    1024000 sda2
   8        3  204800000 sda3
   8        4    8192000 sda4
[root@controller ~]$ lsblk #同样可以查看分区表
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 465.8G  0 disk
├─sda1   8:1    0   200M  0 part /boot/efi
├─sda2   8:2    0  1000M  0 part /boot
├─sda3   8:3    0 195.3G  0 part /
└─sda4   8:4    0   7.8G  0 part [SWAP]

linux默认是不支持NTFS文件系统的
cp /dev/cdrom /tmp/1.iso #从光盘制作光盘镜像文件

echo

echo [选项] [输出内容]
-e #激活转义字符,支持反斜线控制的字符转换
     \a 发出警告声
     \f 换行但光标仍旧停留在原来的位置
     \n 换行且光标移至行首
     \t 插入制表符     Tab 键
     \\ 插入 \

echo -e "\e[1;31m 123456 \e[0m" #输出红颜色 (31m)
echo -e "123\n45\f6" >> 123 #追加写入文件

alias

alias #查看系统中所有的命令别名
alias 别名='原命令' #设定命令别名,重启失效
unalias 别名 #删除别名

别名永久生效
vi ~/.bashrc
将命令写入环境变量配置文件,每个用户都分别有一个,~代表家目录。
重启后生效,若想直接生效可用 source .bashrc 重新调用。

lsblk

-a #显示所有设备
-d #只显示磁盘
-f #显示文件系统信息

[root@controller ~]$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 278.9G  0 disk
├─sda1   8:1    0  1000M  0 part /boot
├─sda2   8:2    0 195.3G  0 part /
└─sda3   8:3    0   7.8G  0 part [SWAP]
设备名     主要和次要设备号     是否为可移动设备     容量     是否为只读     类型     挂载点

df

-a #显示所有文件系统
-h #大小人性化显示
-T #显示文件系统类型

[root@controller ~]$ df -Th
Filesystem     Type   Size  Used Avail Use% Mounted on
/dev/sda3      ext4   193G  2.7G  180G   2% /
tmpfs          tmpfs  5.8G     0  5.8G   0% /dev/shm
/dev/sda2      ext4   985M   38M  897M   5% /boot
/dev/sda1      vfat   200M  260K  200M   1% /boot/efi

du

-a #同时显示文件大小
-c #同时显示大小总和
-s #仅显示大小总和
-h #大小人性化显示
-S #目录大小不包含子目录的大小
--max-depth=0 #列出小于队列深度的文件夹,0等同于 -s

[root@controller ~]$ du -hac #人性化显示所有文件目录及总和的大小
4.0K    ./.bash_profile
4.0K    ./.bash_logout
4.0K    ./installl.log.syslog
4.0K    ./.ssh/known_hosts
4.0K    ./.ssh/authorized_keys
12K     ./.ssh
4.0K    ./anaconda-ks.cfg
12K     ./installl.log
4.0K    ./.bashrc
4.0K    ./.cshrc
4.0K    ./.viminfo
4.0K    ./.bash_history
4.0K    ./.tcshrc
64K     .
64K     total
[root@controller ~]$ du --max-depth=1 -h /opt/ #列出各子目录所使用的空间
3.3G    /opt/paas
24K     /opt/distribution-karaf-0.2.1-Helium-SR1.1
2.7G    /opt/iaas
441M    /opt/opendaylight
4.2G    /opt/centos
21G     /opt/

yum

-y #对所有提问都回答 yes

yum install tree #安装包
yum reinstall tree #重新安装包
yum remove tree #移除包
yum search tree #搜索包
yum list #列出所有包
yum list installed #列出已安装的包
yum update #更新系统
yum check-update #更新包列表
yum repolist #列出源
yum provides /bin/bash #查找某一文件的提供包
yum info bash #查看软件包详情
yum clean all #删除缓存

添加源:add <repo> to /etc/yum.repos.d/
移除源:remove <repo> from /etc/yum.repos.d/

rpm

rpm -ivh --force *rpm #安装 RPM 包

chown

chown [选项] [参数]
-R #操作文件夹下的所有文件     Recursive(递归)

参数:
用户:组:指定所有者和所属工作组。当省略“:组”,仅改变文件所有者;
文件:指定要改变所有者和工作组的文件列表。支持多个文件和目标,支持shell通配符。

chown user:market file01 #把 file01 给 user,并添加到 market 组中

chmod

chmod [选项] [参数]
-R #操作文件夹下的所有文件     Recursive(递归)

chmod +x file01 #添加可执行权限
chmod 764 file01 #把 file01 的权限改为 rwx rw- r--

rwx rw- r--(333)
r=读取     值 = 4
w=写入     值 = 2
x=执行     值 = 1

Tips:
所有用户记录在 /etc/passwd;
所有密码记录在 /etc/shadow;
所有组群记录在 /etc/group。

getent

getent passwd #查看用户
getent shadow #查看密码
getent group #查看用户组
getent hosts #查看主机

passwd

-d #删除密码
-l #锁住密码     Lock
-u #解开锁住的密码     Unlock
-S #查看密码的相关信息     Status

passwd #更改当前登录用户密码
passwd mysql #更改 mysql 用户的密码
passwd -d root #删除 root 用户的密码,注意删除 root 用户密码后,便不能用 root 用户远程登录了

history

history [选项]
-c #清空历史命令
-w #把缓存中的历史命令写入历史命令保存文件 ~/.bash_history

[root@controller ~]$ echo $HISTSIZE #存储数量由环境变量 `HISTSIZE` 控制,默认1000条
1000
[root@controller ~]$ history 10 #显示最近10条历史命令
   92  ls
   93  cd ..
   94  ls
   95  exit
   96  ls -a
   97  cd .ssh/
   98  ls
   99  cat known_hosts
  100  exit
  101  history 10

!n 执行第 n 条历史命令
!! 执行上一条命令
!abc 执行最后一条以 abc 开头的历史命令

uname

-a #显示全部系统信息
-m #电脑类型
-n #主机名称
-v #内核版本
-r #内核发行编号

[root@controller ~]$ uname -a
Linux controller 2.6.32-431.el6.x86_64 井1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

lsb_release

-a #显示全部发行版本信息

[root@controller ~]$ lsb_release -a
LSB Version:    :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch
Distributor ID: CentOS
Description:    CentOS release 6.5 (Final)
Release:        6.5
Codename:       Final
                     标准   基础
Tips:LSB 是 Linux Standard Base 的缩写

free

-m #以 MB 为单位
-g #以 GB 为单位
-s 1 #每 1 秒更新内存使用情况

[root@controller ~]$ free -g
                    total       used       free     shared    buffers     cached
Mem:                11          2          9          0          0          0
-/+ buffers/cache:          2          9
Swap:                  7          0          7

total     内存总数     total=used+free
used     已使用的内存
free     空闲内存
shared     废弃内存
buffers     缓存内存
cached     缓存内存
-buffers/cache     used-buffers-cached 被程序实实在在使用的内存
+buffers/cache     free+buffers+cached 可以被挪用的内存
Swap     交换分区

netstat

-a #显示所有端口
     -at #显示所有 TCP 端口
     -au #显示所有 UDP 端口
-l #只显示监听状态的端口     Listen
     同上
-s #显示所有端口的统计信息
     同上
-n #不解析 IP
-o #显示计时器
-p #显示PID     Program name
-r #显示核心路由     Route
-i #显示网络接口     Interface
-c #持续输出网络信息     Continue

[root@controller ~]$ netstat -anp | grep ssh #查找进程
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1604/sshd
tcp        0      0 192.168.100.10:22           192.168.100.151:54704       ESTABLISHED 24349/sshd
tcp        0      0 :::22                       :::*                        LISTEN      1604/sshd
unix  2      [ ]         DGRAM                    4581866 24349/sshd
[root@controller ~]$ netstat -anp | grep ':80' #查找端口
tcp        0      0 0.0.0.0:8000                0.0.0.0:*                   LISTEN      2330/python
tcp        0      0 0.0.0.0:8004                0.0.0.0:*                   LISTEN      2322/python
tcp        0      0 :::80                       :::*                        LISTEN      1884/httpd

查看文件占用

fuser -v 123.txt
lsof 123.txt

fuser -v 80/tcp -k #终止占用此端口的进程
lsof -i:80

nmap

-p - #扫描所有端口 (1-65535)

nmap -p 80,443 192.168.1.1-254 #扫描此网段的 80、443 端口

ps

-A #显示所有程序
-f #显示所有内容
-e #与 `A` 选项相同

[root@controller ~]$ ps -ef | grep vim #查找进程
所属用户 进程ID 父进程ID                                进程名
root      7207  2965  0 11:30 pts/1    00:00:00 vim
root      7542  2965  0 11:30 pts/1    00:00:00 grep vim
[root@controller ~]$  kill -9 7207 #根据进程 ID 强制终止进程,默认终止进程发送信号15
[root@controller ~]$ pkill -9 -t pts/1 #根据终端 ID 强制终止进程
[root@controller ~]$ pgrep -a -t pts/1 #根据终端 ID 查找进程

[root@controller ~]$ kill -l #列出信号
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

pidof

[root@controller ~]# pidof sshd # 返回符合进程名的进程 ID
26051 3192
[root@controller ~]# pgrep sshd
3192
26051

shutdown

shutdown [选项]  [时间 (now立即) ]
-h #关机
-r #重启
-k #只是发布消息
-c #取消前一个关机命令

shutdown -h now #立即关机
shutdown -r now #立即重启

init

init [0-6] #切换系统运行级别
runlevel #查询系统当前运行级别

/etc/inittab     系统默认运行级别配置文件,默认为3     initial table
0关机     1单用户     2不完全多用户(不含NFS服务)     3完全多用户(默认字符界面)     4未分配     5图形界面(X11)     6重启

Tips :
Ctrl+Alt+F1~7 #在图形界面和字符界面中切换

zip 压缩

zip [压缩文件名] [源文件] #压缩文件
zip -r [压缩文件名] [源目录] #压缩目录
unzip [压缩文件名] #解压缩

gz 压缩

gzip [源文件] #压缩为.gz格式压缩文件,源文件会消失
gzip -r [目录] #分别压缩目录下的所有子文件,不能压缩目录
gunzip or gzip -d [压缩文件] #解压缩
gzip -c [源文件] > [压缩文件] #压缩为.gz格式压缩文件,源文件保留

gzip -c abc > abc.gz

bz2 压缩

bzip2 [源文件] #压缩为.bz2格式的压缩文件,源文件会消失
bzip2 -k [源文件] #压缩之后保留源文件
`bunzip2` or `bzip2` -d [压缩文件] [-k 保留源文件] #解压缩

Tips : bzip2不支持目录压缩

tar 压缩

tar -[cxt]f [打包解包文件名] [源文件]
-c #打包
-x #解包
-t #测试
-v #显示过程
-f #指定打包后的文件名
-z #打包为 .tar.gz 文件
-j #打包为 .tar.bz2 文件
-J #打包为 .tar.xz 文件

tar -cJf 123.tar.xz 123 #压缩
tar -xJf 123.tar.xz -C /tmp/ #指定解包位置

CentOS 7

hostnamectl

hostnamectl set-hostname controller     设置主机名

[root@controller ~]$ hostnamectl
Static hostname: controller
Icon name: computer-vm
Chassis: vm
Machine ID: 4c81baeee82945e8a47b4cdeb31bfc42
Boot ID: 2a89be262fa347159bb7243922dee933
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-514.el7.x86_64
Architecture: x86-64

/etc/system-release #系统版本号

退出登录

logout #退出并执行 ~/.bash_logout
exit #退出

Tips :
Ctrl+D #快捷键退出

修改环境变量

vi ~/.bash_profile
----
PATH=$PATH:/opt/metasploit-framework/bin

搜索系统命令

whereis [命令名] #查找可执行文件和帮助文件
which [命令名] #查找可执行文件和默认别名

[root@controller ~]$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz
[root@controller ~]$ which ls
alias ls='ls --color=auto'
        /bin/ls

查看命令帮助

whatis [命令]
相当于
man -f [命令]
-k net 查找包含`net`的命令

查看用户登录信息

当前登录用户:
w
who
whoami     euid 有效用户 当前操作的用户ID     Effective
who am i     uid 实际用户 登录时使用的用户ID

[root@controller ~]$ w
 08:28:35 up  1:50,  2 users,  load average: 0.02, 0.23, 0.19
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.100.65   06:41    8.00s  0.08s  0.08s -bash
root     pts/1    192.168.100.151  07:47    0.00s  0.06s  0.00s w
[root@controller ~]$ who
root     pts/0        2016-03-24 06:41 (192.168.100.65)
root     pts/1        2016-03-24 07:47 (192.168.100.151)

last #过去登录用户
last命令默认读取 /var/log/wtmp 文件

lastlog #查询所有用户最后的登录时间
lastlog命令默认读取 /var/log/lastlog 文件

通配符

*     匹配任意字符     123*
?     匹配一个任意字符     12?.log
[]     匹配中括号中内的任意一个字符     12[34].log = 123.log or 124.log
[-]     匹配中括号中内的任意一个字符,- 代表一个范围。例如:[a-z]代表匹配一个小写字母
[^]     逻辑非,表示匹配不是中括号内的一个字符。例如:[^0-9]代表匹配一个不是数字的字符

管道符

命令1 | 命令2     命令1的正确输出作为命令2的操作对象(命令2必须能处理命令1的输出)

ls -l /etc | more
netstat -an | grep ESTABLISHED | wc -l
keystone tenant-list | grep service | awk '{print $2}'
ps -e | grep nova | awk '{print $4}' | sort -u

重定向

覆盖:>
追加:>>

正确输出重定向:命令 1> 文件 #可省略 1
错误输出重定向:命令 2> 文件
  输入重定向:命令  < 文件

同时保存输出:命令 &> a.log
分别保存输出:命令 1> a.log 2> b.log

命令连接符

;      命令1 ;  命令2     命令按顺序依次执行
&&     命令1 && 命令2     逻辑与,只有当命令1执行成功时,命令2才会执行
||     命令1 || 命令2     逻辑或,只有当命令1执行失败时,命令2才会执行

ls && echo yes || echo no #判断命令是否执行成功

命令替换符

ls `cat 123` #bash 会先执行 ` ` 包含的命令,其输出会作为另一个命令的参数

后台进程

Ctrl+Z     挂起当前命令
ping 127.0.0.1 &  #挂起当前命令
jobs #显示挂起的命令
bg %N #使第 N 个进程在后台运行     back
fg %N #使第 N 个进程在前台运行     front

Tips : bg 和 fg 不带 %N 时默认对最后一个进程进行操作

自定义登录信息

登录前 /etc/issue 本地设备     /etc/issue.net 远程设备
     \l 显示第几个终端机接口
     \d 日期
     \t 时间
登录后 /etc/motd     Message Of The Day

配置 DNS

nmcli con show
nmcli con mod eno16780032 ipv4.dns 1.2.4.8
nmcli con up eno16780032

cat /etc/resolv.conf
----
# Generated by NetworkManager
nameserver 1.2.4.8

脚本

vi hello.sh
#!/bin/bash
echo -e "\e[1;36m 123456 \e[0m"

执行脚本
- chmod 755 hello.sh #赋予执行权限,直接运行
   ./hello.sh
- bash hello.sh #通过Bash调用执行脚本

Linux 目录

/boot     启动文件目录
/dev     设备文件目录
/etc     配置文件目录
/home     普通用户的家目录
/root     超级用户的家目录
/lib     系统函数库目录
/tmp     临时文件目录
/usr     系统软件资源目录
/opt     第三方软件资源目录
/var     系统文档目录
/proc|/sys     内存挂载点,不能操作
/mnt|/media|/misc     媒体设备挂载点

根目录(/)下的bin和sbin,usr目录(/usr)下的的bin和sbin,这四个目录都是用来保存系统命令的。
区别在于2个sbin目录只有root用户才能执行。

Linux 快捷键(Emacs 风格)

Ctrl+L     清屏     (另外 CMD 下的清屏命令是 `cls`)
Ctrl+Z     挂起当前命令
Ctrl+C     终止当前命令
Ctrl+D     退出登录
Ctrl+A     光标移动到行首
Ctrl+E     光标移动到行尾
Ctrl+U     剪切光标前的内容
Ctrl+K     剪切光标后的内容
Ctrl+W     剪切光标前的一个单词
Ctrl+Y     粘贴上一次快捷键剪切的内容
Ctrl+?     撤消前一次动作
Ctrl+O     重复执行命令
Ctrl+R     在历史命令中搜索
Ctrl+M     回车键 (Enter)
Ctrl+S     暂停屏幕输出
Ctrl+Q     恢复屏幕输出
Ctrl+Alt+F1~7     在图形界面和字符界面中切换
Ctrl+Alt+T     在图形界面中打开终端(CentOS 需要自己设置快捷键)

~+Tab*2     All Present Users on system from "/etc/passwd"
@+Tab*2     Entries from "/etc/hosts"
$+Tab*2     All Sys variables

SecureCRT 快捷键

Alt+B     新建选项卡
Ctrl+Tab     切换选项卡
Alt+2     切换至第 2 个选项卡
Alt+Enter     全屏
Ctrl+Shift+V     粘贴
Shift+Insert     粘贴