从头到尾快速学习一遍Linux,高级工程师多年实践实战经验精华总结和实例示例,第一章:基本命令。

从头到尾快速学习一遍Linux,高级工程师多年实践实战经验精华总结和实例示例,第一章:基本命令_学习

第一章 基本命令

命令说明以简洁实用为主,不追求大而全。实际上没有任何人了解全部的 Linux 命令及选项。

随着 Linux 的发展,现在几乎所以的发行版都带有 GUI 图形桌面系统,桌面系统可以满足大部分的操作。但是在生产环境中几乎是没有图形界面的,大部分是通过 SSH 连接到服务器,从而依靠命令行操作服务器。Linux 的精髓也更多的体现在命令行上,其强大的功能,海量的工具,可以帮你轻而易举的完成各种复杂的系统管理操作。


alias 命令别名
####################################

alias 命令用于查看和创建命令别名,别名允许用户只输入一个单词就运行任意一个命令或一组命令。

命令格式:


alias [name]=[command ...]

举个例子,为常用的 clear(清除屏幕)命令创建一个别名 c:

# 设置别名
[Linux]$ alias c='clear'

#查看别名
[Linux]$ alias c
alias c='clear'




在指定别名时,等号( ``=`` )两边不可以有空格。

让别名永久生效


在命令行中设置别名后,只在当前登录会话中有效。如果退出或重启系统后,别名就会消失。
如果想让别名永久生效需要将别名定义写入配置文件 ~/.bashrc 中:

[Linux]$ vi ~/.bashrc

# 添加下面内容让别名永久有效
alias c='clear'

系统级(对所有用户生效)的别名可以放在 /etc/bashrc 文件中。

禁用别名


unalias 命令用于删除当前终端的别名,写入配置文件的别名只在当前终端中被删除。它只有一个 -a 选项用于删除所有别名。

# 删除 c 别名
[Linux]$ unalias c

# 删除所有别名
[Linux]$ unalias -a

除了使用 unalias 删除别名之外,还有一些临时性地禁用别名的方法:

# 在命令前边加入转义符:
[Linux]$ \ls
    
# 使用命令的绝对路径:
[Linux]$ /usr/bin/ls
    
# 或者对命令加上引用:
[Linux]$ "ls"
[Linux]$ 'ls'
    
# 使用 command 命令
[Linux]$ command ls

系统中常用的别名


# 使用颜色输出 ls 的内容,许多发行版默认设置
alias ls='ls --color=auto'

# 使用颜色输出 grep 查找到的内容
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'

# 对其输出 mount 的内容
alias mount='mount | column -t'

# 默认添加 ping 的次数
alias ping='ping -c 5'

# 删除文件时需要确认
alias rm='rm -i'

# 更新 Debian 系统中的软件
alias update='sudo apt-get update && sudo apt-get upgrade'

# wget 默认断点续传
alias wget='wget -c'

bc 数学计算器
####################################

bc 是一个任意精度的计算器语言(可以说是一种编程语言),它支持变量、数组、输入输出、分支结构、循环结构、函数等基本的编程元素。在 Linux 下通常当计算器使用。

命令格式:


bc [ -hlwsqv ] [long-options] [  file ... ]

常用选项:


-i, --interactive
    强制进入交互模式
-l, --mathlib
    使用标准数学库
-q, --quiet
    不显示欢迎信息

使用实例:


在使用计算器之前,首先需要了解 bc 中的基本运算符。

========== =========
运算符 含义
========== =========
+ 加法
- 减法
* 乘法
/ 除法
% 取余
^ 平方
sqrt(x) 平方根
========== =========

输入 bc 命令后会进入交互模式,但是默认情况下 bc 的计算精度是 0。所以平常使用时建议加上 -l 选项。

# 默认情况下计算精度为 0
[Linux]$ bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free
Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
10/4
2
10/3
3


# -l 选项计算精度为 20
[Linux]$ bc -l
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free
Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
10/4
2.50000000000000000000
10/3
3.33333333333333333333


# 借助管道或输入重定向在单行中计算
[Linux]$ echo '10/3' | bc -l
3.33333333333333333333

[Linux]$ bc -l <<< '10/3'
3.33333333333333333333




由于 bc 是交互式的程序(类似于 vi),所以退出 bc 时需要输入 ``quit`` 或者 ``<Ctrl+D>``

高级用法


bc 有四个内置的环境变量,在进行高级计算时会经常用到:

=============== ===============
变量名 作 用
=============== ===============
scale 指定计算精度(即小数点后的位数),默认为 0
ibase 指定输入数字的进制(2~16),默认为十进制
obase 指定输出数字的进制(2~16),默认为十进制
last 或 . 表示最近打印的数字
=============== ===============

# 修改计算精度
[Linux]$ bc -q
scale
0
10/3
3
scale=3
10/3
3.333


# 修改输出数字的进制
[Linux]$ bc -q
obase=16
10+3
D
10+10
14
# 可以进行简单的进制转换
255
FF


# 修改输入数字的进制,字母一定要大写
[Linux]$ bc -q
ibase=16
A+B
21
a+b
0




一旦设置了 obase 的值,所有的输出都会按设置的进制显示,这时显示的值可能会让人产生误解。如:



    obase=10
    obase
    10
    obase=16
    obase
    10

开始十进制中 10 的值为十,而设置成十六进制后,10 的值就是十六了,虽然显示的都是 10。尤其时在设置不同的 ibase 值后,计算会更让人误解,这时可以用命令 ``obase=A; ibase=A`` 重新把输入输出设置成十进制。在任何进制下,A 都等于十进制中的 10。

需要同时设置输入输出进制时,obase 要尽量放在 ibase 前面,因为 ibase 设置后,后面的数字都是以 ibase 的进制来换算的。

bc 中支持变量,26 个小写字母 a-z 都是变量,而且都赋值为 0,所以上边计算中 a+b=0。和其它编程语言一样,使用 = 为变量赋值。

[Linux]$ bc -q
n=3
(1+n)*2
8
++n
4

one=1
one+5
6

除了内置变量,bc 还有一些内置函数,在需要使用内置函数时,必须以 -l 选项启动程序。

=============== ===============
函数名 作用
=============== ===============
s(x) 计算 x 的正弦值,x 是弧度值。
c(x) 计算 x 的余弦值,x 是弧度值。
a(x) 计算 x 的反正切值,返回弧度值。
l(x) 计算 x 的自然对数。
e(x) 计算 e 的 x 次方。
j(n, x) 贝塞尔函数,计算从 n 到 x 的阶数。
=============== ===============


bzip2 压缩文件
####################################

bzip2 用于压缩文件,文件经压缩后以 .bz2 的扩展名结尾。bzip2 只能针对一个文件进行压缩,当要压缩多个文件时,需要将文件 :ref:tar 归档 <cmd_tar>

bunzip2 命令用来解压 bz2 文件,事实上 bunzip2 就是 bzip2 的硬连接( bzip2 –d 等价于 bunzip2 ),命令选项基本相同。

命令格式:


bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ...  ]
bzip2 [ -h|--help ]
bunzip2 [ -fkvsVL ] [ filenames ...  ]
bunzip2 [ -h|--help ]

常用选项:


-c --stdout
    将压缩或解压的数据传至标准输出

-d --decompress
    解压压缩包

-z --compress
    -d 选项的补充(强制执行压缩)

-t --test
    检验压缩包

-f --force
    压缩或解压时,强制覆盖同名文件(默认不覆盖已存在的文件)

-k --keep
    在压缩或解压缩时保留源文件(不删除 .bz2 文件)

-q --quiet
    只显示重要的警告信息

-v --verbose
    显示详细的执行过程

使用实例:


# 压缩文件,默认会删除源文件
[Linux]$ bzip2 test.tar 
[Linux]$ ls
test.tar.bz2

# 压缩文件并保留源文件
[Linux]$ bzip2 -k test.tar 
[Linux]$ ls
test.tar  test.tar.bz2

# 解压压缩包,解压后的文件是 tar 归档文件
[Linux]$ bzip2 -d test.tar.bz2

# 直接解压出压缩包内的文件
[Linux]$ tar -jxvf test.tar.bz2

# 压缩多个文件
[Linux]$ tar -jcvf text.tar.bz2 /etc/ /opt/

命令cat:

cat 查看和连接文件内容
####################################

cat 命令用于连接文件并打印到标准输出设备上。

命令格式:


cat [OPTION]... [FILE]...

常用选项:


-b, --number-nonblank
    和 -n 相似,只不过对于空白行不编号。

-n, --number
    由 1 开始对所有输出的行数编号

-s, --squeeze-blank
    当遇到有连续两行以上的空白行,就代换为一行的空白行

使用实例:


[Linux]$ cat a.sh 
#! /usr/bin/bash
echo "Hello world !"


[Linux]$ cat a.sh b.sh 
#! /usr/bin/bash
echo "Hello world !"
#! /usr/bin/bash
name="Linus Benedict Torvalds"
echo $name


[Linux]$ cat -n a.sh b.sh 
     1	#! /usr/bin/bash
     2	echo "Hello world !"
     3	#! /usr/bin/bash
     4	name="Linus Benedict Torvalds"
     5	echo $name

# 利用重定向功能,另存为拼接文件
[Linux]$ cat -n a.sh b.sh > all.sh

命令cd:

cd 切换目录
####################################

cd 命令是 Linux 中最常用的命令之一,它用于切换目录。

命令格式:


cd [directory]

常用选项:


-L
  如果目标目录是一个符号连接,直接切换到符号连接目录(默认值)

-P
  如果目标目录是一个符号连接,直接切换到符号连接指向的目标目录

使用实例:


# 切换到主目录
[Linux]$ cd
[Linux]$ pwd
/root
[root@localhost /]# cd ~
[Linux]$ pwd
/root
[root@localhost /]# cd ~xiao
[root@localhost xiao]# pwd
/home/xiao

# 切换到根目录
[Linux]$ cd /
[root@localhost /]# pwd
/

# 切换到 /etc 目录
[Linux]$ cd /etc/
[root@localhost etc]# pwd
/etc

# 快速切换到上一个工作目录
[root@localhost etc]# cd -
/root
[Linux]$ pwd
/root

# 切换到根目录
[Linux]$ cd /
[Linux]$ ls -l
total 20
lrwxrwxrwx.   1 root root    7 Mar 27  2018 bin -> usr/bin
...

# 切换到符号连接指向的目标目录
[Linux]$ cd -P lib
[Linux]$ pwd
/usr/lib

# 切换到符号连接目录(默认值)
[Linux]$ cd /
[Linux]$ cd -L lib
[Linux]$ pwd
/lib

命令chgrp:

chgrp 改变文件所属组
####################################

chgrp 命令用于改变文件或目录的所属组,它允许普通用户改变文件所属的组,只要该用户是该组的一员。

命令格式:


chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...

常用选项:


-f, --silent, --quiet
    不显示错误信息

-v, --verbose
    显示命令执行过程

-h, --no-dereference
    只修改符号连接的文件,不更改其他相关文件

-R, --recursive
    递归处理,将目录下的所有文件及子目录一并处理

使用实例:


[Linux]$ ls -l
-rwxr-xr-x 1 xiao xiao  105 Jul  2 20:50 a.py

# 改变文件所属组
[Linux]# chgrp root a.py
[Linux]# ls -l
-rwxr-xr-x 1 xiao root  105 Jul  2 20:59 a.py

# 指定组 ID 
[Linux]# chgrp 1001 a.py
[Linux]# ls -l
-rwxr-xr-x 1 xiao geroge  105 Jul  2 20:50 a.py

命令chmod:

chmod 变更权限
####################################

chmod 命令用来变更文件或目录的权限。

:doc:权限 <../Chapter03/00_permission> 范围的表示法如下:

  • u User 文件或目录的拥有者
  • g Group 文件或目录的所属群组
  • o Other 除了文件或目录的拥有者和所属组之外的其他用户
  • a All 全部的用户
  • r 读取权限,数字代号“4”
  • w 写入权限,数字代号“2”;
  • x 执行或切换权限,数字代号“1”
  • - 不具任何权限,数字代号为“0”
  • s 强制位权限,使其他用户临时拥有文件拥有者的权限
  • t 粘滞位权限,用户只能删除自己为属主的文件
    符号连接的权限无法变更,对符号连接修改权限实际会改变原始文件的权限。

命令格式:


chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...

修改权限有两种表达方式,即符号模式和八进制模式。

使用符号模式可以增加、删除或直接指定权限,每个项目的设置可以用逗号隔开。

====== ======
符号 说明
====== ======
+ 增加指定的权限
- 去除指定的权限
= 设置指定的权限
====== ======

使用八进制数来指定权限。

====== ====== ======
代码 rwx 权限
====== ====== ======
7 rwx 读 + 写 + 执行
6 rw- 读 + 写
5 r-x 读 + 执行
4 r-- 只读
3 -wx 写 + 执行
2 -w- 只写
1 --x 只执行
0 — 无
====== ====== ======

常用选项:


-c, --changes
    效果类似“-v”参数,但仅显示更改的部分

-f, --silent, --quiet
    不显示错误信息

-v, --verbose
    显示执行过程

-R, --recursive
    递归处理,将指令目录下的所有文件及子目录一并处理

使用实例:


[Linux]$ ls -l
-rwxr-xr-x 1 xiao xiao   42 Jul 28 10:40 a.sh

# 删除 other 的执行权限
[Linux]$ chmod o-x a.sh
[Linux]$ ls -l
-rwxr-xr-- 1 xiao xiao   42 Jul 28 10:40 a.sh

# 针对属主和属组删除执行权限
[Linux]$ chmod ug-x a.sh
[Linux]$ ls -l
-rw-r--r-- 1 xiao xiao   42 Jul 28 10:40 a.sh

# 分别设置权限
[Linux]$ chmod u=rwx,g=rx,o=r a.sh 
[Linux]$ ls -l
-rwxr-xr-- 1 xiao xiao   42 Jul 28 10:40 a.sh

# 使用八进制方式设置权限
[Linux]$ chmod 654 a.sh
[Linux]$ ls -l
-rw-r-xr-- 1 xiao xiao   42 Jul 28 10:40 a.sh

# 设置特殊权限
[Linux]$ chmod o+t abc
[Linux]$ ls -l
drwxr-xr-t 2 xiao xiao 4096 Aug  6 15:23 abc

命令chown:

chown 改变文件属主
####################################

Linux 是多用户操作系统,所有的文件都有拥有者。chown 命令用于改变文件或目录的所有者或所属的组。

chown 需要用到多个用户权限,只有 root 权限才能执行此命令。

命令格式:


chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...

常用选项:


-f, --silent, --quiet
    不显示错误信息

-v, --verbose
    显示命令执行过程

-h, --no-dereference
    只修改符号连接的文件,不更改其他相关文件

-R, --recursive
    递归处理,将目录下的所有文件及子目录一并处理

使用实例:


[Linux]$ ls -l
-rwxr-xr-x 1 xiao xiao  105 Jul  2 20:50 a.py

# 改变文件所有者
[Linux]# chown root a.py
[Linux]# ls -l
-rwxr-xr-x 1 root xiao  105 Jul  2 20:59 a.py

# 改变文件所有者和所属组
[Linux]# chown root:root a.py
[Linux]# ls -l
-rwxr-xr-x 1 root root  105 Jul  2 21:30 a.py

# 指定用户 ID
[Linux]# chown 1000 a.py
[Linux]# ls -l
-rwxr-xr-x 1 xiao root  105 Jul  2 20:50 a.py

# 指定所属组 ID
[Linux]# chown :1000 a.py
[Linux]# ls -l
-rwxr-xr-x 1 xiao xiao  105 Jul  2 20:50 a.py

命令cp:

cp 复制文件或目录
####################################

cp(copy)用来复制文件(或目录)到指定的路径,可同时复制多个文件和目录。

命令格式:


cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...

常用选项:


-a, --archive
  保留链接、文件属性,并复制目录下的所有内容。其作用等于 dpR 参数组合

-b
  覆盖已存在的文件前将文件备份

-d
  当复制符号连接时,把符号连接指向源文件或源目录

-f, --force
  强制复制,覆盖已经存在的文件时不提示

-i, --interactive
  在覆盖已经存在的文件时给出提示,要求用户确认是否覆盖

-l, --link
  对源文件建立硬连接,而非复制文件

-n, --no-clobber
  不覆盖已经存在的文件

-p
  除复制文件的内容外,同时复制修改时间和访问权限等

-R, -r, --recursive
  递归处理,将指定目录下的文件与子目录一并复制

-s, --symbolic-link
  对源文件建立符号连接,而非复制文件

使用实例:


# 复制文件并重命名
[Linux]$ ls
aclocal  alias  apxs  aulastlog  bin
[Linux]$ cp alias bin/aaa
[Linux]$ ls -l bin/
total 4
-rwxr-xr-x 1 root root 29 Feb 15 13:57 aaa

# 复制多个文件到文件夹
[Linux]$ cp apxs aulastlog bin/
[Linux]$ ls bin/
aaa  apxs  aulastlog

# 递归复制整个文件目录
[Linux]$ cp -r bin binBk/

# 交互式地复制文件
[Linux]$ ls bin/
aaa  apxs  aulastlog  cp
[Linux]$ cp -i apxs bin/
cp: overwrite ‘bin/apxs’? y

命令dd:

dd 转换和复制文件
####################################

dd 命令用于从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。

dd 命令与其它的 Linux 程序略有不同,它的命令行选项格式为“选项=值”。

命令格式:


dd [OPERAND]...

常用选项:


if=FILE
    指定输入的文件,默认为标准输入

of=FILE
    指定输出的文件,默认为标准输出

ibs=BYTES
    一次输入的字节大小,即指定一个块大小为 bytes 个字节

obs=BYTES
    一次输出的字节大小,即指定一个块大小为 bytes 个字节

bs=BYTES
    同时设置输入/输出的块大小为 bytes 个字节

count=N
    ascii:转换 ebcdic 为 ascii
    ebcdic:转换 ascii 为 ebcdic
    ibm:转换 ascii 为 alternate ebcdic
    block:把每一行转换为长度为 cbs,不足部分用空格填充
    unblock:使每一行的长度都为 cbs,不足部分用空格填充
    lcase:把大写字符转换为小写字符
    ucase:把小写字符转换为大写字符
    swab:交换输入的每对字节
    noerror:出错时不停止
    notrunc:不截短输出文件
    sync:将每个输入块填充到 ibs 个字节,不足部分用空(NUL)字符补齐

使用实例:


# 将 /dev/hda 磁盘备份到 /dev/hdb
[Linux]$  dd if=/dev/hda of=/dev/hdb

# 将/dev/hdb全盘数据备份到指定路径的image文件
[Linux]$  dd if=/dev/hdb of=/root/image

# 将 file1 中的所有英文字母转换为大写,并另存为 file2
[Linux]$  dd if=file1 of=file2 conv=ucase 

# 备份 /dev/hdb 全盘数据,并利用 gzip 工具进行压缩,保存到指定路径
[Linux]$ dd if=/dev/hdb | gzip > /root/image.gz

命令df:

df 查看磁盘分区空间
####################################

df 命令用于查看磁盘分区的空间及使用和剩余的空间信息。

命令格式:


df [OPTION]... [FILE]...

常用选项:


-h, --human-readable
    以更可读的方式显示分区大小(以 1024 为单位转换)

-H, --si
    以更可读的方式显示分区大小(以 1000 为单位转换)

-t, --type=TYPE
    指定文件的分区格式

使用实例:


# 默认显示所有挂载的磁盘,默认以 KB 为单位。
[Linux]$  df
文件系统          1K-块     已用     可用 已用% 挂载点
udev            3975328        0  3975328    0% /dev
tmpfs            799028     9516   789512    2% /run
/dev/mmcblk0p3 21977248 12651688  8186104   61% /
tmpfs           3995128   120492  3874636    4% /dev/shm
tmpfs              5120        4     5116    1% /run/lock
tmpfs           3995128        0  3995128    0% /sys/fs/cgroup
/dev/mmcblk0p4 95569324 10825896 79845740   12% /home/xiao/Videos/vlc
/dev/mmcblk0p1    94759     5199    89560    6% /boot/efi
tmpfs            799024       20   799004    1% /run/user/1000

# 以更可读的方式显示
[Linux]$  df -h
文件系统        容量  已用  可用 已用% 挂载点
udev            3.8G     0  3.8G    0% /dev
tmpfs           781M  9.3M  772M    2% /run
/dev/mmcblk0p3   21G   13G  7.9G   61% /
tmpfs           3.9G  118M  3.7G    4% /dev/shm
tmpfs           5.0M  4.0K  5.0M    1% /run/lock
tmpfs           3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/mmcblk0p4   92G   11G   77G   12% /home/xiao/Videos/vlc
/dev/mmcblk0p1   93M  5.1M   88M    6% /boot/efi
tmpfs           781M   20K  781M    1% /run/user/1000

命令du:

du 查看文件夹大小
####################################

在 Linux 中使用 :ref:ls -l <cmd_ls> 命令列出的目录内容中,文件夹的大小仅显示 4KB,这是用来存储文件夹的元数据的大小。

使用 du 命令可以查看目录或文件的大小。默认使用递归方式总结磁盘使用情况,以获取目录及其子目录的大小。

命令格式:


du [OPTION]... [FILE]...
du [OPTION]... --files0-from=F

常用选项:


-h, --human-readable
    以K,M,G为单位,显示文件的大小

-s, --summarize
    只显示总计的文件大小

-S, --separate-dirs
    显示时并不含其子文件夹的大小

-d, --max-depth=N
    显示子文件夹的深度(层级)

使用实例:


[Linux]$  ls
Chapter01  Chapter03  Chapter05  Chapter07  index.rst    TOC
Chapter02  Chapter04  Chapter06  Images     preface.rst

# 默认显示
[Linux]$  du
1740    ./Images
184     ./Chapter01
16      ./Chapter05
32      ./Chapter03
52      ./Chapter06
32      ./TOC
12      ./Chapter07/shell 内部命令
32      ./Chapter07/images
96      ./Chapter07
92      ./Chapter04
108     ./Chapter02
2364    .

# 以人类可读的方式显示
[Linux]$  du -h
1.7M    ./Images
192K    ./Chapter01
16K     ./Chapter05
32K     ./Chapter03
52K     ./Chapter06
32K     ./TOC
12K     ./Chapter07/shell 内部命令
32K     ./Chapter07/images
96K     ./Chapter07
92K     ./Chapter04
108K    ./Chapter02
2.4M    .

# 按大小排列
[Linux]$  du -h | sort -nr

# 只显示 Images 文件夹的大小
[Linux]$  du -h Images/
1.7M    Images/

# 只显示当前文件夹的总大小
[Linux]$  du -hs
2.4M    .

# 显示文件夹大小时不包含子文件夹的大小
[Linux]$  du -hS
1.7M    ./Images
196K    ./Chapter01
16K     ./Chapter05
32K     ./Chapter03
52K     ./Chapter06
32K     ./TOC
12K     ./Chapter07/shell 内部命令
32K     ./Chapter07/images
52K     ./Chapter07
92K     ./Chapter04
108K    ./Chapter02
12K     .

# 显示 2 级文件夹的深度
[Linux]$  du -h -d 2 ../docs/
1.7M    ../docs/Images
200K    ../docs/Chapter01
16K     ../docs/Chapter05
32K     ../docs/Chapter03
52K     ../docs/Chapter06
32K     ../docs/TOC
12K     ../docs/Chapter07/shell.type.rst
32K     ../docs/Chapter07/images
96K     ../docs/Chapter07
92K     ../docs/Chapter04
108K    ../docs/Chapter02
2.4M    ../docs/

# 文件夹的深度从 0 级开始
[Linux]$  du -h --max-depth=0 ../docs/
2.4M    ../docs/

 # 列出当前目录及子目录下所有的 .jpg 文件
[Linux]$  du -ch */*.jpg
56K	Images/console.01.jpg
44K	Images/console.02.jpg
52K	Images/console.03.jpg
48K	Images/console.04.jpg
40K	Images/console.05.jpg
28K	Images/git.01.jpg
32K	Images/locale.01.jpg
24K	Images/locale.02.jpg
324K	total

命令env:

env 查看环境变量
####################################

env 命令可以查看环境变量,或在修改过的环境中运行程序。

命令格式:


env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]

常用选项:


-i, --ignore-environment
    从一个空环境启动

使用实例:


[Linux] $ env
SHELL=/bin/bash
QT_ACCESSIBILITY=1
COLORTERM=truecolor
XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
XDG_MENU_PREFIX=gnome-
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
GTK_IM_MODULE=ibus
LANGUAGE=en_US:en
QT4_IM_MODULE=ibus
LC_ADDRESS=en_US.UTF-8
GNOME_SHELL_SESSION_MODE=ubuntu
LC_NAME=en_US.UTF-8
SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
XMODIFIERS=@im=ibus

命令file:

file 识别文件类型
####################################

file 命令用来识别文件类型,也可用来识别文件的编码格式。它通过文件的头部信息来获取文件类型,而不是简单通过扩展名来识别文件类型。

命令格式:


file [-bcdEhiklLNnprsSvzZ0] [--apple] [--extension] [--mime-encoding] [--mime-type]
     [-e testname] [-F separator] [-f namefile] [-m magicfiles] [-P name=value]
     file ...
file -C [-m magicfiles]
file [--help]

常用选项:


-b, --brief
    不显示文件名称(简要模式)

-c, --checking-printout
    显示详细执行过程,便于排错或分析程序执行的情形

-f, --files-from namefile
    指定名称文件,识别文件中列出的所有文件

-i, --mime
    显示 MIME 类别

-L, --dereference
    直接显示符号连接所指向的文件类别

-z, --uncompress
    尝试去解读压缩文件的内容

使用实例:


[Linux]$  file file.rst
file.rst: UTF-8 Unicode text, with very long lines

# 显示 MIME 类别
[Linux]$  file -i file.rst
file.rst: text/plain; charset=utf-8

# 识别目录文件
[Linux]$  file docs/
docs/: directory

# 识别压缩文件
[Linux]$  file abc.zip
abc.zip: Zip archive data, at least v1.0 to extract

命令free:

free 查看内存
####################################

free 命令用于查看内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存以及系统核心使用的缓冲区等。

命令格式:


free [options]

常用选项:


-b, --bytes
  以Byte为单位显示内存使用情况。

-k, --kibi
  以KB为单位显示内存使用情况。

-m, --mebi
  以MB为单位显示内存使用情况。
  
-g, --gibi
  以GB为单位显示内存使用情况。

-h, --human
  以合适的单位显示内存使用情况,最大为三位数。单位有:
    B = bytes
    Ki = kibibyte
    Mi = mebibyte
    Gi = gibibyte
    Ti = tebibyte
    Pi = pebibyte

-s, --seconds <delay>
  持续观察内存使用状况,delay 为间隔的秒数。

使用实例:


[Linux]$  free 
              total        used        free      shared  buff/cache   available
Mem:       24238200     1806484    20679900       76032     1751816    21966656
Swap:       1999868           0     1999868

# 以合适的单位显示内存使用情况
[Linux]$ free -h
              total        used        free      shared  buff/cache   available
Mem:           23Gi       1.7Gi        19Gi        67Mi       1.6Gi        21Gi
Swap:         1.9Gi          0B       1.9Gi

# 每 3 秒更新一次内存信息
[Linux]$ free -h -s 3
              total        used        free      shared  buff/cache   available
Mem:           23Gi       1.7Gi        19Gi        67Mi       1.6Gi        21Gi
Swap:         1.9Gi          0B       1.9Gi

              total        used        free      shared  buff/cache   available
Mem:           23Gi       1.7Gi        19Gi        67Mi       1.6Gi        21Gi
Swap:         1.9Gi          0B       1.9Gi

              total        used        free      shared  buff/cache   available
Mem:           23Gi       1.7Gi        19Gi        67Mi       1.6Gi        21Gi
Swap:         1.9Gi          0B       1.9Gi

...




- Mem 物理内存的使用
- Swap 虚拟交换空间的使用
- total 列显示系统总的可用物理内存和交换空间大小
- used 列显示已被使用的物理内存和交换空间
- free 列显示剩余可用的物理内存和交换空间
- shared 列显示被共享使用的物理内存大小
- buff/cache 列显示被 buffer 和 cache 使用的物理内存大小
- available 列显示还可以被应用程序使用的物理内存大小

buff/cache

buffer 在操作系统中指 buffer cache, 中文一般翻译为 “缓冲区”。要理解缓冲区,必须明确另外两个概念:“扇区” 和 “块”。扇区是设备的最小寻址单元,也叫 “硬扇区” 或 “设备块”。块是操作系统中文件系统的最小寻址单元,也叫 “文件块” 或 “I/O 块”。每个块包含一个或多个扇区,但大小不能超过一个页面,所以一个页可以容纳一个或多个内存中的块。当一个块被调入内存时,它要存储在一个缓冲区中。每个缓冲区与一个块对应,它相当于是磁盘块在内存中的表示。

buffer cache 只有块的概念而没有文件的概念,它只是把磁盘上的块直接搬到内存中而不关心块中究竟存放的是什么格式的文件。

cache 在操作系统中指 page cache,中文一般翻译为 “页高速缓存”。页高速缓存是内核实现的磁盘缓存。它主要用来减少对磁盘的 I/O 操作。具体地讲,是通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问。页高速缓存缓存的是内存页面。缓存中的页来自对普通文件、块设备文件(这个指的就是 buffer cache 呀)和内存映射文件的读写。

页高速缓存对普通文件的缓存我们可以这样理解:当内核要读一个文件(比如 /etc/hosts)时,它会先检查这个文件的数据是不是已经在页高速缓存中了。如果在,就放弃访问磁盘,直接从内存中读取。这个行为称为缓存命中。如果数据不在缓存中,就是未命中缓存,此时内核就要调度块 I/O 操作从磁盘去读取数据。然后内核将读来的数据放入页高速缓存中。这种缓存的目标是文件系统可以识别的文件(比如 /etc/hosts)。

页高速缓存对块设备文件的缓存就是我们在前面介绍的 buffer cahce。因为独立的磁盘块通过缓冲区也被存入了页高速缓存(缓冲区最终是由页高速缓存来承载的)。

到这里我们应该搞清楚了:无论是缓冲区还是页高速缓存,它们的实现方式都是一样的。缓冲区只不过是一种概念上比较特殊的页高速缓存罢了。

那么为什么 free 命令不直接称为 cache 而非要写成 buff/cache? 这是因为缓冲区和页高速缓存的实现并非天生就是统一的。在 linux 内核 2.4 中才将它们统一。更早的内核中有两个独立的磁盘缓存:页高速缓存和缓冲区高速缓存。前者缓存页面,后者缓存缓冲区。当你知道了这些故事之后,输出中列的名称可能已经不再重要了。

free 与 available

在 free 命令的输出中,有一个 free 列,同时还有一个 available 列。这二者到底有何区别?

free 是真正尚未被使用的物理内存数量。至于 available 就比较有意思了,它是从应用程序的角度看到的可用内存数量。Linux 内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是我们介绍的 buffer 和 cache。所以对于内核来说,buffer 和 cache 都属于已经被使用的内存。当应用程序需要内存时,如果没有足够的 free 内存可以用,内核就会从 buffer 和 cache 中回收内存来满足应用程序的请求。所以从应用程序的角度来说,available = free + buffer + cache。请注意,这只是一个很理想的计算方式,实际中的数据往往有较大的误差。

交换空间(swap space)

swap space 是磁盘上的一块区域,可以是一个分区,也可以是一个文件。所以具体的实现可以是 swap 分区也可以是 swap 文件。当系统物理内存吃紧时,Linux 会将内存中不常访问的数据保存到 swap 上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问 swap 上存储的内容时,再将 swap 上的数据加载到内存中,这就是常说的换出和换入。交换空间可以在一定程度上缓解内存不足的情况,但是它需要读写磁盘数据,所以性能不是很高。

现在的机器一般都不太缺内存,如果系统默认还是使用了 swap 是不是会拖累系统的性能?理论上是的,但实际上可能性并不是很大。并且内核提供了一个叫做 swappiness 的参数,用于配置需要将内存中不常用的数据移到 swap 中去的紧迫程度。这个参数的取值范围是 0~100,0 告诉内核尽可能的不要将内存数据移到 swap 中,也即只有在迫不得已的情况下才这么做,而 100 告诉内核只要有可能,尽量的将内存中不常访问的数据移到 swap 中。在 ubuntu 系统中,swappiness 的默认值是 60。如果我们觉着内存充足,可以在 /etc/sysctl.conf 文件中设置 swappiness:

vm.swappiness=10

如果系统的内存不足,则需要根据物理内存的大小来设置交换空间的大小。


命令head:

head 查看文件的开头内容
####################################

head 命令用于查看文件开头部分的内容,默认为前 10 行的内容。

命令格式:


head [OPTION]... [FILE]...

常用选项:


-n, --lines=[-]NUM
    指定查看的行数

-q, --quiet, --silent
    不显示文件名

使用实例:


# 默认输出
[Linux]$ head /etc/samba/smb.conf
[global]
   map to guest = Bad User
   log file = /var/log/samba/%m
   log level = 1

[guest]
   path = /mnt/samba/
   read only = no
   guest ok = yes
   guest only = yes

# 指定显示行数
[Linux]$ head -n 3 /etc/samba/smb.conf
[global]
   map to guest = Bad User
   log file = /var/log/samba/%m

命令history:

history 命令行历史列表
####################################

history 命令保存从该终端会话运行的所有其它命令的列表,然后允许你重放或者重用这些命令,而不用重新输入它们。

可以在 ~/.bash_history 中查看命令行记录文件。

命令格式:


history [option]

常用选项:


-c
清空当前历史命令

n
显示最近的 n 条历史命令




<Ctrl+R> 快捷键可以以递增方式对命令历史进行搜索,对于想要重复执行某个命令的时候非常有用。当找到要查找的命令时,按 <Enter> 键执行此命令,按 <Ctrl+J> 键将搜索到的命令从历史记录列表中复制到当前命令行来进一步编辑,再次按 <Ctrl+R> 键将查找下一个匹配项(即向前搜索历史记录)。若要退出搜索,可以按 <Ctrl+G> 或者 <Ctrl+C> 即可。



# 不输入命令,直接按 <Ctrl+R>  进入搜索模式,输入单词自动匹配最近的历史记录
# 提示符会变为 (reverse-i-search),red 为输入字符
(reverse-i-search)`red‘: cat /etc/redhat-release

使用实例:


[Linux]$ history
1  service network restart
2  exit
3  id
4  cat /etc/redhat-release
5  history
[Linux]$ !4
cat /etc/redhat-release
Fedora release 9 (Sulphur)

Shell 中还有几个好用的历史列表命令:

========== ==============
字符 说明
========== ==============
!! 执行上一条命令(等同于 + 键)
!number 执行历史列表中第 number 行的命令
!string 执行最近的以 string 字符串开头的命令
!?string 执行最近的包含这个字符串的命令
!* 使用上一条命令的选项和参数
!$ 使用上一条命令的最后一个参数
========== ==============

应该谨慎地使用 ``!string`` 和 ``!?string`` 格式,除非你完全确信历史列表条目的内容。




[Linux]$ ls -l Music/
total 0

# 执行上一条命令
[Linux]$ !!
ls -l Music/
total 0

# 使用上一条命令的选项和参数
[Linux]$ ls !*
ls -l Music/
total 0

# 使用上一条命令的最后一个参数
[Linux]$ ls !$
ls Music/

命令id:

id 显示用户 ID
####################################

id 命令用于显示用户的 ID,以及所属群组的实际与有效 ID(若两个ID相同,则仅显示实际ID)。若没有指定用户名称,则显示当前用户的 ID。

一些程序可能需要 UID/GID 来运行。id 使我们更加容易地找出用户的 UID 以 GID 而不必在 /etc/group 文件中搜索。

命令格式:


id [OPTION]... [USER]

常用选项:


-g, --group
    只打印有效的组 ID

-G, --groups
    打印所有组 ID

-u, --user
    显示用户 ID

使用实例:


# 显示当前用户的 ID 信息
[Linux]$ id
uid=1000(glenn) gid=1000(glenn) groups=1000(glenn),27(sudo)

# 显示用户名 ftp 的 ID 信息
[Linux]$ id ftp
uid=14(ftp) gid=50(ftp) groups=50(ftp)

命令jobs:

jobs 查看后台命令
####################################

用来查看当前终端有多少在后台运行的命令。

可以使用 ``bg %1`` 命令让程序在后台继续执行,也可以使用 ``fg %1`` 命令把后台命令恢复到前台执行。

命令格式:


jobs [-lnprs] [jobspec ...]

常用选项:


-l
    在正常信息基础上,列出进程的 PID 

-n
    只列出上次发出通知后改变了状态的进程

-p
    只列出进程的 PID

-r
    只列出运行中的进程

-s
    只列出已停止的进程

使用实例:


[Linux]$ jobs
[1]+  Stopped                 vim

[Linux]$ jobs -l
[1]+   494 Stopped                 vim

命令kill:

kill 终止进程
####################################

kill 命令大多时候用于终止(删除)执行中的进程。

kill 默认发送的信息为 SIGTERM(15),可终止指定程序。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制终止程序。

程序的进程号可使用 :ref:ps 命令 <cmd_ps> 或 :ref:jobs -l 命令 <cmd_jobs> 查看,还可以使用 :ref:top 命令 <cmd_top>

命令格式:


kill -<signal> <pid> [...]
kill -s <signal> <pid> [...]
kill --signal <signal> <pid> [...]

常用选项:


-l, --list [signal]
    若不加 [signal] 选项,则列出全部的信号编号和名称
    加 [signal] 选项,则在信号编号和信号名称之间相互转换

-L
    列出全部的信号编号和名称

经常使用的信号:

=============== =============== ==========
Signal Name Single Value Effect
=============== =============== ==========
SIGINT 2 中断信号(同 <Ctrl+C> )
SIGKILL 9 强制终止进程
SIGTERM 15 发送终止信号(不适用卡死的进程)
SIGCONT 18 继续进程(类似 bg 命令)
SIGSTOP 19 暂停进程(同 <Ctrl+Z> )
=============== =============== ==========

使用实例:


# 列出所有信号编号和名称
[Linux]$ 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	


# 首先查看进程号,然后终止进程
[Linux]$ ps -ef | grep gvim
UID          PID    PPID  C STIME TTY          TIME CMD
glenn       4071    1246  1 20:47 ?        00:00:35 gvim new.txt
[Linux]$ kill -9 4071

# 等同于 -9
[Linux]$ kill -KILL 4071

命令less:

less 交互式查看文件内容
####################################

less 是对文件或其它输出进行分页查看的工具,支持前后翻页和搜索等功能。

命令格式:


less -?
less [-[+]aABcCdeEfFgGiIJKLmMnNqQrRsSuUVwWX~]
    [-b space] [-h lines] [-j line] [-k keyfile]
    [-{oO} logfile] [-p pattern] [-P prompt] [-t tag]
    [-T tagsfile] [-x tab,...] [-y lines] [-[z] lines]
    [-# shift] [+[+]cmd] [--] [filename]...

常用选项:


-e, --quit-at-eof
当文件显示结束后,自动退出

-i, --ignore-case
搜索时忽略大小写

-N or --LINE-NUMBERS
显示行号

使用 less 查看文件时,常用操作命令:

=============== ===============
命令 说明
=============== ===============
h 显示帮助
/ 向下搜索
? 向上搜索
n 下一个搜索(与 / 或 ? 有关)
N 上一个搜索(与 / 或 ? 有关)
f 向下翻一页
b 向上翻一页
d 向下翻半页
u 向上翻半页
j 向下翻一行
k 向上翻一行
q 退出
=============== ===============


命令ln:

ln 创建文件链接
####################################

ln 用于为文件和目录创建一个链接,在 Linux 中有两种链接的概念: :doc:../Chapter03/00_link

命令格式:


ln [OPTION]... [-T] TARGET LINK_NAME
ln [OPTION]... TARGET
ln [OPTION]... TARGET... DIRECTORY
ln [OPTION]... -t DIRECTORY TARGET...

常用选项:


-f, --force
    强行建立文件或目录的连接,不论文件或目录是否存在

-i, --interactive
    在覆盖既有文件之前先询问

-n, --no-dereference 
    把符号链接视为一般目录(链接到符号链接时必须)

-s, --symbolic
    建立软链接,而非默认的硬连接

使用实例:


# 在当前目录,创建一个硬链接:
[Linux]$ ln 1.txt 0.txt
[Linux]$ ls -li
total 0
12189699 -rw-rw-r-- 2 glenn glenn 0 Dec  6 08:54 0.txt
12189699 -rw-rw-r-- 2 glenn glenn 0 Dec  6 08:54 1.txt

# 在指定目录,创建一个同名的硬链接:
[Linux]$ ln 1.txt /media/
[Linux]$ ls -li /media
total 0
12189699 -rw-rw-r-- 3 glenn glenn 0 Dec  6 08:54 1.txt

# 在当前目录,创建一个软链接:
[Linux]$ ln -s 1.txt z.txt
[Linux]$ ls -li
total 0
12189699 -rw-rw-r-- 3 glenn glenn 0 Dec  6 08:54 0.txt
12189699 -rw-rw-r-- 3 glenn glenn 0 Dec  6 08:54 1.txt
12189708 lrwxrwxrwx 1 glenn glenn 5 Dec  6 09:04 z.txt -> 1.txt

# 更新软连接
[Linux]$ ln -sf 0.txt z.txt
[Linux]$ ls -l
total 0
12189699 -rw-rw-r-- 3 glenn glenn 0 Dec  6 08:54 0.txt
12189699 -rw-rw-r-- 3 glenn glenn 0 Dec  6 08:54 1.txt
12189708 lrwxrwxrwx 1 glenn glenn 5 Dec  6 09:04 z.txt -> 0.txt

删除目录软链接

[Linux]$ ln -s doc c
    [Linux]$ ls -l
    lrwxrwxrwx  1 glenn glenn    4 Dec  6 10:04 c -> doc/
    drwxrwxr-x  2 glenn glenn 4096 Dec  6 09:07 doc/

    # 错误的删除方式
    # 软链接并没有删除,删除的是 doc 目录下的所有文件
    [Linux]$ rm -rf c/
    [Linux]$ ls -l
    lrwxrwxrwx 1 glenn glenn    3 Dec  6 10:05 c -> doc
    drwxrwxr-x 2 glenn glenn 4096 Dec  6 10:06 doc
    Linux]$ ls -l doc/
    total 0

    # 正确的删除方式
    # 删除软链接时,不能加 / 符号
    [Linux]$ rm -rf c
    [Linux]$ ls -l
    drwxrwxr-x 2 glenn glenn 4096 Dec  6 10:06 doc

命令loginctl:

loginctl 查看用户
####################################

loginctl 命令可用于检查和控制 systemd 的状态;查看已经登录的用户会话消息。

命令格式:


loginctl [OPTIONS...] {COMMAND} ...

常用选项:


-a, --all
    显示全部属性,无论属性是否已经被设置

-l, --full
    在显示进程树的时候,不对超长行进行截断

-n, --lines=
    显示多少行日志。必须为正整数,默认值"10"


list-sessions
    列出当前所有的会话。这是默认命令

session-status [ID…]

    显示简洁的会话状态信息, 后跟最近的日志。
    如果指定了会话ID,那么仅显示指定的会话, 否则显示当前调用者的会话。
    此命令仅用于输出人类易读的信息, 如果你想输出易于程序分析的信息,
    那么应该使用 show-session 命令

terminate-user USER…
    结束指定用户的所有会话。 这将杀死该用户的所有会话中的所有进程, 同时释放与此用户有关的所有资源。

kill-user USER…
    向指定用户的所有进程发送 --signal= 选项指定的信号。 


list-seats
    列出当前本机上的 所有可用席位

seat-status [NAME…]
    显示简洁的席位信息,后跟最近的日志。
    如果指定了席位名,那么仅显示指定的席位, 否则显示当前调用者会话所属的席位。
    此命令仅用于输出人类易读的信息, 如果你想输出易于程序分析的信息,
    那么应该使用 show-seat 命令。

terminate-seat NAME…
    结束指定席位上的所有会话。 这将杀死指定席位上的所有会话进程, 同时释放与之关联的所有资源。

使用实例:


# 列出本机所有的 session
# 不带参数执行 loginctl 和执行 loginctl list-sessions 效果一样
[Linux]$ loginctl
SESSION  UID USER SEAT TTY
  1 1000 xiao      pts/0
  5 1000 xiao      pts/1

2 sessions listed.


# 查看 session 的详细信息
[Linux]$ loginctl show-session 5
EnableWallMessages=no
NAutoVTs=6
KillUserProcesses=no
RebootToFirmwareSetup=no
IdleSinceHint=1627474393034083
UserStopDelayUSec=10s
HandlePowerKey=poweroff
IdleAction=ignore
PreparingForShutdown=no
Docked=no
NCurrentSessions=2
...


# 杀死 session
[Linux]$ loginctl kill-session 976


# 查看登录用户的详细信息
[Linux]$ loginctl show-user 1000
UID=1000
GID=1000
Name=xiao
Timestamp=Wed 2021-07-28 18:53:32 CST
RuntimePath=/run/user/1000
Slice=user-1000.slice
...


# 查看登录用户的状态
[Linux]$ loginctl user-status xiao
xiao (1000)
           Since: Wed 2021-07-28 18:53:32 CST; 1h 25min ago
           State: active
        Sessions: 5 *1
          Linger: no
            Unit: user-1000.slice
                  ├─session-1.scope
                  │ ├─730 sshd: xiao [priv]
                  │ ├─747 sshd: xiao@pts/0
                  │ ├─748 -bash
                  │ └─851 vim 00_loginctl.rst
                  ├─session-5.scope
                  │ ├─852 sshd: xiao [priv]
                  │ ├─858 sshd: xiao@pts/1
                  │ ├─859 -bash
                  │ ├─862 su
                  │ ├─863 bash
                  │ ├─934 loginctl user-status xiao
                  │ └─935 pager
                  └─user@1000.service
                    └─init.scope
                      ├─733 /lib/systemd/systemd --user
                      └─734 (sd-pam)

Jul 28 18:53:33 debian systemd[733]: Listening on GnuPG cryptographic agent and passphrase
Jul 28 18:53:33 debian systemd[733]: Listening on GnuPG cryptographic agent (ssh-agent emu
...

命令ls:

ls 显示目录中的文件
####################################

ls(list)用来显示目录所含的文件及子目录,在 Linux 中是使用率较高的命令。

命令格式:


ls [OPTION]... [FILE]...

常用选项:


-a, --all
  显示所有的文件,包括隐藏文件(以 ``.`` 开头的文件)

-A, --almost-all
  显示所有的文件,包括隐藏文件,但不包括表示当前目录 . 和上级目录 .. 这两个文件

-C
  多列显示输出结果。这是默认选项

--color[=WHEN]
  是否根据文件类型显示颜色,WHEN 可以为 never、always 或者 auto

-F, --classify
  在每个输出项后追加文件的类型标识符
  具体含义:“*”表示具有可执行权限的普通文件
            “/”表示目录
            “@”表示符号链接
            “|”表示命令管道 FIFO
            “=”表示 sockets 套接字
            当文件为普通文件时,不输出任何标识符

-i, --inode
  列出文件的索引节点号(inode)

-l
  以长格式显示目录下的内容列表。

-m
  用逗号 ``,`` 区隔每个文件和目录的名称

-R, --recursive
  递归处理,将指定目录下的所有文件及子目录一并处理

-t
  根据文件和目录的更改时间进行排序输出(最新的文件先列出)

使用实例:


# 显示长格式列表
# 输出的信息从左到右依次包括:文件类型+权限模式、硬连接数、
# 所有者、所有组、文件大小、最后修改时间、文件名
[Linux]$ ls -l
total 20
lrwxrwxrwx.   1 root root    7 Mar 27  2018 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 Mar 27  2018 boot
...
drwxr-xr-x.  20 root root  278 Feb 12 18:17 var


# 将文件大小转换为更加人性化的表示方法(默认的以字节为单位)
[Linux]$ ls -lh
-rwxrwx---. 1 seth users    455 Mar  2  2017 estimate.sh
-rwxrwxr-x. 1 seth seth     662 Apr 29 22:27 factorial
-rwxrwx---. 1 seth users    20M Jun 29  2018 fop-2.3-bin.tar.gz
-rwxrwxr-x. 1 seth seth    6.1K May 22 10:22 geteltorito
-rwxrwx---. 1 seth users    177 Nov 12  2018 html4mutt.sh


# 显示所有的文件,包括隐藏文件
[Linux]$ ls -a
.   .bash_history  .bash_profile  .cshrc          .pki
..  .bash_logout   .bashrc        .mysql_history  .tcshrc


# 显示长格式列表并且显示文件的索引节点号
[Linux]$ ls -li
total 20
      120 lrwxrwxrwx.   1 root root    7 Mar 27  2018 bin -> usr/bin
       64 dr-xr-xr-x.   5 root root 4096 Mar 27  2018 boot
...
100663361 drwxr-xr-x.  20 root root  278 Feb 12 18:17 var


# 在每个输出项后追加文件的类型标识符
[Linux]$ ls -F
bin@   dev/  home/  lib64@  mnt/  proc/  run/   srv/  tmp/  var/
boot/  etc/  lib@   media/  opt/  root/  sbin@  sys/  usr/


# 显示目录下所有的 php 文件
[Linux]$ ls -l *php
-rwxrwxrwx 1 root root 4371 Feb 12 19:38 console.php
-rwxrwxrwx 1 root root 5033 Feb 12 19:38 cron.php
-rwxrwxrwx 1 root root 3678 Feb 12 19:38 index.php


# 递归显示目录下文件
[Linux]$ ls -FR
.:
app/              COPYING-AGPL*  pub/        src/
application.php*  index.php*     README.md*  vendor/

./app:
bootstrap.php*  config/

./app/config:
container.php*

./pub:
css/  img/  js/

./pub/css:
main.css*


# 只显示目录下的文件夹
[Linux]$ ls -la | grep ^d
drwxr-xr-x 21 root  root  4096 Jul 13 13:49 .
drwxr-xr-x  3 root  root   4096 Jul  8 22:54 ..
drwxr-xr-x  2 root  root  4096 Jul  9 14:59 Desktop
drwxr-xr-x  8 root  root  4096 Jul 13 18:30 Documents
drwxr-xr-x  2 root  root 12288 Jul 13 15:49 Downloads
drwxr-xr-x  2 root  root  4096 Jul  9 14:59 Music
drwx------  2 root  root  4096 Jul 10 09:51 .ssh
drwxr-xr-x  2 root  root  4096 Jul  9 14:59 Templates
drwxr-xr-x  7 root  root  4096 Jul 11 11:43 Videos

命令lsblk:

lsblk 列出块设备
####################################

lsblk(list block)列出所有可用块设备的信息,及设备之间的依赖关系,但是不会列出 RAM 的信息。

lsblk 命令包含在 util-linux包中,这个包中还包含 dmesg 等其他工具。如果系统中没有 lsblk 命令,请安装 util-linux 包。

命令格式:


lsblk [options] [device...]

常用选项:


-a, --all
    显示所有设备,包括空设备

-d, --nodeps
    不显示分区的详细信息

-l, --list
    使用列表格式显示

-m, --perms	
    显示设备权限信息

-o, --output list
    指定输出信息,支持的选项
    NAME,SIZE,OWNER,GROUP,MODE,FSTYPE,LABEL,UUID,MOUNTPOINT...

-S, --scsi
    只显示 SCSI 设备

使用实例:


# 默认输出
[Linux]$ lsblk 
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0         7:0    0  55.3M  1 loop /snap/core18/1885
loop1         7:1    0  55.4M  1 loop /snap/core18/1932
loop2         7:2    0 162.9M  1 loop /snap/gnome-3-28-1804/145
loop3         7:3    0 255.6M  1 loop /snap/gnome-3-34-1804/36
loop4         7:4    0  62.1M  1 loop /snap/gtk-common-themes/1506
loop6         7:6    0    51M  1 loop /snap/snap-store/498
loop7         7:7    0  31.1M  1 loop /snap/snapd/10238
loop8         7:8    0 290.4M  1 loop /snap/vlc/1700
loop9         7:9    0  64.8M  1 loop /snap/gtk-common-themes/1514
loop10        7:10   0  49.8M  1 loop /snap/snap-store/467
loop11        7:11   0 217.9M  1 loop /snap/gnome-3-34-1804/60
loop12        7:12   0  31.1M  1 loop /snap/snapd/10492
nvme0n1     259:0    0 238.5G  0 disk 
├─nvme0n1p1 259:1    0   487M  0 part /boot/efi
├─nvme0n1p2 259:2    0   1.9G  0 part [SWAP]
└─nvme0n1p3 259:3    0 236.1G  0 part /
  • NAME:设备名
  • MAJ:MIN:主要/次要设备号
  • RM:是否可移动设备(0 否,1 是)
  • SIZE:设备的容量大小
  • RO:是否为只读设备(0 否,1 是)
  • TYPE:设备类型(disk 磁盘,part 分区,loop 块设备)
  • MOUNTPOINT:设备挂载点

查看指定设备

[Linux]$ lsblk /dev/nvme0n1
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 487M 0 part /boot/efi
├─nvme0n1p2 259:2 0 1.9G 0 part [SWAP]
└─nvme0n1p3 259:3 0 236.1G 0 part /

自定义输出项

[Linux]$ lsblk -o name,size,uuid /dev/nvme0n1
NAME SIZE UUID
nvme0n1 238.5G
├─nvme0n1p1 487M D379-5667
├─nvme0n1p2 1.9G 352ca1aa-5508-4303-9646-cac0e1d791ca
└─nvme0n1p3 236.1G 22aba028-77ae-43a3-a5fb-5d9d05c99ad5

[Linux]$ lsblk -o +uuid /dev/nvme0n1
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT UUID
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 487M 0 part /boot/efi D379-5667
├─nvme0n1p2 259:2 0 1.9G 0 part [SWAP] 352ca1aa-5508-4303-9646-cac0e1d791ca
└─nvme0n1p3 259:3 0 236.1G 0 part / 22aba028-77ae-43a3-a5fb-5d9d05c99ad5


命令man:

man 查看帮助手册
####################################

Linux 提供了丰富的帮助手册,通过 man 命令可以查看 Linux 中的命令帮助、配置文件帮助和编程帮助等信息。

命令格式:


man [man options] [[section] page ...] ...
man -k [apropos options] regexp ...
man -K [man options] [section] term ...
man -f [whatis options] page ...
man -l [man options] file ...
man -w|-W [man options] page ...

常用选项:


-f, --whatis
    等价于 whatis 指令,显示命令的简短描述信息
    
-k, --apropos
    等价于 apropos 指令,查找包含指定字符的命令描述信息

使用实例:


# 查看man的帮助手册
[Linux]$  man man
MAN(1)                        Manual pager utils                        MAN(1)

NAME
       man - an interface to the system reference manuals

SYNOPSIS
       man [man options] [[section] page ...] ...
       man -k [apropos options] regexp ...
       man -K [man options] [section] term ...
       man -f [whatis options] page ...
       man -l [man options] file ...
       man -w|-W [man options] page ...

DESCRIPTION
       man  is  the system's manual pager.  Each page argument given to man is
       normally the name of a program, utility or function.  The  manual  page
       associated with each of these arguments is then found and displayed.  A
       section, if provided, will direct man to look only in that  section  of
       the  manual.   The  default action is to search in all of the available
       sections following a pre-defined order (see DEFAULTS), and to show only
       the first page found, even if page exists in several sections.
       
       ......

在阅读帮助手册时,有许多命令可供使用。首先可以使用 h 命令查看帮助,下边只介绍几个常用的命令。

===== =====
键 说明
===== =====
b 上翻一屏
f 下翻一屏
e 向下一行
y 向上一行
g 移动到第一行
G 移动到最后一行
h 查看帮助信息
q 退出
/ 搜索(类似于 vim,n 跳到下一个搜索位置)
===== =====

手册的分类和格式


Linux 帮助手册是一个庞大的参考书,为了更好的组织信息,Linux 将整个手册页分成了8章(编号1~8)。各个发行版之间实际名称可能会有所不同,但是,所有的 Linux 手册都倾向于遵循相同的组织原则。

===== =====
章节 说明
===== =====
1 标准用户命令(包含大量的命令手册)
2 系统调用(在程序中使用,用来请求内核执行指令)
3 库调用
4 特殊文件(包含物理设备和设备的驱动信息)
5 文件格式(包含配置文件)
6 游戏
7 杂项(各种混杂信息)
8 管理命令(系统管理员使用的特殊命令)
===== =====

在查看帮助手册时,在第一行的左上角和右上角都会显示命令所在的章节,如:MAN(1)

在每章下包含各自的命令帮助手册。每个命令的帮助手册,也会按照标准格式组织,将每个页面分成几个部分,每个部分都拥有独立的标题。

============= =============
标题 含义
============= =============
NAME 命令名称及功能
SYNOPSIS 命令语法,包括可用的选项
DESCRIPTION 命令功能的详细说明
OPTIONS 每个选项的详细说明
EXAMPLES 用法示例
ENVIRONMENT 命令使用的环境变量
FILES 命令相关的配置文件
AUTHOR 程序的作者
BUGS 错误、缺点、警告
COPYRIGHT 版权信息
SEE ALSO 参照、相关信息
============= =============

在通过 man 查看帮助手册时,命令语法(SYNOPSIS )遵循7条规则。

1. 方括号中的项是可选的
2. 不在方括号中的项是必选项
3. 黑体字必须按原样准确输入
4. 斜体字必须用适当的值替代(如果没有斜体字会用下划线代替)
5. 后面跟省略号的参数可以有多个
6. 单独的选项和参数组合在一起,那么选项和参数必须同时使用。如 ``[ -P pager]``
7. 由竖线字符分开的两个或多个选项,可以任选其一。如 ``[ file | arg1 arg2]``

在 man 后边直接跟命令名称,Linux 会从第1章开始向后查找,然后输出找到的第一个匹配。如果想查看后边章的帮助手册就需要指定章节号。

[Linux]$  man kill
KILL(1)                          User Commands                         KILL(1)

NAME
       kill - send a signal to a process

SYNOPSIS
       kill [options] <pid> [...]

DESCRIPTION
       The  default  signal  for kill is TERM.  Use -l or -L to list available
       signals.  Particularly useful signals include  HUP,  INT,  KILL,  STOP,
       CONT,  and  0.   Alternate  signals may be specified in three ways: -9,
       -SIGKILL or -KILL.  Negative PID values may be  used  to  choose  whole
       process  groups; see the PGID column in ps command output.  A PID of -1
       is special; it indicates all processes except the kill  process  itself
       and init.


[Linux]$  man 2 kill
KILL(2)                    Linux Programmer's Manual                   KILL(2)

NAME
       kill - send signal to a process

SYNOPSIS
       #include <sys/types.h>
       #include <signal.h>

       int kill(pid_t pid, int sig);

   Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

       kill(): _POSIX_C_SOURCE

可以使用 whatis 命令确定所查询的命令包含在几个章节中,括号中的数字即为章节号。

[Linux]$  whatis kill
kill (1)             - send a signal to a process
kill (2)             - send signal to a process


[Linux]$  whatis passwd
passwd (1ssl)        - compute password hashes
passwd (1)           - change user password
passwd (5)           - the password file

命令mkdir:

mkdir 新建文件夹
####################################

mkdir(make directory)用来新建文件夹,此命令属于 bash 内建命令。

新建文件夹之前,必须对目标路径具有写和执行的权限,并且不能与路径下的文件夹重名。

命令格式:


mkdir [OPTION]... DIRECTORY...

常用选项:


-m, --mode=MODE
  指定文件夹权限(如在 chmod 中),而不是 a=rwx-umask

-p, --parents
  按路径递归的新建文件夹

 -v, --verbose
  显示详细的执行过程

使用实例:


# 新建文件夹
[root@localhost bin]# ls
bbb.py  usr
[root@localhost bin]# mkdir abc
[root@localhost bin]# ls -F
abc/  bbb.py  usr/

# 递归新建文件夹
[root@localhost bin]# mkdir -p abc/aaa/bbb/ccc
[root@localhost bin]# ls -R
.:
abc  bbb.py  usr

./abc:
aaa

./abc/aaa:
bbb

./abc/aaa/bbb:
ccc

./abc/aaa/bbb/ccc:


# 新建指定权限的文件夹
[root@localhost bin]# mkdir -m 750 office
[root@localhost bin]# ls -l
total 0
drwxr-x--- 2 root root  6 Feb 15 18:54 office
...

命令mv:

mv 移动文件或重命名
####################################

mv(move)对文件或目录重命名,或者将文件从一个目录移到另一个目录中。

文件被移至目标文件有多种不同的结果:

================ ===========
命令 说明
================ ===========
mv 文件名 文件名 重命名,将源文件名改为目标文件名
mv 文件名 目录名 移动文件,将文件移动到目标目录
mv 目录名 目录名 目标目录存在,则将源目录移动到目标目录;目标目录不存在则重命名
mv 目录名 文件名 报错
================ ===========

命令格式:


mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...

常用选项:


--backup[=CONTROL]
  若需覆盖文件,则覆盖前先备份

-f, --force
  强制移动,若目标文件(或目录)与现有的文件重复,则直接覆盖现有的文件

-i, --interactive
  交互式操作,如果源文件与目标文件同名,覆盖前先询问

使用实例:


# 重命名文件
[Linux]$ ls
alias  aulastlog
[Linux]$ mv aulastlog aaa
[Linux]$ ls
aaa  alias

# 移动文件到指定目录
[Linux]$ ls
alias  aulastlog bin
[Linux]$ mv alias bin/
[Linux]$ ls
aaa  bin

# 移动文件夹
[Linux]$ ls -F
aaa*  bin/  usr/
[Linux]$ mv bin/ usr/
[Linux]$ ls -l usr/
total 0
drwxr-xr-x 2 root root 19 Feb 15 15:33 bin

命令ps:

ps 查看系统进程快照
####################################

ps 命令用于查看当前系统进程的快照,使用该命令可以确定有哪些进程正在运行和运行的状态、哪些进程占用了过多的资源等等。

如果想实时更新查看系统的状态,可以使用 :ref:top 命令 <cmd_top> ,同时可以搭配 :ref:kill 命令 <cmd_kill> 随时暂停、终止进程的运行。

命令格式:


ps [OPTION]...

常用选项:


ps 命令支持三种不用的语法格式:

  1. UNIX 风格,选项前必须有“-”连字符
  2. BSD 风格,选项前不能有“-”连字符
  3. GNU 风格,选项前有两个“-”连字符
    -e
    显示所有的进程
    -C
    查找指定的进程,只能实现完全匹配查找,并不实用
    -f
    显示 UID, PPIP, C 与 STIME 栏
    -l
    显示详细的进程状态
    -u
    显示属于该用户的进程状况,默认为当前用户。

使用实例:


# 默认输出(几乎没用)
[Linux]$ ps
    PID TTY          TIME CMD
   6172 pts/0    00:00:00 bash
   7017 pts/0    00:00:00 ps

# 查找指定进程
[Linux]$ ps -f -C gvim
UID          PID    PPID  C STIME TTY          TIME CMD
glenn       6977    1279  1 15:33 ?        00:00:08 gvim -f new.txt

# 查看所有进程
[Linux]$ ps -ef
UID     PID    PPID  C STIME TTY        TIME CMD
root      1       0  0 09:30 ?      00:00:04 /sbin/init
root      2       0  0 09:30 ?      00:00:00 [kthreadd]
root      3       2  0 09:30 ?      00:00:00 [rcu_gp]
...

# 查看详细的进程使用状态
[Linux]$ ps -aux
USER   PID %CPU %MEM    VSZ   RSS TTY   STAT START   TIME COMMAND
root     1  0.0  0.0 164068 10516 ?     Ss   09:30   0:04 /sbin/init
root     3  0.0  0.0      0     0 ?     I<   09:30   0:00 [rcu_gp]
root     4  0.0  0.0      0     0 ?     I<   09:30   0:00 [rcu_par_gp]
...

输出说明:

  • USER: 属主用户 ID
  • PID: 进程 id
  • %CPU: 该进程使用的 CPU 百分比
  • %MEM: 该进程使用的物理内存百分比
  • VSZ: 该进程使用的虚拟内存量
  • RSS: 该进程使用的固定内存量
  • TTY: 该进程在那个终端机上面运作,若与终端机无关,则显示 ?
  • STAT: 该进程的状态:
  • D: 无法中断的休眠状态 (通常 IO 的进程)
  • R: 正在执行中
  • S: 睡眠状态
  • T: 暂停执行
  • Z: 不存在但暂时无法消除(zombie 疆尸进程)
  • W: 没有足够的记忆体分页可分配
  • <: 高优先序的行程
  • N: 低优先序的行程
  • L: 有记忆体分页分配并锁在记忆体内 (实时系统或 I/O)
  • START: 进程被触发的时间
  • TIME: 进程执行的时间
  • COMMAND: 进程执行的指令

命令pwd:

pwd 显示工作目录
####################################

pwd 命令是 Linux 中最常用的命令之一,它用于显示当前工作路径。

命令格式:


pwd [OPTION]...

常用选项:


-L, --logical
    显示符号链接自身的路径(默认值)

-P, --physical
    显示符号链接所指向的文件路径

使用实例:


[Linux]$ cd /
[Linux]$ pwd
/

# 显示符号链接路径(默认值)
[Linux]$ cd /lib
[[Linux]$ pwd -L
/lib

# 显示符号链接所指向的路径
[[Linux]$ pwd -P
/usr/lib

命令rm:

rm 删除文件或目录
####################################

rm(remove)删除文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除。

… danger

使用 rm 命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。

命令格式:


rm [OPTION]... FILE...

常用选项:


-d, --dir
  删除空目录

-f, --force
  强制删除文件或目录,不给出提示

-i
  删除文件或目录之前先询问用户

-r, -R, --recursive
  递归处理,将指定目录下的所有文件与子目录一并删除

使用实例:


# 删除文件
[Linux]$ rm aclocal

# 删除文件前先确认
[Linux]$ rm -i apxs
rm: remove regular file ‘apxs’? y

# 递归删除文件夹
[Linux]$ ls -F
alias*  aulastlog*  bin/  binBk/
[Linux]$ rm -r binBk/
[Linux]$ ls
alias  aulastlog  bin

# 强制递归删除文件夹(非常危险的命令)
[Linux]$ rm -rf doc/

命令scp:

scp 远程复制文件
####################################

scp 是 secure copy 的简写,用于在本机和服务器或两台服务器之间远程复制文件,而且 scp 传输是加密的。另外,scp 还非常节省资源,不会占用太多系统负荷。

命令格式:


scp [-346ABCpqrTv] [-c cipher] [-F ssh_config] [-i identity_file]
    [-J destination] [-l limit] [-o ssh_option] [-P port]
    [-S program] source ... target

常用选项:


-4
  只使用IPv4寻址

-6
  只使用IPv6寻址

-p
  保留原文件的修改时间,访问时间和访问权限。

-r
  递归复制整个目录。

-v
  详细显示过程信息。

-P
  指定数据传输的端口号。

使用实例:


# 复制(上传)本机文件到服务器
[Linux]$ scp ~/Music/1.mp3 pi@www.pi.com:/home/pi/Music
1.mp3                       100% 2674     8.4KB/s   00:00

# 复制(上传)本机文件到服务器并重命名
[Linux]$ scp ~/Music/1.mp3 pi@www.pi.com:/home/pi/Music/a.mp3
1.mp3                       100% 2674     8.4KB/s   00:00

# 复制(上传)本机文件夹到服务器并重命名
[Linux]$ scp -r ~/Music/ pi@www.pi.com:/home/pi/
1.mp3                       100% 2674     8.4KB/s   00:00
2.mp3                       100%  523    81.0KB/s   00:00
3.mp3                       100% 3463   119.9KB/s   00:00

# 复制(下传)服务器文件到本机
[Linux]$ scp pi@www.pi.com:/home/pi/Music/1.mp3 ~/Music
1.mp3                       100% 2674     8.4KB/s   00:00


# 复制(下传)服务器文件到本机
# 如果服务器防火墙为 scp 设置了端口号,传输时需要指定端口号
[Linux]$ scp -P 12345 pi@www.pi.com:/home/pi/Music/1.mp3 ~/Music
1.mp3                       100% 2674     8.4KB/s   00:00

命令ssh-keygen:

ssh-keygen 生成密钥
####################################

ssh-keygen 命令是 :doc:OpenSSH <../Chapter02/00_openssh> 程序提供的一个密钥生成、管理和转换工具,支持 RSA 和 DSA 两种认证密钥。生成的密钥文件默认存储在 ~/.ssh/ 目录下,id_rsa 为私钥文件,id_rsa.pub 为公钥文件。

RSA 和 DSA 加密算法

RSA 和 DSA 都是非对称加密算法。其中 RSA 的安全性是基于极其困难的大整数的分解(两个素数的乘积);DSA 的安全性是基于整数有限域离散对数难题。基本上相同密钥长度的 RSA 算法与 DSA 算法安全性相当。

DSA 只能用于数字签名,无法用于加密(某些扩展可以支持加密);RSA 即可作为数字签名,也可以作为加密算法。不过作为加密使用的 RSA 有着随密钥长度增加,性能急剧下降的问题。

相同密钥长度下,DSA (在扩展支持下)解密密文更快,而加密更慢;RSA 正好反过来,一般来说解密次数多于加密次数。不过由于非对称加密算法的先天性能问题,两者都不是加密的好选择。

通常情况下 RSA 是首选,它具有更为广泛的部署与支持。




生成密钥以后,建议修改私钥的权限,防止其它用户读取。



    [Linux]$ chmod 600 ~/.ssh/id_rsa

命令格式:


ssh-keygen [OPTION]...

常用选项:


-b
    指定密钥的二进制位数,建议设为 2048 或者更高,一般为 1024 的倍数

-C
    为密钥文件指定新的注释,格式为 username@host

-f
    指定生成的文件名

-F
    检查某个主机名是否在 known_hosts 文件里面。

-N
    指定私钥的密码

-p
    重新指定私钥的密码。它与 -N 不同,新密码不在执行后再输入

-R
    将指定的主机公钥指纹移出 known_hosts 文件。

-t
    参数用于指定生成密钥的加密算法,一般为dsa或rsa

使用实例:


# 默认问题
[Linux]$ ssh-keygen -t dsa
Generating public/private dsa key pair.

# 可以指定文件路径,直接回车即可
Enter file in which to save the key (/home/username/.ssh/id_dsa):  press ENTER

# 设置密码,该密码是每次使用密钥时需要的密码,直接回车可以不设密码
Enter passphrase (empty for no passphrase): ********
Enter same passphrase again: ********

# 公钥和私钥的存放路径和密钥指纹
Your identification has been saved in /home/username/.ssh/id_dsa.
Your public key has been saved in /home/username/.ssh/id_dsa.pub.
The key fingerprint is:
14:ba:06:98:a8:98:ad:27:b5:ce:55:85:ec:64:37:19 username@shell.isp.com


# 指定加密算法、位数和注释
[Linux]$ ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"

命令systemctl:

systemctl 基本工具
####################################

systemctl 是一个 :ref:systemd <cfg_systemd> 工具,主要负责控制 systemd 系统和服务管理器。

systemctl 命令有两大类功能:

  • 控制 systemd 系统
  • 管理系统上运行的服务(Unit 单元)

命令格式:


systemctl [OPTIONS...] {COMMAND} ...

常用选项:


-h --help
    显示帮助

-t --type=TYPE
    显示指定类型的单元
  
-p --property=NAME
    仅显示指定名称的属性

-l --full
    不要在输出中省略单元名称

-s --signal=SIGNAL
    指定发送信号

-q --quiet
    抑制输出

-n --lines=INTEGER
    显示的日志条目数

Unit 命令
++++++++++++++++++++++++++++++++++++

list-units [PATTERN...]
    列出当前在内存中的单元

list-sockets [PATTERN...]
    列出当前在内存中的套接字单元,按地址排序

list-timers [PATTERN...]
    列出当前在内存中的计时器单元,按下一次的顺序排列

start UNIT...
    启动(激活)一个或多个单位

stop UNIT...
    停止(关闭)一个或多个单元

restart UNIT...
    启动或重启一个或多个单元

reload UNIT...
    重新加载一个或多个单元的配置文件

status UNIT...
    查看单元的运行状态

show [PATTERN...|JOB...]  
    显示一个或多个单元/进程的配置文件参数

isolate UNIT
    启动一个单元,停止所有其他单元

mask UNIT
    禁用一个单元(禁用后,也不可以间接启动):

unmask UNIT
    取消禁用一个单元

kill UNIT...
    杀死(结束)一个或多个单元的所有子进程

list-dependencies [UNIT]
    递归地显示单元所需要的单元

Unit 文件命令
++++++++++++++++++++++++++++++++++++

list-unit-files [PATTERN...]
    列出已安装的单元文件

enable [UNIT...|PATH...]
    开机自启(一个或多个单元文件)

disable UNIT...
    禁止开机自启(一个或多个单元文件)

reenable UNIT...
    重新启用(一个或多个单元文件)

is-enabled UNIT...
    检查单元文件是否启用

edit UNIT...
    编辑一个或多个单元文件

系统命令
++++++++++++++++++++++++++++++++++++

default
    进入系统默认模式

rescue
    进入系统救援模式

emergency
    进入系统应急模式

poweroff
    退出系统并关闭电源

reboot [ARG]
    重新启动系统

suspend
    挂起(待机)系统

hibernate
    休眠系统

hybrid-sleep 
    混合休眠模式(硬盘同时休眠并待机)

systemctl 的大部分命令后都可以跟多个单元名。 systemctl 命令在 enable、disable 和 mask 子命令中增加了 --now 选项,可以实现激活的同时启动服务,取消激活的同时停止服务。

使用实例:


# 立即激活单元(开启软件):
[Linux]# systemctl start <单元>


# 立即停止单元(关闭软件):
[Linux]# systemctl stop <单元>


# 重启单元(重启软件):
[Linux]# systemctl restart <单元>


# 输出单元运行状态:
[Linux]# systemctl status nginx.service
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2021-07-28 18:52:28 CST; 3h 50min ago
     Docs: man:nginx(8)
  Process: 711 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=e
  Process: 716 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, st
 Main PID: 717 (nginx)
    Tasks: 2 (limit: 515)
   Memory: 10.0M
   CGroup: /system.slice/nginx.service
           ├─717 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           └─718 nginx: worker process


# 查看单元的配置参数
[Linux]# systemctl show nginx
Type=forking
Restart=no
PIDFile=/run/nginx.pid
NotifyAccess=none
RestartUSec=100ms
TimeoutStartUSec=1min 30s
TimeoutStopUSec=5s
RuntimeMaxUSec=infinity
ExecMainStatus=0
...


# 检查单元是否配置为自动启动:
[Linux]# systemctl is-enabled nginx
enabled


# 设置单元为自动启动并立即启动这个单元:
[Linux]# systemctl enable --now nginx


# 重启系统:
[Linux]# systemctl reboot


# 退出系统并关闭电源:
[Linux]# systemctl poweroff

命令tail:

tail 查看文件的末尾内容
####################################

tail 用于查看文件的末尾内容,默认为文末 10 行。

命令格式:


tail [OPTION]... [FILE]...

常用选项:


-f, --follow[={name|descriptor}]
    循环读取文件内容,常用于查看日志写入

-n, --lines=[+]NUM
    指定查看的行数,如果有 + 号,则查看该行之后的所有内容

使用实例:


[Linux]$ tail /etc/samba/smb.conf
[global]
   map to guest = Bad User
   log file = /var/log/samba/%m
   log level = 1

[guest]
   path = /mnt/samba/
   read only = no
   guest ok = yes
   guest only = yes


[Linux]$ tail -n 3 /etc/samba/smb.conf
   read only = no
   guest ok = yes
   guest only = yes

# 在行号前加入 + 会从文件开头算起
[Linux]$ tail -n +3 /etc/samba/smb.conf
   log file = /var/log/samba/%m
   log level = 1

[guest]
   path = /mnt/vmware/samba/
   read only = no
   guest ok = yes
   guest only = yes

命令tar:

tar 归档
###################################

tar 为多个文件和目录创建一个档案(归档),通常与压缩工具(如 gzipbzip )结合使用。

归档的一般用途

- 把一大堆的文件和目录归档成一个 tar 包,便于网络传输。
- 生成 tar 包后,再用其它的程序进行压缩。

命令格式:


tar 命令有三种模式,一种是传统的命令模式,一种是 Unix 命令模式,一种是 GNU 的命令模式。使用中常以传统命名为主,下边主要介绍传统命令模式。

… highlight nong

# 传统模式
    tar {A|c|d|r|t|u|x}[GnSkUWOmpsMBiajJzZhPlRvwo] [ARG...]

# UNIX 模式
    tar -A [OPTIONS] ARCHIVE ARCHIVE
    tar -c [-f ARCHIVE] [OPTIONS] [FILE...]
    tar -d [-f ARCHIVE] [OPTIONS] [FILE...]
    tar -t [-f ARCHIVE] [OPTIONS] [MEMBER...]
    tar -r [-f ARCHIVE] [OPTIONS] [FILE...]
    tar -u [-f ARCHIVE] [OPTIONS] [FILE...]
    tar -x [-f ARCHIVE] [OPTIONS] [MEMBER...]

# GNU 模式
    tar {--catenate|--concatenate} [OPTIONS] ARCHIVE ARCHIVE
    tar --create [--file ARCHIVE] [OPTIONS] [FILE...]
    tar {--diff|--compare} [--file ARCHIVE] [OPTIONS] [FILE...]
    tar --delete [--file ARCHIVE] [OPTIONS] [MEMBER...]
    tar --append [-f ARCHIVE] [OPTIONS] [FILE...]
    tar --list [-f ARCHIVE] [OPTIONS] [MEMBER...]
    tar --test-label [--file ARCHIVE] [OPTIONS] [LABEL...]
    tar --update [--file ARCHIVE] [OPTIONS] [FILE...]
    tar --update [-f ARCHIVE] [OPTIONS] [FILE...]
    tar {--extract|--get} [-f ARCHIVE] [OPTIONS] [MEMBER...]

常用选项:


必要选项:

在参数中仅能使用一个,不同时使用,如: tar -cd

-A, --catenate, --concatenate
    将归档附加到另一个归档的末尾

-c, --create
    创建新的归档

-d, --diff, --compare
    查找归档和文件之间的差异

-t, --list
    列出归档内容

-r, --append
    添加文件到归档中

-u, --update
    更新归档中的文件

-x, --extract, --get
    从归档中提取文件

其它选项:

-a, --auto-compress
    使用归档后缀来决定压缩程序

-b, --blocking-factor=BLOCKS
    设置区块大小

-C, --directory=DIR
    指定提取路径

--delete
    从归档中删除文件

-exclude=PATTERN
    归档时排除指定的文件

-f, --file=ARCHIVE
    指定归档文件名(文件名必须紧跟在 -f 参数之后)

-h, --dereference
    跟踪符号链接,将它指向的文件添加到归档中

-i, --ignore-zeros
    忽略归档中的空文件

-j, --bzip2
    通过 bzip2 归档(创建、解压 tar.bz2)

-J, --xz
    通过 xz 归档(创建、解压 tar.xz)

-k, --keep-old-files
    提取时不替换已经存在的文件

-m, --touch
    不提取文件的修改时间

-M, --multi-volume
    创建/列出/提取 多卷归档

-n, --seek
    归档可检索

-N, --newer=DATE, --after-date=DATE
    只归档比日期或文件更新的文件

-O, --to-stdout
    提取文件到标准输出

-p, --preserve-permissions, --same-permissions
    提取文件的权限信息(默认为超级用户)

-U, --unlink-first
    在提取归档之前先删除文件

-v, --verbose
    显示详细的执行过程

-w, --interactive, --confirmation
    每次操作都要求确认

-W, --verify
    在完成操作后尝试校验归档

-z, --gzip, --gunzip, --ungzip
    通过 gzip 归档(创建、解压 tar.gz)

-Z, --compress, --uncompress
    通过 Z 归档(创建、解压 tar.Z)

使用实例:


归档

# 将 /etc/ 和 /root/anaconda-ks.cfg 归档到当前目录
[Linux]$ tar -cvf myarchive.tar /etc /root/anaconda-ks.cfg

# 查看归档中的内容,并不提取文件
[Linux]$ tar -tvf myarchive.tar

# 追加文件到归档中
[Linux]$ tar -rvf myarchive.tar /media/fstab

# 将 scf/ 归档,但不包括 service 文件
[Linux]$ tar --exclude scf/service -zcvf scf.tar.gz scf/*

解包

# 提取 tar 包中的文件到当前目录下
[Linux]$ tar -xvf myarchive.tar

# 提取 tar 包中的文件到指定目录
[Linux]$ tar -xvf myarchive.tar -C /tmp/  

# 提取指定归档文件到指定目录,先指定目录否则会出现意外结果
[Linux]$ tar -C /tmp/ root/anaconda-ks.cfg -xvf /root/myarchive.tar root/anaconda-ks.cfg 
[Linux]$ ls -l /tmp/root/anaconda-ks.cfg
-rw-------. 1 root root 953 Aug 24 01:33 /tmp/root/anaconda-ks.cfg

# 比指定日期新的文件才归档
[Linux]$ tar -N "2012/11/13" -cvf log17.tar /media/fstab

归档并压缩

创建归档文件,并以 gzip 压缩(.tar.gz 或 .tgz)

# 压缩
[Linux]$ tar -zcvf myarchive.tar.gz /etc/ /opt/

# 解压
[Linux]$ tar -zxvf myarchive.tgz

# 查看压缩文件列表
[Linux]$ tar -tvf myarchive.tgz

创建归档文件,并以 bz2 压缩(.tar.bz2 或 .tbz2)

# 压缩
[Linux]$ tar -jcvf myarchive.tar.bz2 /etc/ /opt/

# 解压
[Linux]$ tar -jxvf myarchive.tbz2

命令tee:

tee 输出分流
####################################

tee 命令会从标准输入读取数据,将数据输出到标准输出,同时保存到文件中。如果指定的文件不存在,那么 tee 命令会创建这个文件;如果文件存在则覆盖原有文件中的内容。

命令格式:


tee [OPTION]... [FILE]...

常用选项:


-a, --append
  追加到原有文件的后面,而非覆盖它

-i, --ignore-interrupts
  忽略中断信号

使用实例:


# 将输出保存到多个文件中
[Linux]$ ls | tee a.txt b.txt
a.txt
b.txt
Desktop
Documents
Downloads
Music
Pictures
Public
Templates

# 将命令输出保存到文件中
[Linux]$ who | tee w.txt
glenn    :1           2020-08-23 20:52 (:1)
glenn@glenn-ThinkPad:~$ cat w.txt 
glenn    :1           2020-08-23 20:52 (:1)

# 查看多个文件中的内容,并保存
[Linux]$ cat a.txt b.txt | tee all.txt | less

命令top:

top 查看系统状态
####################################

top 命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。同时 top 命令也提供互动式界面,用热键可以管理。

命令格式:


top -hv|-bcEeHiOSs1 -d secs -n max -u|U user -p pids -o field -w [cols]

常用选项:


-d
    指定更新时间(单位秒,如果有小数点则换算成 ms,默认值 5)

-u
    指定用户名

-p
    指定进程号

-n
    指定更新的次数,完成后退出

-S
    累积模式

交互式命令:

====== ======
命令 说明
====== ======
h 显示帮助
k 终止一个进程,首先输入进程号,然后输入发送的信号(15 或 9)
i 显示/隐藏闲置和僵死的进程
q 退出
r 重新设置一个进程的优先级别(数值越小优先级越高)
S 切换到累计模式
s 改变更新时间
c 显示/隐藏完整命令行
l 显示/隐藏平均负载和启动时间信息(即第一行)
t 显示/切换/隐藏进程和 CPU 状态信息(即第二和第三行)
m 显示/切换/隐藏内存信息(即第四和第五行)
n 设置显示进程的数量
N 以 PID 的大小进行排序
P 以 CPU 占用率进行排序
M 以内存占用率大小进行排序
T 根据时间/累计时间进行排序
w 将当前设置写入 ~/.toprc 文件中
====== ======

使用实例:


# 默认输出
[Linux]$ top
top - 18:02:42 up  8:32,  1 user,  load average: 0.57, 0.61, 0.95
Tasks: 251 total,   1 running, 250 sleeping,   0 stopped,   0 zombie
%Cpu(s):  3.7 us,  2.2 sy,  0.0 ni, 94.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :  23665.3 total,  20068.8 free,   1731.2 used,   1865.3 buff/cache
MiB Swap:    977.0 total,    977.0 free,      0.0 used.  21354.1 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                   
   1300 glenn     20   0 2469984  31268  22272 S   6.7   0.1   3:24.92 pulseaudio                
   1547 glenn     20   0  317344  23052   6744 S   6.7   0.1   2:11.17 ibus-daemon               
   8982 glenn     20   0 1856612 138784  77872 S   6.7   0.6   0:55.73 rhythmbox                 
   9735 glenn     20   0   10228   3788   3168 R   6.7   0.0   0:00.01 top                       
      1 root      20   0  164068  10516   7784 S   0.0   0.0   0:04.12 systemd                   
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.04 kthreadd                  
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp

输出说明:

第一行,系统运行时间和平均负载:

top - 18:02:42 up  8:32,  1 user,  load average: 0.57, 0.61, 0.95
  • 当前时间
  • 已运行时间
  • 当前登录用户的数量
  • 最近 5、10 和 15 分钟内的系统平均负载

第二行,进程任务:

Tasks: 251 total,   1 running, 250 sleeping,   0 stopped,   0 zombie
  • total 系统进程总数
  • running 处于运行中的进程
  • sleeping 睡眠的进程总数
  • stoped 停止的进程总数
  • zombie 僵尸进程总数

第三行,CPU 状态:

%Cpu(s):  3.7 us,  2.2 sy,  0.0 ni, 94.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

不同模式下所占 cpu 时间百分比:

  • us(user): 运行(未调整优先级) 用户进程的 CPU 时间
  • sy(system): 运行内核进程的 CPU 时间
  • ni(niced):运行已调整优先级用户进程的 CPU 时间
  • wa(IO wait): 用于等待 IO 完成的 CPU 时间
  • hi:处理硬件中断的 CPU 时间
  • si: 处理软件中断的 CPU CPU时间
  • st:虚拟机模式中处理 hypervisor 的 CPU 时间

第四和第五行,内存使用:

MiB Mem :  23665.3 total,  20068.8 free,   1731.2 used,   1865.3 buff/cache
MiB Swap:    977.0 total,    977.0 free,      0.0 used.  21354.1 avail Mem
  • Mem:物理内存
  • Swap:虚拟内存
  • total:内存总量
  • used:使用中的内存总量
  • free:空闲内存总量
  • buffers:缓存的内存量

各进程的状态:

PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
  • PID:进程 ID,进程的唯一标识符
  • USER:进程所有者(用户名)
  • PR:进程的调度优先级,'rt’表示进程运行在实时态
  • NI:进程的 nice 值(优先级)。越小的值意味着越高的优先级,可以是负值
  • VIRT:进程使用的虚拟内存总量(单位 kb)
  • RES:使用中的未被换出的物理内存大小(单位 kb)
  • SHR:使用的共享内存大小(单位 kb)
  • S:进程的状态:
  • D 不可中断的睡眠状态
  • R 运行状态
  • S 睡眠状态
  • T 被跟踪或已停止状态
  • Z 僵尸状态
  • %CPU:两次更新时间之间所使用的 CPU 百分比
  • %MEM:进程使用的可用物理内存百分比
  • TIME+:任务启动后到现在所使用的全部 CPU 时间,精确到百分之一秒
  • COMMAND:运行进程所使用的命令

切换排序列

top 默认是以 CPU 的占用比排序。可以通过 ``SHIFT+>`` 键向右或 ``SHIFT+>`` 向左改变排序列。

命令touch:

touch 新建文件
####################################

touch 命令有两个功能:

  1. 新建一个或多个空文件
  2. 更新一个或多个文件的时间标签(文件内容不会改动)

命令格式:


touch [OPTION]... FILE...

常用选项:


-a
    只更改存取时间

-d, --date=STRING
    使用指定的日期时间,而非现在的时间

-m
    只更该变动时间

-r, --reference=FILE
    按指定文件的时间更新时间

使用实例:


[Linux]$ ls
aaa  bbb
[Linux]$ touch ccc
[Linux]$ ls
aaa  bbb  ccc

命令type:

type 查看命令类型
####################################

type 命令用于查看命令的类型,它是 shell 的内部命令,命令类型可以分为以下几种:

  1. builtin 内建命令。Shell 内建命令,例如:cd 命令。
  2. keyword 关键字,Shell 保留字。
  3. function 函数,Shell 函数是小规模的 Shell 脚本,它们混合到环境变量中。
  4. alias 命令别名。
  5. file 文件。磁盘文件、外部命令。
  6. unfound 没有找到。

命令格式:


type [-aftpP] name [name ...]

常用选项:


-a
    显示所有匹配的类型

-p
    如果给出的指令为外部指令,则显示其绝对路径

使用实例:


# 查看 ls 的命令类型
[Linux]$ type ls
ls is aliased to `ls --color=tty'

# 查看所有匹配 ls 的命令类型
[Linux]$ type -a ls
ls is aliased to `ls --color=tty'
ls is /bin/ls

# 各种类型的输出
[Linux]$ type cd
cd is a shell builtin

[Linux]$ type date
date is /bin/date

[Linux]$ type mysql
mysql is /usr/bin/mysql

[Linux]$ type nginx
-bash: type: nginx: not found

[Linux]$ type if
if is a reserved word

命令unzip:

unzip 解压 zip
####################################

unzip 命令用于解压缩 zip 压缩包。压缩命令为 :doc:00_zip

命令格式:


unzip  [-Z] [-cflptTuvz[abjnoqsCDKLMUVWX$/:^]] file[.zip] [file(s) ...]
[-x xfile(s) ...] [-d exdir]

常用选项:


-f
    对比文件,只解压比已有的文件修改时间要新的文件

-l
    列出压缩包中的所有文件

-t
    检验压缩包中的文件

-u
    与 -f 参数类似,但除了更新现有的文件外,也会解压缩文件中没有的文件

-v
    显示详细的执行过程

-C
    解压时不区分大小写文件名

-j
    不处理压缩文件中原有的目录路径

-L
    将压缩包中的全部文件名改为小写

-M
    将输出结果送到 more 程序处理

-n
    解压缩时不覆盖原有的文件

-o
    解压时不提示用户,直接覆盖原有的文件

-P
    使用 zip 的密码选项

-q
    安静模式(不显示任何提示信息)

-s
    将文件名中的空格转换为下划线

-d
    指定解压的文件路径

-x
    解压时排除符合条件的文件

使用实例:


# 解压文件,默认解压到当前目录:
[Linux]$ unzip test.zip

# 解压文件到指定目录
[Linux]$ unzip test.zip -d /media

# 查看压缩包中的内容
[Linux]$ unzip -l test.zip
Archive:  test.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2020-11-30 17:50   test/
    23208  2020-11-23 09:18   test/appendix.html
    37051  2020-11-23 09:18   test/floatingpoint.html
...

命令wc:

wc 统计数
####################################

wc 用于统计文件中的行数、字数、字节数等信息。如果没有指定文件名,则从标准输入读取。

命令格式:


wc [OPTION]... [FILE]...
wc [OPTION]... --files0-from=F

常用选项:


-c, --bytes
    统计字节数

-m, --chars
    统计字符数

-l, --lines
    统计行数

-L, --max-line-length
    统计最长行的长度

-w, --words
    统计单词字数(被分隔的字符串)

使用实例:


# 默认输出 行数 单词数 字节数
[Linux]$ wc file.txt 
 4  6 29 file.txt

# 统计多个文件
[Linux]$ wc file.txt a.txt 
  5   7 112 file.txt
  1   1  10 a.txt
  6   8 122 total

# 统计行数
[Linux]$ wc -l file.txt 
5 file.txt

# 统计当前目录下的文件数(文件名不能有空格)
[Linux]$ ls | wc -w
7

# 统计当前目录下的文件数(total 行也计算在内)
[Linux]$ ls | wc -l
8

命令wget:

wget 下载文件
####################################

wget 是在命令行中下载文件的工具。wget 支持 HTTP,HTTPS 和 FTP 协议,还可使用 HTTP 代理。

wget 可以跟踪 HTML 页面上的链接依次下载来创建远程服务器的本地副本,常被称作“递归下载”。在递归下载的时候,wget 遵循 Robot Exclusion 标准(robots.txt)。wget 非常稳定,在带宽有限和不稳定的网络中有很强的适应性。当下载文件失败时,wget 会不断的尝试继续下载,直到整个文件下载完毕。

命令格式


wget [option]...  [URL]...

常用选项:


-b, –background 
    启动后转入后台执行

-q, –quiet
    安静模式(没有输出)

-v, –verbose
    冗长模式,显示详细信息(默认设置)

-c, –continue
    继续下载没下载完的文件

-N, –timestamping
    不要重新下载文件除非比本地文件新

-T, –timeout=SECONDS
    设定响应超时的秒数

-Y, -proxy=on/off 
    打开或关闭代理

-P, –directory-prefix=PREFIX 
    指定下载的目录

-U, –user-agent=AGENT 
    设定代理的名称为 AGENT 而不是 Wget/VERSION

cookies=off 
    不使用 cookies

passive-ftp 
    FTP 选项,使用被动传输模式(缺省值)

active-ftp 
    FTP 选项,使用主动传输模式

-r, –recursive 
    递归下载--慎用!

-l, –level=NUMBER
    最大递归深度(inf 或 0 代表无穷)
    
-A, –accept=LIST
    分号分隔的被接受扩展名的列表

使用实例:


# 下载单个文件,在下载过程中显示详细信息
[Linux]$ wget https://wordpress.org/latest.tar.gz

# 下载文件并重命名,默认以最后一个 / 后面的字符来命名
[Linux]$ wget -O wordpress.tgz https://wordpress.org/latest.tar.gz

# 断点续传,继续下载中断的文件
[Linux]$ wget -c

# 后台下载
[Linux]$ wget -b https://wordpress.org/latest.tar.gz
Continuing in background, pid 1840.
Output will be written to 'wget-log'.
[Linux]$ tail wget-log

# 下载多个文件,需要一个下载链接文件
[Linux]$ cat filelist.txt
https://wordpress.org/latest.tar.gz
https://wordpress.org/latest.zip
[Linux]$ wget -i filelist.txt

# 下载指定格式的文件
[Linux]$ wget -r -A .pdf,jpg https://wordpress.org/

高级用法

  1. 镜像网站(下载整个网站到本地)
    [Linux]$ wget -mirror -p --convert-links -page-requisites URL
  • -m:镜像下载
  • -p:下载所有 html 页面显示正常的文件
  • -convert-links:下载后,转换成本地的链接
  • -page-requisites:下载额外的东西,如样式表
  1. 载 FTP 服务器中的文件

匿名下载

[Linux]$ wget ftp-url

指定用户名和密码

[Linux]$ wget --ftp-user=USERNAME --ftp-password=PASSWORD url


命令whereis:

whereis 搜索命令文件
####################################

whereis 命令可以查找指定命令的二进制文件、源文件和帮助文件。 被找到的文件在显示时,会去掉主路径名,然后再去掉文件的单个尾部扩展名(如: .c ),源于源代码控制的 s. 前缀也会被去掉。接下来,whereis 会尝试在标准的 Linux 位置里寻找具体程序,也会在由 $PATH$MANPATH 指定的路径中寻找。

命令格式:


whereis [options] [-BMS directory... -f] name...

常用选项:


-b
    只搜索二进制文件

-m
    只搜索man手册

-s
    只搜索源码文件

-u
    仅显示具有异常项的命令名

-l
    输出有效查找路径

使用实例:


# 寻找二进制文件所在位置
[Linux]$  whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

# 只搜索二进制文件
[Linux]$  whereis -b ls
ls: /usr/bin/ls

# 指定多个搜索位置
# -f 为必须项,用来明确分隔目录列表和要搜索的文件名。
[Linux]$  whereis -B /usr/bin/ -f ls
ls: /usr/share/man/man1/ls.1.gz /usr/bin/ls

# 查看搜索路径
[Linux]$  whereis -l
bin: /usr/bin
bin: /usr/sbin
bin: /usr/lib/x86_64-linux-gnu
bin: /usr/lib
bin: /usr/lib64
bin: /etc
bin: /usr/games
bin: /usr/local/bin
bin: /usr/local/sbin
bin: /usr/local/etc
bin: /usr/local/lib
bin: /usr/local/games
bin: /usr/include
bin: /usr/local
bin: /usr/libexec
bin: /usr/share
bin: /snap/bin
man: /usr/share/man/sk
man: /usr/share/man/fi
......

命令zip:

zip 归档和压缩文件
####################################

zip 不同于 gzip 压缩命令,它可直接用于压缩文件夹,压缩文件的扩展名为 .zip 。解压命令为 :ref:unzip <cmd_unzip>

命令格式:


zip  [-aABcdDeEfFghjklLmoqrRSTuvVwXyz!@$] [--longoption ...]  [-b path] 
[-n suffixes] [-t date] [-tt date] [zipfile [file ...]]  [-xi list]

zipcloak (see separate man page)

zipnote (see separate man page)

zipsplit (see separate man page)

常用选项:


-d --delete
    从压缩包内删除指定的文件

-e --encrypt
    以在终端上输入的密码对 zip 压缩包进行加密

-f --freshen
    只更新压缩包里的文件(注意与 -u 的区别)

-F --fix
    修复 zip 压缩包

-g --grow
    添加文件到压缩包中

-i files
--include files
    只压缩指定的文件

-j --junk-paths
    压缩目录中的所有文件,但不保存路径关系

-k --DOS-names
    尝试使用与 MS-DOS 兼容的文件名

-m --move
    将文件移动到压缩包中

-n suffixes
--suffixes suffixes
    不压缩指定后缀名的文件

-o --latest-time
    更新压缩时间,以压缩包内最新更改时间的文件为准

-p --paths
    压缩时保留文件的路径关系(默认设置,与 -j 相反)

-P password
--password password
    使用密码加密 zip 压缩包(注意与 -e 的区别)

-q --quiet
    安静模式(不显示任何提示信息)

-r --recurse-paths
    递归处理,将目录下的所有文件和子目录一起压缩

-s splitsize
--split-size splitsize
    如果压缩包超出指定大小,则拆分为多个压缩包

-S --system-hidden
    压缩时包含系统文件和隐藏文件

-t mmddyyyy
--from-date mmddyyyy
    指定压缩包的日期

-T --test
    检测压缩包的完整性

-u --update
    更新压缩包里的文件,如果文件不在压缩包内,将加入到压缩包中

-v --verbose
    显示详细的执行过程

-x files
--exclude files
    压缩时排除符合条件的文件

-X --no-extra
    不保留额外的文件属性(如 uid/gid)

-z --archive-comment
    对压缩包中的文件进行注释

-0~9
    指定压缩效率,其中 -0 表示没有压缩(相当于 tar),默认的压缩级别为 -6

使用实例:


# 压缩单个文件,要压缩的文件必须在末尾
[Linux]$ zip code.zip code.txt

# 压缩多个文件夹
[Linux]$ zip -r code.zip /home/code var/www/

# 指定压缩速率压缩多个文件夹
[Linux]$ zip -9 -r code.zip /home/code var/www/

命令aptitude:

aptitude 安装软件
##########################

aptitude 与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具。与 apt-get 不同的是,aptitude 在处理依赖问题上更佳一些。举例来说,aptitude 在删除一个包时,会同时删除本身所依赖的包。这样系统中不会残留无用的包,整个系统更为干净。

命令格式:


*****

常用选项:


============================ ==============
命令 说明
============================ ==============
aptitude update 更新可用的包列表
aptitude upgrade 升级可用的包
aptitude install pkgname 安装包
aptitude remove pkgname 删除包
aptitude purge pkgname 删除包及其配置文件
aptitude search string 搜索包
aptitude show pkgname 显示包的详细信息
aptitude clean 删除下载的包文件
aptitude autoclean 仅删除过期的包文件
============================ ==============

在终端中直接输入 aptitude 命令,会启动一个图形化的安装工具。aptitude 的主视图组织的非常有条理,而且界面布局清爽。上部窗口列出的是软件包根据类别和它们在本地系统的状态排序。

在 aptitude 软件包列表中的软件包状态:

========== ==========
状态 说明
========== ==========
v 虚拟
B 损坏
u 解包
C 预配置
H 预安装
c 卸载未清除
p 清除软件包
i 已经安装
E 内部错误
========== ==========

在 aptitude 软件包列表中的请求操作:

========== ==========
状态 说明
========== ==========
h 保持
p 清除
d 删除(卸载)
B 损坏
i 安装
r 重装
u 升级
========== ==========

使用实例:


# 安装 samba 服务
[root@localhost ~]# aptitude install samba

命令fdisk:

fdisk 管理磁盘分区
##########################

一块硬盘可以被划分成一个或多个逻辑磁盘,我们将其称作分区。我们对硬盘进行的划分信息被储存于建立在扇区 0 的分区表(MBR 或 GPT)中。

Linux 需要至少一个分区来当作根文件系统,所以我们不能在没有分区的情况下安装 Linux 系统。当我们创建一个分区时,我们必须将它格式化为一个适合的文件系统,否则我们就没办法往里面储存文件了。

要在 Linux 中完成分区的相关工作,我们需要一些工具。Linux 下有很多可用的相关工具,今天我们的主角是 fdisk。

人人都喜欢用 fdisk,它是 Linux 下管理磁盘分区的最佳利器之一。它可以操作最大 2TB 的分区。大量 Linux 管理员都喜欢使用这个工具,因为当下 LVM 和 SAN 的原因,并没有多少人会用到 2TB 以上的分区。并且这个工具被世界上许多的基础设施所使用。如果你还是想创建比 2TB 更大的分区,请使用 parted 命令 或 cfdisk 命令。

对磁盘进行分区和创建文件系统是 Linux 管理员的日常。如果你在许多不同的环境中工作,你一定每天都会重复几次这项操作。

什么是 fdisk 命令?


fdisk 的意思是固定磁盘 Fixed Disk 或格式化磁盘 Format Disk,它是命令行下允许用户对分区进行查看、创建、调整大小、删除、移动和复制的工具。它支持 MBR、Sun、SGI、BSD 分区表,但是它不支持 GUID 分区表(GPT)。请注意它不是为操作大分区而设计的(最大可操作 2TB 的分区)。

fdisk 允许我们在每块硬盘上创建最多四个主分区。它们中的其中一个可以作为扩展分区,并下设多个逻辑分区。1-4 扇区作为主分区被保留,逻辑分区从扇区 5 开始。

从头到尾快速学习一遍Linux,高级工程师多年实践实战经验精华总结和实例示例,第一章:基本命令_github_02

在 fdisk 中敲击 m,便会列出所有的可用操作,:

$ sudo fdisk /dev/sdc
Welcome to fdisk (util-linux 2.30.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xe944b373.
Command (m for help): m
Help:
  DOS (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag
  Generic
   d   delete a partition
   F   list free unpartitioned space
   l   list known partition types
   n   add a new partition
   p   print the partition table
   t   change a partition type
   v   verify the partition table
   i   print information about a partition
  Misc
   m   print this menu
   u   change display/entry units
   x   extra functionality (experts only)
  Script
   I   load disk layout from sfdisk script file
   O   dump disk layout to sfdisk script file
  Save & Exit
   w   write table to disk and exit
   q   quit without saving changes
  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table

列出可用磁盘


$ sudo fdisk -l
Disk /dev/sda: 30 GiB, 32212254720 bytes, 62914560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xeab59449
Device     Boot    Start      End  Sectors Size Id Type
/dev/sda1  *    20973568 62914559 41940992  20G 83 Linux
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sdd: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sde: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

# 列出指定分区的信息:
$ sudo fdisk -l /dev/sda
Disk /dev/sda: 30 GiB, 32212254720 bytes, 62914560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xeab59449
Device     Boot    Start      End  Sectors Size Id Type
/dev/sda1  *    20973568 62914559 41940992  20G 83 Linux

列出分区类型


$ sudo fdisk /dev/sdc
Welcome to fdisk (util-linux 2.30.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x9ffd00db.

Command (m for help): l
 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris
 1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden or  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi ea  Rufus alignment
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         eb  BeOS fs
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ee  GPT
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        ef  EFI (FAT-12/16/
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f0  Linux/PA-RISC b
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f1  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f4  SpeedStor
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      f2  DOS secondary
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fb  VMware VMFS
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fc  VMware VMKCORE
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fd  Linux raid auto
1c  Hidden W95 FAT3 75  PC/IX           bc  Acronis FAT32 L fe  LANstep
1e  Hidden W95 FAT1 80  Old Minix       be  Solaris boot    ff  BBT

创建一个新的磁盘分区


如果你希望新建磁盘分区,请参考下面的步骤。比如我希望在 /dev/sdc 中新建四个分区(三个主分区和一个扩展分区),只需要执行下文的命令。

首先,请在操作 “First sector” 的时候先按下回车,然后在 “Last sector” 中输入你希望创建分区的大小(可以在数字后面加 KB、MB、G 和 TB)。例如,你希望为这个分区扩容 1GB,就应该在 “Last sector” 中输入 +1G。当你创建三个分区之后,fdisk 默认会将分区类型设为扩展分区,如果你希望创建第四个主分区,请输入 p 来替代它的默认值 e。

# 操作磁盘
$ sudo fdisk /dev/sdc
Welcome to fdisk (util-linux 2.30.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

# 新建分区
Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)

# 分区类型:p 主分区;e 扩展分区
Select (default p): Enter
Using default response p.
Partition number (1-4, default 1): Enter
First sector (2048-20971519, default 2048): Enter

# 分区大小
Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): +1G
Created a new partition 1 of type 'Linux' and of size 1 GiB.

Command (m for help): p
Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8cc8f9e5
Device     Boot Start     End Sectors Size Id Type
/dev/sdc1        2048 2099199 2097152   1G 83 Linux

# 保存分区表
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

创建扩展分区和逻辑分区


请注意,创建扩展分区时,你应该使用剩下的所有空间,以便之后在扩展分区下创建逻辑分区。

创建扩展分区后,可以按照之前的步骤创建逻辑分区。在这里,我创建了位于 /dev/sdc5 的 1GB 逻辑分区。你可以查看分区表值来确认这点。

$ sudo fdisk /dev/sdc
Welcome to fdisk (util-linux 2.30.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): n
Partition type
   p   primary (3 primary, 0 extended, 1 free)
   e   extended (container for logical partitions)

# 创建扩展分区
Select (default e): Enter
Using default response e.
Selected partition 4
First sector (6293504-20971519, default 6293504): Enter
Last sector, +sectors or +size{K,M,G,T,P} (6293504-20971519, default 20971519): Enter
Created a new partition 4 of type 'Extended' and of size 7 GiB.
Command (m for help): p
Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8cc8f9e5
Device     Boot   Start      End  Sectors Size Id Type
/dev/sdc1          2048  2099199  2097152   1G 83 Linux
/dev/sdc2       2099200  4196351  2097152   1G 83 Linux
/dev/sdc3       4196352  6293503  2097152   1G 83 Linux
/dev/sdc4       6293504 20971519 14678016   7G  5 Extended

# 创建逻辑分区
Command (m for help): n
All primary partitions are in use.
Adding logical partition 5
First sector (6295552-20971519, default 6295552): Enter
Last sector, +sectors or +size{K,M,G,T,P} (6295552-20971519, default 20971519): +1G
Created a new partition 5 of type 'Linux' and of size 1 GiB.
Command (m for help): p
Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8cc8f9e5
Device     Boot   Start      End  Sectors Size Id Type
/dev/sdc1          2048  2099199  2097152   1G 83 Linux
/dev/sdc2       2099200  4196351  2097152   1G 83 Linux
/dev/sdc3       4196352  6293503  2097152   1G 83 Linux
/dev/sdc4       6293504 20971519 14678016   7G  5 Extended
/dev/sdc5       6295552  8392703  2097152   1G 83 Linux
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

查看未分配空间


上文中,我们总共创建了四个分区(三个主分区和一个扩展分区)。在创建逻辑分区之前,扩展分区的容量将会以未分配空间显示。

使用以下命令来显示磁盘上的未分配空间,下面的示例中显示的是 7GB:

$ sudo fdisk /dev/sdc
Welcome to fdisk (util-linux 2.30.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): F
Unpartitioned space /dev/sdc: 7 GiB, 7515144192 bytes, 14678016 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
  Start      End  Sectors Size
6293504 20971519 14678016   7G
Command (m for help): q

删除分区


如果我们不再使用某个分区,请按照下面的步骤删除它。

请确保你输入了正确的分区号。在这里,我准备删除 /dev/sdc2 分区:

$ sudo fdisk /dev/sdc
Welcome to fdisk (util-linux 2.30.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): d
Partition number (1-5, default 5): 2
Partition 2 has been deleted.
Command (m for help): p
Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8cc8f9e5
Device     Boot   Start      End  Sectors Size Id Type
/dev/sdc1          2048  2099199  2097152   1G 83 Linux
/dev/sdc3       4196352  6293503  2097152   1G 83 Linux
/dev/sdc4       6293504 20971519 14678016   7G  5 Extended
/dev/sdc5       6295552  8392703  2097152   1G 83 Linux
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

分区需要格式化后才能使用


在计算时,文件系统控制了数据的储存方式,并通过 索引节点 Inode Tables 来检索数据。如果没有文件系统,操作系统是无法找到信息储存的位置的。简单来说,磁盘分区完成后必须格式化分区才可以使用,否则磁盘将无法存储数据。

在此,我准备在 /dev/sdc1 上创建分区。有三种方式创建文件系统:

$ sudo mkfs.ext4 /dev/sdc1
或
$ sudo mkfs -t ext4 /dev/sdc1
或
$ sudo mke2fs /dev/sdc1
mke2fs 1.43.5 (04-Aug-2017)
Creating filesystem with 262144 4k blocks and 65536 inodes
Filesystem UUID: c0a99b51-2b61-4f6a-b960-eb60915faab0
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

当你在分区上建立文件系统时,以下重要信息会同时被创建:

  • Filesystem UUID: UUID 代表了通用且独一无二的识别符,UUID 在 Linux 中通常用来识别设备。它 128 位长的数字代表了 32 个十六进制数。
  • Superblock: 超级块储存了文件系统的元数据。如果某个文件系统的超级块被破坏,我们就无法挂载它了(也就是说无法访问其中的文件了)。
  • Inode: Inode 是类 Unix 系统中文件系统的数据结构,它储存了所有除名称以外的文件信息和数据。
  • Journal: 日志式文件系统包含了用来修复电脑意外关机产生下错误信息的日志。

挂载分区


在创建完分区和文件系统之后,我们需要挂载它们以便使用。我们需要创建一个挂载点来挂载分区,使用 mkdir 来创建一个挂载点。

$ sudo mkdir -p /mnt/2g-new

进行临时挂载,请使用下面的命令。在计算机重启之后,你会丢失这个挂载点。

$ sudo mount /dev/sdc1 /mnt/2g-new

如果你希望永久挂载某个分区,请将分区详情加入 fstab 文件。我们既可以输入设备名称,也可以输入 UUID。

使用设备名称来进行永久挂载:

# vi /etc/fstab
/dev/sdc1 /mnt/2g-new ext4 defaults 0 0

使用 UUID 来进行永久挂载(请使用 blkid 来获取 UUID):

$ sudo blkid
/dev/sdc1: UUID="d17e3c31-e2c9-4f11-809c-94a549bc43b7" TYPE="ext2" PARTUUID="8cc8f9e5-01"
/dev/sda1: UUID="d92fa769-e00f-4fd7-b6ed-ecf7224af7fa" TYPE="ext4" PARTUUID="eab59449-01"
/dev/sdc3: UUID="ca307aa4-0866-49b1-8184-004025789e63" TYPE="ext4" PARTUUID="8cc8f9e5-03"
/dev/sdc5: PARTUUID="8cc8f9e5-05"
# vi /etc/fstab
UUID=d17e3c31-e2c9-4f11-809c-94a549bc43b7 /mnt/2g-new ext4 defaults 0 0

使用 df 命令亦可:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            969M     0  969M   0% /dev
tmpfs           200M  7.0M  193M   4% /run
/dev/sda1        20G   16G  3.0G  85% /
tmpfs           997M     0  997M   0% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           997M     0  997M   0% /sys/fs/cgroup
tmpfs           200M   28K  200M   1% /run/user/121
tmpfs           200M   25M  176M  13% /run/user/1000
/dev/sdc1      1008M  1.3M  956M   1% /mnt/2g-new

最后简单总结一下,新磁盘的使用步骤:磁盘分区 > 格式化分区 > 挂在磁盘分区到系统中。


查看内核和硬件信息
######################################

  1. 查看 Linux 内核版本:
    uname -a
  2. 查看 CPU 信息:
    more /proc/cpuinfo

查看 CPU 型号

grep “model name” /proc/cpuinfo

查看 CPU 位数(32 or 64):

echo $HOSTTYPE

  1. 查看内存信息:
    more /proc/meminfo

查看内存大小:

grep MemTotal /proc/meminfo

  1. 查看硬盘和分区:
    df -h

查看目录的大小

du /etc/ -sh

  1. 查看主机名:
    hostname
  2. 查看默认语言:
    echo $LANG $LANGUAGE

命令ip:

ip 网络配置命令
###############################

Linux 的 ip 命令和 ifconfig 类似,但前者功能更强大,并旨在取代后者。使用 ip 命令,只需一个命令,你就能很轻松地执行一些网络管理任务。ifconfig 是 net-tools 中已被废弃使用的一个命令,许多年前就已经没有维护了。iproute2 套件里提供了许多增强功能的命令,ip 命令即是其中之一。

命令格式:


ip [ OPTIONS ] OBJECT { COMMAND | help }

命令功能:


ip 命令是 Linux 下较新的功能强大的网络配置工具,用来显示或配置 Linux 主机的路由、网络设备、策略路由和隧道。

命令参数:


OPTIONS: 是一些修改 ip 行为或者改变其输出的选项,所有的选项都是以 - 字符开头,分为长、短两种形式:

-V -Version         打印ip的版本并退出

-s -stats -statistics    输出更为详尽的信息(如果这个选项出现两次或者多次,输出的信息将更为详尽)

-f -family          这个选项后面接协议种类,包括:inet、inet6 或者 link,强调使用的协议种类。
              如果没有足够的信息告诉ip使用的协议种类,ip就会使用默认值inet或者any。link比较特殊,它表示不涉及任何网络协议。

-4 - 是 -family inet 的简写。

-6 - 是 -family inet6 的简写。

-0 - 是 -family link 的简写。

-o -oneline         对每行记录都使用单行输出,回行用字符代替。如果你需要使用 wc、grep 等工具处理 ip 的输出,会用到这个选项。

-r -resolve         查询域名解析系统,用获得的主机名代替主机 IP 地址。

OBJECT: 是你要管理或者获取信息的对象。ip 认识的对象包括:

link       网络设备

address     一个设备的协议(IP或者IPV6)地址

neighbour    ARP或者NDISC缓冲区条目

route      路由表条目

rule      路由策略数据库中的规则

maddress    多播地址

mroute     多播路由缓冲区条目

tunnel IP   上的通道

另外,所有的对象名都可以简写,例如:address可以简写为addr,甚至是a。

COMMAND[ARGUMENTS] 设置针对指定对象执行的操作

一般情况下,ip 支持对象的增加(add)、删除(delete)和展示(show或者list)。

ARGUMENTS 是命令的一些参数,它们倚赖于对象和命令。

ip 支持两种类型的参数:flag 和 parameter。flag 由一个关键词组成;parameter 由一个关键词加一个数值组成。

使用实例:


  1. 显示网络设备的运行状态
    [root@localhost xinetd.d]# ip link list
    1: lo: mtu 65536 qdisc noqueue state DOWN mode DEFAULT
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:9f:bf:8b brd ff:ff:ff:ff:ff:ff
  2. 输出更为详细的网络信息
    [root@localhost xinetd.d]# ip -s link list
    1: lo: mtu 65536 qdisc noqueue state DOWN mode DEFAULT
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes packets errors dropped overrun mcast
    1733956 21926 0 0 0 0
    TX: bytes packets errors dropped carrier collsns
    1733956 21926 0 0 0 0
    2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:9f:bf:8b brd ff:ff:ff:ff:ff:ff
    RX: bytes packets errors dropped overrun mcast
    790788625 551713 0 0 0 0
    TX: bytes packets errors dropped carrier collsns
    19844418 287915 0 0 0 0
  3. 显示核心路由表
    [root@localhost xinetd.d]# ifconfig
    eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 192.168.0.15 netmask 255.255.255.0 broadcast 192.168.0.255
    inet6 fe8020c:29ff:fe9f:bf8b prefixlen 64 scopeid 0x20
    ether 00:0c:29:9f:bf:8b txqueuelen 1000 (Ethernet)
    RX packets 556578 bytes 791923646 (755.2 MiB)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 294987 bytes 20580554 (19.6 MiB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
    [root@localhost xinetd.d]# ip route list
    default via 192.168.0.1 dev eno16777736 proto static metric 100
    192.168.0.0/24 dev eno16777736 proto kernel scope link src 192.168.0.15 metric 100
  4. 显示邻居表
    [root@localhost xinetd.d]# ip neigh list
    192.168.0.1 dev eno16777736 lladdr 70:62:b8:bd:8c:d6 REACHABLE
  5. 查看网卡信息
    [root@localhost xinetd.d]# ip -s link list eno16777736      //等价于ifconfig eno16777736,(单网卡时等价于ifconfig)
    2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:9f:bf:8b brd ff:ff:ff:ff:ff:ff
    RX: bytes packets errors dropped overrun mcast
    808213913 570857 0 0 0 0
    TX: bytes packets errors dropped carrier collsns
    21503126 305593 0 0 0 0
    [root@localhost xinetd.d]# ifconfig eno16777736      
    eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 192.168.0.15 netmask 255.255.255.0 broadcast 192.168.0.255
    inet6 fe8020c:29ff:fe9f:bf8b prefixlen 64 scopeid 0x20
    ether 00:0c:29:9f:bf:8b txqueuelen 1000 (Ethernet)
    RX packets 572918 bytes 811238488 (773.6 MiB)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 306676 bytes 21578727 (20.5 MiB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

#. 自定义 IP 地址

[root@localhost xinetd.d]# ip addr add 192.1.1.1/24 dev ens33      //自定义ip地址,ens33 为网卡硬件名
[root@localhost xinetd.d]# ip addr del 192.1.1.1/24 dev ens33      //删除自定义

#. 改变设备参数信息

[root@localhost xinetd.d]# ip link set dev eno16777736 txqueuelen 1200      //改变最大传输队列长度
[root@localhost xinetd.d]# ip link set dev eno16777736 MTU 1600          //MTU大写不行
Error: either "dev" is duplicate, or "MTU" is a garbage.
[root@localhost xinetd.d]# ip link set dev eno16777736 mtu 1600          //改变网络设备最大传输单元的值
[root@localhost xinetd.d]# ifconfig eno16777736
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1600
        ether 00:0c:29:9f:bf:8b  txqueuelen 1200  (Ethernet)
        RX packets 587649  bytes 832219280 (793.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 315027  bytes 22173716 (21.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

#. 设置网络设备为不可用状态

[root@localhost xinetd.d]# ip link set eno16777736 down          //关闭网卡
[root@localhost xinetd.d]# ip link set eno16777736 up                  //开启网卡
[root@localhost xinetd.d]# ifup eno16777736                 //激活连接
成功激活的连接(D-Bus 激活路径:/org/freedesktop/NetworkManager/ActiveConnection/13)
[root@localhost xinetd.d]# ifdown eno16777736
Device 'eno16777736' successfully disconnected.               //关闭连接

#. 显示协议地址(网卡信息)

[root@localhost xinetd.d]# ip addr ls eno16777736
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1600 qdisc pfifo_fast state UP qlen 1200
    link/ether 00:0c:29:9f:bf:8b brd ff:ff:ff:ff:ff:ff
[root@localhost xinetd.d]# ip link list
1: lo: <LOOPBACK> mtu 65536 qdisc noqueue state DOWN mode DEFAULT
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1600 qdisc pfifo_fast state UP mode DEFAULT qlen 1200
    link/ether 00:0c:29:9f:bf:8b brd ff:ff:ff:ff:ff:ff

#. 类似于 ifconfig 命令的输出

[root@localhost xinetd.d]# ip addr