Bootstrap

Linux命令大全(非常详细)从零基础入门到精通,看完这一篇就够了_linux 命令

将创建的 bashrc 删除掉!

[root@www tmp]# rm -i bashrc  
rm: remove regular file `bashrc'? y

如果加上 -i 的选项就会主动询问喔,避免你删除到错误的档名!

3.1.3 修改文件【改】 vi或vim

先来个vim键盘图!

vi/vim 的使用

基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),**输入模式(Insert mode)**和 底线命令模式(Last line mode)。这三种模式的作用分别是:

3.1.3.1 命令模式:

用户刚刚启动 vi/vim,便进入了命令模式。

此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。

以下是常用的几个命令:

  • i 切换到输入模式,以输入字符。
  • x 删除当前光标所在处的字符。
  • : 切换到底线命令模式,以在最底一行输入命令。

若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。

命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

3.1.3.2 输入模式

在命令模式下按下i就进入了输入模式。

在输入模式中,可以使用以下按键:

  • 字符按键以及Shift组合,输入字符
  • ENTER,回车键,换行
  • BACK SPACE,退格键,删除光标前一个字符
  • DEL,删除键,删除光标后一个字符
  • 方向键,在文本中移动光标
  • HOME/END,移动光标到行首/行尾
  • Page Up/Page Down,上/下翻页
  • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
  • ESC,退出输入模式,切换到命令模式
3.1.3.4 底线命令模式

在命令模式下按下:(英文冒号)就进入了底线命令模式。

底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。

在底线命令模式中,基本的命令有(已经省略了冒号):

  • q 退出程序
  • w 保存文件

按ESC键可随时退出底线命令模式。

简单的说,我们可以将这三个模式想成底下的图标来表示:

打开文件

命令:vi 文件名
示例:打开当前目录下的aa.txt文件 vi aa.txt 或者 vim aa.txt

注意:使用vi编辑器打开文件后,并不能编辑,因为此时处于命令模式,点击键盘i/a/o进入编辑模式。

编辑文件

使用vi编辑器打开文件后点击按键:i ,a或者o即可进入编辑模式。

i:在光标所在字符前开始插入
a:在光标所在字符后开始插入
o:在光标所在行的下面另起一新行插入

保存或者取消编辑

保存文件:

第一步:ESC 进入命令行模式
第二步:: 进入底行模式
第三步:wq 保存并退出编辑

取消编辑:

第一步:ESC 进入命令行模式
第二步:: 进入底行模式
第三步:q! 撤销本次修改并退出编辑

3.1.4 文件的查看【查】

Linux系统中使用以下命令来查看文件的内容:

  • cat 由第一行开始显示文件内容
  • tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
  • nl 显示的时候,顺道输出行号!
  • more 一页一页的显示文件内容
  • less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
  • head 只看头几行
  • tail 只看尾巴几行

你可以使用 _man [命令]_来查看各个命令的使用文档,如 :man cp。

3.1.4.1 cat

由第一行开始显示文件内容

语法:

cat [-AbEnTv]

选项与参数:

  • -A :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
  • -b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
  • -E :将结尾的断行字节 $ 显示出来;
  • -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同;
  • -T :将 [tab] 按键以 ^I 显示出来;
  • -v :列出一些看不出来的特殊字符

检看 /etc/issue 这个文件的内容:

[root@www ~] cat /etc/issue  
CentOS release 6.4 (Final)  
Kernel \r on an \m

3.1.3.2 tac

tac与cat命令刚好相反,文件内容从最后一行开始显示,可以看出 tac 是 cat 的倒着写!如:

[root@www ~] tac /etc/issue  
  
Kernel \r on an \m  
CentOS release 6.4 (Final)

3.1.3.3 nl

显示行号

语法:

nl [-bnw] 文件

选项与参数:

  • -b :指定行号指定的方式,主要有两种:
    -b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
    -b t :如果有空行,空的那一行不要列出行号(默认值);
  • -n :列出行号表示的方法,主要有三种:
    -n ln :行号在荧幕的最左方显示;
    -n rn :行号在自己栏位的最右方显示,且不加 0 ;
    -n rz :行号在自己栏位的最右方显示,且加 0 ;
  • -w :行号栏位的占用的位数。

实例一:用 nl 列出 /etc/issue 的内容

[root@www ~] nl /etc/issue  
     1  CentOS release 6.4 (Final)  
     2  Kernel \r on an \m  
123

3.1.3.5 more

一页一页翻动

[root@www ~] more /etc/man_db.config   
#  
# Generated automatically from man.conf.in by the  
# configure script.  
#  
# man.conf from man-1.6d  
....(中间省略)....  
--More--(28%)  <== 重点在这一行喔!你的光标也会在这里等待你的命令

在 more 这个程序的运行过程中,你有几个按键可以按的:

  • 空白键 (space):代表向下翻一页;
  • Enter :代表向下翻『一行』;
  • /字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
  • :f :立刻显示出档名以及目前显示的行数;
  • q :代表立刻离开 more ,不再显示该文件内容。
  • b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。
3.1.3.6 less

一页一页翻动,以下实例输出/etc/man.config文件的内容:

[root@www ~] less /etc/man.config  
#  
# Generated automatically from man.conf.in by the  
# configure script.  
#  
# man.conf from man-1.6d  
....(中间省略)....  
:   <== 这里可以等待你输入命令!

less运行时可以输入的命令有:

  • 空白键 :向下翻动一页;
  • [pagedown]:向下翻动一页;
  • [pageup] :向上翻动一页;
  • /字串 :向下搜寻『字串』的功能;
  • ?字串 :向上搜寻『字串』的功能;
  • n :重复前一个搜寻 (与 / 或 ? 有关!)
  • N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
  • q :离开 less 这个程序;
3.1.3.7 head

取出文件前面几行

语法:

head [-n number] 文件

选项与参数:

  • -n :后面接数字,代表显示几行的意思
[root@www ~] head /etc/man.config

默认的情况中,显示前面 10 行!若要显示前 20 行,就得要这样:

[root@www ~] head -n 20 /etc/man.config

3.1.3.8 tail

取出文件后面几行

语法:

tail [-n number] 文件

选项与参数:

  • -n :后面接数字,代表显示几行的意思
  • -f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测
[root@www ~] tail /etc/man.config  
# 默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:[root@www ~] tail -n 20 /etc/man.config

3.2 权限修改

Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。利用 chmod 可以藉以控制文件如何被他人所调用。

使用权限 : 所有使用者

语法
chmod [-cfvR] [--help] [--version] mode file...

参数说明

mode : 权限设定字串,格式如下 :

[ugoa...][[+-=][rwxX]...][,...]

其中:

  • u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
    • 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
  • r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。

其他参数说明:

  • -c : 若该文件权限确实已经更改,才显示其更改动作
  • -f : 若该文件权限无法被更改也不要显示错误讯息
  • -v : 显示权限变更的详细资料
  • -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
  • –help : 显示辅助说明
  • –version : 显示版本

权限的设定方法有两种, 分别可以使用数字或者是符号来进行权限的变更。

数字类型改变档案权限:

符号类型改变档案权限:

四、压缩文件操作

===========

Linux 常用的压缩与解压缩命令有:tar、gzip、gunzip、bzip2、bunzip2、compress 、uncompress、 zip、 unzip、rar、unrar 等。

4.1 打包和压缩和解压

Windows的压缩文件的扩展名 .zip/.rar
linux中的打包文件:aa.tar
linux中的压缩文件:bb.gz
linux中打包并压缩的文件:.tar.gz

Linux中的打包文件一般是以.tar结尾的,压缩的命令一般是以.gz结尾的。
而一般情况下打包和压缩是一起进行的,打包并压缩后的文件的后缀名一般.tar.gz。

4.1.1 tar

最常用的打包命令是 tar,使用 tar 程序打出来的包我们常称为 tar 包,tar 包文件的命令通常都是以 .tar 结尾的。生成 tar 包后,就可以用其它的程序来进行压缩了,所以首先就来讲讲 tar 命令的基本用法。

tar 命令的选项有很多(用 man tar 可以查看到),但常用的就那么几个选项,下面来举例说明一下:

 tar -cf all.tar *.jpg

这条命令是将所有 .jpg 的文件打成一个名为 all.tar 的包。-c 是表示产生新的包,-f 指定包的文件名。

 tar -rf all.tar *.gif

这条命令是将所有 .gif 的文件增加到 all.tar 的包里面去,-r 是表示增加文件的意思。

 tar -uf all.tar logo.gif

这条命令是更新原来 tar 包 all.tar 中 logo.gif 文件,-u 是表示更新文件的意思。

 tar -tf all.tar

这条命令是列出 all.tar 包中所有文件,-t 是列出文件的意思。

 tar -xf all.tar

这条命令是解出 all.tar 包中所有文件,-x 是解开的意思。

以上就是 tar 的最基本的用法。为了方便用户在打包解包的同时可以压缩或解压文件,tar 提供了一种特殊的功能。这就是 tar 可以在打包或解包的同时调用其它的压缩程序,比如调用 gzip、bzip2 等。

4.1.1.1 tar调用

gzip 是 GNU 组织开发的一个压缩程序,.gz 结尾的文件就是 gzip 压缩的结果。与 gzip 相对的解压程序是 gunzip。tar 中使用 -z 这个参数来调用gzip。下面来举例说明一下:

 tar -czf all.tar.gz *.jpg

这条命令是将所有 .jpg 的文件打成一个 tar 包,并且将其用 gzip 压缩,生成一个 gzip 压缩过的包,包名为 all.tar.gz。

 tar -xzf all.tar.gz

这条命令是将上面产生的包解开。

4.1.1.2 tar 调用 bzip2

bzip2 是一个压缩能力更强的压缩程序,.bz2 结尾的文件就是 bzip2 压缩的结果。

与 bzip2 相对的解压程序是 bunzip2。tar 中使用 -j 这个参数来调用 gzip。下面来举例说明一下:

 tar -cjf all.tar.bz2 *.jpg

这条命令是将所有 .jpg 的文件打成一个 tar 包,并且将其用 bzip2 压缩,生成一个 bzip2 压缩过的包,包名为 all.tar.bz2

 tar -xjf all.tar.bz2

这条命令是将上面产生的包解开。

4.1.1.3 tar 调用 compress

compress 也是一个压缩程序,但是好象使用 compress 的人不如 gzip 和 bzip2 的人多。.Z 结尾的文件就是 bzip2 压缩的结果。与 compress 相对的解压程序是 uncompress。tar 中使用 -Z 这个参数来调用 compress。下面来举例说明一下:

 tar -cZf all.tar.Z *.jpg

这条命令是将所有 .jpg 的文件打成一个 tar 包,并且将其用 compress 压缩,生成一个 uncompress 压缩过的包,包名为 all.tar.Z。

 tar -xZf all.tar.Z

这条命令是将上面产生的包解开。

有了上面的知识,你应该可以解开多种压缩文件了,下面对于 tar 系列的压缩文件作一个小结:

1) 对于.tar结尾的文件

tar -xf all.tar

2) 对于 .gz 结尾的文件

gzip -d all.gz  
gunzip all.gz

3)对于 .tgz 或 .tar.gz 结尾的文件

tar -xzf all.tar.gz  
tar -xzf all.tgz

4) 对于 .bz2 结尾的文件

bzip2 -d all.bz2  
bunzip2 all.bz2

5) 对于 tar.bz2 结尾的文件

tar -xjf all.tar.bz2

6) 对于 .Z 结尾的文件

uncompress all.Z

7) 对于 .tar.Z 结尾的文件

tar -xZf all.tar.z

另外对于 Windows 下的常见压缩文件 .zip 和 .rar,Linux 也有相应的方法来解压它们:

1) 对于 .zip

linux 下提供了 zip 和 unzip 程序,zip 是压缩程序,unzip 是解压程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法:

 zip all.zip *.jpg

这条命令是将所有 .jpg 的文件压缩成一个 zip 包:

 unzip all.zip

这条命令是将 all.zip 中的所有文件解压出来。

2) 对于 .rar

要在 linux 下处理 .rar 文件,需要安装 RAR for Linux。下载地址:http://www.rarsoft.com/download.htm,下载后安装即可。

 tar -xzpvf rarlinux-x64-5.6.b5.tar.gz  
 cd rar   
 make

这样就安装好了,安装后就有了 rar 和 unrar 这两个程序,rar 是压缩程序,unrar 是解压程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法:

 rar a all *.jpg

这条命令是将所有 .jpg 的文件压缩成一个 rar 包,名为 all.rar,该程序会将 .rar 扩展名将自动附加到包名后。

 unrar e all.rar

这条命令是将 all.rar 中的所有文件解压出来

4.2 扩展内容

tar

-c: 建立压缩档案   
-x:解压   
-t:查看内容 shell  
-r:向压缩归档文件末尾追加文件   
-u:更新原压缩包中的文件

这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。

-z:有gzip属性的   
-j:有bz2属性的   
-Z:有compress属性的   
-v:显示所有过程   
-O:将文件解开到标准输出

下面的参数 -f 是必须的:

-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。

tar -cf all.tar *.jpg

这条命令是将所有 .jpg 的文件打成一个名为 all.tar 的包。-c 是表示产生新的包,-f 指定包的文件名。

 tar -rf all.tar *.gif

这条命令是将所有 .gif 的文件增加到 all.tar 的包里面去。-r 是表示增加文件的意思。

 tar -uf all.tar logo.gif

这条命令是更新原来 tar 包 all.tar 中 logo.gif 文件,-u 是表示更新文件的意思。

 tar -tf all.tar

这条命令是列出 all.tar 包中所有文件,-t 是列出文件的意思。

 tar -xf all.tar

这条命令是解出 all.tar 包中所有文件,-x 是解开的意思。

压缩

tar –cvf jpg.tar *.jpg       // 将目录里所有jpg文件打包成 tar.jpg   
tar –czf jpg.tar.gz *.jpg    // 将目录里所有jpg文件打包成 jpg.tar 后,并且将其用 gzip 压缩,生成一个 gzip 压缩过的包,命名为 jpg.tar.gz   
tar –cjf jpg.tar.bz2 *.jpg   // 将目录里所有jpg文件打包成 jpg.tar 后,并且将其用 bzip2 压缩,生成一个 bzip2 压缩过的包,命名为jpg.tar.bz2   
tar –cZf jpg.tar.Z *.jpg     // 将目录里所有 jpg 文件打包成 jpg.tar 后,并且将其用 compress 压缩,生成一个 umcompress 压缩过的包,命名为jpg.tar.Z   
rar a jpg.rar *.jpg          // rar格式的压缩,需要先下载 rar for linux   
zip jpg.zip *.jpg            // zip格式的压缩,需要先下载 zip for linux

解压

tar –xvf file.tar         // 解压 tar 包   
tar -xzvf file.tar.gz     // 解压 tar.gz   
tar -xjvf file.tar.bz2    // 解压 tar.bz2   
tar –xZvf file.tar.Z      // 解压 tar.Z   
unrar e file.rar          // 解压 rar   
unzip file.zip            // 解压 zip

总结

1、*.tar 用 tar –xvf 解压   
2、*.gz 用 gzip -d或者gunzip 解压   
3、*.tar.gz和*.tgz 用 tar –xzf 解压   
4、*.bz2 用 bzip2 -d或者用bunzip2 解压   
5、*.tar.bz2用tar –xjf 解压   
6、*.Z 用 uncompress 解压   
7、*.tar.Z 用tar –xZf 解压   
8、*.rar 用 unrar e解压   
9、*.zip 用 unzip 解压

五、查找命令

5.1 grep

grep命令是一种强大的文本搜索工具

使用实例:

ps -ef | grep sshd  查找指定ssh服务进程   
ps -ef | grep sshd | grep -v grep 查找指定服务进程,排除gerp身   
ps -ef | grep sshd -c 查找指定进程个数

从文件内容查找匹配指定字符串的行:

$ grep "被查找的字符串" 文件名

例子:在当前目录里第一级文件夹中寻找包含指定字符串的 .in 文件

grep "thermcontact" /.in

从文件内容查找与正则表达式匹配的行:

$ grep –e "正则表达式" 文件名

查找时不区分大小写:

$ grep –i "被查找的字符串" 文件名

查找匹配的行数:

$ grep -c “被查找的字符串” 文件名

从文件内容查找不匹配指定字符串的行:

$ grep –v "被查找的字符串" 文件名

5.2 find

find命令在目录结构中搜索文件,并对搜索结果执行指定的操作。

find 默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。

使用实例:

find . -name "*.log" -ls  在当前目录查找以.log结尾的文件,并显示详细信息。find /root/ -perm 600   查找/root/目录下权限为600的文件   
find . -type f -name "*.log"  查找当目录,以.log结尾的普通文件   
find . -type d | sort   查找当前所有目录并排序   
find . -size +100M  查找当前目录大于100M的文件

从根目录开始查找所有扩展名为 .log 的文本文件,并找出包含 “ERROR” 的行:

$ find / -type f -name "*.log" | xargs grep "ERROR"

例子:从当前目录开始查找所有扩展名为 .in 的文本文件,并找出包含 “thermcontact” 的行:

find . -name "*.in" | xargs grep "thermcontact"

5.3 locate

locate 让使用者可以很快速的搜寻某个路径。默认每天自动更新一次,所以使用locate 命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。如果数据库中没有查询的数据,则会报出locate: can not stat () `/var/lib/mlocate/mlocate.db’: No such file or directory该错误!updatedb即可!

yum -y install mlocate 如果是精简版CentOS系统需要安装locate命令

使用实例:

updatedb  
locate /etc/sh 搜索etc目录下所有以sh开头的文件   
locate pwd 查找和pwd相关的所有文件

5.4 whereis

whereis命令是定位可执行文件、源代码文件、帮助文件在文件系统中的位置。这些文件的属性应属于原始代码,二进制文件,或是帮助文件。

使用实例:

whereis ls    将和ls文件相关的文件都查找出来

5.5 which

which命令的作用是在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。

使用实例:

which pwd  查找pwd命令所在路径   
which java  查找path中java的路径

六、su、sudo

6.1 su

Linux su命令用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码。

使用权限:所有使用者。

语法
su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]

参数说明

  • -f 或 —fast 不必读启动档(如 csh.cshrc 等),仅用于 csh 或 tcsh
  • -m -p 或 —preserve-environment 执行 su 时不改变环境变数
  • -c command 或 —command=command 变更为帐号为 USER 的使用者并执行指令(command)后再变回原来使用者
  • -s shell 或 —shell=shell 指定要执行的 shell (bash csh tcsh 等),预设值为 /etc/passwd 内的该使用者(USER) shell
  • –help 显示说明文件
  • –version 显示版本资讯
    • -l 或 —login 这个参数加了之后,就好像是重新 login 为该使用者一样,大部份环境变数(HOME SHELL USER等等)都是以该使用者(USER)为主,并且工作目录也会改变,如果没有指定 USER ,内定是 root
  • USER 欲变更的使用者帐号
  • ARG 传入新的 shell 参数
实例

变更帐号为 root 并在执行 ls 指令后退出变回原使用者

su -c ls root

变更帐号为 root 并传入 -f 参数给新执行的 shell

su root -f

变更帐号为 clsung 并改变工作目录至 clsung 的家目录(home dir)

su - clsung

切换用户

[email protected]:~$ whoami //显示当前用户  
hnlinux  
[email protected]:~$ pwd //显示当前目录  
/home/hnlinux  
[email protected]:~$ su root //切换到root用户  
密码:[email protected]:/home/hnlinux# whoami   
root  
[email protected]:/home/hnlinux# pwd  
/home/hnlinux

切换用户,改变环境变量

[email protected]:~$ whoami //显示当前用户  
hnlinux  
[email protected]:~$ pwd //显示当前目录  
/home/hnlinux  
[email protected]:~$ su - root //切换到root用户  
密码:[email protected]:/home/hnlinux# whoami   
root  
[email protected]:/home/hnlinux# pwd //显示当前目录  
/root

su用于用户之间的切换。但是切换前的用户依然保持登录状态。如果是root 向普通或虚拟用户切换不需要密码,反之普通用户切换到其它任何用户都需要密码验证。

su test:切换到test用户,但是路径还是/root目录  
su - test : 切换到test用户,路径变成了/home/test  
su : 切换到root用户,但是路径还是原来的路径  
su - : 切换到root用户,并且路径是/root  
su不足:如果某个用户需要使用root权限、则必须要把root密码告诉此用户。退出返回之前的用户:exit

6.2 sudo

sudo是为所有想使用root权限的普通用户设计的。可以让普通用户具有临时使用root权限的权利。只需输入自己账户的密码即可。

进入sudo配置文件命令:

vi /etc/sudoer或者visudo

案例:
允许hadoop用户以root身份执行各种应用命令,需要输入hadoop用户的密码。
hadoop ALL=(ALL) ALL

案例:
只允许hadoop用户以root身份执行ls 、cat命令,并且执行时候免输入密码。
配置文件中:
hadoop ALL=NOPASSWD: /bin/ls, /bin/cat

su root -f

变更帐号为 clsung 并改变工作目录至 clsung 的家目录(home dir)

su - clsung

切换用户

[email protected]:~$ whoami //显示当前用户  
hnlinux  
[email protected]:~$ pwd //显示当前目录  
/home/hnlinux  
[email protected]:~$ su root //切换到root用户  
密码:[email protected]:/home/hnlinux# whoami   
root  
[email protected]:/home/hnlinux# pwd  
/home/hnlinux

切换用户,改变环境变量

[email protected]:~$ whoami //显示当前用户  
hnlinux  
[email protected]:~$ pwd //显示当前目录  
/home/hnlinux  
[email protected]:~$ su - root //切换到root用户  
密码:[email protected]:/home/hnlinux# whoami   
root  
[email protected]:/home/hnlinux# pwd //显示当前目录  
/root

su用于用户之间的切换。但是切换前的用户依然保持登录状态。如果是root 向普通或虚拟用户切换不需要密码,反之普通用户切换到其它任何用户都需要密码验证。

su test:切换到test用户,但是路径还是/root目录  
su - test : 切换到test用户,路径变成了/home/test  
su : 切换到root用户,但是路径还是原来的路径  
su - : 切换到root用户,并且路径是/root  
su不足:如果某个用户需要使用root权限、则必须要把root密码告诉此用户。退出返回之前的用户:exit

七、下载与安装 yum

yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。

基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。

7.1 yum 语法

yum [options] [command] [package ...]

  • **options:**可选,选项包括-h(帮助),-y(当安装过程提示选择全部为”yes”),-q(不显示安装的过程)等等。
  • **command:**要进行的操作。
  • package操作的对象。

7.2 yum常用命令

  • 1.列出所有可更新的软件清单命令:yum check-update
  • 2.更新所有软件命令:yum update
  • 3.仅安装指定的软件命令:yum install
  • 4.仅更新指定的软件命令:yum update
  • 5.列出所有可安裝的软件清单命令:yum list
  • 6.删除软件包命令:yum remove
  • 7.查找软件包 命令:yum search
  • 8.清除缓存命令:
  • yum clean packages: 清除缓存目录下的软件包
  • yum clean headers: 清除缓存目录下的 headers
  • yum clean oldheaders: 清除缓存目录下旧的 headers
  • yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的headers
实例 1

安装 pam-devel

[root@www ~] yum install pam-devel  
Setting up Install Process  
Parsing package install arguments  
Resolving Dependencies  <==先检查软件的属性相依问题  
--> Running transaction check  
---> Package pam-devel.i386 0:0.99.6.2-4.el5 set to be updated  
--> Processing Dependency: pam = 0.99.6.2-4.el5 for package: pam-devel  
--> Running transaction check  
---> Package pam.i386 0:0.99.6.2-4.el5 set to be updated  
filelists.xml.gz          100% |=========================| 1.6 MB    00:05  
filelists.xml.gz          100% |=========================| 138 kB    00:00  
-> Finished Dependency Resolution  
……(省略)

实例 2

移除 pam-devel

[root@www ~] yum remove pam-devel  
Setting up Remove Process  
Resolving Dependencies  <==同样的,先解决属性相依的问题  
--> Running transaction check  
---> Package pam-devel.i386 0:0.99.6.2-4.el5 set to be erased  
--> Finished Dependency Resolution  
  
Dependencies Resolved  
  
=============================================================================  
 Package                 Arch       Version          Repository        Size  
=============================================================================  
Removing:  
 pam-devel               i386       0.99.6.2-4.el5   installed         495 k  
  
Transaction Summary  
=============================================================================  
Install      0 Package(s)  
Update       0 Package(s)  
Remove       1 Package(s)  <==还好,并没有属性相依的问题,单纯移除一个软件  
  
Is this ok [y/N]: y  
Downloading Packages:  
Running rpm_check_debug  
Running Transaction Test  
Finished Transaction Test  
Transaction Test Succeeded  
Running Transaction  
  Erasing   : pam-devel                    ######################### [1/1]  
  
Removed: pam-devel.i386 0:0.99.6.2-4.el5  
Complete!

实例 3

利用 yum 的功能,找出以 pam 为开头的软件名称有哪些?

[root@www ~] yum list pam*  
Installed Packages  
pam.i386                  0.99.6.2-3.27.el5      installed  
pam_ccreds.i386           3-5                    installed  
pam_krb5.i386             2.2.14-1               installed  
pam_passwdqc.i386         1.0.2-1.2.2            installed  
pam_pkcs11.i386           0.5.3-23               installed  
pam_smb.i386              1.1.7-7.2.1            installed  
Available Packages <==底下则是『可升级』的或『未安装』的  
pam.i386                  0.99.6.2-4.el5         base  
pam-devel.i386            0.99.6.2-4.el5         base  
pam_krb5.i386             2.2.14-10              base


7.3 国内 yum 源

网易(163)yum源是国内最好的yum源之一 ,无论是速度还是软件版本,都非常的不错。

将yum源设置为163 yum,可以提升软件包安装和更新的速度,同时避免一些常见软件版本无法找到。

安装步骤

首先备份/etc/yum.repos.d/CentOS-Base.repo

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup  
1

下载对应版本 repo 文件, 放入 /etc/yum.repos.d/ (操作前请做好相应备份)

  • CentOS5 :http://mirrors.163.com/.help/CentOS5-Base-163.repo
  • CentOS6 :http://mirrors.163.com/.help/CentOS6-Base-163.repo
  • CentOS7 :http://mirrors.163.com/.help/CentOS7-Base-163.repo
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo  
mv CentOS6-Base-163.repo CentOS-Base.repo

运行以下命令生成缓存

yum clean all  
yum makecache

除了网易之外,国内还有其他不错的 yum 源,比如中科大和搜狐。

中科大的 yum 源,安装方法查看:https://lug.ustc.edu.cn/wiki/mirrors/help/centos

sohu 的 yum 源安装方法查看: http://mirrors.sohu.com/help/centos.htm

八. Linux 三剑客(awk,sed,grep)

awk、sed、grep更适合的方向:

  • grep 更适合单纯的查找或匹配文本
  • sed 更适合编辑匹配到的文本
  • awk 更适合格式化文本,对文本进行较复杂格式处理

8.1 awk

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。

之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

语法
awk [选项参数] 'script' var=value file(s)  
或  
awk [选项参数] -f scriptfile var=value file(s)

选项参数说明:

  • -F fs or —field-separator fs
    指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
  • -v var=value or —asign var=value
    赋值一个用户定义变量。
  • -f scripfile or —file scriptfile
    从脚本文件中读取awk命令。
  • -mf nnn and -mr nnn
    对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
  • -W compact or —compat, -W traditional or —traditional
    在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
  • -W copyleft or —copyleft, -W copyright or —copyright
    打印简短的版权信息。
  • -W help or —help, -W usage or —usage
    打印全部awk选项和每个选项的简短说明。
  • -W lint or —lint
    打印不能向传统unix平台移植的结构的警告。
  • -W lint-old or —lint-old
    打印关于不能向传统unix平台移植的结构的警告。
  • -W posix
    打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符 =不能代替^ 和 ^=;fflush无效。
  • -W re-interval or —re-inerval
    允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。
  • -W source program-text or —source program-text
    使用program-text作为源代码,可与-f命令混用。
  • -W version or —version
    打印bug报告信息的版本。
基本用法

log.txt文本内容如下:

2 this is a test  
3 Are you like awk  
This's a test  
10 There are orange,apple,mongo

用法一:

awk '{[pattern] action}' {filenames}   # 行匹配语句 awk '' 只能用单引号

实例:

# 每行按空格或TAB分割,输出文本中的1、4项  
 $ awk '{print $1,$4}' log.txt  
 ---------------------------------------------  
 2 a  
 3 like  
 This's  
 10 orange,apple,mongo  
 # 格式化输出  
 $ awk '{printf "%-8s %-10s\n",$1,$4}' log.txt  
 ---------------------------------------------  
 2        a  
 3        like  
 This's  
 10       orange,apple,mongo

用法二:

awk -F  #-F相当于内置变量FS, 指定分割字符

实例:

# 使用","分割  
 $  awk -F, '{print $1,$2}'   log.txt  
 ---------------------------------------------  
 2 this is a test  
 3 Are you like awk  
 This's a test  
 10 There are orange apple  
 # 或者使用内建变量  
 $ awk 'BEGIN{FS=","} {print $1,$2}'     log.txt  
 ---------------------------------------------  
 2 this is a test  
 3 Are you like awk  
 This's a test  
 10 There are orange apple  
 # 使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割  
 $ awk -F '[ ,]'  '{print $1,$2,$5}'   log.txt  
 ---------------------------------------------  
 2 this test  
 3 Are awk  
 This's a  
 10 There apple

用法三:

awk -v  # 设置变量

实例:

 $ awk -va=1 '{print $1,$1+a}' log.txt  
 ---------------------------------------------  
 2 3  
 3 4  
 This's 1  
 10 11  
 $ awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt  
 ---------------------------------------------  
 2 3 2s  
 3 4 3s  
 This's 1 This'ss  
 10 11 10s

用法四:

awk -f {awk脚本} {文件名}

实例:

 $ awk -f cal.awk log.txt

运算符

| 运算符 | 描述 |
|
|
| — | — | — | — |
| = += -= = /= %= ^= *= | 赋值 |
|
|
| ?: | C条件表达式 |
|
|
| \ | \ |
| 逻辑或 |
| && | 逻辑与 |
|
|
| ~ 和 !~ | 匹配正则表达式和不匹配正则表达式 |
|
|
| < <= > >= != == | 关系运算符 |
|
|
| 空格 | 连接 |
|
|
| + - | 加,减 |
|
|
| * / % | 乘,除与求余 |
|
|
| + - ! | 一元加,减和逻辑非 |
|
|
| ^ * | 求幂 |
|
|
| ++ – | 增加或减少,作为前缀或后缀 |
|
|
| $ | 字段引用 |
|
|
| in | 数组成员 |
|
|

过滤第一列大于2的行

$ awk '$1>2' log.txt    #命令  
#输出  
3 Are you like awk  
This's a test  
10 There are orange,apple,mongo  
12345

过滤第一列等于2的行

$ awk '$1==2 {print $1,$3}' log.txt    #命令  
#输出  
2 is  
123

过滤第一列大于2并且第二列等于’Are’的行

$ awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt    #命令  
#输出  
3 Are you  
123

内建变量
变量描述
$n当前记录的第n个字段,字段间由FS分隔
$0完整的输入记录
ARGC命令行参数的数目
ARGIND命令行中当前文件的位置(从0开始算)
ARGV包含命令行参数的数组
CONVFMT数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组
ERRNO最后一个系统错误的描述
FIELDWIDTHS字段宽度列表(用空格键分隔)
FILENAME当前文件名
FNR各文件分别计数的行号
FS字段分隔符(默认是任何空格)
IGNORECASE如果为真,则进行忽略大小写的匹配
NF一条记录的字段的数目
NR已经读出的记录数,就是行号,从1开始
OFMT数字的输出格式(默认值是%.6g)
OFS输出记录分隔符(输出换行符),输出时用指定的符号代替换行符
ORS输出记录分隔符(默认值是一个换行符)
RLENGTH由match函数所匹配的字符串的长度
RS记录分隔符(默认是一个换行符)
RSTART由match函数所匹配的字符串的第一个位置
SUBSEP数组下标分隔符(默认值是/034)
$ awk 'BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\n"} {printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}'  log.txt  
FILENAME ARGC  FNR   FS   NF   NR  OFS  ORS   RS  
---------------------------------------------  
log.txt    2    1         5    1  
log.txt    2    2         5    2  
log.txt    2    3         3    3  
log.txt    2    4         4    4  
$ awk -F\' 'BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\n"} {printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}'  log.txt  
FILENAME ARGC  FNR   FS   NF   NR  OFS  ORS   RS  
---------------------------------------------  
log.txt    2    1    '    1    1  
log.txt    2    2    '    1    2  
log.txt    2    3    '    2    3  
log.txt    2    4    '    1    4  
# 输出顺序号 NR, 匹配文本行号  
$ awk '{print NR,FNR,$1,$2,$3}' log.txt  
---------------------------------------------  
1 1 2 this is  
2 2 3 Are you  
3 3 This's a test  
4 4 10 There are  
# 指定输出分割符  
$  awk '{print $1,$2,$5}' OFS=" $ "  log.txt  
---------------------------------------------  
2 $ this $ test  
3 $ Are $ awk  
This's $ a $  
10 $ There $

使用正则,字符串匹配
# 输出第二列包含 "th",并打印第二列与第四列  
$ awk '$2 ~ /th/ {print $2,$4}' log.txt  
---------------------------------------------  
this a

~ 表示模式开始。// 中是模式。

# 输出包含 "re" 的行  
$ awk '/re/ ' log.txt  
---------------------------------------------  
3 Are you like awk  
10 There are orange,apple,mongo


忽略大小写
$ awk 'BEGIN{IGNORECASE=1} /this/' log.txt  
---------------------------------------------  
2 this is a test  
This's a test


模式取反
$ awk '$2 !~ /th/ {print $2,$4}' log.txt  
---------------------------------------------  
Are like  
a  
There orange,apple,mongo  
$ awk '!/th/ {print $2,$4}' log.txt  
---------------------------------------------  
Are like  
a  
There orange,apple,mongo


awk脚本

关于 awk 脚本,我们需要注意两个关键词 BEGIN 和 END。

  • BEGIN{ 这里面放的是执行前的语句 }
  • END {这里面放的是处理完所有的行后要执行的语句 }
  • {这里面放的是处理每一行时要执行的语句}

假设有这么一个文件(学生成绩表):

$ cat score.txt  
Marry   2143 78 84 77  
Jack    2321 66 78 45  
Tom     2122 48 77 71  
Mike    2537 87 97 95  
Bob     2415 40 57 62

我们的 awk 脚本如下:

$ cat cal.awk  
#!/bin/awk -f  
#运行前  
BEGIN {  
    math = 0  
    english = 0  
    computer = 0  
  
    printf "NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL\n"  
    printf "---------------------------------------------\n"  
}  
#运行中  
{  
    math+=$3  
    english+=$4  
    computer+=$5  
    printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5  
}  
#运行后  
END {  
    printf "---------------------------------------------\n"  
    printf "  TOTAL:%10d %8d %8d \n", math, english, computer  
    printf "AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR  
}  
123456789101112131415161718192021222324

我们来看一下执行结果:

$ awk -f cal.awk score.txt  
NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL  
---------------------------------------------  
Marry  2143     78       84       77      239  
Jack   2321     66       78       45      189  
Tom    2122     48       77       71      196  
Mike   2537     87       97       95      279  
Bob    2415     40       57       62      159  
---------------------------------------------  
  TOTAL:       319      393      350  
AVERAGE:     63.80    78.60    70.00


另外一些实例

AWK 的 hello world 程序为:

BEGIN { print "Hello, world!" }

计算文件大小

$ ls -l *.txt | awk '{sum+=$5} END {print sum}'  
--------------------------------------------------  
666581

从文件中找出长度大于 80 的行:

awk 'length>80' log.txt

打印九九乘法表

seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}'

8.2 sed

Linux sed 命令是利用脚本来处理文本文件。

sed 可依照脚本的指令来处理、编辑文本文件。

Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

语法
sed [-hnV][-e<script>][-f<script文件>][文本文件]

参数说明

  • -e<script>--expression=<script> 以选项中指定的script来处理输入的文本文件。
  • -f

或–file=以选项中指定的script文件来处理输入的文本文件。

  • -h或–help 显示帮助。
  • -n或–quiet或–silent 仅显示script处理后的结果。
  • -V或–version 显示版本信息。

动作说明

  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  • d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
  • s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
实例

在testfile文件的第四行后添加一行,并将结果输出到标准输出,在命令行提示符下输入如下命令:

sed -e 4a\newLine testfile


为了做好运维面试路上的助攻手,特整理了上百道 **【运维技术栈面试题集锦】** ,让你面试不慌心不跳,高薪offer怀里抱!

这次整理的面试题,**小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。**

![](https://img-blog.csdnimg.cn/img_convert/c56fe2b25bc8ab2528a2654ae0ad7a3b.png)

本份面试集锦涵盖了

*   **174 道运维工程师面试题**
*   **128道k8s面试题**
*   **108道shell脚本面试题**
*   **200道Linux面试题**
*   **51道docker面试题**
*   **35道Jenkis面试题**
*   **78道MongoDB面试题**
*   **17道ansible面试题**
*   **60道dubbo面试题**
*   **53道kafka面试**
*   **18道mysql面试题**
*   **40道nginx面试题**
*   **77道redis面试题**
*   **28道zookeeper**

**总计 1000+ 道面试题, 内容 又全含金量又高**

*   **174道运维工程师面试题**

> 1、什么是运维?

> 2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?

> 3、现在给你三百台服务器,你怎么对他们进行管理?

> 4、简述raid0 raid1raid5二种工作模式的工作原理及特点

> 5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

> 6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

> 7、Tomcat和Resin有什么区别,工作中你怎么选择?

> 8、什么是中间件?什么是jdk?

> 9、讲述一下Tomcat8005、8009、8080三个端口的含义?

> 10、什么叫CDN?

> 11、什么叫网站灰度发布?

> 12、简述DNS进行域名解析的过程?

> 13、RabbitMQ是什么东西?

> 14、讲一下Keepalived的工作原理?

> 15、讲述一下LVS三种模式的工作过程?

> 16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

> 17、如何重置mysql root密码?

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618542503)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
照脚本的指令来处理、编辑文本文件。


Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。


#### 语法



sed [-hnV][-e


**参数说明**:


* `-e<script>`或`--expression=<script>` 以选项中指定的script来处理输入的文本文件。
* -f

 或–file=以选项中指定的script文件来处理输入的文本文件。
* -h或–help 显示帮助。
* -n或–quiet或–silent 仅显示script处理后的结果。
* -V或–version 显示版本信息。


**动作说明**:


* a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
* c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
* d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
* i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
* p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
* s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!


#### 实例


在testfile文件的第四行后添加一行,并将结果输出到标准输出,在命令行提示符下输入如下命令:



sed -e 4a\newLine testfile

为了做好运维面试路上的助攻手,特整理了上百道 【运维技术栈面试题集锦】 ,让你面试不慌心不跳,高薪offer怀里抱!

这次整理的面试题,小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。

[外链图片转存中…(img-h3y1ewRj-1714282824836)]

本份面试集锦涵盖了

  • 174 道运维工程师面试题
  • 128道k8s面试题
  • 108道shell脚本面试题
  • 200道Linux面试题
  • 51道docker面试题
  • 35道Jenkis面试题
  • 78道MongoDB面试题
  • 17道ansible面试题
  • 60道dubbo面试题
  • 53道kafka面试
  • 18道mysql面试题
  • 40道nginx面试题
  • 77道redis面试题
  • 28道zookeeper

总计 1000+ 道面试题, 内容 又全含金量又高

  • 174道运维工程师面试题

1、什么是运维?

2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?

3、现在给你三百台服务器,你怎么对他们进行管理?

4、简述raid0 raid1raid5二种工作模式的工作原理及特点

5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

7、Tomcat和Resin有什么区别,工作中你怎么选择?

8、什么是中间件?什么是jdk?

9、讲述一下Tomcat8005、8009、8080三个端口的含义?

10、什么叫CDN?

11、什么叫网站灰度发布?

12、简述DNS进行域名解析的过程?

13、RabbitMQ是什么东西?

14、讲一下Keepalived的工作原理?

15、讲述一下LVS三种模式的工作过程?

16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

17、如何重置mysql root密码?

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

;