Linux常用命令
前言
本文是视频教程韩顺平 一周学会Linux部分章节的归纳总结,内容补充和错误纠正。
概述
Linux命令是一组用于在Linux操作系统上执行特定任务的命令。这些命令可以在终端窗口中使用,也可以通过脚本自动化执行。Linux命令可以用于管理文件和目录、安装和卸载软件、配置网络、查看系统状态等多种任务。在Linux中,命令通常由一个或多个单词组成,可以带有选项和参数,用于指定命令的行为和操作对象。Linux命令是Linux操作系统中的核心组件之一,掌握Linux命令可以帮助用户更好地管理和使用Linux系统。
下面整理了一些Linux系统中常用的命令,让我们一起看看吧
帮助命令
基本介绍
man [命令|配置文件]:获取该命令或配置文件的帮助信息,例如查看ls命令的帮助信息可以输入man lshelp [命令]:获取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 rootlogout:注销用户
在一般情况下,我们登录时应该尽量不使用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用户则是/rootcd ..:返回上一级目录
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文件重命名为catmv 旧文件路径 新文件路径:当两个文件不在同一个路径下执行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 文件名 | moregrep [选项] 查询内容 源文件:过滤查找要压缩的文件[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.tartar -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查看选项简要说明


