Liste des commandes Linux

Libérer: 2023-08-02 15:55:12
avant
1112 Les gens l'ont consulté

Liste des commandes Linux

Remarque : Afin de faciliter la lecture du code, le # indiquant le mode administrateur a été supprimé du bloc de code de l'article. Ce n'est pas une erreur. Ne vous y trompez pas ! !

1. Commandes d'opération de base

Tout d'abord, commençons par quelques raccourcis clavier, qui sont très pratiques à retenir

Touche Tab—fonction d'achèvement des commandes

Touche Ctrl+c. —arrêter le programme en cours d'exécution

Touche Ctrl+d - équivalent à quitter, quitter

Touche Ctrl+l - effacer l'écran

1.1 Arrêt et redémarrage

1. Commande d'arrêt : shutdown

est principalement utilisée sur les serveurs du domaine Linux, et les opérations d'arrêt sont rarement rencontrées. Après tout, il n’y a aucune fin à exécuter un service sur le serveur, sauf circonstances particulières, il sera arrêté en dernier recours.

Le processus d'arrêt correct est : sync > shutdown > reboot > halt

Par exemple, vous pouvez exécuter la commande suivante pour arrêter :

sync 将数据由内存同步到硬盘中。shutdown 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:shutdown –h 10 ‘This server will shutdown after 10 mins’ 这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中。shutdown –h now 立马关机shutdown –h 20:25 系统会在今天20:25关机shutdown –h +10 十分钟后关机shutdown –r now 系统立马重启shutdown –r +10 系统十分钟后重启reboot 就是重启,等同于 shutdown –r nowhalt 关闭系统,等同于shutdown –h now 和 poweroff
Copier après la connexion

Ce qui suit est un exemple simple.


Liste des commandes Linux

Annuler la commande d'arrêt programmé : shutdown -c

最后总结一下,不管是重启系统还是关闭系统,首先要运行 sync 命令,把内存中的数据写到磁盘中。

关机的命令有 shutdown –h now halt poweroff init 0 , 重启系统的命令有 shutdown –r now reboot init 6

2.重启命令:reboot

Liste des commandes Linux

1.2 帮助命令

–-help命令

shutdown --help:ifconfig --help:查看网卡信息
Copier après la connexion

man命令(命令说明书)

man shutdown注意:man shutdown 打开命令说明书之后,使用按键q退出
Copier après la connexion

二、目录操作命令

我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /。

其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。

首先我们需要先知道什么是绝对路径与相对路径。

  • 绝对路径:路径的写法,由根目录 / 写起,例如:/usr/share/doc 这个目录。

  • 相对路径:路径的写法,不是由 / 写起,例如由/usr/share/doc 要到 /usr/share/man 底下时,可以写成:cd ../man 这就是相对路径的写法啦!

2.1 目录切换 cd

命令:cd 目录

cd是Change Directory的缩写,这是用来变换工作目录的命令。

cd /        切换到根目录cd /usr        切换到根目录下的usr目录cd ../        切换到上一级目录 或者  cd ..cd ~        切换到home目录cd -        切换到上次访问的目录
Copier après la connexion

2.2 目录查看 ls [-al]

命令:ls [-al]

语法:

ls [-aAdfFhilnrRSt] 目录名称ls [--color={never,auto,always}] 目录名称ls [--full-time] 目录名称
Copier après la connexion

ls 查看当前目录下的所有目录和文件ls -a 查看当前目录下的所有目录和文件(包括隐藏的文件)ls -l 或 ll 列表查看当前目录下的所有目录和文件(列表查看,显示更多信息)ls /dir 查看指定目录下的所有目录和文件 如:ls /usr

将家目录下的所有文件列出来(含属性与隐藏档)

ls -al ~
Copier après la connexion

2.3 目录操作【增,删,改,查】

2.3.1 创建目录【增】 mkdir

如果想要创建新的目录的话,那么就使用mkdir (make directory)吧。

语法:

mkdir [-mp] 目录名称
Copier après la connexion

选项与参数:

  • -m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~

  • -p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来!

实例:请到/tmp底下尝试创建数个新目录看看:

cd /tmp[root@www tmp] mkdir test    <==创建一名为 test 的新目录[root@www tmp] mkdir test1/test2/test3/test4mkdir: cannot create directory `test1/test2/test3/test4&#39;: No such file or directory       <== 没办法直接创建此目录啊![root@www tmp] mkdir -p test1/test2/test3/test4
Copier après la connexion

加了这个 -p 的选项,可以自行帮你创建多层目录!

实例:创建权限为 rwx–x—x 的目录。

[root@www tmp] mkdir -m 711 test2[root@www tmp] ls -ldrwxr-xr-x  3 root  root 4096 Jul 18 12:50 testdrwxr-xr-x  3 root  root 4096 Jul 18 12:53 test1drwx--x--x  2 root  root 4096 Jul 18 12:54 test2
Copier après la connexion

上面的权限部分,如果没有加上 -m 来强制配置属性,系统会使用默认属性。

如果我们使用 -m ,如上例我们给予 -m 711 来给予新的目录 drwx–x—x 的权限。

2.3.2 删除目录或文件【删】rm

 rm [-fir] 文件或目录
Copier après la connexion
Copier après la connexion

选项与参数:

  • -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;

  • -i :互动模式,在删除前会询问使用者是否动作

  • -r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!

删除文件:rm 文件 删除当前目录下的文件rm -f 文件 删除当前目录的的文件(不询问)

删除目录:rm -r aaa 递归删除当前目录下的aaa目录rm -rf aaa 递归删除当前目录下的aaa目录(不询问)

全部删除:rm -rf 将当前目录下的所有目录和文件全部删除rm -rf / 【慎用!慎用!慎用!】将根目录下的所有文件全部删除

注意:rm不仅可以删除目录,也可以删除其他文件或压缩包,为了方便大家的记忆,无论删除任何目录或文件,都直接使用 rm -rf 目录/文件/压缩包

rmdir (删除空的目录)

语法:

 rmdir [-p] 目录名称
Copier après la connexion

选项与参数:

  • -p :连同上一级『空的』目录也一起删除

删除 runoob 目录

[root@www tmp] rmdir runoob
Copier après la connexion

将 mkdir 实例中创建的目录(/tmp 底下)删除掉!

[root@www tmp] ls -l   <==看看有多少目录存在?drwxr-xr-x  3 root  root 4096 Jul 18 12:50 testdrwxr-xr-x  3 root  root 4096 Jul 18 12:53 test1drwx--x--x  2 root  root 4096 Jul 18 12:54 test2[root@www tmp] rmdir test   <==可直接删除掉,没问题[root@www tmp] rmdir test1  <==因为尚有内容,所以无法删除!rmdir: `test1&#39;: Directory not empty[root@www tmp] rmdir -p test1/test2/test3/test4[root@www tmp] ls -l        <==您看看,底下的输出中test与test1不见了!drwx--x--x  2 root  root 4096 Jul 18 12:54 test2
Copier après la connexion

利用 -p 这个选项,立刻就可以将 test1/test2/test3/test4 一次删除。

不过要注意的是,这个 rmdir 仅能删除空的目录,你可以使用 rm 命令来删除非空目录。

2.3.3 目录修改【改】mv 和 cp

mv (移动文件与目录,或修改名称)

语法:

[root@www ~] mv [-fiu] source destination[root@www ~] mv [options] source1 source2 source3 .... directory
Copier après la connexion

选项与参数:

  • -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;

  • -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!

  • -u :若目标文件已经存在,且 source 比较新,才会升级 (update)

cp (复制文件或目录)

cp 即拷贝文件和目录。

语法:

[root@www ~] cp [-adfilprsu] 来源档(source) 目标档(destination)[root@www ~] cp [options] source1 source2 source3 .... directory
Copier après la connexion

选项与参数:

  • -a:相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)

  • -d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;

  • -f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;

  • -i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)

  • -l:进行硬式连结(hard link)的连结档创建,而非复制文件本身;

  • -p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);

  • -r:递归持续复制,用於目录的复制行为;(常用)

  • -s:复制成为符号连结档 (symbolic link),亦即『捷径』文件;

  • -u:若 destination 比 source 旧才升级 destination !

一、重命名目录命令:mv 当前目录 新目录例如:mv aaa bbb 将目录aaa改为bbb注意:mv的语法不仅可以对目录进行重命名而且也可以对各种文件,压缩包等进行 重命名的操作

二、剪切目录命令:mv 目录名称 目录的新位置示例:将/usr/tmp目录下的aaa目录剪切到 /usr目录下面 mv /usr/tmp/aaa /usr注意:mv语法不仅可以对目录进行剪切操作,对文件和压缩包等都可执行剪切操作

三、拷贝目录命令:cp -r 目录名称 目录拷贝的目标位置 -r代表递归示例:将/usr/tmp目录下的aaa目录复制到 /usr目录下面 cp /usr/tmp/aaa /usr注意:cp命令不仅可以拷贝目录还可以拷贝文件,压缩包等,拷贝文件和压缩包时不 用写-r递归

2.3.4 搜索目录【查】find

Linux find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;
Copier après la connexion

命令:find 目录 参数 文件名称

部分参数:

find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。

expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。

-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件

-amin n : 在过去 n 分钟内被读取过

-anewer file : 比文件 file 更晚被读取过的文件

-atime n : 在过去n天内被读取过的文件

-cmin n : 在过去 n 分钟内被修改过

-cnewer file :比文件 file 更新的文件

-ctime n : 在过去n天内被修改过的文件

实例

将目前目录及其子目录下所有延伸档名是 c 的文件列出来。

find . -name "*.c"
Copier après la connexion

将目前目录其其下子目录中所有一般文件列出

find . -type f
Copier après la connexion

将目前目录及其子目录下所有最近 20 天内更新过的文件列出

find . -ctime -20
Copier après la connexion

2.4 当前目录显示 pwd

pwd (显示目前所在的目录)

pwd 是 Print Working Directory 的缩写,也就是显示目前所在目录的命令。

[root@www ~] pwd [-P]
Copier après la connexion

选项与参数:

  • -P :显示出确实的路径,而非使用连结 (link) 路径。

实例:单纯显示出目前的工作目录:

[root@www ~] pwd/root   <== 显示出目录啦~
Copier après la connexion

实例显示出实际的工作目录,而非连结档本身的目录名而已。

[root@www ~] cd /var/mail   <==注意,/var/mail是一个连结档[root@www mail] pwd/var/mail         <==列出目前的工作目录[root@www mail] pwd -P/var/spool/mail   <==怎么回事?有没有加 -P 差很多~[root@www mail] ls -ld /var/maillrwxrwxrwx 1 root root 10 Sep  4 17:54 /var/mail -> spool/mail# 看到这里应该知道为啥了吧?因为 /var/mail 是连结档,连结到 /var/spool/mail # 所以,加上 pwd -P 的选项后,会不以连结档的数据显示,而是显示正确的完整路径啊!
Copier après la connexion

三、文件操作命令

3.1 文件操作【增,删,改,查】

3.1.1 新建文件【增】touch

Linux touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。

ls -l 可以显示档案的时间记录。

语法

touch [-acfm][-d<日期时间>][-r<参考文件或目录>] [-t<日期时间>][--help][--version][文件或目录…]
Copier après la connexion
  • 参数说明

  • a 改变档案的读取时间记录。

  • m 改变档案的修改时间记录。

  • c 假如目的档案不存在,不会建立新的档案。与 —no-create 的效果一样。

  • f 不使用,是为了与其他 unix 系统的相容性而保留。

  • r 使用参考档的时间记录,与 —file 的效果一样。

  • d 设定时间与日期,可以使用各种不同的格式。

  • t 设定档案的时间记录,格式与 date 指令相同。

  • –no-create 不会建立新档案。

  • –help 列出指令格式。

  • –version 列出版本讯息。

实例

使用指令”touch”修改文件”testfile”的时间属性为当前系统时间,输入如下命令:

$ touch testfile                #修改文件的时间属性
Copier après la connexion

首先,使用ls命令查看testfile文件的属性,如下所示:

$ ls -l testfile                #查看文件的时间属性  #原来文件的修改时间为16:09  -rw-r--r-- 1 hdd hdd 55 2011-08-22 16:09 testfile
Copier après la connexion

执行指令”touch”修改文件属性以后,并再次查看该文件的时间属性,如下所示:

$ touch testfile                #修改文件时间属性为当前系统时间  $ ls -l testfile                #查看文件的时间属性  #修改后文件的时间属性为当前系统时间  -rw-r--r-- 1 hdd hdd 55 2011-08-22 19:53 testfile
Copier après la connexion

使用指令”touch”时,如果指定的文件不存在,则将创建一个新的空白文件。例如,在当前目录下,使用该指令创建一个空白文件”file”,输入如下命令:

$ touch file            #创建一个名为“file”的新的空白文件
Copier après la connexion

3.1.2 删除文件 【删】 rm

rm (移除文件或目录)

语法:

 rm [-fir] 文件或目录
Copier après la connexion
Copier après la connexion

选项与参数:

  • -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;

  • -i :互动模式,在删除前会询问使用者是否动作

  • -r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!

将创建的 bashrc 删除掉!

[root@www tmp]# rm -i bashrcrm: remove regular file `bashrc&#39;? y
Copier après la connexion

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

3.1.3 修改文件【改】 vi或vim

先来个vim键盘图!

Liste des commandes Linux

vi/vim 的使用

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

3.1.3.1 命令模式:

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

Les frappes dans cet état seront reconnues par Vim comme des commandes au lieu de saisir des caractères. Par exemple, si nous appuyons sur i à ce moment, nous n'entrerons pas de caractère, i est traité comme une commande.

Voici quelques commandes couramment utilisées :

  • iPasser en mode de saisie pour saisir des caractères.

  • xSupprimez le caractère à l'emplacement actuel du curseur.

  •  :Passez en mode commande de la ligne du bas pour saisir des commandes sur la ligne du bas.

Si vous souhaitez modifier du texte : démarrez Vim, entrez en mode commande, appuyez sur i pour passer en mode saisie.

Le mode Commande ne contient que certaines des commandes les plus basiques, vous devez donc toujours vous fier au mode commande de base pour saisir plus de commandes.

3.1.3.2 Mode de saisie

Appuyez sur i en mode commande pour accéder au mode de saisie.

En mode saisie, vous pouvez utiliser les touches suivantes :

  • Touches de caractères et combinaison Shift, saisir des caractères

  • ENTER, touche de saisie, saut de ligne

  • BACK SPACE, touche retour arrière, supprimer le caractère avant le curseur

  • DEL , touche Suppr, supprime un caractère après le curseur

  • touches directionnelles, déplace le curseur dans le texte

  • HOME/END, déplace le curseur au début/fin de la ligne

  • Page précédente /Page suivante, tourner les pages vers le haut/bas

  • Insérer, passer le curseur en mode saisie/remplacer, le curseur deviendra une barre verticale/soulignement

  • ESC , quittez le mode de saisie, passez en mode Commande

3.1.3.4 Mode de commande de la ligne de fond

Appuyez sur : (deux-points anglais) en mode de commande pour accéder au mode de commande de la ligne de fond.

Le mode de commande de la ligne inférieure vous permet de saisir des commandes à un ou plusieurs caractères, et il existe de nombreuses commandes disponibles.

En mode commande de ligne du bas, les commandes de base sont (les deux-points ont été omis) :

  • q Quittez le programme

  • w Enregistrez le fichier

Appuyez sur la touche ESC pour quitter le mode de commande de ligne de fond à tout moment.

En termes simples, nous pouvons considérer ces trois modes comme les icônes ci-dessous :

Liste des commandes Linux

Ouvrir le fichier

Commande : vi Exemple de nom de fichier : Ouvrez le fichier aa.txt dans le répertoire actuel via aa .txt ou vim aa.txt

Remarque : après avoir utilisé l'éditeur vi pour ouvrir le fichier, il ne peut pas être modifié car il est en mode commande. Cliquez sur l'entrée/sortie du clavier pour accéder au mode d'édition.

Modifier des fichiers

Utilisez l'éditeur vi pour ouvrir le fichier et cliquez sur les touches : i, a ou o pour accéder au mode d'édition.

i : Commencez l'insertion avant le caractère où se trouve le curseur : a : Commencez l'insertion après le caractère où se trouve le curseur o : Commencez à insérer une nouvelle ligne en dessous de la ligne où se trouve le curseur

Liste des commandes Linux

Enregistrer ou annuler l'édition

Enregistrer le fichier :

Étape 1 : ESC Passer en mode ligne de commande Étape 2 : Passer en mode résultat Étape 3 : wq Enregistrer et quitter l'édition

Annuler l'édition :

Étape 1 : ESC pour passer en mode ligne de commande Étape 2 : Passer en mode ligne de fond Étape 3 : q ! Annulez cette modification et quittez l'édition

3.1.4 Afficher les fichiers [Vérifier]

Dans le système Linux Utilisez la commande suivante pour afficher le contenu de le fichier :

  • cat affiche le contenu du fichier à partir de la première ligne

  • tac commence à partir de la dernière ligne, vous pouvez voir que tac est cat écrit à l'envers !

  • nl Une fois affiché, affichez le numéro de ligne !

  • plus Afficher le contenu du fichier page par page

  • less 与 more 类似,但是比 more 更好的是,他可以往前翻页!

  • head 只看头几行

  • tail 只看尾巴几行

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

3.1.4.1 cat

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

语法:

cat [-AbEnTv]
Copier après la connexion

选项与参数:

  • -A :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已;

  • -b :列出行号,仅针对非空白行做行号显示,空白行不标行号!

  • -E :将结尾的断行字节 $ 显示出来;

  • -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同;

  • -T :将 [tab] 按键以 ^I 显示出来;

  • -v :列出一些看不出来的特殊字符

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

[root@www ~] cat /etc/issueCentOS release 6.4 (Final)Kernel \r on an \m
Copier après la connexion

3.1.3.2 tac

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

[root@www ~] tac /etc/issueKernel \r on an \mCentOS release 6.4 (Final)
Copier après la connexion

3.1.3.3 nl

显示行号

语法:

nl [-bnw] 文件
Copier après la connexion

选项与参数:

  • -b :指定行号指定的方式,主要有两种:-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);-b t :如果有空行,空的那一行不要列出行号(默认值);

  • -n :列出行号表示的方法,主要有三种:-n ln :行号在荧幕的最左方显示;-n rn :行号在自己栏位的最右方显示,且不加 0 ;-n rz :行号在自己栏位的最右方显示,且加 0 ;

  • -w :行号栏位的占用的位数。

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

牛逼啊!接私活必备的 N 个开源项目!赶快收藏吧
Copier après la connexion
[root@www ~] nl /etc/issue     1  CentOS release 6.4 (Final)     2  Kernel \r on an \m123
Copier après la connexion

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%)  <== 重点在这一行喔!你的光标也会在这里等待你的命令
Copier après la connexion

在 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....(中间省略)....:   <== 这里可以等待你输入命令!
Copier après la connexion

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

  • 空白键 :向下翻动一页;

  • [pagedown]:向下翻动一页;

  • [pageup] :向上翻动一页;

  • /字串 :向下搜寻『字串』的功能;

  • ?字串 :向上搜寻『字串』的功能;

  • n :重复前一个搜寻 (与 / 或 ? 有关!)

  • N :反向的重复前一个搜寻 (与 / 或 ? 有关!)

  • q :离开 less 这个程序;

3.1.3.7 head

取出文件前面几行

语法:

head [-n number] 文件
Copier après la connexion

选项与参数:

  • -n :后面接数字,代表显示几行的意思

[root@www ~] head /etc/man.config
Copier après la connexion

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

[root@www ~] head -n 20 /etc/man.config
Copier après la connexion

3.1.3.8 tail

取出文件后面几行

语法:

tail [-n number] 文件
Copier après la connexion

选项与参数:

  • -n :后面接数字,代表显示几行的意思

  • -f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测

[root@www ~] tail /etc/man.config# 默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:[root@www ~] tail -n 20 /etc/man.config
Copier après la connexion

3.2 权限修改

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

使用权限 : 所有使用者

语法

chmod [-cfvR] [--help] [--version] mode file...
Copier après la connexion

参数说明

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

[ugoa...][[+-=][rwxX]...][,...]
Copier après la connexion

其中:

  • u représente le propriétaire du fichier, g représente la personne qui appartient au même groupe que le propriétaire du fichier, o représente d'autres personnes et a représente les trois.

  • + signifie ajouter des autorisations, - signifie annuler des autorisations, = signifie définir uniquement des autorisations.

  • r signifie lisible, w signifie inscriptible, x signifie exécutable, X signifie uniquement lorsque le fichier est un sous-répertoire ou que le fichier a été défini pour être exécutable.

Autres descriptions des paramètres :

  • -c : Si les autorisations du fichier ont effectivement été modifiées, l'action de modification sera affichée.

  • -f : Si les autorisations du fichier ne peuvent pas être modifiées, n'affichez pas de message. message d'erreur

  • -v : Afficher les détails des modifications d'autorisation

  • -R : Effectuer les mêmes modifications d'autorisation sur tous les fichiers et sous-répertoires du répertoire actuel (c'est-à-dire les modifier un par un de manière récursive)

  • –aide : Afficher les instructions auxiliaires

  • –version : Afficher la version

Il existe deux façons de définir les autorisations. Vous pouvez utiliser des chiffres ou des symboles pour modifier les autorisations.

Autorisations de fichier de modification de type de numéro :

Liste des commandes Linux

Autorisations de fichier de modification de type de symbole :

Liste des commandes Linux

4. Opérations sur les fichiers compressés

Les commandes de compression et de décompression couramment utilisées sous Linux incluent : tar, gzip, gunzip, bzip2, bunzip2, compresser, décompresser, zip, unzip, rar, unrar, etc.

4.1 Packaging, compression et décompression

L'extension du fichier compressé sous Windows est .zip/.rar Le fichier packagé sous Linux : aa.tarlinux Le fichier compressé sous Linux : bb.gz. sous Linux : .tar.gz

Les fichiers packagés sous Linux se terminent généralement par .tar et les commandes de compression se terminent généralement par .gz. En général, l'empaquetage et la compression sont effectués ensemble, et le nom de suffixe du fichier empaqueté et compressé est généralement .tar.gz.

4.1.1 tar

La commande d'empaquetage la plus couramment utilisée est tar. Le package créé à l'aide du programme tar est souvent appelé package tar. Les commandes pour les fichiers du package tar se terminent généralement par .tar. Après avoir généré le package tar, vous pouvez utiliser d'autres programmes pour le compresser, parlons donc d'abord de l'utilisation de base de la commande tar.

La commande tar a de nombreuses options (vous pouvez la visualiser avec man tar), mais il n'y a que quelques options couramment utilisées. Voici quelques exemples :

.
 tar -cf all.tar *.jpg
Copier après la connexion

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

 tar -rf all.tar *.gif
Copier après la connexion
Copier après la connexion

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

 tar -uf all.tar logo.gif
Copier après la connexion
Copier après la connexion

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

 tar -tf all.tar
Copier après la connexion
Copier après la connexion

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

 tar -xf all.tar
Copier après la connexion
Copier après la connexion

这条命令是解出 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
Copier après la connexion

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

 tar -xzf all.tar.gz
Copier après la connexion

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

4.1.1.2 tar 调用 bzip2

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

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

 tar -cjf all.tar.bz2 *.jpg
Copier après la connexion

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

 tar -xjf all.tar.bz2
Copier après la connexion

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

4.1.1.3 tar 调用 compress

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

 tar -cZf all.tar.Z *.jpg
Copier après la connexion

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

 tar -xZf all.tar.Z
Copier après la connexion

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

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

1) 对于.tar结尾的文件

tar -xf all.tar
Copier après la connexion

2) 对于 .gz 结尾的文件

gzip -d all.gzgunzip all.gz
Copier après la connexion

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

tar -xzf all.tar.gztar -xzf all.tgz
Copier après la connexion

4) 对于 .bz2 结尾的文件

bzip2 -d all.bz2bunzip2 all.bz2
Copier après la connexion

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

tar -xjf all.tar.bz2
Copier après la connexion

6) 对于 .Z 结尾的文件

uncompress all.Z
Copier après la connexion

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

tar -xZf all.tar.z
Copier après la connexion

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

1) 对于 .zip

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

 zip all.zip *.jpg
Copier après la connexion

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

 unzip all.zip
Copier après la connexion

这条命令是将 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
Copier après la connexion

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

 rar a all *.jpg
Copier après la connexion

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

 unrar e all.rar
Copier après la connexion

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

4.2 扩展内容

tar

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

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

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

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

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

# tar -cf all.tar *.jpg

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

 tar -rf all.tar *.gif
Copier après la connexion
Copier après la connexion

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

 tar -uf all.tar logo.gif
Copier après la connexion
Copier après la connexion

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

 tar -tf all.tar
Copier après la connexion
Copier après la connexion

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

 tar -xf all.tar
Copier après la connexion
Copier après la connexion

这条命令是解出 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
Copier après la connexion

解压

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
Copier après la connexion

总结

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 解压
Copier après la connexion

五、查找命令

5.1 grep

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

使用实例:

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

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

$ grep "被查找的字符串" 文件名
Copier après la connexion

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

grep "thermcontact" /.in
Copier après la connexion

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

$ grep –e "正则表达式" 文件名
Copier après la connexion

查找时不区分大小写:

$ grep –i "被查找的字符串" 文件名
Copier après la connexion

查找匹配的行数:

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

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

$ grep –v "被查找的字符串" 文件名
Copier après la connexion

5.2 find

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

find 默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。另外,搜索公众号编程技术圈后台回复“1024”,获取一份惊喜礼包。

使用实例:

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的文件
Copier après la connexion

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

$ find / -type f -name "*.log" | xargs grep "ERROR"
Copier après la connexion

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

find . -name "*.in" | xargs grep "thermcontact"
Copier après la connexion

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命令

使用实例:

updatedblocate /etc/sh 搜索etc目录下所有以sh开头的文件 locate pwd 查找和pwd相关的所有文件
Copier après la connexion

5.4 whereis

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

使用实例:

whereis ls    将和ls文件相关的文件都查找出来
Copier après la connexion

5.5 which

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

使用实例:

which pwd  查找pwd命令所在路径 which java  查找path中java的路径
Copier après la connexion

六、su、sudo

6.1 su

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

使用权限:所有使用者。

语法

su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]
Copier après la connexion

参数说明

  • -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
Copier après la connexion

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

su root -f
Copier après la connexion
Copier après la connexion

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

su - clsung
Copier après la connexion
Copier après la connexion

切换用户

hnlinux@runoob.com:~$ whoami //显示当前用户hnlinuxhnlinux@runoob.com:~$ pwd //显示当前目录/home/hnlinuxhnlinux@runoob.com:~$ su root //切换到root用户密码:root@runoob.com:/home/hnlinux# whoami rootroot@runoob.com:/home/hnlinux# pwd/home/hnlinux
Copier après la connexion
Copier après la connexion

切换用户,改变环境变量

hnlinux@runoob.com:~$ whoami //显示当前用户hnlinuxhnlinux@runoob.com:~$ pwd //显示当前目录/home/hnlinuxhnlinux@runoob.com:~$ su - root //切换到root用户密码:root@runoob.com:/home/hnlinux# whoami rootroot@runoob.com:/home/hnlinux# pwd //显示当前目录/root
Copier après la connexion
Copier après la connexion

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

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

6.2 sudo

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

进入sudo配置文件命令:

vi /etc/sudoer或者visudo
Copier après la connexion

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

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

su root -f
Copier après la connexion
Copier après la connexion

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

su - clsung
Copier après la connexion
Copier après la connexion

切换用户

hnlinux@runoob.com:~$ whoami //显示当前用户hnlinuxhnlinux@runoob.com:~$ pwd //显示当前目录/home/hnlinuxhnlinux@runoob.com:~$ su root //切换到root用户密码:root@runoob.com:/home/hnlinux# whoami rootroot@runoob.com:/home/hnlinux# pwd/home/hnlinux
Copier après la connexion
Copier après la connexion

切换用户,改变环境变量

hnlinux@runoob.com:~$ whoami //显示当前用户hnlinuxhnlinux@runoob.com:~$ pwd //显示当前目录/home/hnlinuxhnlinux@runoob.com:~$ su - root //切换到root用户密码:root@runoob.com:/home/hnlinux# whoami rootroot@runoob.com:/home/hnlinux# pwd //显示当前目录/root
Copier après la connexion
Copier après la connexion

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

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

七、下载与安装 yum

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

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

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

7.1 yum 语法

yum [options] [command] [package ...]
Copier après la connexion
  • 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-develSetting up Install ProcessParsing package install argumentsResolving 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 updatedfilelists.xml.gz          100% |=========================| 1.6 MB    00:05filelists.xml.gz          100% |=========================| 138 kB    00:00-> Finished Dependency Resolution……(省略)
Copier après la connexion

实例 2

移除 pam-devel

[root@www ~] yum remove pam-develSetting up Remove ProcessResolving Dependencies  <==同样的,先解决属性相依的问题--> Running transaction check---> Package pam-devel.i386 0:0.99.6.2-4.el5 set to be erased--> Finished Dependency ResolutionDependencies Resolved============================================================================= Package                 Arch       Version          Repository        Size=============================================================================Removing: pam-devel               i386       0.99.6.2-4.el5   installed         495 kTransaction Summary=============================================================================Install      0 Package(s)Update       0 Package(s)Remove       1 Package(s)  <==还好,并没有属性相依的问题,单纯移除一个软件Is this ok [y/N]: yDownloading Packages:Running rpm_check_debugRunning Transaction TestFinished Transaction TestTransaction Test SucceededRunning Transaction  Erasing   : pam-devel                    ######################### [1/1]Removed: pam-devel.i386 0:0.99.6.2-4.el5Complete!
Copier après la connexion

实例 3

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

[root@www ~] yum list pam*Installed Packagespam.i386                  0.99.6.2-3.27.el5      installedpam_ccreds.i386           3-5                    installedpam_krb5.i386             2.2.14-1               installedpam_passwdqc.i386         1.0.2-1.2.2            installedpam_pkcs11.i386           0.5.3-23               installedpam_smb.i386              1.1.7-7.2.1            installedAvailable Packages <==底下则是『可升级』的或『未安装』的pam.i386                  0.99.6.2-4.el5         basepam-devel.i386            0.99.6.2-4.el5         basepam_krb5.i386             2.2.14-10              base
Copier après la connexion

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.backup1
Copier après la connexion

下载对应版本 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.repomv CentOS6-Base-163.repo CentOS-Base.repo
Copier après la connexion

运行以下命令生成缓存

yum clean allyum makecache
Copier après la connexion

除了网易之外,国内还有其他不错的 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 [选项参数] &#39;script&#39; var=value file(s)或awk [选项参数] -f scriptfile var=value file(s)
Copier après la connexion

选项参数说明:

  • -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 test3 Are you like awkThis&#39;s a test10 There are orange,apple,mongo
Copier après la connexion

用法一:

awk &#39;{[pattern] action}&#39; {filenames}   # 行匹配语句 awk &#39;&#39; 只能用单引号
Copier après la connexion

实例:

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

用法二:

awk -F  #-F相当于内置变量FS, 指定分割字符
Copier après la connexion

实例:

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

用法三:

awk -v  # 设置变量
Copier après la connexion

实例:

 $ awk -va=1 &#39;{print $1,$1+a}&#39; log.txt --------------------------------------------- 2 3 3 4 This&#39;s 1 10 11 $ awk -va=1 -vb=s &#39;{print $1,$1+a,$1b}&#39; log.txt --------------------------------------------- 2 3 2s 3 4 3s This&#39;s 1 This&#39;ss 10 11 10s
Copier après la connexion

用法四:

awk -f {awk脚本} {文件名}
Copier après la connexion

实例:

 $ awk -f cal.awk log.txt
Copier après la connexion

运算符

Référence de terrainMembre du tableau
运算符描述

= += -= = /= %= ^= *=赋值

?:C条件表达式

\\
逻辑或
&&逻辑与

~ et !~ correspondent aux expressions régulières et ne correspondent pas aux expressions régulières

<= >= != ==opérateur relationnel

Espace Connecter

+ -Ajouter, soustraire

* / %Multipliez, divisez et trouvez Yu

+ - ! addition unaire, soustraction et négation logique

$

in

过滤第一列大于2的行

$ awk &#39;$1>2&#39; log.txt    #命令#输出3 Are you like awkThis&#39;s a test10 There are orange,apple,mongo12345
Copier après la connexion

过滤第一列等于2的行

$ awk &#39;$1==2 {print $1,$3}&#39; log.txt    #命令#输出2 is123
Copier après la connexion

过滤第一列大于2并且第二列等于’Are’的行。另外,搜索公众号Java架构师技术后台回复“面试题”,获取一份惊喜礼包。

$ awk &#39;$1>2 && $2=="Are" {print $1,$2,$3}&#39; log.txt    #命令#输出3 Are you123
Copier après la connexion

内建变量

变量描述
$n当前记录的第n个字段,字段间由FS分隔
$0完整的输入记录
ARGC命令行参数的数目
ARGIND命令行中当前文件的位置(从0开始算)
ARGV包含命令行参数的数组
CONVFMT数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组
ERRNO最后一个系统错误的描述
FIELDWIDTHSListe des largeurs de champ (séparées par la barre d'espace)
FILENAMENom du fichier actuel
FNRNuméros de ligne comptés séparément pour chaque fichier
FS Séparateur de champ (par défaut Est n'importe quel espace)
IGNORECASESi vrai, effectuez une correspondance en ignorant la casse
NFLe nombre de champs dans un enregistrement
NRLe nombre d'enregistrements qui ont été lus est Ligne nombre, à partir de 1
OFMTFormat de sortie du nombre (la valeur par défaut est %.6g)
OFSSéparateur d'enregistrement de sortie (caractère de nouvelle ligne de sortie), utilisez le symbole spécifié pour remplacer la nouvelle ligne lors de la sortie Talisman
ORSLe délimiteur d'enregistrement de sortie (la valeur par défaut est un caractère de nouvelle ligne)
RLENGTHLa longueur de la chaîne correspondant à la fonction de correspondance
RSLe délimiteur d'enregistrement (la valeur par défaut est un caractère de nouvelle ligne) ) La première position de la chaîne correspondant à la fonction match
$ awk &#39;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}&#39;  log.txtFILENAME ARGC  FNR   FS   NF   NR  OFS  ORS   RS---------------------------------------------log.txt    2    1         5    1log.txt    2    2         5    2log.txt    2    3         3    3log.txt    2    4         4    4$ awk -F\&#39; &#39;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}&#39;  log.txtFILENAME ARGC  FNR   FS   NF   NR  OFS  ORS   RS---------------------------------------------log.txt    2    1    &#39;    1    1log.txt    2    2    &#39;    1    2log.txt    2    3    &#39;    2    3log.txt    2    4    &#39;    1    4# 输出顺序号 NR, 匹配文本行号$ awk &#39;{print NR,FNR,$1,$2,$3}&#39; log.txt---------------------------------------------1 1 2 this is2 2 3 Are you3 3 This&#39;s a test4 4 10 There are# 指定输出分割符$  awk &#39;{print $1,$2,$5}&#39; OFS=" $ "  log.txt---------------------------------------------2 $ this $ test3 $ Are $ awkThis&#39;s $ a $10 $ There $
Copier après la connexion

使用正则,字符串匹配

# 输出第二列包含 "th",并打印第二列与第四列$ awk &#39;$2 ~ /th/ {print $2,$4}&#39; log.txt---------------------------------------------this a
Copier après la connexion

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

# 输出包含 "re" 的行$ awk &#39;/re/ &#39; log.txt---------------------------------------------3 Are you like awk10 There are orange,apple,mongo
Copier après la connexion

忽略大小写

$ awk &#39;BEGIN{IGNORECASE=1} /this/&#39; log.txt---------------------------------------------2 this is a testThis&#39;s a test
Copier après la connexion

模式取反

$ awk &#39;$2 !~ /th/ {print $2,$4}&#39; log.txt---------------------------------------------Are likeaThere orange,apple,mongo$ awk &#39;!/th/ {print $2,$4}&#39; log.txt---------------------------------------------Are likeaThere orange,apple,mongo
Copier après la connexion

awk脚本

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

  • BEGIN{ 这里面放的是执行前的语句 }

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

  • {这里面放的是处理每一行时要执行的语句}

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

$ cat score.txtMarry   2143 78 84 77Jack    2321 66 78 45Tom     2122 48 77 71Mike    2537 87 97 95Bob     2415 40 57 62
Copier après la connexion

我们的 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
Copier après la connexion

我们来看一下执行结果:

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

另外一些实例

AWK 的 hello world 程序为:

BEGIN { print "Hello, world!" }
Copier après la connexion

计算文件大小

$ ls -l *.txt | awk &#39;{sum+=$5} END {print sum}&#39;--------------------------------------------------666581
Copier après la connexion

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

awk &#39;length>80&#39; log.txt
Copier après la connexion

打印九九乘法表

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

8.2 sed

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

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

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

语法

sed [-hnV][-e<script>][-f<script文件>][文本文件]
Copier après la connexion

参数说明

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

  • -f

    文件>文件>
  • -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
Copier après la connexion
Copier après la connexion

首先查看testfile中的内容如下:

$ cat testfile #查看testfile 中的内容  HELLO LINUX!  Linux is a free unix-type opterating system.  This is a linux testfile!  Linux test
Copier après la connexion

使用sed命令后,输出结果如下:

$ sed -e 4a\newline testfile #使用sed 在第四行后添加新字符串  HELLO LINUX! #testfile文件原有的内容  Linux is a free unix-type opterating system.  This is a linux testfile!  Linux test  newline
Copier après la connexion

以行为单位的新增/删除

将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除!

[root@www ~] nl /etc/passwd | sed &#39;2,5d&#39;1 root:x:0:0:root:/root:/bin/bash6 sync:x:5:0:sync:/sbin:/bin/sync7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown.....(后面省略).....
Copier après la connexion

sed 的动作为 ‘2,5d’ ,那个 d 就是删除!因为 2-5 行给他删除了,所以显示的数据就没有 2-5 行罗~ 另外,注意一下,原本应该是要下达 sed -e 才对,没有 -e 也行啦!同时也要注意的是, sed 后面接的动作,请务必以 ‘’ 两个单引号括住喔!

只要删除第 2 行

nl /etc/passwd | sed &#39;2d&#39;
Copier après la connexion

要删除第 3 到最后一行

nl /etc/passwd | sed &#39;3,$d&#39;
Copier après la connexion

在第二行后(亦即是加在第三行)加上『drink tea?』字样!

[root@www ~] nl /etc/passwd | sed &#39;2a drink tea&#39;1 root:x:0:0:root:/root:/bin/bash2 bin:x:1:1:bin:/bin:/sbin/nologindrink tea3 daemon:x:2:2:daemon:/sbin:/sbin/nologin.....(后面省略).....
Copier après la connexion

那如果是要在第二行前

nl /etc/passwd | sed &#39;2i drink tea&#39;
Copier après la connexion

如果是要增加两行以上,在第二行后面加入两行字,例如 Drink tea or … drink beer?

[root@www ~] nl /etc/passwd | sed &#39;2a Drink tea or ......\> drink beer ?&#39;1 root:x:0:0:root:/root:/bin/bash2 bin:x:1:1:bin:/bin:/sbin/nologinDrink tea or ......drink beer ?3 daemon:x:2:2:daemon:/sbin:/sbin/nologin.....(后面省略).....
Copier après la connexion

每一行之间都必须要以反斜杠『 \ 』来进行新行的添加喔!所以,上面的例子中,我们可以发现在第一行的最后面就有 \ 存在。

以行为单位的替换与显示

将第2-5行的内容取代成为『No 2-5 number』呢?

[root@www ~] nl /etc/passwd | sed &#39;2,5c No 2-5 number&#39;1 root:x:0:0:root:/root:/bin/bashNo 2-5 number6 sync:x:5:0:sync:/sbin:/bin/sync.....(后面省略).....
Copier après la connexion

透过这个方法我们就能够将数据整行取代了!

仅列出 /etc/passwd 文件内的第 5-7 行

[root@www ~] nl /etc/passwd | sed -n &#39;5,7p&#39;5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin6 sync:x:5:0:sync:/sbin:/bin/sync7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
Copier après la connexion

可以透过这个 sed 的以行为单位的显示功能, 就能够将某一个文件内的某些行号选择出来显示。

数据的搜寻并显示

搜索 /etc/passwd有root关键字的行

nl /etc/passwd | sed &#39;/root/p&#39;1  root:x:0:0:root:/root:/bin/bash1  root:x:0:0:root:/root:/bin/bash2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh3  bin:x:2:2:bin:/bin:/bin/sh4  sys:x:3:3:sys:/dev:/bin/sh5  sync:x:4:65534:sync:/bin:/bin/sync....下面忽略
Copier après la connexion

如果root找到,除了输出所有行,还会输出匹配行。

使用-n的时候将只打印包含模板的行。

nl /etc/passwd | sed -n &#39;/root/p&#39;1  root:x:0:0:root:/root:/bin/bash
Copier après la connexion

数据的搜寻并删除

删除/etc/passwd所有包含root的行,其他行输出

nl /etc/passwd | sed  &#39;/root/d&#39;2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh3  bin:x:2:2:bin:/bin:/bin/sh....下面忽略#第一行的匹配root已经删除了
Copier après la connexion

数据的搜寻并执行命令

搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行:

nl /etc/passwd | sed -n &#39;/root/{s/bash/blueshell/;p;q}&#39;    1  root:x:0:0:root:/root:/bin/blueshell
Copier après la connexion

最后的q是退出。

数据的搜寻并替换

除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并取代。基本上 sed 的搜寻与替代的与 vi 相当的类似!他有点像这样:

sed &#39;s/要被取代的字串/新的字串/g&#39;
Copier après la connexion

先观察原始信息,利用 /sbin/ifconfig 查询 IP

[root@www ~] /sbin/ifconfig eth0eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1.....(以下省略).....
Copier après la connexion

本机的ip是192.168.1.100。

将 IP 前面的部分予以删除

[root@www ~] /sbin/ifconfig eth0 | grep &#39;inet addr&#39; | sed &#39;s/^.*addr://g&#39;192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
Copier après la connexion

接下来则是删除后续的部分,亦即:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

将 IP 后面的部分予以删除

[root@www ~] /sbin/ifconfig eth0 | grep &#39;inet addr&#39; | sed &#39;s/^.*addr://g&#39; | sed &#39;s/Bcast.*$//g&#39;192.168.1.100
Copier après la connexion

多点编辑

一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell

nl /etc/passwd | sed -e &#39;3,$d&#39; -e &#39;s/bash/blueshell/&#39;1  root:x:0:0:root:/root:/bin/blueshell2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
Copier après la connexion

-e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell。

直接修改文件内容(危险动作)

sed 可以直接修改文件的内容,不必使用管道命令或数据流重导向!不过,由於这个动作会直接修改到原始的文件,所以请你千万不要随便拿系统配置来测试!我们还是使用文件 regular_express.txt 文件来测试看看吧!

regular_express.txt 文件内容如下:

[root@www ~] cat regular_express.txt runoob.google.taobao.facebook.zhihu-weibo-
Copier après la connexion

利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !

[root@www ~] sed -i &#39;s/\.$/\!/g&#39; regular_express.txt[root@www ~] cat regular_express.txt runoob!google!taobao!facebook!zhihu-weibo-
Copier après la connexion

:q:q

利用 sed 直接在 regular_express.txt 最后一行加入 # This is a test:

[root@www ~] sed -i &#39;$a # This is a test&#39; regular_express.txt[root@www ~] cat regular_express.txt runoob!google!taobao!facebook!zhihu-weibo-# This is a test
Copier après la connexion

由於 $ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增 # This is a test

sed 的 -i 选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!

追加行的说明:

sed -e 4a\newLine testfile
Copier après la connexion
Copier après la connexion

a 动作是在匹配的行之后追加字符串,追加的字符串中可以包含换行符(实现追加多行的情况)。

追加一行的话前后都不需要添加换行符 \n,只有追加多行时在行与行之间才需要添加换行符(最后一行最后也无需添加,添加的话会多出一个空行)。

man sed 信息:

Append text, which has each embedded newline preceded by a backslash.
Copier après la connexion

例如:

4 行之后添加一行:

sed -e &#39;4 a newline&#39; testfile
Copier après la connexion

4 行之后追加 2 行:

sed -e &#39;4 a newline\nnewline2&#39; testfile
Copier après la connexion

4 行之后追加 3 行(2 行文字和 1 行空行)

sed -e &#39;4 a newline\nnewline2\n&#39; testfile
Copier après la connexion

4 行之后追加 1 行空行:

#错误:sed -e &#39;4 a \n&#39; testfilesed -e &#39;4 a \ &#39; testfile 实际上
Copier après la connexion

实际上是插入了一个含有一个空格的行,插入一个完全为空的空行没有找到方法(不过应该没有这个需求吧,都要插入行了插入空行干嘛呢?)

添加空行:

# 可以添加一个完全为空的空行sed &#39;4 a \\&#39;# 可以添加两个完全为空的空行sed &#39;4 a \\n&#39;
Copier après la connexion

8.3 grep

Linux grep 命令用于查找文件里符合条件的字符串。

grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。

语法

grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
Copier après la connexion

参数

  • -a ou —text : N'ignorez pas les données binaires.

  • -A ou —after-context=  : En plus d'afficher la colonne conforme au style du modèle et d'afficher le contenu après la ligne .

  • -b ou —byte-offset : Avant d'afficher la ligne qui correspond au style, indiquez le numéro du premier caractère de la ligne.

  • -B ou —before-context=  : En plus d'afficher la ligne qui correspond au style, et d'afficher le contenu avant la ligne.

  • -c ou —count : comptez le nombre de colonnes qui correspondent au style.

  • -C ou —context= ou -  : En plus d'afficher la ligne qui correspond au style, et d'afficher le Le contenu avant et après la ligne.

  • -d ou —directories=  : Ce paramètre doit être utilisé lors de la spécification des répertoires plutôt que des fichiers à rechercher, sinon la commande grep rapportera les informations et arrêtera l'action. .

  • -e