《Linux就该这么学》学习笔记(二)——新手必须掌握的Linux命令

441 阅读17分钟

本次内容

  1. 强大好用的Shell
  2. 命令简介
  3. 执行查看帮助命令
  4. 常用系统工作命令
  5. 系统状态检测命令
  6. 工作目录切换命令
  7. 文本文件编辑命令
  8. 文件目录管理命令
  9. 打包压缩与搜索命令

1.强大好用的Shell

在知识铺垫中我们已经提及过,Linux 系统的内核负责完成对硬件资源的分配、调度等管理任务,由此可见内核对计算机的正常运行来说是非常重要的,所以我们并不建议直接去编辑内核中的参数。但是,为了满足日常工作的需要,我们可以使用基于系统调用接口开发出的程序或服务来管理计算机。Shell 就是这样的一个命令行工具。Shell(终端)充当的是人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端,它就会调用相应的程序服务去完成某些工作。现在包括红帽系统在内的许多主流 Linux 系统默认使用的终端是 Bash 解释器。下图为用户与 Linux 系统交互的示意图:

2.命令简介

通常情况下,常见的 Linux 命令的格式是这样的:命令名称 [命令参数] [命令对象]
注意,命令名称、命令参数、命令对象之间需要使用空格来分隔;另外在中括号中的部分也就是命令参数和命令对象,它们并不一定时刻存在,有些命令并不需要它们。

  • 命令对象:命令对象一般是指要处理的文件、目录、用户等资源
  • 命令参数:命令参数可以使用长格式(完整的选项名称),也可以使用短格式(只有单个字母的缩写),它们分别需要使用--和-作为前缀。另外需要注意的是,当我们一条命令中需要有多个参数时,长格式与长格式、长格式与短格式之间都不可以进行合并,但短格式和短格式之间可以进行合并,合并后仅使用一个-作为前缀即可。例如:-c 和 -f可以合并为 -cf。 以下为长短格式实例:
    • 长格式:man --help
    • 短格式:man -h

3.执行查看帮助命令

在Linux中有许多的命令,当遇到一个不熟悉的命令时我们可以通过 man 命令去查询它的详细信息,格式:man 命令名称
如下图是我们通过 man 命令查询 echo 命令的结果图:

通过 man 命令查询的命令信息通常会很长很多,下面是对查询结构做出的解释:

结构名称 代表意义
NAME 命令的名称
SYNOPSIS 参数的大致使用方法
DESCRIPTION 介绍说明
EXAMPLES 演示(附带简单说明)
OVERVIEW 概述
DEFAULTS 默认的功能
OPTIONS 具体的可用选项(带介绍 )
ENVIRONMENT 环境变量
FILES 用到的文件
SEE ALSO 相关的资料
HISTORY 维护历史与联系方式

另外在 man 命令中有如下按键(是按键不是命令)可以使用:

按键 用途
空格键 向下翻一页
PaGe down 向下翻一页
PaGe up 向上翻一页
home 直接前往首页
end 直接前往尾页
/ 从上至下搜索某个关键词,如“/linux”
? 从下至上搜索某个关键词,如“?linux”
n 定位到下一个搜索到的关键词
N 定位到上一个搜索到的关键词
q 退出帮助文档

4.常用系统工作命令

  1. echo 命令:此命令用于在中断输出字符或变量提取后的值,格式为 echo [字符串 | $变量]
    使用范例:

    • 输出字符串“Linuxprobe.Com”到终端屏幕: echo Linuxprobe.Com
    • 用 $ 符号提取变量 SHELL 的值并输出到终端屏幕:echo $SHELL
  2. date 命令:此命令用于显示或设置系统的时间或日期,格式为 date [参数] [+指定的格式],我们可以通过设置以+开头的参数来指定输出日期的格式,部分常用参数如下:

    参数 作用
    %t 跳格[Tab 键]
    %H 小时(00~23)
    %I 小时(00~12)
    %M 分钟(00~59)
    %S 秒(00~59)
    %j 今年中的第几天

    使用范例:

    • 按默认格式查看系统时间:date
    • 按照“年-月-日 小时:分钟:秒”的格式查看当前时间:date "+%Y-%m-%d %H:%M:%S"
    • 将系统的当前时间设置为 2017 年 9 月 1 日 8 点 30 分:date -s "2017-09-01 8:30:00"(重启后失效)
    • 查看今天是当年中的第几天:date "+%j"
  3. reboot 命令:此命令用于重启系统,格式为 reboot ,只有root管理员才能使用此命令

  4. poweroff 命令:此命令用于关闭系统,格式为 poweroff ,同样只有root管理员才能使用此命令

  5. wget 命令:此命令用于在终端中下载网络文件,格式为 wget [参数] 下载地址

    参数 作用
    -b 后台下载模式
    -P 下载到指定目录
    -t 最大尝试次数
    -c 断点续传
    -p 下载页面内所有资源,包括图片、视频等
    -r 递归下载

    使用范例:

    • 下载 www.linuxprobe.com/docs/LinuxP…wget http://www.linuxprobe.com/docs/LinuxProbe.pdf
    • 递归下载 www.linuxprobe.com 网站内的所有页面数据以及文件:wget -r -p http://www.linuxprobe.com
  6. ps 命令:此命令用于查看系统中的进程状态,格式为 ps [参数],此命令允许参数不加“-”

    参数 作用
    -a 显示所有进程(包括其他用户的进程)
    -u 用户以及其他详细信息
    -x 显示没有控制终端的进程

    在Linux系统中时刻运行着许多进程,它们有五种常见状态如下:

    • R(运行):进程正在运行或在运行队列中等待。
    • S(终端):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。
    • D(不可中断):进程不响应系统异步信号,即便用 kill 命令也不能将其中断。
    • Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用 wait4()系统函数后将进程释放。
    • T(停止):进程收到停止信号后停止运行。

    使用范例: 查看所有进程的详细信息:ps aux

    名称 意义
    USER 进程的所有者
    PID 进程ID号
    %CPU 运算器占用率
    %MEM 内存使用量
    VSZ 虚拟内存使用量KB
    RSS 占用的固定内存量KB
    TTY 所在终端
    STAT 进程状态
    START 被启动的时间
    TIME 实际使用CPU的时间
    COMMAND 命令名称与参数
  7. top 命令:此命令用于动态地监视进程活动与系统负载等信息,格式为 top。top命令可以动态的查看系统运维状态,相当于“强化班的Windows任务管理器”

  8. pidof 命令:此命令用于查询某个指定服务进程的 PID 值,格式为 pidof [参数] [服务名称],每个进程的号码值是唯一的。
    使用范例:
    查询systemd进行的进程号:pidof systemd

  9. kill 命令:此命令用于终止某个指定 PID 的服务进程,格式为 kill [参数] [进程 PID]
    使用范例:
    关闭 PID 号为2156的进程:kill 2156

  10. killall 命令:此命令用于终止某个指定名称的服务所对应的全部进程,格式为 ** killall [参数] [服务名称]**
    使用范例:
    关闭 httpd 服务:killall httpd

注:如果在系统终端执行一个命令后想立刻停止它,可以使用组合快捷键 Ctrl + C ,这样就可以立即终止该命令的线程。另外如果我们希望命令在后台执行,可以在执行命令时在末尾添加一个 & 符号

5.系统状态检测命令

  1. ifconfig 命令:此命令用于获取网卡配置与网络状态等信息,格式为 ifconfig [网络设备] [参数] 。使用此命令时主要是为了查看是网卡名称、inet 参数后面的 IP 地址、ether 参数后面的网卡物理地址(又称为 MAC 地址),以及 RX、TX 的接收数据包与发送数据包的个数及累计流量
  2. uname 命令:此命令用于查看系统内核与系统版本等信息,格式为 uname [-a] 。在使用 uname 命令时,一般会固定搭配上-a 参数来完整地查看当前系统的内核名称、主机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息。
  3. uptime 命令:此命令用于查看系统的负载信息,格式为 uptime 。它可以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近 1 分钟、5分钟、15 分钟内的压力情况;负载值越低越好,尽量不要长期超过 1,在生产环境中不要超过 5。
  4. free 命令:此命令用于显示当前系统中内存的使用量信息,格式为 free [-h] 。添加参数 h 后,相应信息会选用更合适的单位
  5. who 命令:此命令用于查看当前登入主机的用户终端信息,格式为 who [参数] 。它可以快速显示所有正在登录本机的用户的名称以及他们正在开启的终端信息。
  6. last 命令:此命令用于查看所有系统的登录记录,格式为 last [参数] ,本机的登陆信息都是以日志文件的形式保存的,因此想要篡改它们很容易,所以不要简单的据此判断系统有无被恶意入侵。
  7. history 命令:此命令用于显示历史执行过的命令,格式为 history [-c] ,执行 history 命令可以查出当前用户在本地计算机中执行过的最近1000条命令记录,我们可以自定义在/ect/profile文件中的 HISTSIZE变量值来修改记录的数量。在命令中加入参数 c 后会清除记录;我们还可以使用 !编号这一命令来重复执行历史记录中的命令
  8. sosreport 命令:此命令用于收集系统配置及架构信息并输出诊断文档,格式为 sosreport

6.工作目录切换命令

  1. pwd 命令:此命令用于显示用户当前所处的工作目录,格式为 pwd [参数]
  2. cd 命令:此命令用于切换工作路径,格式为 cd [目录名称] 。除了可以直接输入工作路径来切换,cd -可以返回到上一次所处的目录;cd ..可以切换到上级目录;cd ~可以切换到当前用户的家目录;cd ~username切换到其他用户的家目录。
  3. ls 命令:此命令用于显示当前目录中的文件信息,格式为 ls [参数] [文件] 。在命令中使用参数 a 可以查看到全部文件(包括隐藏文件),使用参数 l 可以查看文件属性、大小等详细信息。如果需要查看目录的信息则需要使用参数 d 。

7.文本文件编辑命令

  1. cat 命令:此命令令用于查看纯文本文件(内容较少的),格式为 cat [参数] [文件] ,使用参数 n 可以显示行号。
  2. more 命令:此命令用于查看纯文本文件(内容较多的),格式为 more [参数] 文件。使用此命令阅读文本会有向下翻页功能(空格或回车),并且在最下方会通过百分比的形式来显示已经阅读了多少内容。
  3. head 命令:此命令用于查看纯文本文档的前 N 行,格式为 head [参数] [文件] 。我们可以在参数 n 后面跟上想要阅读的行数来实现阅读指定文件前多少行这一功能,例如阅读某文件前20行:head -n 20 initial-setup-ks.cfg
  4. tail 命令:此命令用于查看纯文本文档的后 N 行或持续刷新内容,格式为 tail [参数] [文件] 。阅读文件后 N 行的命令和 head 命令类似;更加值得注意的功能是持续刷新一个文件的内容,当想要实时查看最新日志文件时,这特别有用,此时命令为 tail -f 文件名
  5. tr 命令:此命令用于替换文本文件中的字符,格式为 tr [原始字符] [目标字符] 。我们通常使用管道符将 tr 命令与其他命令组合使用例如:cat anaconda-ks.cfg | tr [a-z] [A-Z] ,这一命令将名为anaconda-ks.cfg的文件中的小写字母均替换为大写字母。
  6. wc 命令:此命令用于统计指定文本的行数、字数、字节数,格式为 wc [参数] 文本 。参数 l 、 w 、c 分别表示只显示行数、单词数和字节数。
  7. stat 命令:此命令用于查看文件的具体存储信息和时间等信息,格式为 stat 文件名称 。结果信息中,AccessModifyChange 分别表示最后一次访问(仅仅是访问,没有改动)文件的时间、最后一次修改文件的时间、最后一次对文件属性改变的时间,包括权限,大小,属性等等。
  8. cut 命令:此命令用于按“列”提取文本字符,格式为 cut [参数] 文本 。在使用此命令时,我们不仅需要使用参数 f 来设置要看得列数,还需要使用参数 d 来设置列的分隔符号。例如:cut -d: -f1 /etc/passwd ,此命令以“:”作为分隔符,查看了 /etc/passwd 文件的第一列数据
  9. diff 命令:此命令用于比较多个文本文件的差异,格式为 diff [参数] 文件 。我们不仅可以使用参数 brief 来确认两个文件是否不同,还可以使用参数 c 来具体显示差异之处。

8.文件目录管理命令

  1. touch 命令:此命令用于创建空白文件或设置文件的时间,格式为 touch [参数] [文件] 。创建命令较为简单如: touch test即可创建出一个名为test的文件。我们可以在命令中使用参数 a 、m 、d分别表示仅修改“读取时间”(atime)、“修改时间”(mtime)或同时修改 atime 与 mtime

  2. mkdir 命令:此命令用于创建空白的目录,格式为 mkdir [参数] 目录 。可以结合参数 p 来递归创建文件目录如:mkdir -p a/b/c/d

  3. cp 命令:命令用于复制文件或目录,格式为 cp [参数] 源文件 目标文件 。在Linux系统中,复制分为下列三种情况:

    • 如果目标文件是目录,则会把源文件复制到该目录中
    • 如果目标文件也是普通文件,则会询问是否要覆盖它
    • 如果目标文件不存在,则执行正常的复制操作

    cp命令的部分常用参数:

    参数 作用
    -p 保留原始文件的属性
    -d 若对象为“链接文件”,则保留该“链接文件”的属性
    -r 递归持续复制(用于目录)
    -i 若目标文件存在则询问是否覆盖
    -a 相当于-pdr(p、d、r 为上述参数)
  4. mv 命令:此命令用于剪切文件或将文件重命名,格式为 mv [参数] 源文件 [目标路径|目标文件名] 。剪切操作不同于复制操作,因为它会默认把源文件删除掉,只保留剪切后的文件。如果在同一个目录中对一个文件进行剪切操作,其实也就是对其进行重命名。

  5. rm 命令:此命令用于剪切文件或将文件重命名,格式为 mv [参数] 源文件 [目标路径|目标文件名] 。在 Linux 系统中删除文件时,系统会默认向您询问是否要执行删除操作,如果不想总是看到这种反复的确认信息,可在 rm 命令后跟上-f 参数来强制删除。另外,想要删除一个目录,需要在 rm 命令后面一个-r 参数才可以,否则删除不掉。

  6. dd 命令:此命令用于按照指定大小和个数的数据块来复制文件或转换文件,格式为 dd [参数] 。dd 命令是一个比较重要而且比较有特色的一个命令,它能够让用户按照指定大小和个数的数据块来复制文件的内容。当然如果愿意的话,还可以在复制过程中转换其中的数据格式。常用参数如下:

    参数 作用
    if 输入的文件名称
    of 输出的文件名称
    bs 设置每个“块”的大小
    count 设置要复制“块”的个数

    使用范例:

    • 从/dev/zero 设备文件中取出一个大小为 560MB 的数据块,然后保存成名为 file 的文件:dd if=/dev/zero of=file count=1 bs=560M
    • 把光驱设备中的光盘制作成 iso 格式的镜像文件:dd if=/dev/cdrom of=RHEL-server-7.0-x86_64-LinuxProbe.Com.iso
  7. file 命令:此命令用于查看文件的类型,格式为 file 文件名 。在 Linux 系统中,由于文本、目录、设备等所有这些一切都统称为文件,而我们又不能单凭后缀就知道具体的文件类型,这时就需要使用 file 命令来查看文件类型了。

9.打包压缩与搜索命令

  1. tar 命令:此命令用于对文件进行打包压缩或解压,格式为 tar [参数] [文件]。在 Linux 系统中,常见的文件格式比较多,其中主要使用的是.tar 或.tar.gz 或.tar.bz2 格式。以下为部分常用参数:

    参数 作用
    -c 创建压缩文件
    -x 解开压缩文件
    -t 查看压缩包内有哪些文件
    -z 用 Gzip 压缩或解压
    -j 用 bzip2 压缩或解压
    -v 显示压缩或解压的过程
    -f 目标文件名(必须放参数最后一位)
    -p 保留原始的权限与属性
    -P 使用绝对路径来压缩
    -C 指定解压到的目录

    使用范例:

    • 把/etc 目录通过 gzip 格式进行打包压缩,并把文件命名为 etc.tar.gz:tar -czvf etc.tar.gz /etc
    • 将打包后的压缩包文件指定解压到/root/etc 目录中:tar xzvf etc.tar.gz -C /root/etc
  2. grep 命令:此命令用于在文本中执行关键词搜索,并显示匹配的结果,格式为 grep [参数] 关键词 [文件] 。部分常用参数:

    参数 作用
    -c 仅显示找到的行数
    -i 忽略大小写
    -n 显示行号
    -v 反向选择—仅列出没有“关键词”的行
  3. find 命令:此命令用于按照指定条件来查找文件,格式为 find [查找路径] 寻找条件 操作 。 以下为部分常用参数:

    参数 作用
    -name 匹配名称
    -perm 匹配权限(mode 为完全匹配,-mode 为包含即可)
    -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/l/f 匹配文件类型(后面的字母参数依次表示块设备、目录、字符设备、管道、链接文件、文本文件)
    -size 匹配文件的大小
    -prune 忽略某个目录
    -exec …… {}\; 后面可跟用于进一步处理搜索结果的命令

    使用范例:

    • 获取到 \ 目录中所有以 host 开头的文件列表:find / -name "host*" -print
    • 在整个系统中搜索权限中包括 SUID 权限的所有文件:find / -perm -4000 -print
    • 在整个文件系统中找出所有归属于 linuxprobe 用户的文件并复制到 /root/findresults 目录:find / -user linuxprobe -exec cp -a {} /root/findresults/ \;