Linux的那些基础常用命令汇总及简单剖析
导语:
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] 创建一个空白文件或者更新已有文件的时间。
例:touchhello.c 如果不存在该文件则创建该文件,存在该文件则只更新该文件的时间。
3.[ls] 列出目录内容(list)。
-a显示所有文件(包括隐藏文件),隐藏文件绝大多是都是配置文件,勿修改这些文件。
-l 显示详细信息。
-R 递归显示子目录结构。
-ld显示目录和链接信息。
例:ls
ls -a
ls -l
ls -R
ls -ld Downloads/ Downloads是路径,如果不加路径则只打印当前目录。
4.[file] 查看文件类型。
例:filehello.c file命令后面可以接文件夹名称。
5.[cd] 用来切换目录。
例:cd/etc cd命令后可以接相对路径还有绝对路径,如果不输入路径则返回家目录。
6.[cp] 复制文件或目录。
-r可以复制文件夹。
-v显示复制的详细信息,显示复制的过程。
例:cpfile1 dir 将file1复制到file2。
cp -r file1 dir
cp -v file1 dir
7.[mv] 移动一个文件。相当于剪切,用法和cp差不多。
例:mvtest.c c++/test.c 如不指定目录,直接在当前目录相互移动就是重命名。
8.[rm] 删除文件或者目录。
-r 可以删除文件和文件夹中的所有东西。
-i 交互式的删除。(有删除提示)。
-f 表示强制删除,没有任何警告。
例:rm file
rm -r dir
rm -i file
rm -f file
9.[mkdir] 创建一个目录。
例:mkdirMusic 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] 显示输入的内容(回显)。
例:echohelloworld
2.[cat] 来显示文件的内容,直接显示出所有内容。
例:cathello.c
3.[more] 用于翻页显示内容,但是不能向上翻页。
例:morehello.c
4.[less] 相对于more,可以上下来回翻页。
例:lesshello.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] 用以压缩。
例:zipxxx.zip file 把file这个源文件压缩成xxx.zip目标文件。
2.[unzip]解压文件。
例:unzipxxx.zip
3.[gzip]同样是压缩文件。
例:gziphello.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 =7rx=5
网络配置命令:
以root用户登录
1.[ifconfig](if:interface)用来查看以太网接口信息。
-a 查看所有接口
eth0 查看特定接口,eth0接口名。
例:ifconfig -a
2.[ifup] 启用一个接口。
例:ifupeth0
3.[ifdown] 禁用一个接口。
例:ifdowneth0
4.[ping] 测试网络连通性。
例:ping21.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] 追踪到达目标地址的网络路径。
例:traceroutewww.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 rpm支持通过http、ftp协议安装软件。
rpm -qi linux 显示linux的详细信息。
rpm -ql linux 列出所有linux的包含文件。
rpm -qlp linux 未安装的linux的包含文件。
rpm -K linux 验证linuxqq文件的完整性。
rpm -V linux 验证已安装的文件完整性。
2.[yum]
例:yuminstall 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],当我们遇到问题的时候,不妨去问问这个“男人”。
更多精彩分享,请关注微信公众号!