第5章 Linux必备命令实战

Linux系统启动默认为字符界面,一般不会启动图形界面,所以对命令行的熟练程度能更加方便、高效的管理Linux系统。

本章向读者介绍Linux系统必备命令各项参数及功能场景,Linux常见命令包括:cd、ls、pwd、mkdir、rm、cp、mv、touch、cat、head、tail、chmod、vim等。

1.1 Linux命令集

初学者完成Linux系统安装以后,学习Linux操作系统必备的指令,基于Linux指令管理Linux操作系统,必备Linux指令有哪些?

  • 基础命令相关一:

Cd、ls、pwd、help、man、if、for、while、case、select、read、test、ansible、iptables、firewall-cmd、salt、mv、cut、uniq、sort、wc、source、sestatus、setenforce;

  • 基础命令相关二:

Date、ntpdate、crontab、rsync、ssh、scp、nohup、sh、bash、hostname、hostnamectl、source、ulimit、export、env、set、at、dir、db_load、diff、dmsetup、declare;

  • 用户权限相关:

Useradd、userdel、usermod、groupadd、groupmod、groupdel、Chmod、chown、chgrp、umask、chattr、lsattr、id、who、whoami、last、su、sudo、w、chpasswd、chroot;

  • 文件管理相关:

Touch、mkdir、rm、rmdi、vi、vim、cat、head、tail、less、more、find、sed、grep、awk、echo、ln、stat、file;

  • 软件资源管理:

Rpm、yum、tar、unzip、zip、gzip、wget、curl、rz、sz、jar、apt-get、bzip2、service、systemctl、make、cmake、chkconfig;

  • 系统资源管理:

Fdisk、mount、umount、mkfs.ext4、fsck.ext4、parted、lvm、dd、du、df、top、iftop、free、w、uptime、iostat、vmstat、iotop、ps、netstat、lsof、ss、sar;

  • 网络管理相关:

Ping、ifconfig、ip addr、ifup、ifdown、nmcli、route、nslookup、traceroute、dig、tcpdump、nmap、brctl、ethtool、setup、arp、ab、iperf;

  • Linux系统开关机:

Init、reboot、shutdown、halt、poweroff、runlevel、login、logout、exit;

1.2 cd命令详解

cd命令主要用于目录切换,例如:cd /home切换至/home目录,cd /root表示切换至/root目录 ;cd ../切换至上一级目录;cd ./切换至当前目录。

其中.和..可以理解为相对路径,例如cd ./test表示以当前目录为参考,表示相对于当前,而cd /home/test表示完整的路径,理解为绝对路径),如图4-1所示:

图4-1 Linux cd命令操作

1.3 ls命令详解

ls命令主要用于浏览目录下的文件或者文件夹,使用方法参考:ls ./ 查看当前目录所有的文件和目录,ls -a 查看所有的文件,包括隐藏文件,以.开头的文件,常用参数详解如下:

-a, –all 不隐藏任何以. 开始的项目;

-A, –almost-all 列出除. 及.. 以外的任何项目;

–author 与-l 同时使用时列出每个文件的作者;

-b, –escape 以八进制溢出序列表示不可打印的字符;

–block-size=大小 块以指定大小的字节为单位;

-B, –ignore-backups 不列出任何以”~”字符结束的项目;

-d, –directory 当遇到目录时列出目录本身而非目录内的文件;

-D, –dired 产生适合Emacs 的dired 模式使用的结果;

-f 不进行排序,-aU 选项生效,-lst 选项失效;

-i, –inode 显示每个文件的inode 号;

-I, –ignore=PATTERN 不显示任何符合指定shell PATTERN 的项目;

-k 即–block-size=1K;

-l 使用较长格式列出信息;

-n, –numeric-uid-gid 类似 -l,但列出UID 及GID 号;

-N, –literal 输出未经处理的项目名称 (如不特别处理控制字符) ;

-r, –reverse 排序时保留顺序;

-R, –recursive 递归显示子目录;

-s, –size 以块数形式显示每个文件分配的尺寸;

-S 根据文件大小排序;

-t 根据修改时间排序;

-u 同-lt 一起使用:按照访问时间排序并显示;

同-l一起使用:显示访问时间并按文件名排序;

其他:按照访问时间排序;

-U 不进行排序;按照目录顺序列出项目;

-v 在文本中进行数字(版本)的自然排序。

1.4 pwd命令详解

pwd命令主要用于显示或者查看当前所在的目录路径,如图4-2所示:

图4-2 pwd命令查看当前目录

1.5 mkdir命令详解

mkdir命令主要用于创建目录,用法mkdir dirname,命令后接目录的名称,常用参数详解如下:

用法:mkdir [选项]… 目录;若指定目录不存在则创建目录;

长选项必须使用的参数对于短选项时也是必需使用的;

-m, –mode=模式 设置权限模式(类似chmod),而不是rwxrwxrwx 减umask;

-p, –parents 需要时创建目标目录的上层目录,但即使这些目录已存在也不当作错误处理;

-v, –verbose 每次创建新目录都显示信息;

-Z, –context=CTX 将每个创建的目录的SELinux 安全环境设置为CTX;

–help 显示此帮助信息并退出;

–version 显示版本信息并退出。

1.6 rm命令详解

rm 命令主要用于删除文件或者目录,用法 rm –rf test.txt (-r表示递归,-f表示强制),常用参数详解如下:

用法:rm [选项]… 文件…删除 (unlink) 文件。

-f, –force 强制删除。忽略不存在的文件,不提示确认;

-i 在删除前需要确认;

-I 在删除超过三个文件或者递归删除前要求确认。此选项比-i 提示内容更少,但同样可以阻止大多数错误发生;

-r, -R, –recursive 递归删除目录及其内容;

-v, –verbose 详细显示进行的步骤;

–help 显示此帮助信息并退出;

–version 显示版本信息并退出;

默认时,rm 不会删除目录,使用–recursive(-r 或-R)选项可删除每个给定的目录,以及其下所有的内容;

要删除第一个字符为”-“的文件 (例如”-foo”),请使用以下方法之一:

rm — -foo

rm ./-foo

1.7 cp命令详解

cp 命令主要用于拷贝文件,用法,cp old.txt /tmp/new.txt ,常用来备份,如果拷贝目录需要加-r参数,常用参数详解如下:

用法:cp [选项]… [-T] 源文件 目标文件

 或:cp [选项]… 源文件… 目录

 或:cp [选项]… -t 目录 源文件…

将源文件复制至目标文件,或将多个源文件复制至目标目录。

长选项必须使用的参数对于短选项时也是必需使用的。

-a, –archive 等于-dR –preserve=all;

–backup[=CONTROL 为每个已存在的目标文件创建备份;

-b 类似–backup 但不接受参数;

–copy-contents 在递归处理是复制特殊文件内容;

-d 等于–no-dereference –preserve=links;

-f, –force 如果目标文件无法打开则将其移除并重试(当 -n 选项;

存在时则不需再选此项);

-i, –interactive 覆盖前询问(使前面的 -n 选项失效);

-H 跟随源文件中的命令行符号链接;

-l, –link 链接文件而不复制;

-L, –dereference 总是跟随符号链接;

-n, –no-clobber 不要覆盖已存在的文件(使前面的 -i 选项失效);

-P, –no-dereference 不跟随源文件中的符号链接;

-p 等于–preserve=模式,所有权,时间戳;

–preserve[=属性列表 保持指定的属性(默认:模式,所有权,时间戳),如果;

可能保持附加属性:环境、链接、xattr 等;

-c same as –preserve=context;

–sno-preserve=属性列表 不保留指定的文件属性;

–parents 复制前在目标目录创建来源文件路径中的所有目录;

-R, -r, –recursive 递归复制目录及其子目录内的所有内容。

1.8 mv命令详解

mv 命令主要用于重命名或者移动文件或者目录,用法, mv old.txt new.txt,常用参数详解如下:

用法:mv [选项]… [-T] 源文件 目标文件;

或:mv [选项]… 源文件… 目录;

或:mv [选项]… -t 目录 源文件;

将源文件重命名为目标文件,或将源文件移动至指定目录。长选项必须使用的参数对于短选项时也是必需使用的。

–backup[=CONTROL] 为每个已存在的目标文件创建备份;

-b 类似–backup 但不接受参数;

-f, –force 覆盖前不询问;

-i, –interactive 覆盖前询问;

-n, –no-clobber 不覆盖已存在文件,如果您指定了-i、-f、-n 中的多个,仅最后一个生效;

–strip-trailing-slashes 去掉每个源文件参数尾部的斜线;

-S, –suffix=SUFFIX 替换常用的备份文件后缀;

-t, –target-directory=DIRECTORY 将所有参数指定的源文件或目录;

移动至 指定目录;

-T, –no-target-directory 将目标文件视作普通文件处理;

-u, –update 只在源文件文件比目标文件新,或目标文件;

不存在时才进行移动;

-v, –verbose 详细显示进行的步骤;

–help 显示此帮助信息并退出;

–version 显示版本信息并退出。

1.9 touch命令详解

touch 命令主要用于创建普通文件,用法为touch test.txt,如果文件存在,则表示修改当前文件时间,常用参数详解如下:

用法:touch [选项]… 文件…

将每个文件的访问时间和修改时间改为当前时间;

不存在的文件将会被创建为空文件,除非使用-c 或-h 选项;

如果文件名为”-“则特殊处理,更改与标准输出相关的文件的访问时间;

长选项必须使用的参数对于短选项时也是必需使用的;

-a 只更改访问时间;

-c, –no-create 不创建任何文件;

-d, –date=字符串 使用指定字符串表示时间而非当前时间;

-f (忽略);

-h, –no-dereference 会影响符号链接本身,而非符号链接所指示的目的地;

(当系统支持更改符号链接的所有者时,此选项才有用);

-m 只更改修改时间;

-r, –reference=文件 使用指定文件的时间属性而非当前时间;

-t STAMP 使用[[CC]YY]MMDDhhmm[.ss] 格式的时间而非当前时间;

–time=WORD 使用WORD 指定的时间:access、atime、use 都等于-a;

选项的效果,而modify、mtime 等于-m 选项的效果;

–help 显示此帮助信息并退出;

–version 显示版本信息并退出。

1.10 cat命令详解

cat 命令主要用于查看文件内容,用法 cat test.txt 可以查看test.txt内容,常用参数详解如下:

用法:cat [选项]… [文件]…

将[文件]或标准输入组合输出到标准输出。

-A, –show-all 等于-vET;

-b, –number-nonblank 对非空输出行编号;

-e 等于-vE;

-E, –show-ends 在每行结束处显示”$”;

-n, –number 对输出的所有行编号;

-s, –squeeze-blank 不输出多行空行;

-t 与-vT 等价;

-T, –show-tabs 将跳格字符显示为^I;

-u (被忽略);

-v, –show-nonprinting 使用^ 和M- 引用,除了LFD和 TAB 之外;

–help 显示此帮助信息并退出;

–version 显示版本信息并退出。

cat还有一种用法,cat …EOF…EOF,表示追加内容至/tmp/test.txt文件中,如下:

cat >>/tmp/test.txt<<EOF

My Name is JFEDU.NET

I am From Bei jing.

EOF

cat test.txt |more 分页显示text内容,|符号是管道符,用于把|前的输出作为后面命令的输入。More命令常用于分页查看某文件或者内容。

1.11 head命令详解

head命令主要用于查看文件内容,通常查看文件前10行,head -10 /var/log/messages可以查看该文件前10行的内容,常用参数详解如下:

用法:head [选项]… [文件]…

将每个指定文件的头10 行显示到标准输出。

如果指定了多于一个文件,在每一段输出前会给出文件名作为文件头。

如果不指定文件,或者文件为”-“,则从标准输入读取数据,长选项必须使用的参数对于短选项时也是必需使用的;

-q, –quiet, –silent 不显示包含给定文件名的文件头;

-v, –verbose 总是显示包含给定文件名的文件头;

–help 显示此帮助信息并退出;

–version 显示版本信息并退出;

-c, –bytes=[-]K 显示每个文件的前K 字节内容,如果附加”-“参数,则除了每个文件的最后K字节数据外显示剩余全部内容;

-n, –lines=[-]K 显示每个文件的前K 行内容,如果附加”-“参数,则除了每个文件的最后K 行外显示剩余全部内容。

1.12 tail命令详解

tail命令主要用于查看文件内容,通常查看末尾10行,tail –fn 100 /var/log/messages可以实时查看该文件末尾100行的内容,常用参数详解如下:

用法:tail [选项]… [文件]…

显示每个指定文件的最后10 行到标准输出。

若指定了多于一个文件,程序会在每段输出的开始添加相应文件名作为头。

如果不指定文件或文件为”-” ,则从标准输入读取数据。

长选项必须使用的参数对于短选项时也是必需使用的。

-n, –lines=K 输出的总行数,默认为10行;

-q, –quiet, –silent 不输出给出文件名的头;

–help 显示此帮助信息并退出;

–version 显示版本信息并退出;

-f, –follow[={name|descriptor}] 即时输出文件变化后追加的数据;

-f, –follow 等于–follow=descriptor

-F 即–follow=name –retry

-c, –bytes=K 输出最后K字节;另外,使用-c +K 从每个文件的第K字节输出。

1.13 chmod命令详解

chmod命令主要用于修改文件或者目录的权限,例如chmod o+w test.txt,赋予test.txt其他人w写权限,常用参数详解如下:

用法:chmod [选项]… 模式[,模式]… 文件…

 或:chmod [选项]… 八进制模式 文件…

 或:chmod [选项]… –reference=参考文件 文件,将每个文件的模式更改为指定值。

-c, –changes 类似 –verbose,但只在有更改时才显示结果

–no-preserve-root 不特殊对待根目录(默认);

–preserve-root 禁止对根目录进行递归操作;

-f, –silent, –quiet 去除大部份的错误信息;

-R, –recursive 以递归方式更改所有的文件及子目录;

–help 显示此帮助信息并退出;

–version 显示版本信息并退出;

-v, –verbose 为处理的所有文件显示诊断信息;

–reference=参考文件 使用指定参考文件的模式,而非自行指定权限模式。

1.14 chown命令详解

chown命令主要用于文件或者文件夹宿主及属组的修改,命令格式例如chown –R root.root /tmp/test.txt,表示修改test.txt文件的用户和组均为root,常用参数详解如下:

用法:chown [选项]… [所有者][:[组]] 文件…

 或:chown [选项]… –reference=参考文件 文件…

更改每个文件的所有者和/或所属组。

当使用 –referebce 参数时,将文件的所有者和所属组更改为与指定参考文件相同。

-f, –silent, –quiet 去除大部份的错误信息

–reference=参考文件 使用参考文件的所属组,而非指定值;

-R, –recursive 递归处理所有的文件及子目录;

-v, –verbose 为处理的所有文件显示诊断信息;

-H 命令行参数是一个通到目录的符号链接,则遍历符号链接;

-L 历每一个遇到的通到目录的符号链接;

-P 历任何符号链接(默认);

–help 显示帮助信息并退出;

–version 显示版本信息并退出。

1.15 echo命令详解

echo命令主要用于打印字符或者回显,例如输入echo ok,会显示ok, echo ok > test.txt 则会把ok字符覆盖test.txt内容。>表示覆盖,原内容被覆盖,>>表示追加,原内容不变。

例如echo ok >> test.txt,表示向test.txt文件追加OK字符,不覆盖原文件里的内容,常用参数详解如下:

使用-e扩展参数选项时,与如下参数一起使用,有不同含义,例如:

\a 发出警告声

\b 删除前一个字符

\c 最后不加上换行符号;

\f 换行但光标仍旧停留在原来的位置;

\n 换行且光标移至行首;

\r 光标移至行首,但不换行;

\t 插入tab; \v 与\f相同;

\\ 插入\字符;

\033[30m 黑色字 \033[0m

\033[31m 红色字 \033[0m

\033[32m 绿色字 \033[0m

\033[33m 黄色字 \033[0m

\033[34m 蓝色字 \033[0m

\033[35m 紫色字 \033[0m

\033[36m 天蓝字 \033[0m

\033[37m 白色字 \033[0m

\033[40;37m 黑底白字 \033[0m

\033[41;37m 红底白字 \033[0m

\033[42;37m 绿底白字 \033[0m

\033[43;37m 黄底白字 \033[0m

\033[44;37m 蓝底白字 \033[0m

\033[45;37m 紫底白字 \033[0m

\033[46;37m 天蓝底白字 \033[0m

\033[47;30m 白底黑字 \033[0m

echo颜色打印扩展,auto_lamp_v2.sh内容如下:

echo -e “\033[36mPlease Select Install Menu follow:\033[0m”

echo -e “\033[32m1)Install Apache Server\033[1m”

echo “2)Install MySQL Server”

echo “3)Install PHP Server”

echo “4)Configuration index.php and start LAMP server”

echo -e “\033[31mUsage: { /bin/sh $0 1|2|3|4|help}\033[0m”

执行结果如图4-3所示:

图4-3 echo –e颜色打印

1.16 df命令详解

df命令常用于磁盘分区查询,常用命令df –h,查看磁盘分区信息,常用参数详解如下:

用法:df [选项]… [文件]…

显示每个文件所在的文件系统的信息,默认是显示所有文件系统。

长选项必须使用的参数对于短选项时也是必需使用的。

-a, –all 显示所有文件系统的使用情况,包括虚拟文件系统;

-B, –block-size=SIZE 使用字节大小块;

-h, –human-readable 以人们可读的形式显示大小;

-H, –si 同-h,但是强制使用1000而不是1024;

-i, –inodes 显示inode 信息而非块使用量;

-k 即–block-size=1K;

-l, –local 只显示本机的文件系统;

–no-sync 取得使用量数据前不进行同步动作(默认);

-P, –portability 使用POSIX 兼容的输出格式;

–sync 取得使用量数据前先进行同步动作;

-t, –type=类型 只显示指定文件系统为指定类型的信息;

-T, –print-type 显示文件系统类型;

-x, –exclude-type=类型 只显示文件系统不是指定类型信息;

–help 显示帮助信息并退出;

–version 显示版本信息并退出。

1.17 du命令详解

du命令常用于查看文件在磁盘中的使用量,常用命令du -sh,查看当前目录所有文件及文件及的大小,常用参数详解如下:

用法:du [选项]… [文件]…

 或:du [选项]… –files0-from=F

计算每个文件的磁盘用量,目录则取总用量。

长选项必须使用的参数对于短选项时也是必需使用的。

-a, –all 输出所有文件的磁盘用量,不仅仅是目录; –apparent-size 显示表面用量,而并非是磁盘用量;虽然表面用量通常会小一些,但有时它会因为稀疏文件间的”洞”、内部碎片、非直接引用的块等原因而变大;

-B, –block-size=大小 使用指定字节数的块;

-b, –bytes 等于–apparent-size –block-size=1;

-c, –total 显示总计信息;

-H 等于–dereference-args (-D);

-h, –human-readable 以可读性较好的方式显示尺寸(例如:1K 234M 2G);

–si 类似-h,但在计算时使用1000 为基底而非1024;

-k 等于–block-size=1K;

-l, –count-links 如果是硬连接,就多次计算其尺寸;

-m 等于–block-size=1M;

-L, –dereference 找出任何符号链接指示的真正目的地;

-P, –no-dereference 不跟随任何符号链接(默认);

-0, –null 将每个空行视作0 字节而非换行符;

-S, –separate-dirs 不包括子目录的占用量;

-s, –summarize 只分别计算命令列中每个参数所占的总用量;

-x, –one-file-system 跳过处于不同文件系统之上的目录;

-X, –exclude-from=文件 排除与指定文件中描述的模式相符的文件;

-D, –dereference-args 解除命令行中列出的符号连接;

–files0-from=F 计算文件F中以NUL结尾的文件名对应占用的磁盘空间,如果F 的值是”-“,则从标准输入读入文件名。

如上为Linux初学者必备命令,当然Linux命令还有很多,后面章节会随时学习新的命令。

1.18 vi|vim编辑器实战

VI是一个命令行界面下的文本编辑工具,最早在1976年由Bill Joy开发,当时名字叫做ex。vi支持绝大多数操作系统(最早在BSD上发布),并且功能已经十分强大

1991年Bram Moolenaar基于vi进行改进,发布了vim,加入了对GUI的支持。

随着VIM更新发展,VIM已经不是普通意义上的文本编辑器,而是被广泛的作为在文本编辑、文本处理、代码开发等用途,Linux中主流的文本编辑器包括:VI、Vim、Sublime、Emacs、Light Table、Eclipse、Gedit等。

Vim强大的编辑能力中很大部分是来自于其普通模式命令。vim的设计理念是命令的组合。

  • “5dd”5表示总共5行,删除光标所在后的5行,包含光标行;
  • “d$” $”代表行尾,删除到行尾的内容,包含光标;
  • “2yy”表示复制光标及后2行,包括光标行;
  • “%d” %代表全部或者全局,%d表示删除文本所有的内容,也即是清空文档所有的内容。

VIM是一个主流开源的编辑器,其默认执行vim命令,会显示帮助乌干达贫困的孩子,如图4-4为vim与键盘键位功能对应关系:

图4-4 vim与键盘位置对应关系

1.19 VIM编辑器模式

Vim编辑器模式常用有三种,分别是:

  • 命令行模式;
  • 文本输入模式;
  • 末行模式。

vim是vi的升级版本,它是安装在Linux操作系统中的一个软件,官网为:www.vim.org

在Linux Shell终端下默认执行vim命令,按Enter键后:

  • 默认进入命令行模式;
  • 在命令行模式按i进入文本输入模式;
  • 按ESC进入命令行模式;
  • 按:进入末行模式。

1.20 VIM编辑器必备

VIM编辑器最强大的功能,就在于内部命令及规则使用,如下为VIM编辑器最常用的语法及规则:

  • 命令行模式:可以删除、复制、粘贴、撤销,可以切换到输入模式,输入模式跳转至命令行模式:按ESC键。

yy 复制光标所在行;

nyy 复制n行;

3yy 复制3行;

p,P 粘贴;

yw 复制光标所在的词组,不会复制标点符号;

3yw 复制三个词组;

u 撤消上一次;

U 撤消当前所有;

dd 删除整行;

ndd 删除n行;

x 删除一个字符;

u 逐行撤销;

dw 删除一个词组;

a 从光标所在字符后一个位置开始录入;

A 从光标所在行的行尾开始录入;

i 从光标所在字符前一个位置开始录入;

I 从光标所在行的行首开始录入;

o 跳至光标所在行的下一行行首开始录入;

O 跳至光标所在行的上一行行首开始录入;

R 从光标所在位置开始替换;

  • 末行模式主要功能包括:查找、替换、末行保存、退出等;

:w 保存;

:q 退出;

:s/x/y 替换1行;

:wq 保存退出;

1,5s/x/y 替换1,5行;

:wq! 强制保存退出;

1,$sx/y 从第一行到最后一行;

:q! 强制退出;

😡 保存;

/word 从前往后找,正向搜索;

?word 从后往前走,反向搜索;

:s/old/new/g 将old替换为new,前提是光标一定要移到那一行;

:s/old/new 将这一行中的第一次出现的old替换为new,只替换第一个;

:1,$s/old/new/g 第一行到最后一行中的old替换为new;

:1,2,3s/old/new/g 第一行第二行第三行中的old改为new;

vim +2 jfedu.txt 打开jfedu.txt文件,并将光标定位在第二行;

vim +/string jfedu.txt 打开jfedu.txt文件,并搜索关键词。

1.21 本章小结

通过对本章内容的学习,读者对Linux操作系统引导有了进一步的理解,能够快速解决Linux启动过程中的故障,同时学习了CentOS6与CentOS7系统的区别,理解了TCP/IP协议及IP地址相关基础内容。

学会了Linux初学必备的16个Linux命令,能使用命令熟练的操作Linux系统,通过对VIM编辑器的深入学习,能够熟练编辑、修改系统中任意的文本及配置文件。对Linux系统的认识及操作有了更进一步的飞跃。

1.22 同步作业

  1. 修改密码的命令默认为passwd,需要按Enter键两次,如何一条命令快速修改密码呢?
  2. 企业服务器,某天发现系统访问很慢,需要查看系统内核日志,请写出查看系统内核日志的命令;
  3. 如果在Linux系统/tmp/目录,快速创建1000个目录,目录名为:jfedu1、jfedu2、jfedu依次类推,不断增加;
  4. Httpd.conf配置文件中存在很多以#号开头的行,请使用vim相关指令删除#开头的行;