まず、とても便利なホットキーをいくつか紹介しますので、ぜひ覚えてください# 注: コードを読みやすくするために、管理者モードを示す # は記事から削除されています。コードブロック。これはエラーではありません。間違えないでください! !
#1. 基本的な操作コマンド
Tab キー - コマンド補完機能
Ctrl c キー - 実行中のプログラムの停止
Ctrl d キー - exit と同等、exit
Ctrl l キークリア画面
1. シャットダウン コマンド: shutdown は主に Linux 分野のサーバーで使用され、シャットダウン操作が発生することはほとんどありません。結局のところ、サーバー上でサービスを実行することに終わりはなく、特別な状況がない限り、最後の手段としてサービスはシャットダウンされます。 正しいシャットダウン プロセスは次のとおりです: sync > shutdown > reboot > halt たとえば、次のコマンドを実行してシャットダウンできます: 以下は簡単な例です。 #スケジュールされたシャットダウン コマンドをキャンセルします: 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,便进入了命令模式。 この状態では、キーストロークは文字入力ではなくコマンドとして Vim に認識されます。たとえば、このとき i を押しても文字は入力されず、コマンドとして扱われます。 以下はよく使用されるコマンドの一部です: i 入力モードに切り替えて文字を入力します。 xx 現在のカーソル位置にある文字を削除します。 : ボトムラインコマンドモードに切り替えて、ボトムラインにコマンドを入力します。 テキストを編集したい場合: Vim を起動し、コマンド モードに入り、i を押して入力モードに切り替えます。 コマンド モードには最も基本的なコマンドの一部しか含まれていないため、さらに多くのコマンドを入力するには、最終行のコマンド モードに依存する必要があります。 コマンド モードで i を押して入力モードに入ります。 入力モードでは、次のキーを使用できます: 文字キーと Shift の組み合わせ 、文字を入力 ##ENTER、Enter キー、改行 BACK SPACE、バックスペース キー、カーソルの前の文字を削除します DEL、削除キー、カーソルの後の文字を削除します。 方向キー 、テキスト内のカーソルを移動します。 #HOME /END、カーソルを行頭/行末に移動します Page Up/Page Down、上/下 ページをめくる 挿入、カーソルを入力/置換モードに切り替えると、カーソルが縦棒/下線になります ESC、入力モードを終了してコマンド モードに切り替えます ESC キーを押すと、いつでもボトムライン コマンド モードを終了できます。 簡単に言うと、これら 3 つのモードは以下のアイコンとして考えることができます: ファイルを開く コマンド: vi ファイル名の例: 現在のディレクトリにある aa.txt ファイルを開きます。 vi aa.txt または vim aa.txt 注: vi エディターを使用してファイルを開いた後は、ファイルを開くことはできません。コマンドモードになったので、キーボードの i/a/o をクリックして編集モードに入ります。 ファイルの編集 vi エディターを使用してファイルを開き、キー (i、a、または o) をクリックして編集モードに入ります。 i: カーソルがある文字の前から挿入を開始します。 a: カーソルが位置している文字の後ろから挿入を開始します。 o: カーソルが置かれている行の下に改行を挿入します。 保存または編集のキャンセル ファイルを保存: ステップ 1: ESC キーを押してコマンド ライン モードに入る ステップ 2: : ボトムラインモードに入る ステップ 3: wq 保存して編集を終了 編集をキャンセル: ステップ 1: ESC コマンドラインモードに入る ステップ 2: : 3 番目のステップに入るボトムライン モード: q! この変更を元に戻し、編集を終了します。 ファイルの内容を表示するには、Linux システムで次のコマンドを使用します。 cat はファイルの内容を先頭行から表示します tac は最終行から表示します tac が cat であることがわかります逆に書いてある! nlが表示された場合は行番号を出力してください! 詳細 ファイルのコンテンツをページごとに表示する 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 はファイルの所有者を表し、g はファイルの所有者と同じグループに属する人を表し、o は他の人を表し、a は 3 つすべてを表します。 は権限の追加を意味します。 - は権限のキャンセルを意味します。 = は権限の設定のみを意味します。 r は読み取り可能、w は書き込み可能、x は実行可能、X はファイルがサブディレクトリであるか、ファイルが実行可能に設定されている場合のみを意味します。 シンボル タイプはファイルのアクセス許可を変更します: Linux で一般的に使用される圧縮および解凍コマンドは、tar、gzip、gunzip、bzip2、bunzip2、compress、uncompress、zip、unzip です。 、rar、unrarなど。 Windows 圧縮ファイルの拡張子 .zip/.rarlinux パッケージ化ファイル: aa.tarlinux 圧縮ファイル: bb.gzlinux パッケージ化および圧縮ファイル: .tar.gz Linux のパッケージ化ファイルは通常 .tar で終わり、圧縮コマンドは通常 .gz で終わります。通常の状況では、パッケージ化と圧縮は同時に実行され、パッケージ化および圧縮されたファイルのサフィックス名は通常 .tar.gz になります。 最も一般的に使用されるパッケージング コマンドは tar です。tar プログラムを使用して作成されたパッケージは、多くの場合 tar パッケージと呼ばれます。tar パッケージ ファイルのコマンドは、通常、.tar で終わります。の。 tar パッケージを生成した後は、他のプログラムを使用してそれを圧縮できます。まず、tar コマンドの基本的な使用法について説明します。 tar コマンドには多くのオプションがありますが (man tar で表示できます)、一般的に使用されるオプションはほんのわずかです。次に例をいくつか示します: 这条命令是将所有 .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 または -text : バイナリ データを無視しないでください。 ##-A<表示行数> または —after-context=<表示行数> : を表示することに加えて、その列の外側にテンプレート スタイルを設定し、その行の後にコンテンツを表示します。 -b または -byte-offset : スタイルに一致する行を表示する前に、行の最初の文字をマークします。 。 ##-B<表示行数> または —before-context=<表示行数> : 一貫性のある表示に加えてその行の外側のスタイルを設定し、その行の前のコンテンツを表示します。 -c または —count : スタイルに一致する列の数をカウントします。 # #注※:スタイルに一致する行を表示するほか、その行の前後の内容も表示します。 : ファイルではなく検索対象のディレクトリを指定する場合、これはパラメータを使用する必要があります。使用しない場合、grep コマンドは情報を報告し、アクションを停止します。 ##-e または -regexp= -E または —extended-regexp -f<ルール ファイル> または -file=<ルール ファイル> -F または —fixed-regexp -G または —basic-regexp -h または —no-filename -H または -with-filename -i または —ignore-case -l 或 —file-with-matches : 列出文件内容符合指定的样式的文件名称。 -L 或 —files-without-match : 列出文件内容不符合指定的样式的文件名称。 -n 或 —line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。 -o 或 —only-matching : 只显示匹配PATTERN 部分。 -q 或 —quiet或–silent : 不显示任何信息。 -r 或 —recursive : 此参数的效果和指定”-d recurse”参数相同。 -s 或 —no-messages : 不显示错误信息。 -v 或 —revert-match : 显示不包含匹配文本的所有行。 -V 或 —version : 显示版本信息。 -w 或 —word-regexp : 只显示全字符合的列。 -x —line-regexp : 只显示全列符合的列。 -y : 此参数的效果和指定”-i”参数相同。 1、在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令: 结果如下所示: 2、以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串”update”的文件,并打印出该字符串所在行的内容,使用的命令为: 输出结果如下: 3、反向查找。前面各个例子是查找并打印出符合条件的行,通过”-v”参数可以打印出不符合条件行的内容。 查找文件名中包含 test 的文件中不包含test 的行,此时,使用的命令为: 结果如下所示: 以上がLinuxコマンドリストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。1.1 シャットダウンと再起動
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 入力モード
3.1.3.4 要点コマンド モード (コマンド モードでは英語のコロン ) を押して、最終行のコマンド モードに入ります。 ボトムライン コマンド モードでは、単一または複数の文字コマンドを入力でき、使用可能なコマンドが多数あります。 最下行のコマンド モードでは、基本的なコマンドは次のとおりです (コロンは省略されています): 3.1.4 ファイルを表示します[チェック]
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]...][,...]
#その他のパラメータの説明: #-c: ファイルのアクセス許可が実際に変更されている場合、変更アクションが表示されます
数値タイプはファイルのアクセス許可を変更します:4. 圧縮ファイルの操作
4.1 パッケージ化、圧縮、解凍
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条件表达式 \ \ 逻辑或 && 逻辑与 ~ と !~ は正規表現に一致しますが、正規表現には一致しません
##< <= > >= != == #スペース関係演算子 接続 ## - 加算、減算 乗算、除算そして余りを見つけます
##* / %## - ! 1ドルと論理否定を加算および減算します# #################################### 累乗を求めます – 接頭辞または接尾辞として増加または減少 $ フィールド参照 ## in 配列メンバー $ 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 フィールド幅のリスト (スペース区切り) FILENAME 現在のファイル名 FNR ファイルごとに個別にカウントされる行番号 FS フィールド区切り文字 (デフォルトは任意のスペース) IGNORECASE true の場合、大文字と小文字を無視した一致を実行します。 レコードの NF フィールドの数 NR 読み取られたレコードの数は、1 #OFSOFMT# # から始まる行番号です。 #数値の出力形式 (デフォルト値は %.6g) 出力レコード区切り文字 (出力改行文字)、出力時に指定された値を使用しますこの記号は改行文字 を置き換えます。 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.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][范本样式][文件或目录...]
实例
grep test *file
$ grep test test* #查找前缀有“test”的文件包含“test”字符串的文件 testfile1:This a Linux testfile! #列出testfile1 文件中包含test字符的行 testfile_2:This is a linux testfile! #列出testfile_2 文件中包含test字符的行 testfile_2:Linux test #列出testfile_2 文件中包含test字符的行
grep -r update /etc/acpi
$ grep -r update /etc/acpi #以递归的方式查找“etc/acpi” #下包含“update”的文件 /etc/acpi/ac.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of IO.) Rather than /etc/acpi/resume.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of IO.) Rather than /etc/acpi/events/thinkpad-cmos:action=/usr/sbin/thinkpad-keys--update
grep -v test *test*
$ grep-v test* #查找文件名中包含test 的文件中不包含test 的行 testfile1:helLinux! testfile1:Linis a free Unix-type operating system. testfile1:Lin testfile_1:HELLO LINUX! testfile_1:LINUX IS A FREE UNIX-TYPE OPTERATING SYSTEM. testfile_1:THIS IS A LINUX TESTFILE! testfile_2:HELLO LINUX! testfile_2:Linux is a free unix-type opterating system.