目录
前言:
Linux是一款很出色的操作系统,受到很多人追随,Linux的版本种类又很多,其中不乏在界面上非常出众的openSUSE,Ubuntu等,他们的界面做的非常漂亮,但对于用Linux开发的人员来讲,却有必要掌握命令的使用,对于运维的人员来讲,这个就不用多说了,是重中之重。那么有Linux大牛说不懂命令的使用就等于不懂Linux,这句话是没有错的,因为,命令的功能远比图形界面强大,那么接下来我就按照类型给大家整理一下我们Linux平台下常用的命令以及常用方式。
我们先来看看终端窗口的样子:

图1:普通用户终端,$符号开始。

图2:根用户root,#符号开始,具有超级到无穷大的权限。
在接下来我们的命令讲解大部分以普通用户为背景,如果命令需要root用户权限会高亮提示,用户命令的格式一般是(命令、选项、参数)组成,而且命令大部分都方便记忆,因为基本上都是英文的缩写,那么我们知道了这些信息,接下来就开始讲解。
写在最前面的终端命令的格式以及操作规则:
用户命令的格式一般是(命令、选项、参数)组成。
!! -重复前一个命令(用上键也可以)。
!字符 -重复前一个以"字符"开头的命令。
!num -按照历史记录的序号执行命令。
!?abc -重复之前包含abc的命令。
! -n -重复n歌命令之前的那个命令。
ctrl+c -终止当前命令。
通过上下键子可以浏览命令记录。
重新调用前一个命令中的参数Esc.(按完Esc键之后按.)。
通过ctrl+r来在历史记录中搜索命令(reverse-i-search),直接输入一个字母可以直接调出该字母开头的历史命令,比以上的命令更方便。
命令后面加上&将这个命令放到后台运行。
命令中通配符的使用规则:
*匹配零个或多个。
?匹配任意一个字符。
0-9\]匹配一个数字范围。 \[abc\]匹配列表里任何字符。 \[\^abc\]匹配列表以外的字符。 接下来正式介绍命令使用。 Are you ready?Let's GO! *** ** * ** *** ##### **用户命令:** 1.\[uname\] 显示系统的基本信息。 -r 内核版本号。 -a(--all) 显示所有信息。 例:uname -r uname -a 2.\[history\] 查看输入过的全部命令。 -c 删除当前用户所有的历史命令。 例:history history -c 3.\[su\] 切换用户,可以从普通用户切换成root用户,也可以将root用户切换成普通用户,如果su命令后面不加参数或者su -则代表切换成root用户。其中加-表示启用一个全新的终端,直接到root的家目录里。通常我们都加一个-。 例:su - Mic 从root切换成普通用户不需要密码,从普通用户切换成root用户需要密码。 4.\[sudo\] 使用管理员权限运行命令。 例:sudo date -s 01/05/2017 需要输入用户密码。 5.\[id\] 显示当前用户信息。 -u 只显示uid。 --c 只显示context。 例:id id -u id --c 6.\[passwd\] 修改当前用户密码,首先输入当前密码,然后输入的是新密码。 -d 删除密码,仅有系统管理员才能使用。 例:passwd *** ** * ** *** ##### **管理后台作业命令** **:** 1.\[jobs\] 查看当前在后台运行的作业。 例:jobs 2.\[sleep\] s 停止参数输入的时间s秒,可使用ctrl+c终止或者使用ctrl+z暂停。 例:sleep 5000 通过ctrl+z暂停,jobs显示stop,如果重新继续运行调用下面的命令bg。 3.\[bg\] num 控制进程继续在后台运行。 例:bg 1 4.\[fg\] num 继续在前台运行。 例:fg 1 注:任何命令后面加上\&都会跳到后台去运行,比方打开火狐程序firefox \&,我们可以通过jobs查看。 *** ** * ** *** ##### **文件目录操作命令:** 1.\[pwd\] 显示当前的工作目录。 例:pwd 2.\[touch\] 创建一个空白文件或者更新已有文件的时间。 例:touch hello.c 如果不存在该文件则创建该文件,存在该文件则只更新该文件的时间。 3.\[ls\] 列出目录内容(list)。 -a 显示所有文件(包括隐藏文件),隐藏文件绝大多是都是配置文件,勿修改这些文件。 -l 显示详细信息。 -R 递归显示子目录结构。 -ld 显示目录和链接信息。 例:ls ls -a ls -l ls -R ls -ld Downloads/ Downloads是路径,如果不加路径则只打印当前目录。 4.\[file\] 查看文件类型。 例:file hello.c file命令后面可以接文件夹名称。 5.\[cd\] 用来切换目录。 例:cd /etc cd命令后可以接相对路径还有绝对路径,如果不输入路径则返回家目录。 6.\[cp\] 复制文件或目录。 -r 可以复制文件夹。 -v 显示复制的详细信息,显示复制的过程。 例:cp file1 dir 将file1复制到file2。 cp -r file1 dir cp -v file1 dir 7.\[mv\] 移动一个文件。相当于剪切,用法和cp差不多。 例:mv test.c c++/test.c 如不指定目录,直接在当前目录相互移动就是重命名。 8.\[rm\] 删除文件或者目录。 -r 可以删除文件和文件夹中的所有东西。 -i 交互式的删除。(有删除提示)。 -f 表示强制删除,没有任何警告。 例:rm file rm -r dir rm -i file rm -f file 9.\[mkdir\] 创建一个目录。 例:mkdir Music Music是个目录。 10.\[rmdir\] 删除一个目录,不能删除非空文件夹。 例:rmdir Music 如果文件夹中有内容,非空,则用rm命令。 *** ** * ** *** ##### **运维高频使用命令:** **一、日期和时间** 1.\[date\] 查看和设置系统的日期和时间。 -u 来查看UTC时间。 -s 设置时间,这个需要切到root用户才能有权限更改。 +%y-%m-%d "-"可以自定义更改,这是更改时间的显示格式。 例:date date -u date -s "10:20:36" 设置为10点20分36秒,需要管理员权限。 date +%y-%m-%d 2.\[clock\] 查看的是操作系统的时间。 例:clock 3.\[cal\] 来打印日历。 例:cal 4.\[uptime\] 查看系统运行了多久,系统的用户,系统的负载。 例:uptime **二、输出** **,** **查看命令。** 1.\[echo\] 显示输入的内容(回显)。 例:echo helloworld 2.\[cat\] 来显示文件的内容,直接显示出所有内容。 例:cat hello.c 3.\[more\] 用于翻页显示内容,但是不能向上翻页。 例:more hello.c 4.\[less\] 相对于more,可以上下来回翻页。 例:less hello.c 5.\[head\] 显示文件的头几行(默认10行)。 -n 来指定显示开头的n行。 例:head -20 hello.c 6.\[tail\] 显示末尾的几行(默认10行)。 -n 来指定显示末尾的n行。 -f 在控制台卡住,追踪显示文件的更新,多用于查看日志新加内容。 例:tail -20 hello.c **三、查看硬件信息** 1.\[lspci\] 用于查看PCI设备(如声卡网卡等)。 -v 查看详细信息。 例:lspci -v 2.\[lsusb\] 查看USB设备,如摄像头等。 -v 显示详细信息。 例:lsusb -v 3.\[lsmod\] 查看当前加载的所有模块(模块即windows中相当于驱动)。 例:lsmod **四、关机重启** 1.\[shutdown\] 关机/重启。 -h now 立即关机=poweroff。 -r now 立即重启=reboot。 -h +n n分钟后关机。 -h xx:xx 定时关机。 **五、归档和压缩** 1.\[zip\] 用以压缩。 例:zip xxx.zip file 把file这个源文件压缩成xxx.zip目标文件。 2.\[unzip\] 解压文件。 例:unzip xxx.zip 3.\[gzip\] 同样是压缩文件。 例:gzip hello.cpp 直接将该文件打成包。同样gunzip解压缩,同zip。 4.\[tar\]:归档命令,把许多文件打包成一个文件。压缩通常使用tar频率最高。 -cvf out.tar liunxfile 把linuxfile这个文件夹中的文件打包归档成一个输出out.tar格式的文件,可以用来备份,但是没有压缩。 -xvf out.tar 把一个归档的tar文件释放到当前文件下。 -cvzf 归档并压缩一个文件。z代表调用zip。 例:tar -cvzf xxx.tar.gz dir 归档并压缩尾部是tar.gz,要这样写。 tar -cvf xxx.tar /etc 将/etc文件夹归档为xxx.tar **六、查找命令** 1.\[locate\] 快速查找。 它需要预先建立数据库,默认每天更新一次。如果新建立了一个文件,然后用locate去查找这个命令,找不到。因为数据库没更新,用\[updatedb\]命令(root权限)更新数据库,然后再查找。 例:locate 2.\[find\]高级查找,支持很多查找条件。 格式:find 查找位置 查找参数。下面例子中"/"代表根分区。 find / -name \*.conf 在/根分区下查找所有.conf结尾的文件。 find / -perm 777 查找硬盘中所有权限是777的文件。 find / -type d 查找目录类型文件,d是目录。 find . -name "a\*" -exec ls -l {}\\; 这里面是将find找到的结果当成参数传递给ls命令,这里面后半部分除了ls -l其他的部分都是固定格式。 *** ** * ** *** ##### **磁盘管理以及文件系统命令** **:** 1.\[fdisk\] 对disk格式化,需要root用户权限。 -l 列出当前磁盘信息。 例:fdisk /dev/sdb 对sdb进行分区。需要管理员权限。 会弹出一个交互式的界面,按照不同指令进行操作,第一步m可查看帮助。如图:  n为创建分区,分区创建完成后并没有写入磁盘,按w将分区表写入磁盘。 2.\[partprobe\] 刷新分区表。 例:partprobe 让内核识别分区表。 3.\[mke2fs\] 用来创建文件系统。磁盘分区不建立文件系统(格式化)不可以使用。 mke2fs -t ext4 /dev/sda3 创建一个文件系统。 -b 指定文件系统块大小。(一个块,默认是4k) -c 建立文件系统时检查坏损块。 -L label 指定卷标。 -j 建立日志文件系统。 4.\[dumpe2fs\] 查看分区文件系统信息,用来进行计算机性能调整来使用。 例:dumpe2fs /dev/sda1 5.\[e2label\] 设置或显示文件系统标签。 例:e2label /dev/sdb1 显示sdb1的系统标签。 e2label /dev/sdb1 LINUX 将sda2的标签设置为LINUX(Linux中建议标签大写)。 6.\[fsck\] 检查并修复损坏的文件系统。 -y 不提示而直接进行修复。 -t 指定文件系统类型。 例:fsck /dev/sda2 7.\[mount\] 将格式化好的磁盘或分区挂载到一个目录上,使用不带任何参数的mount来显示已经挂载好的文件系统,ro,rw 以只读或读写形式挂载,默认是rw。(磁盘分区好后,Linux需要手动挂载,不挂在不能使用)。 -t 指定文件系统的类型。 -o 后接指定挂载项。 例:mount /dev/sda3(要挂载的分区) /mnt(需要挂载的地方) 8.\[umount\] 用来卸载已经挂载的文件。 例:umount /dev/sda3 如果出现device is busy,则表示该文件系统正在被使用,无法卸载,可以使用下面的命令。 9.\[fuser\] 查看是谁在使用该设备。 -m 后面接设备名称。 例:fuser -m /dev/sda1 10.\[lsof\] 列出当前系统打开文件。 例:lsof /mnt 后面是挂载点。 这个内容的命令远没有这么简单,由于在平时使用的时候频率不是很高,所以略显简单,如果有需求的话可以查找这个类型命令的详细文档。 *** ** * ** *** ##### **用户、组操作命令:** 1.\[whoami\] 显示当前用户。 例:whoami 2.\[who\] 显示关于当前在本地系统上的所有用户的信息。 tty1 是登录终端 pts/0 是图形界面 例:who 3.\[useradd\] 创建一个用户名。 上面这条命令或执行以下操作: 1.在/etc/passwd 中添加用户信息。 2.如果使用passwd 命令创建密码,则将密码加密保存在/ect/shadow中。 3.为用户建立一个新的家目录 /home/xxx。 4.将/ect/skel 中的文件复制到用户的家目录中。 5.建立一个与用户名相同的组,默认的用户属于这个同名组。 -d 指定家目录。 -s 修改登录shell。 -u 指定UID。 -g 指定主组。 4.\[usermod\] 用来修改用户信息。 -l 更新用户名。 -u 更新userid 。 -d 用户家目录位置。 -g 用户所属主组。 -L 锁定用户使其不能登录。 -U 解除锁定。 -G 指定附属组。 5.\[userdel\] 删除一个用户。 -r 删除用户和用户的家目录。 例:userdel -r Mic 6.\[groupadd\] 添加一个组。 -n 新组名 旧组名 修改组名。 -g 新id 旧id 修改组ID。 7.\[groupdel\] 可以删除一个组。 8.\[chown\] 修改文件的所属用户。 -R 参数递归修改目录下的所有文件的相关属性。 例:chown mic host.net 9.\[chgrp\] 改变文件的所属组。 -R 参数递归修改目录下的所有文件的相关属性。 例:chgrp mic host.net *** ** * ** *** ##### **权限控制命令:** 1.\[chmod\] 修改权限。 -R 递归修改目录下的所有文件。 例:chmod u+rw fileordir chomd go+r fileordir 说明:u、g、o分别代表用户、组和其他。 a表示ugo。 +、-代表加入或删除对应权限。 r、w、x代表三种权限。 chmod支持数字方式修改 例:chmod 660 file ==\>rw-rw--- r=4 w=2 x=1 rw=6 rwx =7 rx=5 *** ** * ** *** ##### **网络配置命令** **:** 以root用户登录 1.\[ifconfig\](if:interface)用来查看以太网接口信息。 -a 查看所有接口 eth0 查看特定接口,eth0接口名。 例:ifconfig -a 2.\[ifup\] 启用一个接口。 例:ifup eth0 3.\[ifdown\] 禁用一个接口。 例:ifdown eth0 4.\[ping\] 测试网络连通性。 例:ping 21.23.21.65 ping www.google.com 5.\[host\] 测试DNS解析(简单解析)。 例:host www.google.com 6.\[dig\] 测试DNS解析(详细解析)。 例:dig www.google.com 7.\[ip route\] 显示路由表。 例:ip route 等同于ip route show。 8.\[traceroute\] 追踪到达目标地址的网络路径。 例:traceroute www.google.com 出现\*\*\*表示该路由服务器不允许追踪。 9.\[mtr\] 进行网络质量测试(结合traceroute和ping)。 例:mtr www.google.com 检测到目标地址的网络质量。 *** ** * ** *** ##### **软件管理命令** **:** 1.\[rpm\] 安装卸载软件。 -i 安装软件。 -e 卸载软件。 -v 显示详细信息。 -h 限制进度条。 -U 升级形式安装。 -ivh 通过http、ftp协议安装软件。 -qi 显示详细信息。 -ql 列出所有包含文件。 -qlp 未安装的包含文件。 -K 验证文件的完整性。 -V 验证已安装的文件完整性。 例:rpm -U software-new.rpm rpm -ivh [http://www.linux.net/software.rpm](http://www.linuxcast.net/software.rpm "http://www.linux.net/software.rpm") rpm支持通过http、ftp协议安装软件。 rpm -qi linux 显示linux的详细信息。 rpm -ql linux 列出所有linux的包含文件。 rpm -qlp linux 未安装的linux的包含文件。 rpm -K linux 验证linuxqq文件的完整性。 rpm -V linux 验证已安装的文件完整性。 2.\[yum
例:yum install software-name 安装指定软件。
yum remove sofware-name 卸载指定软件。
yum update software-name 升级指定软件。
yum search keyword 搜索。
yum list (all | installed | recent | updates) 列出全部、安装的、最近的、软件更新。
yum info packagename 显示指定软件的信息。
yum whatprovides filename 查询哪个rpm软件包含目标文件。
yum clean all 清除缓存目录下的软件包。
帮助命令:
在使用命令的时候会为某个命令的众多参数而头疼,我们可以寻求帮助,大部分命令在后面可以加-h,但是有的命令不支持,可以尝试在命令后面加--help,会显示该命令的帮助文档。
下面介绍两个文档查询命令。
1.[man] (manual)查看某个命令的使用方式。
例:man ls
2.[info] 查看某个命令的使用方式以网页形式显示(比man更详细)。
例:info ls
最后一弹:重定向和管道
其实在写这篇文章的时候我也在考虑要不要写这个部分,因为我想写一些纯命令的文章,但是考虑到这个地方是有用的,而且和终端以及命令操作是密切相关的,所以还是加上这个部分的说明。
首先说说我们的输入输出流,这个在C语言里面也有设计,标准流有stdout(标准输出流)、stdin(标准输入流)、stderr(标准错误流)。正常终端操作命令的时候是文本操作,自然离不开输入输出流了,我们默认情况下输入一个命令返回的操作结果是显示在终端上(默认输出设备是显示器),但是我们由于需要特殊操作,我们可以将输出文本不显示在屏幕,而输出在你所指定的流中,这也叫作重定向,比方我用ls命令列出文件,正常在终端中输出,而重定向后我们可以写进指定的文件当中,由于有些命令输出文本成千上万行,我们可以用重定向保存为记录或日志,以便查看。
操作:
> 将stdout重定向到文件(覆盖模式) 例:ls -l > outfile
>> 将stdout重定向到文件(追加模式) 例:ls -l >> outfile
2> 将stderr重定向到文件(覆盖模式) 例:ls nothere 2> errout
2>&1 将stderr与stdout结合 例:ls -l 2>&1 alloutfile
< 重定向stdin 例:ls < /etc(基本用处不是很常见)
介绍完重定向之后再来介绍一下管道的概念。操作符"|"将一个命令的stdout作为另一个命令的stdin,例:ls -l | grep hello 将ls -l输出的内容作为参数传递给grep hello,用于完成多命令的一个协作。
结语:
Linux命令的总结就先到这里,其实也是常用命令的简单总结,很多命令的参数讲解上也并非全面。命令行的掌握代表着一个人对Linux的熟悉程度。事实上Linux的命令目前成千成万,再加上不同命令有不同的参数搭配,所以这些命令的用法大得惊人。我们光凭记忆去掌握这些命令是不切实际的,别忘了我们刚才讲的一个命令[man],当我们遇到问题的时候,不妨去问问这个"男人"。