前言

本文是视频教程韩顺平 一周学会Linux部分章节的归纳总结,内容补充和错误纠正。

概述

Linux命令是一组用于在Linux操作系统上执行特定任务的命令。这些命令可以在终端窗口中使用,也可以通过脚本自动化执行。Linux命令可以用于管理文件和目录、安装和卸载软件、配置网络、查看系统状态等多种任务。在Linux中,命令通常由一个或多个单词组成,可以带有选项和参数,用于指定命令的行为和操作对象。Linux命令是Linux操作系统中的核心组件之一,掌握Linux命令可以帮助用户更好地管理和使用Linux系统。

下面整理了一些Linux系统中常用的命令,让我们一起看看吧

帮助命令

基本介绍

  1. man [命令|配置文件]:获取该命令或配置文件的帮助信息,例如查看ls命令的帮助信息可以输入man ls
  2. help [命令] :获取Shell内置命令的帮助信息,例如help cd查看cd命令信息
  3. --help:一般所有的CLI程序都是命令和选项组成的,一般情况都有--help选项(有时候是-h),可以查看该命令及其选项将要说明

关机和重启

基本介绍

  1. shutdown -h now:立刻关机
  2. shutdown -h 数字n:n分钟后关机
  3. shutdown -r now:立刻重启
  4. shutdown -r 数字n:n分钟后重启
  5. halt:关机
  6. reboot:重启
  7. sync:将内存数据同步到磁盘

使用细节

  1. 不管关机还是重启,首先都应该运行sync命令,确保内存数据写入磁盘

  2. 目前的shutdown|reboot|halt,命令都已经在关机前进行了sync,但是以防万一,在生产环境建议至少手动执行一次sync

用户登录和注销

基本介绍

  1. su 用户名:切换用户,不填默认为切换root用户,等同于su root
  2. logout:注销用户

在一般情况下,我们登录时应该尽量不使用root(系统管理员)用户登录,因为其拥有最大权限,可能导致误操作。一般使用普通用户登录,需要时再使用su root切root用户

使用细节

  1. logout注销命令在图形运行级别无效(一般会提示bash: logout: not login shell: use 'exit'),在运行级别3(无界面终端)下有效
  2. 运行级别的概念,请看运行级别 章节
  3. 在Ubuntu中,第一次登录root用户时,可以使用sudo su root,输入用户密码切换到root用户,然后使用passwd修改密码

用户管理

Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都应该向系统管理员申请一个用户,然后使用该用户登录系统。下面我们会介绍一些系统管理员(root)用户用于管理用户的命令,这意味着这些命令有的必须拥有root用户权限才能执行。(如何切换root用户,请看上一章节

基本介绍

单用户

  1. useradd 新用户名:创建用户,用户目录会自动创建在/home/新用户名
  2. useradd -d 指定目录 新用户名:创建用户,用户目录会创建在/home/指定目录
  3. passwd 用户名:修改指定用户密码,如果不填用户名,会给当前用户设置密码
  4. userdel 用户名:删除指定用户,但是保留其家目录
  5. userdel -r 用户名:删除指定用户及其用户目录
  6. whoami:显示当前用户名
  7. who im i:显示当前终端的用户名、终端设备和登录时间等详细信息;

用户组

  1. groupadd 新用户组:创建用户组
  2. groupdel 用户组:删除用户组
  3. useradd -g 用户组 新用户名:创建一个用户并指定用户组
  4. usermod -g 用户组 用户名:修改用户的用户组

细节说明

  1. passwd修改密码命令,root用户在修改其他用户密码,如果忘记填写要修改的用户名,会修复当前root用户密码,这在生产环境中会导致很严重的后果
  2. 一般情况下,我们删除用户不会使用userdel -r,因为往往用户目录下仍有重要的数据,非必要应该保留该用户目录
  3. root用户用useradd创建完用户后,系统会自动切换到新用户的目录;可以通过su root切换回root用户;root用户也可以使用exit或者logout切换回原用户
  4. who am i这条命令,本人实测必须在图形运行级别是无效的,假如你刚好和我一样使用的Ubuntu图形界面系统,可以使用ctrl+alt+f5进入运行级别3无界面终端进行测试。
  5. 用户组概念说明:
    • 在Linux中,用户组是一组具有相同权限和访问权限的用户的集合。每个用户都必须属于至少一个用户组。
    • 用户组可以用于管理文件和目录的访问权限,以及限制用户对系统资源的访问。
    • 在Linux中,每个用户都有一个主组和多个附加组。用户的主组是在创建用户时指定的,而附加组是可以随时添加或删除的
  6. 假如我们在创建用户时没有指定组,Linux会自动创建一个与用户名同名的组,然后将该用户指定到该同名组下

扩展

用户和用户组相关文件:

  1. /etc/passwd文件:
    • 解释:用户(user)的配置文件,记录用户的各种信息
    • 内容:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录使用的Shell
    • 示例:gallifrey:x:1000:1000:gallifrey display:/home/gallifrey:/bin/bash
  2. /etc/shadow文件:
    • 解释:口令的配置文件
    • 内容:登录名:加密口令:最后修改时间:最小时间间隔:最大时间间隔:告警时间:不活动时间:失效时间:标志
    • 示例:mail:*:19411:0:99999:7:::
  3. /etc/group文件:
    • 解释:组(group)的配置文件,
    • 内容:组名:口令:组标识号:组内用户列表
    • 示例:sambashare:x:136:gallifrey

运行级别

基本介绍

运行级别的说明:

运行级别 使用频率 说明
0 【不常用】 关机,系统停机状态,系统已关闭,没有任何服务或进程运行
1 【不常用】可用于找回丢失密码 单用户模式,只有最基本的系统服务和进程运行,没有网络服务
2 【不常用】因为无网络服务 多用户模式,无网络服务
3 【常用】无图形界面节省资源,且多用户有网络服务,基本服务器都是该运行级别 多用户模式,有网络服务
4 【不常用】 保留级别,系统未使用
5 【常用】个人使用的Linux系统,基本都会使用图形界面 图形用户界面,多用户模式,有网络服务
6 【不常用】 系统重启模式,用于重新启动系统。

命令:

  1. init[0-6]:切换运行级别0-6,例如init 3就是切换到运行级别3
  2. who -rrunlevel:可以查看当前的运行级别
  3. systemctl get-default:可以查看系统默认的运行级别,其中multi-user.target就是运行级别3,graphical.target就是运行级别5
  4. systemctl set-default [multi-user.target|graphical.target]:设置运行级别3或5

细节说明

  1. 实际上CentOs7及之后的版本,采用了systemd作为系统初始化和管理的工具,对运行级别进行了简化。
  2. systemd为了简化运行级别的管理,将所有的运行级别都映射到了不同的target中。multi-user.target代表的是文本模式下的多用户运行级别(运行级别3),而graphical.target代表的是图形化界面下的多用户运行级别(运行级别5)。
  3. Ubuntu 15.04及更高版本已经使用了systemd来管理系统服务和运行级别。
  4. /lib/systemd/system目录下可以看到可以指定运行级别的所有的target

文件目录

基本介绍

  1. pwd:显示当前用户所在目录路径
  2. cd 指定目录:切换到指定目录

    • cd ~:回到根目录,普通用户所在的用户目录,一般是/home/用户名,root用户则是/root
    • cd ..:返回上一级目录
  3. ls:列出当前目录的内容

    • ls 指定路径:列出指定路径目录的内容

    • ls -a:列出当前目录的所有内容,包括以.开头的隐藏文件

    • ls -l:列出当前目录的内容,单列输出详细内容

    • ls -h:列出当前目录的内容,显示更符合人类习惯(文件大小显示从字节显示变为自适应单位)

  4. mkdir 指定一级目录:创建一个一级目录,如mkdir dog在创建一个名为dog的目录

    • mkdir 指定路径指定目录:在指定路径创建一个目录,如mkdir ./dog在当前目录创建dog目录,mkdir /home/用户目录/dog在用户目录下创建dog目录
    • mkdir -p 多级目录:创建多级目录,如mkdir ./animal/dog在当前目录创建animal目录,再在animaml目录下创建dog目录
  5. rm 文件:删除文件

    • rmdir:删除空目录,注意:只能删除空目录,命令中间没有空格

    • rm -rf 目录:删除整个目录,-f是强制删除不提示,-r是递归删除,就是强制递归删除所有文件

  6. touch 文件名: 创建指定文件名的空文件,然后touch /home/用户目录/cat就是在用户目录创建名为cat空文件
  7. cp 原文件 目标路径:将原文件拷贝到目标路径下,例如cp duck animal/就是将duck文件拷贝到animal目录下

    • cp -r 原目录 目标路径:将原目录递归拷贝到目标路径下,例如cp -r animal zoo/就是将animal目录及其所有内容拷贝到zoo目录下
    • \cp -r 原目录 目标路径:将原目录递归拷贝到目标路径下,覆盖不提示
  8. mv:移动文件及重命名

    • mv 旧文件名 新文件名:在两个文件在同一个目录下执行mv,其实就是重命名文件,例如mv anmail/dog animal/cat就是把animal目录下dog文件重命名为cat
    • mv 旧文件路径 新文件路径:当两个文件不在同一个路径下执行mv,可以移动文件(也可以重命名)例如mv animal/cat ctiy/batanimal目录下的cat移动到city目录下并重命名为bat
  9. cat 文件名:查看文件内容

    • cat -n 文件名:查看文件内容,带上行号
    • cat 文件名 | more:一般为了浏览方便,会加上| more使用more 文本过滤器,|是管道符号,more的说明请看下面
  10. more:基于Vi编辑器的文本过滤器命令,可以以全屏的方式按页显示文本内容。
    • 除了常常和cat联用,也能直接more 文件名来查看文件
    • 其内置了若干快捷键用于浏览操作,详情请看下表:
操作 说明
空格 Space 下翻一页
回车 Enter 下翻一行
q 退出
Ctrl+F 向下滚动一屏
Ctrl+B 向上滚动一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
  1. less:文本查阅工具,功能与more类似,但是更加强大,支持各种显示终端,查找操作,而且是懒加载,大文件打开更快,效率更高。

    • 使用方法less 文件名,查看文件
    • 其内置了若干快捷键用于浏览操作,详情请看下表:
操作 说明
空格 Space 下翻一页
下箭头pagedown 下翻一页
上箭头pageup 上翻一页
/字符串 搜索字符串n上一个,N下一个
?字符串 搜索字符串n上一个,N下一个
q 退出
  1. echo:输出命令

    • echo $PATH:输出环境变量
    • echo hello world!:输出hello wrold!到控制台
    • echo hello world!>>learn.txt:追加hello world文本到learn.txt文件中
  2. head -n 数字x 文件名:查看指定文件头部x行数据,如果直接head 文件名,会默认显示前面10行数据

  3. tail -n 数字x 文件名:查看指定文件尾部x行数据,如果直接tail 文件名,会默认显示最后10行数据

    • tail -f 文件名:实时监控文件尾部,如果有追加就会显示
  4. >:输出重定向(覆盖写),示例如下

    • ls -l > nowdir.log:将该目录下内容覆盖写入nowdir.log文件
    • cat pig.txt > dog.txt:将pig.txt文件内容覆盖写入dog.txt文件
    • 如果重定向的文件不存在会自动创建再写入
  5. >>:输出重定向(追加写),示例如下

    • cal >> today.log:将当前日历信息追加写入today.log文件,注意:cal是CentOs自带输出日历信息的命令,其他linux版本可能没有
    • cat pig.txt >> dog.txt:将pig.txt文件内容追加写入dog.txt文件
    • 如果重定向的文件不存在会自动创建再写入
  6. ln:软连接,相对于Windows中的快捷方式

    • ln -s /root /home/myroot:在home目录下创建myroot目录,进入该目录会进入root目录
    • 删除软链接使用rm命令删除软链接目录就也可以了
  7. history [数字n]:查看最近执行过的n条命令(附带编号),不添加数字时,默认显示最近执行过的10条命令。

  8. !数字n:执行编号为数字n的命令,比如history 1查出来的最近执行过的1条命令记录是383 ls -a,此时输入!383就会执行ls -a

时间日期

基本介绍

  1. date:显示当前时间
  2. date "+指定时间格式":按指定时间格式显示日期,如date "+%Y-%m-%d %H:%M:%S",会按照年-月-日 时:分:秒格式输出当前时间
  3. date -s "%Y-%m-%d %H:%M:%S":设置系统当前时间,如date "2099-2-25 12:21:21"
  4. cal:显示当前月月历
  5. cal 年份:显示指定年份所有月历

细节说明

  1. date "+指定时间格式",时间格式并不是一定要完整的,你可以指定任意格式的时间显示,如date "+%Y %m"只显示年份和月份,date "+%D---%D"显示当前天数中间两次用---链接
  2. cal是CentOs自带输出日历信息的命令,其他linux版本可能没有,像Ubuntu默认没有cal命令

搜索查找

基本介绍

  1. find [搜索范围] [选项] 查询内容 :搜索命令,可以按照文件名,用户,文件大小等条件搜索
    • find [搜索范围] -n 文件名:按照文件名搜索文件,如find /home dog.txt就是在home目录下搜索dog.txt文件
    • find [搜索范围] -user 用户名:按照用户名搜索文件,如find -user pig就是搜索所有用户为pig的文件
    • find [搜索范围] -size 数字n:搜索指定文件大小为n的文件,其中+数字n表示大于n-数字n表示小于n,单位有kMG。如find / -size +1G就是搜索根目录下大于1G的文件
  2. locate 文件名:快速定位文件路径
  3. updatedb:更新locate数据库,root用户才有权限更新
  4. which 命令:用于查找命令的二进制文件位置,如which ls就是查找ls命令的程序位置
  5. |:管道符号,用于将前一个命令的结果传输给后面的命令处理,如上文中的cat 文件名 | more
  6. grep [选项] 查询内容 源文件:过滤查找要压缩的文件[
    • grep -n 查询内容 源文件:过滤查找,显示行号
    • grep -i 查询内容 源文件:过滤查找,忽略大小写
    • grep常与|管道符号一起使用,查询文本内容,如cat bird.txt | gerp -i "hello":查看bird.txt文本并查询hello忽略大小写

细节说明

  1. find命令是递归搜索文件目录
  2. locate命令与find不同,它不会递归搜索文件目录,locate命令利用建立好的locate数据库去搜索文件路径。locate数据库会保存系统所有的文件名称及其路径。因此第一次运行locate前得先执行updatedb命令
  3. locate因为查询数据库,所以比直接遍历文件系统快很多,但是为了保证数据准确性,root用户必须定期更新locate数据库
  4. 乌班图系统是默认没有locate命令的,可以使用sudo apt install mlocate来安装

压缩解压

基本介绍

这一部分韩老师讲得不太好,所以这里补充一下菜鸟教程的内容,实际上【压缩】和【打包】是两个概念

  • 【打包】是将多个文件和目录组合成一个单独的文件,以便于传输、备份或存档

  • 【压缩】是指通过使用特定的算法和技术,将文件或数据转换为较小的尺寸,以节省存储空间或减少数据传输所需的带宽

生产压缩包其实包含了两个过程,将多个文件【打包】成一个【包】,然后再把【包】用压缩程序压缩成【压缩包】

tar命令

tar是最常用的打包命令,使用 tar 程序打出来的包我们常称为 tar 包,tar 包文件的命令通常都是以 .tar结尾的。生成 tar 包后,就可以用其它的程序来进行压缩了。常见的压缩程序有以下几种:

  1. gzip 是 GNU 组织开发的一个压缩程序,.gz 结尾的文件就是 gzip 压缩的结果。与 gzip 相对的解压程序是 gunzip。tar 中使用 -z 这个参数来调用gzip
  2. bzip2 是一个压缩能力更强的压缩程序,.bz2 结尾的文件就是 bzip2 压缩的结果。与 bzip2 相对的解压程序是 bunzip2。tar 中使用-j这个参数来调用 bzip2。
  3. 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

示例

其实选项顺序是没有固定写法的,但是如果你和我一样有选择困难症,可能参考将压缩程序的选项放在最前面的写法:

  1. tar -zcvf zoo.tar.gz dog bat pig:打包dog,bat,pig文件并用gzip压缩,生产压缩包zoo.tar,显示详细信息
  2. tar -zxvf zoo.tar.gz:解压zoo.tar.gz压缩包并解包,显示详细信息
  3. tar -cxf zoo.tar dog bat pig:打包dog,bat,pig文件,生成tar包zoo.tar
  4. tar -xvf zoo.tar:解包文件zoo.tar

举一反三就有tar -jcvftar -jxvftar -Zcvftar -Zxvf等等

更多

在Windows中,我们更多会使用.rar.zip为后缀的压缩包,在Linux系统要生成或者解压这些压缩包,我们可以使用zipunziprarunrar命令。但是zip和rar程序在不同Linux系统中不一定自带的,可能需要我们自行安装

另外zipunziprarunrar直接执行是包括【打包】和【压缩】或者【解包】和【解压】两个动作的,一般用法如下:

  1. rar a jpg.rar *.jpg:rar格式的压缩,需要先下载 rar for linux 压缩打包目录里所有jpg文件
  2. zip jpg.zip *.jpg:zip格式的压缩,需要先下载 zip for linux 压缩打包目录里所有jpg文件
  3. unrar e a.rar:解压 rar
  4. unzip jpg.zip:解压 zip

更多使用方法,请自行man查阅帮助文档或--help查看选项简要说明