Linux基础命令

1️⃣ 常用系统工作命令

⭐️ 系统工作命令

  • echo:命令用于在终端输出字符串或变量提取后的值
  • wget:在终端中下载网络文件
  • ps:查看系统中的进程状态
    • a:显示所有进程(包括其他用户的)
    • u:用户以及其他详细信息
    • x:显示没有控制终端的进程
  • top:动态的监视进程活动与系统负载【强化版应用管理器】
    • 第 1 行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为 1 分钟、5 分钟、15 分钟内的平均值,数值越小意味着负载越低)。
    • 第 2 行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程 数。
    • 第 3 行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源 百分比、空闲的资源百分比等。
    • 第 4 行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。
    • 第 5 行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。
  • pidof:查询某个指定服务进程的PID值
  • kill:终止某个指定PID的服务进程
  • killall:终止指定名称服务所对应的全班进程
  • spsreport:收集系统配置及架构
  • chkconfig:检查,设置系统的各种服务
    • add:增加所指定的系统服务,然chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。
    • del:删除所指定的系统服务,不在由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。
    • level<等级代号>:指定读系统服务要在哪一个执行等级中开启或关闭

2️⃣ 基础命令

  • ifconfig:获取网络配置和网络状态等信息
  • uptime:用于查看系统的负载信息
  • free:用于显示当前系统中内存的使用量信息,支持选项 [-h]
  • last:用于查看所有系统的登录记录
  • reboot:重启
    • n:在重开机前不做任何记忆体资料写回硬盘的动作
    • w:并不会重新开机,只是把记录写到/var/log/wtmp档案里
    • d:不会把记录写到/Var/log/wtmp档案里(-n 这个参数包含了 -d)
    • f:强迫重开机,不呼叫shutdown这个指令
    • i:在重开机之前先把所有网络相关的装置先停止
  • power off:关机
  • date:查看时间,支持选项 [+]
  • cal:查看日历
  • history:查看历史上用过的命令
    • !+序列号:执行指定序列号的命令
    • !+最近执行命令的开头字母:执行最近以该字母开头的命令
    • c:清除历史命令
  • who:用于查看当前登入主机的用户终端信息。
  • uname:查看系统内核与系统版本等信息
  • useradd:创建用户(创建好用户的家目录在/home目录下)
    • 也可以通过 useradd -d [指定目录] [新的用户名] 给用户创建指定家目录
  • passwd [用户名]:给创建的用户设置密码
  • su -用户名:用于变更为其他使用者的身份,除root外,需要键入该使用者的密码
    • f-fast:不比读启动档,仅用于csh或tcsh
    • 在输入 logout 注销
  • which [文件]:用于查找文件
    • n<文件名长度>:指定文件长度必须大于或者等于所有文件中的最长的文件名
    • p:与-n参数相同,但此处的<文件名长度>包括了文件的路径。
    • w:指定输出是栏位的宽度。
    • v:显示版本信息
  • locate:locate命令用于查找符合条件的文档,他会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录
    • 先输入 updatadb 创建数据库
  • whereis:用于查找文件。该指令会在特定目录中查找符合条件的文件。这些文应属于原始代码、二进制文件、或者是帮助文件。该命令只能用于查找二进制文件、源代码和man手册也、一般的文件需要用locate
  • which:查找命令的路径
  • sort:用于将文本内容内容排序
  • uniq:检查及删除文本文件中重复出现的行列
  • rcp:远端复制文件或目录,如果同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会吧前面指定的所有文件或目录复制到该目录中。
  • dirs:显示目录记录

3️⃣ 查看目录命令

  • 家目录:root目录家目录 /root,普通用户家目录 /home/用户名
  • more:查看文件,不可以上下翻
  • less:查看文件但可以上下翻,不是一次性把文件加载,是边看边加载。
  • cat:查看文件正顺序看
  • tac:查看方向重下往上看
  • ls:查看当前文件夹
    • ls -l:查看详细信息显示
    • ls -a:可以查看隐藏文件
    • ls -d:查看某个目录的信息
    • ls -h:直观的看到文件的大小
  • tree:查看树状类型文件
  • pwd:查看当前文件目录
  • clear:清除终端内容
  • cd:切换到指定目录
    • cd~:切换到家目录
    • cd..:切换到上一级目录
    • cd.:切换到当前目录
    • cd-:切换上一次目录
  • cd命令切换目录:是,这个目录必须存在
  • cd后面不写目录:等价于 cd~
  • 一次tab:是补全
  • 二次tab:是一次提示
  • ctrl+c:终止
  • ctrl+d:结束键盘输入,结束文件输入。取代 exit

4️⃣ 创建删除文件及目录

  • touch 文件名:创建指定文件
    • 同一目录下面目录和文件不能重名
    • a:仅修改读取时间
    • m:仅修改修改时间
    • d:同时修改修改时间和读取时间
    • 创建一个存在的文件夹或者文件会更新修改时间
  • cat > [文件名]:也可以创建文件
  • mkdir 目录名:创建目录(文件夹)
    • mkdir -p:递归创建目录
  • rm 文件名或者目录名:删除指定文件或者目录
    • rmdir 目录名:删除空目录
    • rm 目录 -r:删除文件夹和里面的文件全删
    • rm 目录 -f:不确认删除
    • rm -rf *:删除所有字符(*匹配所有字符)
    • rm -rf ?:删除一位数的
    • rm -rf ??:删除三位数的

5️⃣ 复制,移动文件及目录命令

  • cp 文件名:复制文件
    • p:保留原始文件的属性
    • d:若对象为链接对象,则保留改链接文件的属性
    • r:递归持续复制(用于目录)
    • i:若目标文件存在则询问是否覆盖
    • a:相当于 -p+-d+-r
    • \cp 强制覆盖:不提示
  • mv 文件名:移动文件(还可以重命名,还可以删除)
    • r:递归
    • f:强制
    • i:提示
  • mv 目录/ 目录1/目录2/:将目录移动到目录1中的目录2下面
  • cp 文件夹 -r:复制文件夹
  • 远程复制
    • scp:实现远程复制
      • scp a [ip地址]:/root/[其他目录]

6️⃣ 终端命令格式的组成

  • command [-options][parameter]
    • command:命令名,比如:lspwd

    • [options]:选项,可以有零个、一个或者多个选项、多个选项可以合并,比如使用的 -r 就是选项。一个”-“短选项,两个”--“长选项,短选项可以合并,长选项不可以。

      • [paramter]:参数,可以有零个,一个或者多个参数,比如:touch 文件名mkdir 目录名

选项和参数一般情况下不要求他的位置】【特殊情况:使用scp时必须用选项在前命令在后

7️⃣ 文本编辑命令

  • cat:用于查看纯文本文件(内容较少的)
    • n:显示行数
  • more:查看纯文本文件(内容较多的)
  • head:查看纯文本的前N行
  • tail:用于查看纯文本文档后N行或持续刷新
    • tail -f:持续刷新一个文件内容,查看实时日志更新的时候,特别有用

tail跟head操作方法相似,tail最强悍的功能是可以持续刷新一个文件内容,查看实时日志更新的时候,特别有用此时的命令格式为 tail -f

  • tr:替换文本文件中的字符
    • [原始字符][目标字符]
  • wc:用于统计指定文本的行数,字数,字节数
    • l:只显示行数
    • w:只显示单词数
    • c:只显示字节数
  • stat 文件名称:查看文件的具体存储信息和时间等信息
  • cut:按列提出文本字符
    • f:设置需要看的列数
    • d:设置间隔符号
  • diff:用于比较多个文本文件的差异
    • brief:确认两个文件是否不同
    • c:详细比较多个文件的差异之处
  • dd:能够让用户按照指定大小和个数的数据块来复制文件的内容
    • if:输入的文件名称
    • of:输出的文件名称
    • bs:设置每个“块”的大小
    • count:设置要复制“块”的个数

假设小明的饭量(即需求)是一个固定的值,用来盛饭的勺子的大小即 bs 块大小, 而用勺子盛饭的次数即 count 块个数。小明要想吃饱(满足需求),则需要在勺子大小(bs 块大小)与用勺子盛饭的次数(count 块个数)之间进行平衡。勺子越大,用勺子盛饭的次数 就越少。有上可见,bs 与 count 都是用来指定容量的大小,只要能满足需求,可随意组合搭 配方式。

8️⃣ 打包压缩与搜索

  • tar:用于对文件进行打包或者解压缩
    • zcvf:压缩打包指令
    • zxvf:解压指令
    • c:创建压缩文件
    • x:解开压缩文件
    • t:查看压缩包内有哪些文件
    • z:用Gzip压缩或解压
    • j:用bzip2压缩或解压
    • v:显示压缩或解压的过程
    • f:目标文件(必须要放倒参数最后一位)
    • p:保留原始的权限与属性
    • P:使用绝对路径来解压
    • tar[压缩文件] -C[目录]:指定解压到的目录
  • grep:用于在文本中执行关键词搜索,并显示匹配结果
    • b:将可执行文件(binary)当作文本(text)来搜索
    • c:仅显示找到的行数
    • i:忽略大小写
    • n:显示行号
    • v:反向选择——仅列出没有出现“关键词”的行
  • find:用于安置条件来查找文件
    • name:匹配名称
    • perm:匹配权限(mode为完全匹配 -perm为包含即可)
    • user:匹配所有者
    • group:匹配所有组
    • mtime -n +n:匹配修改内容的时间(-n指n天以内,+n指n天以前)
    • atime -n +n:匹配访问内容的时间(-n指n天以内,+n指n天以前)
    • ctime -n +n:匹配修改文件的权限的时间(-n指n天以内,+n指n天以前)
    • nouser:匹配无所有者的文件
    • nogroup:匹配无所有组的文件
    • newer f1 !f2:匹配比文件f1新但比f2旧的文件
    • type:匹配文件类型(b/d/c/p/1/f` 依次表示块设备,目录,字符设备,管道、连接文件、文本文件)
    • size:匹配文件的大小(+50kb为查找超过50kb的文件,而 -50kb为查找小于50kb的文件)
    • prune:忽略某个目录
    • exec .....{};:后面可以跟用于进一步处理搜索结果的命令

9️⃣ 压缩工具

  • gzip:压缩文件
  • gunzip:解压文件
  • zip:压缩文件或者压缩文件夹
    • r<目录>xxx.zip:递归压缩,压缩目录
  • unzip:解压
    • d<目录>xxxx.zip:指定解压后文件的存放目录

🔟 输入输出重定向

  • 输入重定向
    • 命令 < 文件:将文件作为命令的标准输入
    • 命令 << 分隔符:从标准输入中读入,直到遇见分隔符才停止
    • 命令 < 文件1 > 文件2:将文件已作为命令的标准输入并将标准输出到文件2
  • 输出重定向
    • 命令 > 文件:将标准输出重定向到一个文件中(清空原有文件的数据)
    • 命令 2> 文件:将错误输出重定向到一个文件中(清空原有文件的数据)
    • 命令 >> 文件:将标准输出重定向到一个文件中(追加到原有内容的后面)
    • 命令 2>> 文件:将错误输出重定向到一个文件中(追加到原有内容后面)
    • 命令 >> 文件 2>&1 或者 命令 &>> 文件:将标准输出与错误输出共同写入到文件中(追加到原有内容后面)

1️⃣1️⃣ 管道命令符

  • 执行格式命令A|命令B
  • 把前一个命令原本要输出到屏幕的数据当做是最后一个命令的标准输入。

1️⃣2️⃣ 命令行的通配符

  • *:代表匹配零个或多个字符
  • ?:代表匹配单个字符
  • [0-9]:代表匹配0~9之间的单个数字字符
  • [abc]:代表匹配a,b,c三个字符中的任意一个字符

1️⃣3️⃣ 常用的转义字符

  • 反斜杠 \(:使反斜杠后面的一个变量变为单纯的字符串
  • 单引号 ":转义其中所有的变量为单纯的字符串
  • 双引号 "":保留其中的变量属性,不进行转义处理。
  • 反引号 `:把其中的命令执行后返回结果

1️⃣4️⃣重要的环境变量

在用户执行了一条命令之后,Liunx系统中到底发生了什么事情呢?简单来说,命令在linux中执行分为4个步骤

**第一步:**判断用户是否已绝对路径或相对路径的方式输入命令,如果是的话则直接执行

第二步:linux系统检查用户输入的命令是否为“别名命令”,即用一个自定义的命令名来提换原本的命令名称。可以用alias命令来创建一个属于自己的命令别名,格式为“alias别名=命令”。若要取消一个命令别名则是用unalias命令,格式为“unalias 别名”。

第三步:Bash解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令交由步骤4继续处理。可以使用“type命令名称”来判断用户输入的命令是内部命令还是外部命令。

第四步:系统在多个路径中查找用户输入的命令文件,而定义的这些路基的变量叫做PATH,可以简单地吧它理解成是“解释器小助手”,Bash解释器待执行的命令可能存放的位置,然后Bash解释器就会乖乖地在这些位置中逐个查找。PATH是有多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路劲的增加和删除操作将影响到Bash解释器对Linux命令的查找。

为什么不可以将当前目录(.)添加到PATH中呢?

原因是 尽管可以将当前目录(.)添加到PATH变量中,从而在某些情况下可以让用户免去输入命令所在的路径的麻烦。但是,黑客在比较常用的公共目录/tmp中存放一个与ls或cd命令同名的木马文件,而用户有恰巧在公共目录中执行这些命令,那么就极有可能中招了。

  • HOME:用户的主目录(家目录)
  • SHELL:用户在使用shell解释器名称
  • HISTSIZE:输出的历史命令的记录条数
  • HISTFILESIZE:保存的历史命令记录条数
  • MAIL:邮件保存路径
  • LANG:系统语言、语系名称
  • RANDOM:生成一个随机数字
  • PS1:Bash解释器的提示符
  • PATH:定义解释器搜索用户执行命令的路径
  • EDITOR:用户默认的文本编辑器

使用格式 `echo $[变量]