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 ! !
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, quitterTouche Ctrl+l - effacer l'écran
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 : Ce qui suit est un exemple simple. 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 –-help命令 man命令(命令说明书) 我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /。 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。 首先我们需要先知道什么是绝对路径与相对路径。 绝对路径:路径的写法,由根目录 / 写起,例如:/usr/share/doc 这个目录。 相对路径:路径的写法,不是由 命令:cd 目录 cd是Change Directory的缩写,这是用来变换工作目录的命令。 命令:ls [-al] 语法: ls 查看当前目录下的所有目录和文件ls -a 查看当前目录下的所有目录和文件(包括隐藏的文件)ls -l 或 ll 列表查看当前目录下的所有目录和文件(列表查看,显示更多信息)ls /dir 查看指定目录下的所有目录和文件 如:ls /usr 将家目录下的所有文件列出来(含属性与隐藏档) 如果想要创建新的目录的话,那么就使用mkdir (make directory)吧。 语法: 选项与参数: -m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~ -p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来! 实例:请到/tmp底下尝试创建数个新目录看看: 加了这个 -p 的选项,可以自行帮你创建多层目录! 实例:创建权限为 rwx–x—x 的目录。 上面的权限部分,如果没有加上 -m 来强制配置属性,系统会使用默认属性。 如果我们使用 -m ,如上例我们给予 -m 711 来给予新的目录 drwx–x—x 的权限。 选项与参数: -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息; -i :互动模式,在删除前会询问使用者是否动作 -r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!! 删除文件:rm 文件 删除当前目录下的文件rm -f 文件 删除当前目录的的文件(不询问) 删除目录:rm -r aaa 递归删除当前目录下的aaa目录rm -rf aaa 递归删除当前目录下的aaa目录(不询问) 全部删除:rm -rf 将当前目录下的所有目录和文件全部删除rm -rf / 【慎用!慎用!慎用!】将根目录下的所有文件全部删除 注意:rm不仅可以删除目录,也可以删除其他文件或压缩包,为了方便大家的记忆,无论删除任何目录或文件,都直接使用 rm -rf 目录/文件/压缩包 rmdir (删除空的目录) 语法: 选项与参数: -p :连同上一级『空的』目录也一起删除 删除 runoob 目录 将 mkdir 实例中创建的目录(/tmp 底下)删除掉! 利用 -p 这个选项,立刻就可以将 test1/test2/test3/test4 一次删除。 不过要注意的是,这个 rmdir 仅能删除空的目录,你可以使用 rm 命令来删除非空目录。 mv (移动文件与目录,或修改名称) 语法: 选项与参数: -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖; -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖! -u :若目标文件已经存在,且 source 比较新,才会升级 (update) cp (复制文件或目录) cp 即拷贝文件和目录。 语法: 选项与参数: -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递归 Linux find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。 命令: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 的文件列出来。 将目前目录其其下子目录中所有一般文件列出 将目前目录及其子目录下所有最近 20 天内更新过的文件列出 pwd 是 Print Working Directory 的缩写,也就是显示目前所在目录的命令。 选项与参数: -P :显示出确实的路径,而非使用连结 (link) 路径。 实例:单纯显示出目前的工作目录: 实例显示出实际的工作目录,而非连结档本身的目录名而已。 Linux touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。 ls -l 可以显示档案的时间记录。 参数说明: a 改变档案的读取时间记录。 m 改变档案的修改时间记录。 c 假如目的档案不存在,不会建立新的档案。与 —no-create 的效果一样。 f 不使用,是为了与其他 unix 系统的相容性而保留。 r 使用参考档的时间记录,与 —file 的效果一样。 d 设定时间与日期,可以使用各种不同的格式。 t 设定档案的时间记录,格式与 date 指令相同。 –no-create 不会建立新档案。 –help 列出指令格式。 –version 列出版本讯息。 使用指令”touch”修改文件”testfile”的时间属性为当前系统时间,输入如下命令: 首先,使用ls命令查看testfile文件的属性,如下所示: 执行指令”touch”修改文件属性以后,并再次查看该文件的时间属性,如下所示: 使用指令”touch”时,如果指定的文件不存在,则将创建一个新的空白文件。例如,在当前目录下,使用该指令创建一个空白文件”file”,输入如下命令: rm (移除文件或目录) 语法: 选项与参数: -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息; -i :互动模式,在删除前会询问使用者是否动作 -r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!! 将创建的 bashrc 删除掉! 如果加上 -i 的选项就会主动询问喔,避免你删除到错误的档名! 先来个vim键盘图! vi/vim 的使用 基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和 底线命令模式(Last line mode)。这三种模式的作用分别是: 用户刚刚启动 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. 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 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 : 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 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 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。 由第一行开始显示文件内容 语法: 选项与参数: -A :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已; -b :列出行号,仅针对非空白行做行号显示,空白行不标行号! -E :将结尾的断行字节 $ 显示出来; -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同; -T :将 [tab] 按键以 ^I 显示出来; -v :列出一些看不出来的特殊字符 检看 /etc/issue 这个文件的内容: tac与cat命令刚好相反,文件内容从最后一行开始显示,可以看出 tac 是 cat 的倒着写!如: 显示行号 语法: 选项与参数: -b :指定行号指定的方式,主要有两种:-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);-b t :如果有空行,空的那一行不要列出行号(默认值); -n :列出行号表示的方法,主要有三种:-n ln :行号在荧幕的最左方显示;-n rn :行号在自己栏位的最右方显示,且不加 0 ;-n rz :行号在自己栏位的最右方显示,且加 0 ; -w :行号栏位的占用的位数。 实例一:用 nl 列出 /etc/issue 的内容 一页一页翻动 在 more 这个程序的运行过程中,你有几个按键可以按的: 空白键 (space):代表向下翻一页; Enter :代表向下翻『一行』; /字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字; :f :立刻显示出档名以及目前显示的行数; q :代表立刻离开 more ,不再显示该文件内容。 b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。 一页一页翻动,以下实例输出/etc/man.config文件的内容: less运行时可以输入的命令有: 空白键 :向下翻动一页; [pagedown]:向下翻动一页; [pageup] :向上翻动一页; /字串 :向下搜寻『字串』的功能; ?字串 :向上搜寻『字串』的功能; n :重复前一个搜寻 (与 / 或 ? 有关!) N :反向的重复前一个搜寻 (与 / 或 ? 有关!) q :离开 less 这个程序; 取出文件前面几行 语法: 选项与参数: -n :后面接数字,代表显示几行的意思 默认的情况中,显示前面 10 行!若要显示前 20 行,就得要这样: 取出文件后面几行 语法: 选项与参数: -n :后面接数字,代表显示几行的意思 -f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测 Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。利用 chmod 可以藉以控制文件如何被他人所调用。 使用权限 : 所有使用者 mode : 权限设定字串,格式如下 : 其中: 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 : Autorisations de fichier de modification de type de symbole : 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. 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. 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 : 这条命令是将所有 .jpg 的文件打成一个名为 all.tar 的包。-c 是表示产生新的包,-f 指定包的文件名。 这条命令是将所有 .gif 的文件增加到 all.tar 的包里面去,-r 是表示增加文件的意思。 这条命令是更新原来 tar 包 all.tar 中 logo.gif 文件,-u 是表示更新文件的意思。 这条命令是列出 all.tar 包中所有文件,-t 是列出文件的意思。 这条命令是解出 all.tar 包中所有文件,-x 是解开的意思。 以上就是 tar 的最基本的用法。为了方便用户在打包解包的同时可以压缩或解压文件,tar 提供了一种特殊的功能。这就是 tar 可以在打包或解包的同时调用其它的压缩程序,比如调用 gzip、bzip2 等。 gzip 是 GNU 组织开发的一个压缩程序,.gz 结尾的文件就是 gzip 压缩的结果。与 gzip 相对的解压程序是 gunzip。tar 中使用 -z 这个参数来调用gzip。下面来举例说明一下: 这条命令是将所有 .jpg 的文件打成一个 tar 包,并且将其用 gzip 压缩,生成一个 gzip 压缩过的包,包名为 all.tar.gz。 这条命令是将上面产生的包解开。 bzip2 是一个压缩能力更强的压缩程序,.bz2 结尾的文件就是 bzip2 压缩的结果。 与 bzip2 相对的解压程序是 bunzip2。tar 中使用 -j 这个参数来调用 gzip。下面来举例说明一下: 这条命令是将所有 .jpg 的文件打成一个 tar 包,并且将其用 bzip2 压缩,生成一个 bzip2 压缩过的包,包名为 all.tar.bz2 这条命令是将上面产生的包解开。 compress 也是一个压缩程序,但是好象使用 compress 的人不如 gzip 和 bzip2 的人多。.Z 结尾的文件就是 bzip2 压缩的结果。与 compress 相对的解压程序是 uncompress。tar 中使用 -Z 这个参数来调用 compress。下面来举例说明一下: 这条命令是将所有 .jpg 的文件打成一个 tar 包,并且将其用 compress 压缩,生成一个 uncompress 压缩过的包,包名为 all.tar.Z。 这条命令是将上面产生的包解开。 有了上面的知识,你应该可以解开多种压缩文件了,下面对于 tar 系列的压缩文件作一个小结: 1) 对于.tar结尾的文件 2) 对于 .gz 结尾的文件 3)对于 .tgz 或 .tar.gz 结尾的文件 4) 对于 .bz2 结尾的文件 5) 对于 tar.bz2 结尾的文件 6) 对于 .Z 结尾的文件 7) 对于 .tar.Z 结尾的文件 另外对于 Windows 下的常见压缩文件 .zip 和 .rar,Linux 也有相应的方法来解压它们: 1) 对于 .zip linux 下提供了 zip 和 unzip 程序,zip 是压缩程序,unzip 是解压程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法: 这条命令是将所有 .jpg 的文件压缩成一个 zip 包: 这条命令是将 all.zip 中的所有文件解压出来。 2) 对于 .rar 要在 linux 下处理 .rar 文件,需要安装 RAR for Linux。下载地址:http://www.rarsoft.com/download.htm,下载后安装即可。 这样就安装好了,安装后就有了 rar 和 unrar 这两个程序,rar 是压缩程序,unrar 是解压程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法: 这条命令是将所有 .jpg 的文件压缩成一个 rar 包,名为 all.rar,该程序会将 .rar 扩展名将自动附加到包名后。 这条命令是将 all.rar 中的所有文件解压出来 tar 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。 下面的参数 -f 是必须的: # tar -cf all.tar *.jpg 这条命令是将所有 .jpg 的文件打成一个名为 all.tar 的包。-c 是表示产生新的包,-f 指定包的文件名。 这条命令是将所有 .gif 的文件增加到 all.tar 的包里面去。-r 是表示增加文件的意思。 这条命令是更新原来 tar 包 all.tar 中 logo.gif 文件,-u 是表示更新文件的意思。 这条命令是列出 all.tar 包中所有文件,-t 是列出文件的意思。 这条命令是解出 all.tar 包中所有文件,-x 是解开的意思。 压缩 解压 总结 grep命令是一种强大的文本搜索工具 使用实例: 从文件内容查找匹配指定字符串的行: 例子:在当前目录里第一级文件夹中寻找包含指定字符串的 .in 文件 从文件内容查找与正则表达式匹配的行: 查找时不区分大小写: 查找匹配的行数: $ grep -c “被查找的字符串” 文件名 从文件内容查找不匹配指定字符串的行: find命令在目录结构中搜索文件,并对搜索结果执行指定的操作。 find 默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。另外,搜索公众号编程技术圈后台回复“1024”,获取一份惊喜礼包。 使用实例: 从根目录开始查找所有扩展名为 .log 的文本文件,并找出包含 “ERROR” 的行: 例子:从当前目录开始查找所有扩展名为 .in 的文本文件,并找出包含 “thermcontact” 的行: 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命令 使用实例: whereis命令是定位可执行文件、源代码文件、帮助文件在文件系统中的位置。这些文件的属性应属于原始代码,二进制文件,或是帮助文件。 使用实例: which命令的作用是在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。 使用实例: Linux su命令用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码。 使用权限:所有使用者。 参数说明: -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 指令后退出变回原使用者 变更帐号为 root 并传入 -f 参数给新执行的 shell 变更帐号为 clsung 并改变工作目录至 clsung 的家目录(home dir) 切换用户 切换用户,改变环境变量 su用于用户之间的切换。但是切换前的用户依然保持登录状态。如果是root 向普通或虚拟用户切换不需要密码,反之普通用户切换到其它任何用户都需要密码验证。 sudo是为所有想使用root权限的普通用户设计的。可以让普通用户具有临时使用root权限的权利。只需输入自己账户的密码即可。 进入sudo配置文件命令: 案例:允许hadoop用户以root身份执行各种应用命令,需要输入hadoop用户的密码。hadoop ALL=(ALL) ALL 案例:只允许hadoop用户以root身份执行ls 、cat命令,并且执行时候免输入密码。配置文件中:hadoop ALL=NOPASSWD: /bin/ls, /bin/cat 变更帐号为 clsung 并改变工作目录至 clsung 的家目录(home dir) 切换用户 切换用户,改变环境变量 su用于用户之间的切换。但是切换前的用户依然保持登录状态。如果是root 向普通或虚拟用户切换不需要密码,反之普通用户切换到其它任何用户都需要密码验证。 yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。 基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。 yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。 options:可选,选项包括-h(帮助),-y(当安装过程提示选择全部为”yes”),-q(不显示安装的过程)等等。 command:要进行的操作。 package操作的对象。 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 安装 pam-devel 移除 pam-devel 利用 yum 的功能,找出以 pam 为开头的软件名称有哪些? 网易(163)yum源是国内最好的yum源之一 ,无论是速度还是软件版本,都非常的不错。 将yum源设置为163 yum,可以提升软件包安装和更新的速度,同时避免一些常见软件版本无法找到。 首先备份/etc/yum.repos.d/CentOS-Base.repo 下载对应版本 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 运行以下命令生成缓存 除了网易之外,国内还有其他不错的 yum 源,比如中科大和搜狐。 中科大的 yum 源,安装方法查看:https://lug.ustc.edu.cn/wiki/mirrors/help/centos sohu 的 yum 源安装方法查看: http://mirrors.sohu.com/help/centos.htm awk、sed、grep更适合的方向: grep 更适合单纯的查找或匹配文本 sed 更适合编辑匹配到的文本 awk 更适合格式化文本,对文本进行较复杂格式处理 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。 之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。 选项参数说明: -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的行 过滤第一列等于2的行 过滤第一列大于2并且第二列等于’Are’的行。另外,搜索公众号Java架构师技术后台回复“面试题”,获取一份惊喜礼包。 ~ 表示模式开始。// 中是模式。 关于 awk 脚本,我们需要注意两个关键词 BEGIN 和 END。 BEGIN{ 这里面放的是执行前的语句 } END {这里面放的是处理完所有的行后要执行的语句 } {这里面放的是处理每一行时要执行的语句} 假设有这么一个文件(学生成绩表): 我们的 awk 脚本如下: 我们来看一下执行结果: AWK 的 hello world 程序为: 计算文件大小 从文件中找出长度大于 80 的行: 打印九九乘法表 Linux sed 命令是利用脚本来处理文本文件。 sed 可依照脚本的指令来处理、编辑文本文件。 Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。 参数说明: -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文件的第四行后添加一行,并将结果输出到标准输出,在命令行提示符下输入如下命令: 首先查看testfile中的内容如下: 使用sed命令后,输出结果如下: 将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除! sed 的动作为 ‘2,5d’ ,那个 d 就是删除!因为 2-5 行给他删除了,所以显示的数据就没有 2-5 行罗~ 另外,注意一下,原本应该是要下达 sed -e 才对,没有 -e 也行啦!同时也要注意的是, sed 后面接的动作,请务必以 ‘’ 两个单引号括住喔! 只要删除第 2 行 要删除第 3 到最后一行 在第二行后(亦即是加在第三行)加上『drink tea?』字样! 那如果是要在第二行前 如果是要增加两行以上,在第二行后面加入两行字,例如 Drink tea or … 与 drink beer? 每一行之间都必须要以反斜杠『 \ 』来进行新行的添加喔!所以,上面的例子中,我们可以发现在第一行的最后面就有 \ 存在。 将第2-5行的内容取代成为『No 2-5 number』呢? 透过这个方法我们就能够将数据整行取代了! 仅列出 /etc/passwd 文件内的第 5-7 行 可以透过这个 sed 的以行为单位的显示功能, 就能够将某一个文件内的某些行号选择出来显示。 搜索 /etc/passwd有root关键字的行 如果root找到,除了输出所有行,还会输出匹配行。 使用-n的时候将只打印包含模板的行。 删除/etc/passwd所有包含root的行,其他行输出 搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行: 最后的q是退出。 除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并取代。基本上 sed 的搜寻与替代的与 vi 相当的类似!他有点像这样: 先观察原始信息,利用 /sbin/ifconfig 查询 IP 本机的ip是192.168.1.100。 将 IP 前面的部分予以删除 接下来则是删除后续的部分,亦即:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 将 IP 后面的部分予以删除 一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell -e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell。 sed 可以直接修改文件的内容,不必使用管道命令或数据流重导向!不过,由於这个动作会直接修改到原始的文件,所以请你千万不要随便拿系统配置来测试!我们还是使用文件 regular_express.txt 文件来测试看看吧! regular_express.txt 文件内容如下: 利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 ! :q:q 利用 sed 直接在 regular_express.txt 最后一行加入 # This is a test: 由於 $ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增 # This is a test! sed 的 -i 选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订! a 动作是在匹配的行之后追加字符串,追加的字符串中可以包含换行符(实现追加多行的情况)。 追加一行的话前后都不需要添加换行符 \n,只有追加多行时在行与行之间才需要添加换行符(最后一行最后也无需添加,添加的话会多出一个空行)。 man sed 信息: 例如: 4 行之后添加一行: 4 行之后追加 2 行: 4 行之后追加 3 行(2 行文字和 1 行空行) 4 行之后追加 1 行空行: 实际上是插入了一个含有一个空格的行,插入一个完全为空的空行没有找到方法(不过应该没有这个需求吧,都要插入行了插入空行干嘛呢?) 添加空行: Linux grep 命令用于查找文件里符合条件的字符串。 grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。 参数: -a ou —text : N'ignorez pas les données binaires. -A -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 -c ou —count : comptez le nombre de colonnes qui correspondent au style. -C -d -e1.1 Arrêt et redémarrage
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
1.2 帮助命令
shutdown --help:ifconfig --help:查看网卡信息
man shutdown注意:man shutdown 打开命令说明书之后,使用按键q退出
二、目录操作命令
/
写起,例如由/usr/share/doc
要到 /usr/share/man
底下时,可以写成:cd ../man
这就是相对路径的写法啦!2.1 目录切换 cd
cd / 切换到根目录cd /usr 切换到根目录下的usr目录cd ../ 切换到上一级目录 或者 cd ..cd ~ 切换到home目录cd - 切换到上次访问的目录
2.2 目录查看 ls [-al]
ls [-aAdfFhilnrRSt] 目录名称ls [--color={never,auto,always}] 目录名称ls [--full-time] 目录名称
ls -al ~
2.3 目录操作【增,删,改,查】
2.3.1 创建目录【增】 mkdir
mkdir [-mp] 目录名称
cd /tmp[root@www tmp] mkdir test <==创建一名为 test 的新目录[root@www tmp] mkdir test1/test2/test3/test4mkdir: cannot create directory `test1/test2/test3/test4': No such file or directory <== 没办法直接创建此目录啊![root@www tmp] mkdir -p test1/test2/test3/test4
[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
2.3.2 删除目录或文件【删】rm
rm [-fir] 文件或目录
rmdir [-p] 目录名称
[root@www tmp] rmdir runoob
[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': 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
2.3.3 目录修改【改】mv 和 cp
[root@www ~] mv [-fiu] source destination[root@www ~] mv [options] source1 source2 source3 .... directory
[root@www ~] cp [-adfilprsu] 来源档(source) 目标档(destination)[root@www ~] cp [options] source1 source2 source3 .... directory
2.3.4 搜索目录【查】find
find path -option [ -print ] [ -exec -ok command ] {} \;
find . -name "*.c"
find . -type f
find . -ctime -20
2.4 当前目录显示 pwd
pwd (显示目前所在的目录)
[root@www ~] pwd [-P]
[root@www ~] pwd/root <== 显示出目录啦~
[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 的选项后,会不以连结档的数据显示,而是显示正确的完整路径啊!
三、文件操作命令
3.1 文件操作【增,删,改,查】
3.1.1 新建文件【增】touch
语法
touch [-acfm][-d<日期时间>][-r<参考文件或目录>] [-t<日期时间>][--help][--version][文件或目录…]
实例
$ touch testfile #修改文件的时间属性
$ ls -l testfile #查看文件的时间属性 #原来文件的修改时间为16:09 -rw-r--r-- 1 hdd hdd 55 2011-08-22 16:09 testfile
$ touch testfile #修改文件时间属性为当前系统时间 $ ls -l testfile #查看文件的时间属性 #修改后文件的时间属性为当前系统时间 -rw-r--r-- 1 hdd hdd 55 2011-08-22 19:53 testfile
$ touch file #创建一个名为“file”的新的空白文件
3.1.2 删除文件 【删】 rm
rm [-fir] 文件或目录
[root@www tmp]# rm -i bashrcrm: remove regular file `bashrc'? y
3.1.3 修改文件【改】 vi或vim
3.1.3.1 命令模式:
3.1.3.2 Mode de saisie
3.1.3.4 Mode de commande de la ligne de fond
3.1.4 Afficher les fichiers [Vérifier]
3.1.4.1 cat
cat [-AbEnTv]
[root@www ~] cat /etc/issueCentOS release 6.4 (Final)Kernel \r on an \m
3.1.3.2 tac
[root@www ~] tac /etc/issueKernel \r on an \mCentOS release 6.4 (Final)
3.1.3.3 nl
nl [-bnw] 文件
牛逼啊!接私活必备的 N 个开源项目!赶快收藏吧
[root@www ~] nl /etc/issue 1 CentOS release 6.4 (Final) 2 Kernel \r on an \m123
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%) <== 重点在这一行喔!你的光标也会在这里等待你的命令
3.1.3.6 less
[root@www ~] less /etc/man.config## Generated automatically from man.conf.in by the# configure script.## man.conf from man-1.6d....(中间省略)....: <== 这里可以等待你输入命令!
3.1.3.7 head
head [-n number] 文件
[root@www ~] head /etc/man.config
[root@www ~] head -n 20 /etc/man.config
3.1.3.8 tail
tail [-n number] 文件
[root@www ~] tail /etc/man.config# 默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:[root@www ~] tail -n 20 /etc/man.config
3.2 权限修改
语法
chmod [-cfvR] [--help] [--version] mode file...
参数说明
[ugoa...][[+-=][rwxX]...][,...]
4. Opérations sur les fichiers compressés
4.1 Packaging, compression et décompression
4.1.1 tar
tar -cf all.tar *.jpg
tar -rf all.tar *.gif
tar -uf all.tar logo.gif
tar -tf all.tar
tar -xf all.tar
4.1.1.1 tar调用
tar -czf all.tar.gz *.jpg
tar -xzf all.tar.gz
4.1.1.2 tar 调用 bzip2
tar -cjf all.tar.bz2 *.jpg
tar -xjf all.tar.bz2
4.1.1.3 tar 调用 compress
tar -cZf all.tar.Z *.jpg
tar -xZf all.tar.Z
tar -xf all.tar
gzip -d all.gzgunzip all.gz
tar -xzf all.tar.gztar -xzf all.tgz
bzip2 -d all.bz2bunzip2 all.bz2
tar -xjf all.tar.bz2
uncompress all.Z
tar -xZf all.tar.z
zip all.zip *.jpg
unzip all.zip
tar -xzpvf rarlinux-x64-5.6.b5.tar.gz cd rar make
rar a all *.jpg
unrar e all.rar
4.2 扩展内容
-c: 建立压缩档案 -x:解压 -t:查看内容 shell-r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件
-z:有gzip属性的 -j:有bz2属性的 -Z:有compress属性的 -v:显示所有过程 -O:将文件解开到标准输出
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
tar -rf all.tar *.gif
tar -uf all.tar logo.gif
tar -tf all.tar
tar -xf all.tar
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
ps -ef | grep sshd 查找指定ssh服务进程 ps -ef | grep sshd | grep -v grep 查找指定服务进程,排除gerp身 ps -ef | grep sshd -c 查找指定进程个数
$ grep "被查找的字符串" 文件名
grep "thermcontact" /.in
$ grep –e "正则表达式" 文件名
$ grep –i "被查找的字符串" 文件名
$ grep –v "被查找的字符串" 文件名
5.2 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的文件
$ find / -type f -name "*.log" | xargs grep "ERROR"
find . -name "*.in" | xargs grep "thermcontact"
5.3 locate
updatedblocate /etc/sh 搜索etc目录下所有以sh开头的文件 locate pwd 查找和pwd相关的所有文件
5.4 whereis
whereis ls 将和ls文件相关的文件都查找出来
5.5 which
which pwd 查找pwd命令所在路径 which java 查找path中java的路径
六、su、sudo
6.1 su
语法
su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]
实例
su -c ls root
su root -f
su - clsung
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
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
su test:切换到test用户,但是路径还是/root目录su - test : 切换到test用户,路径变成了/home/testsu : 切换到root用户,但是路径还是原来的路径su - : 切换到root用户,并且路径是/rootsu不足:如果某个用户需要使用root权限、则必须要把root密码告诉此用户。退出返回之前的用户:exit
6.2 sudo
vi /etc/sudoer或者visudo
su root -f
su - clsung
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
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
su test:切换到test用户,但是路径还是/root目录su - test : 切换到test用户,路径变成了/home/testsu : 切换到root用户,但是路径还是原来的路径su - : 切换到root用户,并且路径是/rootsu不足:如果某个用户需要使用root权限、则必须要把root密码告诉此用户。退出返回之前的用户:exit
七、下载与安装 yum
7.1 yum 语法
yum [options] [command] [package ...]
7.2 yum常用命令
实例 1
[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……(省略)
实例 2
[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!
实例 3
[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
7.3 国内 yum 源
安装步骤
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup1
wget http://mirrors.163.com/.help/CentOS6-Base-163.repomv CentOS6-Base-163.repo CentOS-Base.repo
yum clean allyum makecache
八. Linux 三剑客(awk,sed,grep)
8.1 awk
语法
awk [选项参数] 'script' var=value file(s)或awk [选项参数] -f scriptfile var=value file(s)
基本用法
2 this is a test3 Are you like awkThis's a test10 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条件表达式 \ \ 逻辑或 && 逻辑与 ~ 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 $ Référence de terrainin Membre du tableau
$ awk '$1>2' log.txt #命令#输出3 Are you like awkThis's a test10 There are orange,apple,mongo12345
$ awk '$1==2 {print $1,$3}' log.txt #命令#输出2 is123
$ awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt #命令#输出3 Are you123
内建变量
变量 描述 $n 当前记录的第n个字段,字段间由FS分隔 $0 完整的输入记录 ARGC 命令行参数的数目 ARGIND 命令行中当前文件的位置(从0开始算) ARGV 包含命令行参数的数组 CONVFMT 数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组 ERRNO 最后一个系统错误的描述 FIELDWIDTHS Liste des largeurs de champ (séparées par la barre d'espace) FILENAME Nom du fichier actuel FNR Numéros de ligne comptés séparément pour chaque fichier FS Séparateur de champ (par défaut Est n'importe quel espace) IGNORECASE Si vrai, effectuez une correspondance en ignorant la casse NF Le nombre de champs dans un enregistrement NR Le nombre d'enregistrements qui ont été lus est Ligne nombre, à partir de 1 OFMT Format de sortie du nombre (la valeur par défaut est %.6g) OFS Sé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 ORS Le délimiteur d'enregistrement de sortie (la valeur par défaut est un caractère de nouvelle ligne) RLENGTH La longueur de la chaîne correspondant à la fonction de correspondance RS Le 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 '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.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\' '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.txtFILENAME ARGC FNR FS NF NR OFS ORS RS---------------------------------------------log.txt 2 1 ' 1 1log.txt 2 2 ' 1 2log.txt 2 3 ' 2 3log.txt 2 4 ' 1 4# 输出顺序号 NR, 匹配文本行号$ awk '{print NR,FNR,$1,$2,$3}' log.txt---------------------------------------------1 1 2 this is2 2 3 Are you3 3 This's a test4 4 10 There are# 指定输出分割符$ awk '{print $1,$2,$5}' OFS=" $ " log.txt---------------------------------------------2 $ this $ test3 $ Are $ awkThis's $ a $10 $ There $
使用正则,字符串匹配
# 输出第二列包含 "th",并打印第二列与第四列$ awk '$2 ~ /th/ {print $2,$4}' log.txt---------------------------------------------this a
# 输出包含 "re" 的行$ awk '/re/ ' log.txt---------------------------------------------3 Are you like awk10 There are orange,apple,mongo
忽略大小写
$ awk 'BEGIN{IGNORECASE=1} /this/' log.txt---------------------------------------------2 this is a testThis's a test
模式取反
$ awk '$2 !~ /th/ {print $2,$4}' log.txt---------------------------------------------Are likeaThere orange,apple,mongo$ awk '!/th/ {print $2,$4}' log.txt---------------------------------------------Are likeaThere orange,apple,mongo
awk脚本
$ cat score.txtMarry 2143 78 84 77Jack 2321 66 78 45Tom 2122 48 77 71Mike 2537 87 97 95Bob 2415 40 57 62
$ 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.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
另外一些实例
BEGIN { print "Hello, world!" }
$ ls -l *.txt | awk '{sum+=$5} END {print sum}'--------------------------------------------------666581
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
语法
sed [-hnV][-e<script>][-f<script文件>][文本文件]
-e<script>
或--expression=<script>
以选项中指定的script来处理输入的文本文件。实例
sed -e 4a\newLine testfile
$ cat testfile #查看testfile 中的内容 HELLO LINUX! Linux is a free unix-type opterating system. This is a linux testfile! Linux test
$ 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
以行为单位的新增/删除
[root@www ~] nl /etc/passwd | sed '2,5d'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.....(后面省略).....
nl /etc/passwd | sed '2d'
nl /etc/passwd | sed '3,$d'
[root@www ~] nl /etc/passwd | sed '2a drink tea'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.....(后面省略).....
nl /etc/passwd | sed '2i drink tea'
[root@www ~] nl /etc/passwd | sed '2a Drink tea or ......\> drink beer ?'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.....(后面省略).....
以行为单位的替换与显示
[root@www ~] nl /etc/passwd | sed '2,5c No 2-5 number'1 root:x:0:0:root:/root:/bin/bashNo 2-5 number6 sync:x:5:0:sync:/sbin:/bin/sync.....(后面省略).....
[root@www ~] nl /etc/passwd | sed -n '5,7p'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
数据的搜寻并显示
nl /etc/passwd | sed '/root/p'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....下面忽略
nl /etc/passwd | sed -n '/root/p'1 root:x:0:0:root:/root:/bin/bash
数据的搜寻并删除
nl /etc/passwd | sed '/root/d'2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh3 bin:x:2:2:bin:/bin:/bin/sh....下面忽略#第一行的匹配root已经删除了
数据的搜寻并执行命令
nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}' 1 root:x:0:0:root:/root:/bin/blueshell
数据的搜寻并替换
sed 's/要被取代的字串/新的字串/g'
[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.....(以下省略).....
[root@www ~] /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g'192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
[root@www ~] /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'192.168.1.100
多点编辑
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'1 root:x:0:0:root:/root:/bin/blueshell2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
直接修改文件内容(危险动作)
[root@www ~] cat regular_express.txt runoob.google.taobao.facebook.zhihu-weibo-
[root@www ~] sed -i 's/\.$/\!/g' regular_express.txt[root@www ~] cat regular_express.txt runoob!google!taobao!facebook!zhihu-weibo-
[root@www ~] sed -i '$a # This is a test' regular_express.txt[root@www ~] cat regular_express.txt runoob!google!taobao!facebook!zhihu-weibo-# This is a test
追加行的说明:
sed -e 4a\newLine testfile
Append text, which has each embedded newline preceded by a backslash.
sed -e '4 a newline' testfile
sed -e '4 a newline\nnewline2' testfile
sed -e '4 a newline\nnewline2\n' testfile
#错误:sed -e '4 a \n' testfilesed -e '4 a \ ' testfile 实际上
# 可以添加一个完全为空的空行sed '4 a \\'# 可以添加两个完全为空的空行sed '4 a \\n'
8.3 grep
语法
grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]