Linux常用命令
前言
本文是视频教程韩顺平 一周学会Linux部分章节的归纳总结,内容补充和错误纠正。
概述
Linux命令是一组用于在Linux操作系统上执行特定任务的命令。这些命令可以在终端窗口中使用,也可以通过脚本自动化执行。Linux命令可以用于管理文件和目录、安装和卸载软件、配置网络、查看系统状态等多种任务。在Linux中,命令通常由一个或多个单词组成,可以带有选项和参数,用于指定命令的行为和操作对象。Linux命令是Linux操作系统中的核心组件之一,掌握Linux命令可以帮助用户更好地管理和使用Linux系统。
下面整理了一些Linux系统中常用的命令,让我们一起看看吧
帮助命令
基本介绍
man [命令|配置文件]
:获取该命令或配置文件的帮助信息,例如查看ls命令的帮助信息可以输入man ls
help [命令]
:获取Shell内置命令的帮助信息,例如help cd
查看cd
命令信息--help
:一般所有的CLI程序都是命令和选项组成的,一般情况都有--help
选项(有时候是-h
),可以查看该命令及其选项将要说明
关机和重启
基本介绍
shutdown -h now
:立刻关机shutdown -h 数字n
:n分钟后关机shutdown -r now
:立刻重启shutdown -r 数字n
:n分钟后重启halt
:关机reboot
:重启sync
:将内存数据同步到磁盘
使用细节
不管关机还是重启,首先都应该运行
sync
命令,确保内存数据写入磁盘目前的
shutdown
|reboot
|halt
,命令都已经在关机前进行了sync
,但是以防万一,在生产环境建议至少手动执行一次sync
。
用户登录和注销
基本介绍
su 用户名
:切换用户,不填默认为切换root用户,等同于su root
logout
:注销用户
在一般情况下,我们登录时应该尽量不使用root(系统管理员)用户登录,因为其拥有最大权限,可能导致误操作。一般使用普通用户登录,需要时再使用su root
切root用户
使用细节
logout
注销命令在图形运行级别无效(一般会提示bash: logout: not login shell: use 'exit'
),在运行级别3(无界面终端)下有效- 运行级别的概念,请看运行级别 章节
- 在Ubuntu中,第一次登录root用户时,可以使用
sudo su root
,输入用户密码切换到root用户,然后使用passwd
修改密码
用户管理
Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都应该向系统管理员申请一个用户,然后使用该用户登录系统。下面我们会介绍一些系统管理员(root)用户用于管理用户的命令,这意味着这些命令有的必须拥有root用户权限才能执行。(如何切换root用户,请看上一章节。
基本介绍
单用户
useradd 新用户名
:创建用户,用户目录会自动创建在/home/新用户名
useradd -d 指定目录 新用户名
:创建用户,用户目录会创建在/home/指定目录
passwd 用户名
:修改指定用户密码,如果不填用户名,会给当前用户设置密码userdel 用户名
:删除指定用户,但是保留其家目录userdel -r 用户名
:删除指定用户及其用户目录whoami
:显示当前用户名who im i
:显示当前终端的用户名、终端设备和登录时间等详细信息;
用户组
groupadd 新用户组
:创建用户组groupdel 用户组
:删除用户组useradd -g 用户组 新用户名
:创建一个用户并指定用户组usermod -g 用户组 用户名
:修改用户的用户组
细节说明
passwd
修改密码命令,root用户在修改其他用户密码,如果忘记填写要修改的用户名,会修复当前root用户密码,这在生产环境中会导致很严重的后果- 一般情况下,我们删除用户不会使用
userdel -r
,因为往往用户目录下仍有重要的数据,非必要应该保留该用户目录 - root用户用
useradd
创建完用户后,系统会自动切换到新用户的目录;可以通过su root
切换回root用户;root用户也可以使用exit
或者logout
切换回原用户 who am i
这条命令,本人实测必须在图形运行级别是无效的,假如你刚好和我一样使用的Ubuntu图形界面系统,可以使用ctrl
+alt
+f5
进入运行级别3无界面终端进行测试。- 用户组概念说明:
- 在Linux中,用户组是一组具有相同权限和访问权限的用户的集合。每个用户都必须属于至少一个用户组。
- 用户组可以用于管理文件和目录的访问权限,以及限制用户对系统资源的访问。
- 在Linux中,每个用户都有一个主组和多个附加组。用户的主组是在创建用户时指定的,而附加组是可以随时添加或删除的
- 假如我们在创建用户时没有指定组,Linux会自动创建一个与用户名同名的组,然后将该用户指定到该同名组下
扩展
用户和用户组相关文件:
/etc/passwd
文件:- 解释:用户(user)的配置文件,记录用户的各种信息
- 内容:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录使用的Shell
- 示例:
gallifrey:x:1000:1000:gallifrey display:/home/gallifrey:/bin/bash
/etc/shadow
文件:- 解释:口令的配置文件
- 内容:
登录名:加密口令:最后修改时间:最小时间间隔:最大时间间隔:告警时间:不活动时间:失效时间:标志
- 示例:
mail:*:19411:0:99999:7:::
/etc/group
文件:- 解释:组(group)的配置文件,
- 内容:
组名:口令:组标识号:组内用户列表
- 示例:
sambashare:x:136:gallifrey
运行级别
基本介绍
运行级别的说明:
运行级别 | 使用频率 | 说明 |
---|---|---|
0 | 【不常用】 | 关机,系统停机状态,系统已关闭,没有任何服务或进程运行 |
1 | 【不常用】可用于找回丢失密码 | 单用户模式,只有最基本的系统服务和进程运行,没有网络服务 |
2 | 【不常用】因为无网络服务 | 多用户模式,无网络服务 |
3 | 【常用】无图形界面节省资源,且多用户有网络服务,基本服务器都是该运行级别 | 多用户模式,有网络服务 |
4 | 【不常用】 | 保留级别,系统未使用 |
5 | 【常用】个人使用的Linux系统,基本都会使用图形界面 | 图形用户界面,多用户模式,有网络服务 |
6 | 【不常用】 | 系统重启模式,用于重新启动系统。 |
命令:
init[0-6]
:切换运行级别0-6,例如init 3
就是切换到运行级别3who -r
或runlevel
:可以查看当前的运行级别systemctl get-default
:可以查看系统默认的运行级别,其中multi-user.target
就是运行级别3,graphical.target
就是运行级别5systemctl set-default [multi-user.target|graphical.target]
:设置运行级别3或5
细节说明
- 实际上CentOs7及之后的版本,采用了systemd作为系统初始化和管理的工具,对运行级别进行了简化。
- systemd为了简化运行级别的管理,将所有的运行级别都映射到了不同的target中。
multi-user.target
代表的是文本模式下的多用户运行级别(运行级别3),而graphical.target
代表的是图形化界面下的多用户运行级别(运行级别5)。 - Ubuntu 15.04及更高版本已经使用了systemd来管理系统服务和运行级别。
- 在
/lib/systemd/system
目录下可以看到可以指定运行级别的所有的target
文件目录
基本介绍
pwd
:显示当前用户所在目录路径cd 指定目录
:切换到指定目录cd ~
:回到根目录,普通用户所在的用户目录,一般是/home/用户名
,root用户则是/root
cd ..
:返回上一级目录
ls
:列出当前目录的内容ls 指定路径
:列出指定路径目录的内容ls -a
:列出当前目录的所有内容,包括以.
开头的隐藏文件ls -l
:列出当前目录的内容,单列输出详细内容ls -h
:列出当前目录的内容,显示更符合人类习惯(文件大小显示从字节显示变为自适应单位)
mkdir 指定一级目录
:创建一个一级目录,如mkdir dog
在创建一个名为dog
的目录mkdir 指定路径指定目录
:在指定路径创建一个目录,如mkdir ./dog
在当前目录创建dog
目录,mkdir /home/用户目录/dog
在用户目录下创建dog
目录mkdir -p 多级目录
:创建多级目录,如mkdir ./animal/dog
在当前目录创建animal
目录,再在animaml
目录下创建dog
目录
rm 文件
:删除文件rmdir
:删除空目录,注意:只能删除空目录,命令中间没有空格rm -rf 目录
:删除整个目录,-f
是强制删除不提示,-r
是递归删除,就是强制递归删除所有文件
touch 文件名
: 创建指定文件名的空文件,然后touch /home/用户目录/cat
就是在用户目录创建名为cat
空文件cp 原文件 目标路径
:将原文件拷贝到目标路径下,例如cp duck animal/
就是将duck
文件拷贝到animal
目录下cp -r 原目录 目标路径
:将原目录递归拷贝到目标路径下,例如cp -r animal zoo/
就是将animal
目录及其所有内容拷贝到zoo
目录下\cp -r 原目录 目标路径
:将原目录递归拷贝到目标路径下,覆盖不提示
mv
:移动文件及重命名mv 旧文件名 新文件名
:在两个文件在同一个目录下执行mv
,其实就是重命名文件,例如mv anmail/dog animal/cat
就是把animal
目录下dog
文件重命名为cat
mv 旧文件路径 新文件路径
:当两个文件不在同一个路径下执行mv
,可以移动文件(也可以重命名)例如mv animal/cat ctiy/bat
将animal
目录下的cat
移动到city
目录下并重命名为bat
cat 文件名
:查看文件内容cat -n 文件名
:查看文件内容,带上行号cat 文件名 | more
:一般为了浏览方便,会加上| more
使用more
文本过滤器,|
是管道符号,more
的说明请看下面
more
:基于Vi编辑器的文本过滤器命令,可以以全屏的方式按页显示文本内容。- 除了常常和
cat
联用,也能直接more 文件名
来查看文件 - 其内置了若干快捷键用于浏览操作,详情请看下表:
- 除了常常和
操作 | 说明 |
---|---|
空格 Space |
下翻一页 |
回车 Enter |
下翻一行 |
q |
退出 |
Ctrl +F |
向下滚动一屏 |
Ctrl +B |
向上滚动一屏 |
= |
输出当前行的行号 |
:f |
输出文件名和当前行的行号 |
less
:文本查阅工具,功能与more
类似,但是更加强大,支持各种显示终端,查找操作,而且是懒加载,大文件打开更快,效率更高。- 使用方法
less 文件名
,查看文件 - 其内置了若干快捷键用于浏览操作,详情请看下表:
- 使用方法
操作 | 说明 |
---|---|
空格 Space |
下翻一页 |
下箭头pagedown |
下翻一页 |
上箭头pageup |
上翻一页 |
/字符串 |
搜索字符串 ,n 上一个,N 下一个 |
?字符串 |
搜索字符串 ,n 上一个,N 下一个 |
q |
退出 |
echo
:输出命令echo $PATH
:输出环境变量echo hello world!
:输出hello wrold!
到控制台echo hello world!>>learn.txt
:追加hello world
文本到learn.txt
文件中
head -n 数字x 文件名
:查看指定文件头部x行数据,如果直接head 文件名
,会默认显示前面10行数据tail -n 数字x 文件名
:查看指定文件尾部x行数据,如果直接tail 文件名
,会默认显示最后10行数据tail -f 文件名
:实时监控文件尾部,如果有追加就会显示
>
:输出重定向(覆盖写),示例如下ls -l > nowdir.log
:将该目录下内容覆盖写入nowdir.log
文件cat pig.txt > dog.txt
:将pig.txt
文件内容覆盖写入dog.txt
文件- 如果重定向的文件不存在会自动创建再写入
>>
:输出重定向(追加写),示例如下cal >> today.log
:将当前日历信息追加写入today.log
文件,注意:cal
是CentOs自带输出日历信息的命令,其他linux版本可能没有cat pig.txt >> dog.txt
:将pig.txt
文件内容追加写入dog.txt
文件- 如果重定向的文件不存在会自动创建再写入
ln
:软连接,相对于Windows中的快捷方式ln -s /root /home/myroot
:在home
目录下创建myroot
目录,进入该目录会进入root
目录- 删除软链接使用
rm
命令删除软链接目录
就也可以了
history [数字n]
:查看最近执行过的n条命令(附带编号),不添加数字时,默认显示最近执行过的10条命令。!数字n
:执行编号为数字n
的命令,比如history 1
查出来的最近执行过的1条命令记录是383 ls -a
,此时输入!383
就会执行ls -a
时间日期
基本介绍
date
:显示当前时间date "+指定时间格式"
:按指定时间格式显示日期,如date "+%Y-%m-%d %H:%M:%S"
,会按照年-月-日 时:分:秒
格式输出当前时间date -s "%Y-%m-%d %H:%M:%S"
:设置系统当前时间,如date "2099-2-25 12:21:21"
cal
:显示当前月月历cal 年份
:显示指定年份所有月历
细节说明
date "+指定时间格式"
,时间格式并不是一定要完整的,你可以指定任意格式的时间显示,如date "+%Y %m"
只显示年份和月份,date "+%D---%D"
显示当前天数中间两次用---
链接cal
是CentOs自带输出日历信息的命令,其他linux版本可能没有,像Ubuntu默认没有cal
命令
搜索查找
基本介绍
find [搜索范围] [选项] 查询内容
:搜索命令,可以按照文件名,用户,文件大小等条件搜索find [搜索范围] -n 文件名
:按照文件名搜索文件,如find /home dog.txt
就是在home
目录下搜索dog.txt
文件find [搜索范围] -user 用户名
:按照用户名搜索文件,如find -user pig
就是搜索所有用户为pig
的文件find [搜索范围] -size 数字n
:搜索指定文件大小为n
的文件,其中+数字n
表示大于n
,-数字n
表示小于n
,单位有k
,M
,G
。如find / -size +1G
就是搜索根目录下大于1G
的文件
locate 文件名
:快速定位文件路径updatedb
:更新locate数据库,root用户才有权限更新which 命令
:用于查找命令的二进制文件位置,如which ls
就是查找ls
命令的程序位置|
:管道符号,用于将前一个命令的结果传输给后面的命令处理,如上文中的cat 文件名 | more
grep [选项] 查询内容 源文件
:过滤查找要压缩的文件[grep -n 查询内容 源文件
:过滤查找,显示行号grep -i 查询内容 源文件
:过滤查找,忽略大小写grep
常与|
管道符号一起使用,查询文本内容,如cat bird.txt | gerp -i "hello"
:查看bird.txt
文本并查询hello
忽略大小写
细节说明
find
命令是递归搜索文件目录locate
命令与find
不同,它不会递归搜索文件目录,locate
命令利用建立好的locate数据库去搜索文件路径。locate数据库会保存系统所有的文件名称及其路径。因此第一次运行locate
前得先执行updatedb
命令locate
因为查询数据库,所以比直接遍历文件系统快很多,但是为了保证数据准确性,root用户必须定期更新locate数据库- 乌班图系统是默认没有
locate
命令的,可以使用sudo apt install mlocate
来安装
压缩解压
基本介绍
这一部分韩老师讲得不太好,所以这里补充一下菜鸟教程的内容,实际上【压缩】和【打包】是两个概念
【打包】是将多个文件和目录组合成一个单独的文件,以便于传输、备份或存档
【压缩】是指通过使用特定的算法和技术,将文件或数据转换为较小的尺寸,以节省存储空间或减少数据传输所需的带宽
生产压缩包其实包含了两个过程,将多个文件【打包】成一个【包】,然后再把【包】用压缩程序压缩成【压缩包】
tar命令
tar
是最常用的打包命令,使用 tar
程序打出来的包我们常称为 tar 包,tar 包文件的命令通常都是以 .tar
结尾的。生成 tar 包后,就可以用其它的程序来进行压缩了。常见的压缩程序有以下几种:
- gzip 是 GNU 组织开发的一个压缩程序,
.gz
结尾的文件就是 gzip 压缩的结果。与 gzip 相对的解压程序是 gunzip。tar 中使用-z
这个参数来调用gzip - bzip2 是一个压缩能力更强的压缩程序,
.bz2
结尾的文件就是 bzip2 压缩的结果。与 bzip2 相对的解压程序是 bunzip2。tar 中使用-j
这个参数来调用 bzip2。 - compress 也是一个压缩程序,但是比较冷门。与 compress 相对的解压程序是 uncompress。
.Z
结尾的文件就是 bzip2 压缩的结果。tar 中使用-Z
这个参数来调用 compress。
选项
tar
常见选项如下
选项 | 功能 |
---|---|
-c |
产生.tar 打包文件 |
-x |
解包.tar 文件 |
-v |
显示详细信息 |
-t |
列出包中所有内容 |
-f |
这个选项是必须的,指定操作涉及的文件名 |
-z |
调用 giz,文件后缀是.gz |
-j |
调用 bzip2,文件后缀是.bz2 |
-Z |
调用 compress,文件后缀是.Z |
示例
其实选项顺序是没有固定写法的,但是如果你和我一样有选择困难症,可能参考将压缩程序的选项放在最前面的写法:
tar -zcvf zoo.tar.gz dog bat pig
:打包dog
,bat
,pig
文件并用gzip压缩,生产压缩包zoo.tar
,显示详细信息tar -zxvf zoo.tar.gz
:解压zoo.tar.gz
压缩包并解包,显示详细信息tar -cxf zoo.tar dog bat pig
:打包dog
,bat
,pig
文件,生成tar包zoo.tar
tar -xvf zoo.tar
:解包文件zoo.tar
举一反三就有tar -jcvf
,tar -jxvf
,tar -Zcvf
和tar -Zxvf
等等
更多
在Windows中,我们更多会使用.rar
和.zip
为后缀的压缩包,在Linux系统要生成或者解压这些压缩包,我们可以使用zip
和unzip
,rar
和unrar
命令。但是zip和rar程序在不同Linux系统中不一定自带的,可能需要我们自行安装
另外zip
和unzip
,rar
和unrar
直接执行是包括【打包】和【压缩】或者【解包】和【解压】两个动作的,一般用法如下:
rar a jpg.rar *.jpg
:rar格式的压缩,需要先下载 rar for linux 压缩打包目录里所有jpg文件zip jpg.zip *.jpg
:zip格式的压缩,需要先下载 zip for linux 压缩打包目录里所有jpg文件unrar e a.rar
:解压 rarunzip jpg.zip
:解压 zip
更多使用方法,请自行man
查阅帮助文档或--help
查看选项简要说明