本文主要学习总结,使用 linux CLI 的基本命令,这边不以任何发行版为例,介绍的是绝大多数 linux 发行版上面都会含有的 CLI 软件,需要注意的是,这边是以完整安装为基础的,部分命令可能在最小安装上面无法使用。目前 安装 linux CLI 后可以使用的命令超过上千个,但最常用的命令一般只有 80 个左右,由于篇幅有限,本文会选取 80 个中的几十个最基本必须掌握的命令进行罗列和简介,不会展开详解,详细内容还是需要查看 manual 或者借助搜索引擎。

shell 命令的一般格式为:command [option] [arguments]。具体如下:

  • command 表示命令,command 事实上是一个可执行的软件,实上 linux 中所谓的命令绝大多数是预装的软件,因为地址被写入了全局,因此可以直接通过软件名来调用该软件。
  • option 表示选项,命令行中,选项是包含一个或者多个字母的字符串,一般在选项前有一个“-”用于区分参数,如:-l,-s等,这些都是设计程序时就已经被写在软件中的,用于方便用户选择软件执行的模式,选项这个词是并不是平白无故的,因为只有设计软件时被采用的一些字符才可以被称为选项,因此使用某个命令时,我们重点需要查看有哪些选项可以使用,以及使用后会有什么样的效果。
  • arguments 为参数,很多命令都可以接受参数,参数就是选项后紧跟的一个或多个字符串,这些字符串制定了命令的操作对象,如文件或者目录等。如:ls -al /etc ,这边 /etc 就是一个参数,而 -al 则是一个选项。

因为 linux 中的每个软件都是不同开发者提供的,因此表示一种功能模式的参数却往往不尽相同,如:有的递归是 -r 而有的是 -R 等等。因此你如果需要使用某个软件时,需要以 manual 为准,而不是想当然的认为某个选项一定表示某个功能。

文件管理

文件管理主要包含了,复制,移动,更改路径等等

ls

显示指定工作目录下的内容,常用参数:

  • -a 可以显示全部内容包含隐藏文件。
  • -l 用于列出文件的详细信息。

pwd

打印当前工作目录(print working directory),使用该命令后,你所在工作目录的绝对路径将会被打印出来。

cd

改变当前工作目录(change directory),后面可以用绝对路径或者相对路径。

mkdir

创建新目录,一般为 mkdir + 目录名

mv

将文件从一个位置移到另一个位置,可以用绝对路径或者相对路径,如:mv source /tmp/source 表示将当前目录下的 source 文件移到根目录下的 tmp 文件夹中。值得注意的是,mv 可以用来重命名,linux 中往往是通过 mv 来更改文件名称的。

cp

cp 命令的格式类似于 mv 命令,但相比而言会比 mv 多不少选项/模式,常用参数如: -r 用于递归复制文件夹中的内容。

rm

删除命令,用于删除文件等,一般常用 -rf 用于强制递归删除文件夹等。

touch

用于改变文件的时间戳(timestamp),注意该命令是改变文件时间的,并不是用来创建文件的,之所以我们用它来创建文件仅是因为在改变文件时间戳时,如果该文件不存在 touch 会新建一个空白的文件,所以创建文件是 touch 的一个附加功能。所以我们就不难理解在 touch 一个已经存在的文件时,原文件不会被改动,改动的是该文件的时间。

ln

ln 用来生成链接文件,提到链接,相信用过电脑的朋友对 windows 下的快捷方式都会有影响,在 linux 中我们将 windows 中的快捷方式称为软连接。

linux 下有两种链接:

  • 硬链接:文件 A 是文件 B 的硬链接,则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,A 和 B 对文件系统来说是完全平等的。如果删除了其中一个,对另外一个没有影响。每增加一个文件名,inode 节点上的链接数增加一,每删除一个对应的文件名,inode 节点上的链接数减一,直到为 0,inode 节点和对应的数据块被回收。注:文件和文件名是不同的东西,rm A 删除的只是 A 这个文件名,而 A 对应的数据块(文件)只有在 inode 节点链接数减少为 0 的时候才会被系统回收。我们这边提到的是 inode 节点,而并非路径,注意这点和软链接的区别。
  • 软链接:等同于 windows 的快捷方式,A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是 A 的数据块中存放的只是 B 的路径名(可以根据这个找到B的目录项)。A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。注意:软链接的 A 和 B 是对应的不同 inode 的,而 A 存储的仅是 B 的路径(并不是 inode 的信息),因此我们如果删除 B 文件后,A 会找不到链接方向,而如果我们再创建 B 后,A 又会有了新的目标,而事实上,再次创建的 B 和原来不是同一个 inode,已经和原来的 B 没有任何联系了。

file

直接使用该命令可以查看文件类型的详细信息,linux 中是不强制要求有后缀名的,但通过 file 我们可以看出文件类型。

文件查找

which

查找某指令名称/内置程序的完整路径。如:which updatedb –> /usr/bin/updatedb。

whereis

只能用于查找二进制文件,源文件以及用户手册文件。因此 whereis 搜索出来的内容要比 which 多些。

find

普通的查找命令,用于查找某个名称文件,后面可以跟多个选项,格式为 find+路径+选项+文件名,如 find . -name a.c 即查找当前目录下名称为 a.c 的文件,find 最大的特点就是速度慢,其次 find 查找如果不适用通配符的话默认为精确查找,这点注意和 locate 有很大的不同,因此查找以 ad 开头的文件需要执行:find . -name ad*

locate

find 每次会在目录下进行真正的搜索,一般这样做时间长,效率低。Linux 上更加优异的搜索命令,locate 会直接定位某个文件的位置,原理是 locate 寻找文件是通过 /var/lib/mlocate/ 数据库中的内容查找,不用去硬盘中检索,但往往新的变动对 locate 查找的数据库更新不及时,这是我们需要用 updatedb 命令手动更新(updatedb 需要 root 权限),locate 是默认为 *name* 的查找方式。如果需要精确查找,需要使用如下格式:locate -b '\NAME'

用户

passwd

passwd 用户修改用户密码,后面如果加用户名的话,可以直接修改该用户的登入密码,前提是你必须知道该原始登入密码。

su

su 主要用于改变用户登入身份,即快速切换登入用户,普通用户切换需要输入登录用户的密码,root 可以任意切换别的用户。

who

显示登录的所有用户的信息,whoami 只显示自己的登录信息,而 uname 表示的是打印系统信息和用户名等无关。

w

环境变量

Linux中set,env和export这三个命令的区别

set

命令显示当前shell的变量,包括当前用户的变量;

env

命令显示当前用户的变量;

export

命令显示当前导出成用户变量的shell变量。

每个shell有自己特有的变量(set)显示的变量,这个和用户变量是不同的,当前用户变量和你用什么shell无关,不管你用什么shell都在,比如HOME,SHELL等这些变量,

但shell自己的变量不同shell是不同的,比如BASH_ARGC, BASH等,这些变量只有set才会显示,是bash特有的,export不加参数的时候,显示哪些变量被导出成了用户变量,因为一个shell自己的变量可以通过export “导出”变成一个用户变量。

压缩和解压

zip、unzip

zip 打包压缩文件,zip 是一种比较古老的压缩方式,各个个系统平台上面都基本支持,但压缩率较低。

gzip

当你使用 gzip 迚行压缩时,在预设的状态下原本的档案会被压缩成为 .gz 结尾的文件, 源文件就不再存在了。gzip 要比 zip 压缩效率高的多,但使用 windows 时,gz 文件未必可以被解压。

bzip2

bzip2 则比 gzip 更加先进,可以提供更高的压缩比,用法基本和 gzip 一致。

tar

虽然 gzip 和 bzip2 也能够针对目录来进行压缩, 不过,这两个命令对目录的压缩指的是将目录内的所有档案 “分别” 迚行压缩,而一般我们其实是需要一个进行过打包和压缩过的文件。tar 可以将多个目录或者文件打包成一个大的文件,同时还可以调用 gzip/bzip 对打包文件进行压缩。

dd

该命令的功能是 转换并且复制一个文件。

cpio

终端和文件查看

clear

cat

less

more

vim

diff

grep

系统信息查看:

注意:以下命令如果在ubuntu下可能都需要root权限才可以执行。

CPU

  • lscpu : 查看的是cpu的统计信息.
  • cat /proc/cpuinfo : 可以知道每个cpu信息,如每个CPU的型号,主频等。

内存

  • cat /proc/meminfo : 查看内存详细使用
  • free -m : 概要查看内存情况
  • grep MemTotal /proc/meminfo : 查看内存总量
  • grep MemFree /proc/meminfo : 查看空闲内存量

硬盘

  • lsblk : 查看硬盘和分区分布
  • fdisk -l : 如果要看硬盘和分区的详细信息
  • df -h : 查看各分区使用情况
  • cat /proc/loadavg : 查看系统负载磁盘和分区

网卡

  • lspci | grep -i ‘eth’ : 查看网卡硬件信息
  • ifconfig -a : 查看系统的所有网络接口
  • route -n : 查看路由表

其他硬件信息

  • lspci : 查看pci信息,即主板所有硬件槽信息。
  • dmidecode -t bios : 查看bios信息
  • dmidecode -q : dmidecode以一种可读的方式dump出机器的DMI(Desktop Management Interface)信息。这些信息包括了硬件以及BIOS,既可以得到当前的配置,也可以得到系统支持的最大配置,比如说支持的最大内存数等。
  • dmesg | grep IDE : 查看启动时IDE设备检测状况网络

操作系统

  • uname -a 或 cat /proc/version : 查看内核/操作系统/CPU信息
  • lsb_release -a 或 cat /etc/issue(此命令也适用于所有的Linux发行版): 查看Linux系统版本
  • head -n 1 /etc/issue : 查看操作系统版本
  • lsmod : 列出加载的内核模块
  • hostname : 查看计算机名
  • free -m : 查看内存使用量和交换区使用量
  • uptime : 查看系统运行时间、用户数、负载
  • ps -ef : 查看所有进程
  • top : 实时显示进程状态用户
  • w : 查看活动用户
  • id <用户名> : 查看指定用户信息
  • last : 查看用户登录日志
  • cut -d: -f1 /etc/passwd : 查看系统所有用户
  • cut -d: -f1 /etc/group : 查看系统所有组
  • crontab -l : 查看当前用户的计划任务服务
  • chkconfig –list : 列出所有系统服务
  • chkconfig –list | grep on : 列出所有启动的系统服务程序

date

显示或者修改系统时间和日期,只有超级用户可以用 date 设置时间,一般用户只可以显示时间。

uptime

dmesg

last

free

ps

top

分屏功能

xrandr 命令,用于分屏驱动多个显示器,一般是底层控制的,虽然是显示功能,但分屏并非GUI的独享,图形界面的分屏控制大都是调用 xrandr 这个软件。

管理类

du

df

fsck

sync

mount、unmount

top

网络类

ifconfig

netstat

traceroute

telnet

wget

ping

nslookup

ip

route

ssh

scp


To be continued…

参考链接:
http://www.2cto.com/os/201306/223758.html
http://www.ha97.com/2987.html
http://blog.csdn.net/lhf_tiger/article/details/7102753
http://www.cnblogs.com/ggjucheng/archive/2013/01/14/2859613.html