自己如何搭建网站cms 网站群
自己如何搭建网站,cms 网站群,旅游景区网站建设策划书,焦作音响网站建设学习计时#xff1a;共14小时 读书#xff1a;2小时 代码#xff1a;7小时 作业#xff1a;2小时 博客#xff1a;3小时 一、学习目标 1. 能够独立安装Linux操作系统 2. 能够熟练使用Linux系统的基本命令 3. 熟练使用Linux中用户管理命令/系统相关命令/文件目录相关命… 学习计时共14小时 读书2小时 代码7小时 作业2小时 博客3小时 一、学习目标 1. 能够独立安装Linux操作系统 2. 能够熟练使用Linux系统的基本命令 3. 熟练使用Linux中用户管理命令/系统相关命令/文件目录相关命令/打包压缩相关命令/比较合并相关命令/网络相关命令等 4. 熟练应用“搜索”进行举一反三的学习 二、学习资源 1. 课程资料https://www.shiyanlou.com/courses/413 实验一课程邀请码W7FQKW4Y 2. Linux 基础入门https://www.shiyanlou.com/courses/1(重点第一次课考核内容全部从这里面出) 3. Linux命令en cn 三、学习方法 1. 进度很重要必须跟上每周的进度阅读练习问答项目。我会认真对待每一位同学请你不要因为困难半途而废。 2. 问答很重要遇到知识难点请多多提问这是你的权利更是您对自己负责的义务。问答到博客园讨论小组http://group.cnblogs.com/103791/ 3. 实践很重要解决书中习题实践书中实例完成每周项目才算真的消化了这本好书。通过实验楼环境或自己安装的虚拟机在实践中进行学习 4. 实验报告很重要详细记录你完成项目任务的思路获得老师点评和帮助自己复习。学习完成后在博客园中http://www.cnblogs.com/把学习过程通过博客发表博客标题“信息安全系统设计基础第一周学习总结” 四、学习任务 提示请将要求学生完成的任务、测验或思考题列在此处 1. 重点学习 cheat/find/locate/grep/man/whereis/which/apt-get 查找帮助文档、各种示例多多练习这几个命令会贯穿我们整个学习的学习掌握这几个命令就可以很好学习其他命令了。 2. 这学期需要掌握的命令有ac,apt-get,bzip2,cat,chgrp,chmod,chown,clear,compress,cp,dd,df,diff,du,dump,evn,find,finger,free,grep,gzip,head,kill,less,ln,locate,l,gout,ls,man,mkdir,more,mount,mt,mv,netstat,nslookup,od,passwd,patch,ps,pstop,pwd,rm,shell,sort,ssh,stty,tail,tar,telnet,touch,tree,uname,unzip,vi,vim,whereis,which,who,write等 3. 测试示例 请在虚拟机中安装DDD软件其他软件请演示怎么判断DDD软件能不能安装请查找系统中50M以上的文件请查找系统中两天前修改过的且小于5M的文件请问如何查找操作系统的信息请查找当前目录下所有*.c文件中哪个文件中包含main函数请建立一个目录里面建立两个子文目录如何一条命令删除三个目录如何把一个目录及子目录拷贝到自己的主目录中... 五、后续学习预告可选 Linux下C语言编程基础 VIM进行编辑 GCC进行编译 GDB进行调试 Make进行自动化 六、学习过程 1. 重要知识点总结梳理 1.操作系统是系统调用和内核那两层当然直观的来看我们使用的操作系统还包含一些在其上运行的应用程序,比如文本编辑器浏览器电子邮件。 2.最初的操作系统当时的操作系统能运行批处理程序。批处理程序不需要用户的交互它从文件或者穿孔卡片读取数据然后输出到另外一个文件或者打印机。 二十世纪六十年代初交互式操作系统开始流行。它不仅仅可以交互还能使多个用户从不同的终端同时操作主机。这样的操作系统被称作分时操作系统。 3.Linux 系统还提供了一个叫做终端模拟器的程序Terminal下面几个比较常见的终端模拟器例如 gnome-terminalkconsolextermrxvtkvtnxterm 和 eterm 4.Unix/Linux 操作系统下的 Shell 既是用户交互的界面也是控制系统的脚本语言。在 UNIX/Linux 中比较流行的常见的 Shell 有 bashzshkshcsh 等等Ubuntu 终端默认使用的是 bash默认的桌面环境是 GNOME 或者 Unity基于 GNOME但我们的环境中使用的分别是zsh 和 xfce。 5.1).重要快捷键 真正学习命令行之前你先要掌握几个十分有用必需掌握的小技巧 [Tab] 使用Tab键来进行命令补全Tab键一般键盘是在字母Q旁边这个技巧给你带来的最大的好处就是当你忘记某个命令的全称时你可以只输入它的开头的一部分然后按下Tab键就可以得到提示或者帮助完成 [Ctrlc] 你就可以使用Ctrlc键来强行终止当前程序你可以放心它并不会使终端退出。 其他一些常用快捷键 按键 作用 Ctrld 键盘输入结束或退出终端 Ctrls 暂停当前程序暂停后按下任意键恢复运行 Ctrlz 将当前程序放到后台运行恢复到前台为命令fg Ctrla 将光标移至输入行头相当于Home键 Ctrle 将光标移至输入行末相当于End键 Ctrlk 删除从光标所在位置到行末 AltBackspace 向前删除一个单词 ShiftPgUp 将终端显示向上滚动 ShiftPgDn 将终端显示向下滚动 2).学会利用历史输入命令 你可以使用键盘上的方向上键恢复你之前输入过的命令。 3).学会使用通配符 通配符是一种特殊语句主要有星号*和问号?用来对对字符串进行模糊匹配比如文件名参数名。当查找文件夹时可以使用它来代替一个或多个真正字符当不知道真正字符或者懒得输入完整名字时常常使用通配符代替一个或多个真正的字符。 建立多个文件的快捷方式 Shell 常用通配符 字符 含义 * 匹配 0 或多个字符 ? 匹配任意一个字符 [list] 匹配 list 中的任意单一字符 [!list] 匹配 除list 中的任意单一字符以外的字符 [c1-c2] 匹配 c1-c2 中的任意单一字符 如[0-9] [a-z] {string1,string2,...} 匹配 sring1 或 string2 (或更多)其一字符串 {c2..c2} 匹配 c1-c2 中全部字符 如{1..10} 4).学会在命令行中获取帮助 在 Linux 环境中如果你遇到困难可以使用man 命令它是Manual page的缩写。获得某个命令的说明和使用方式的详细介绍 通常情况下man 手册里面的内容都是英文的这就要求你有一定的英文基础。man 手册的内容很多涉及了 Linux 使用过程中的方方面面为了便于查找是做了分册分区段处理的在Research UNIX、BSD、OS X 和 Linux 中手册通常被分为8个区段安排如下 区段 说明 1 一般命令 2 系统调用 3 库函数涵盖了C标准函数库 4 特殊文件通常是/dev中的设备和驱动程序 5 文件格式和约定 6 游戏和屏保 7 杂项 8 系统管理命令和守护进程 要查看相应区段的内容就在 man 后面加上相应区段的数字即可通常 man 手册中的内容很多你可能不太容易找到你想要的结果不过幸运的是你可以在 man 中使用搜索/你要搜索的关键字查找到后你可以使用n键切换到下一个关键字所在处shiftn为上一个关键字所在处。使用Space(空格键)翻页Enter(回车键)向下滚动一行或者使用j,kvim编辑器的移动键进行向前向后滚动一行。按下h键为显示使用帮助(因为man使用less作为阅读器实为less工具的帮助)按下q退出。 想要获得更详细的帮助你还可以使用info命令不过通常使用man就足够了。如果你知道某个命令的作用只是想快速查看一些它的某个具体参数的作用那么你可以使用--help参数大部分命令都会带有这个参数如 ls --help 6.输入的who am i表示打开当前伪终端的用户的用户名要查看当前登录用户的用户名去掉空格直接使用 whoami 即可 7.who 命令其它常用参数 参数 说明 -a 打印能打印的全部 -d 打印死掉的进程 -m 同am i,mom likes -q 打印当前登录用户数及用户名 -u 打印当前登录用户登录信息 -r 打印运行等级 8.在 Linux 系统里 root 账户拥有整个系统至高无上的权利比如 新建/添加 用户。要创建用户需要 root 权限这里就要用到 sudo 这个命令了。不过使用这个命令有两个大前提一是你要知道当前登录用户的密码二是当前用户必须在 sudo 用户组。 创建新用户lilei,退出当前用户跟退出终端一样可以使用 exit 命令或者使用快捷键 Ctrld。 登陆新用户lilei 退出当前用户lilei 9. 在 Linux 里面知道自己属于哪些用户组的方法 方法一使用groups命令 $ groups shiyanlou 其中冒号之前表示用户后面表示该用户所属的用户组。这里可以看到 shiyanlou 用户同时属于 shiyanlou用户组每次新建用户如果不指定用户组的话默认会自动创建一个与用户名相同的用户组差不多就相当于家长的意思或者说是老总。默认情况下在sudo用户组里的可以使用sudo命令获得root权限。 方法二查看/etc/group文件 $ cat /etc/group | sort 提示 lilei 不在 sudoers 文件中意思就是 lilei 不在 sudo 用户组中 使用 usermod 命令可以为用户添加用户组同样使用该命令你必需有 root 权限你可以直接使用 root 用户为其它用户添加用户组或者用其它已经在 sudo 用户组的用户使用 sudo 命令获取权限来执行该命令 这里我用 shiyanlou 用户执行 sudo 命令将 lilei 添加到 sudo 用户组让它也可以使用 sudo 命令获得 root 权限 $ su shiyanlou $ groups lilei $ sudo usermod -G sudo lilei $ groups lilei 然后你再切换会 lilei 用户现在就可以使用 sudo 获取 root 权限了。 删除用户: 10.查看文件权限 •文件类型 关于文件类型这里有一点你必需时刻牢记Linux 里面一切皆文件正因为这一点才有了设备文件 /dev 目录下有各种设备文件大都跟具体的硬件设备相关这一说还有 socket网络套接字具体是什么感兴趣的用户可以自己去了解或期待实验楼的后续相关课程和 pipe (管道这个东西很重要我们以后将会讨论到这里你先知道有它的存在即可)。软链接文件链接文件是分为两种的另一种当然是“硬链接”(硬链接不常用具体内容不作为本课程讨论重点而软链接等同于 Windows 上的快捷方式,你记住这一点就够了 •文件权限 读权限表示你可以使用 cat file name 之类的命令来读取某个文件的内容;写权限表示你可以编辑和修改某个文件 执行权限通常指可以运行的二进制程序文件或者脚本文件如同 Windows 上的 exe 后缀的文件不过 Linux 上不是通过文件后缀名来区分文件的类型。你需要注意的一点是一个目录要同时具有读权限和执行权限才可以打开而一个目录要有写权限才允许在其中创建其它文件这是因为目录文件实际保存着该目录里面的文件的列表等信息 所有者权限这一点相信你应该明白了至于所属用户组权限是指你所在的用户组中的所有其它用户对于该文件的权限比如你有一个艾派德,那么这个用户组权限就决定了你的兄弟姐妹有没有权限使用它破坏它和占有它。 •链接数 链接到该文件所在的 inode 结点的文件名数目关于这个概念涉及到 Linux 文件系统的相关概念知识不在本课程的讨论范围感兴趣的用户可以自己去了解。 •文件大小 以 inode 结点大小为单位来表示的文件大小你可以给 ls 加上 -lh 参数来更直观的查看文件的大小。 ls的其他命令 显示除了 .(当前目录).. 上一级目录之外的所有包含隐藏文件Linux 下以 . 开头的文件为隐藏文件 $ ls -A 查看某一个目录的完整属性而不是显示目录里面的文件属性 $ ls -Al 显示所有文件大小并以普通人类能看懂的方式呈现 $ ls -dl 目录名 其中小 s 为显示文件大小大 S 为按文件大小排序若需要知道如何按其它方式排序请使用“man”命令查询。 $ ls -AsSh 11.变更文件所有者 文件music的所有者是用户lilei,将其拥有者修改为shiyanlou 12.修改文件权限 •方式一二进制数字表示 每个文件的三组权限拥有者所属用户组其他用户,记住这个顺序是一定的就对应这一个 rwx也就是一个 7 。 •方式二加减赋值操作 13. FHS 定义了两层规范第一层是 / 下面的各个目录应该要放什么文件数据例如 /etc 应该要放置设置文件/bin 与 /sbin 则应该要放置可执行文件等等。 第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如 /var/log 放置系统登录文件、/usr/share 放置共享数据等等。 使用 cd 命令可以切换目录在 Linux 里面使用 . 表示当前目录.. 表示上一级目录**注意还记得我们上一节介绍过的以 . 开头的文件都是隐藏文件所以这两个目录必然也是隐藏的你可以使用 ls -a 命令查看隐藏文件, - 表示上一次所在目录 通常表示当前用户的home目录。使用 pwd 命令可以获取当前所在路径绝对路径。 进入上一级目录 $ cd .. 进入你的“home”目录 $ cd ~ # 或者 cd /home/你的用户名 使用 pwd 获取当前路径 $ pwd 绝对路径 关于绝对路径简单地说就是以根/目录为起点的完整路径以你所要到的目录为终点表现形式如 /usr/local/bin表示根目录下的 usr 目录中的 local 目录中的 bin 目录。 相对路径 相对路径也就是相对于你当前的目录的路径相对路径是以当前目录 . 为起点以你所要到的目录为终点表现形式如 usr/local/bin 这里假设你当前目录为根目录。 提示在进行目录切换的过程中请多使用 Tab 键自动补全可避免输入错误连续按两次Tab可以显示全部候选结果 1.新建 新建空白文件 使用 touch 命令创建空白文件创建名为 test 的空白文件因为在其他目录没有权限所以需要先 cd ~ 切换回用户的 /home/shiyanlou 目录 $ cd ~ $ touch test 新建目录 使用 mkdirmake directories命令可以创建一个空目录,也可同时指定创建目录的权限属性 创建名为mydir的空目录 $ mkdir mydir 使用 -p 参数同时创建父目录如果不存在该父目录如下我们同时创建一个多级目录这在有时候安装软件配置安装路径时非常有用 $ mkdir -p father/son/grandson 2.复制 复制文件 使用cpcopy命令复制一个文件或目录到指定目录。将之前创建的test文件复制到/home/shiyanlou/father/son/grandson目录中 $ cp test father/son/grandson 复制目录 要成功复制目录需要加上-r或者-R参数表示递归复制就是说有点“株连九族”的意思 $ cp -r father family 3.删除 删除文件 使用rmremove files or directories命令删除一个文件或目录 $ rm test 你如果想忽略这提示直接删除文件可以使用-f参数强制删除 $ rm -f test 删除目录 跟复制目录一样要删除一个目录也需要加上-r或-R参数 $ rm -r family 4.移动文件与文件重命名 移动文件 使用mv(move or rename files)命令移动文件剪切。将文件file1移动到Documents目录mv 源目录文件 目的目录 $ mv file1 Documents 重命名文件 将文件file1重命名为myfile mv 旧的文件名 新的文件名 $ mv file1 myfile 5.查看文件 使用cat,tac和nl命令查看文件 这两个命令都是用来打印文件内容到标准输出终端,其中cat为正序显示tac倒序显示。 nl命令添加行号并打印这是个比cat -n更专业的行号打印命令。 这里简单列举它的常用的几个参数 -b : 指定添加行号的方式主要有两种 -b a:表示无论是否为空行同样列出行号(cat -n就是这种方式) -b t:只列出非空行的编号并列出默认为这种方式 -n : 设置行号的样式主要有三种 -n ln:在行号字段最左端显示 -n rn:在行号字段最右边显示且不加 0 -n rz:在行号字段最右边显示且加 0 -w : 行号字段占用的位数(默认为 6 位) 使用more工具打开passwd文件 $ more passwd 这里想到系统新增加一个用户应该会将用户的信息添加到passwd文件的最后那么这时候我们就可以使用tail命令了 $ tail /etc/passwd 甚至更直接的只看一行 加上-n参数后面紧跟行数 $ tail -n 1 /etc/passwd 6.查看文件类型 前面我提到过在 Linux 下面文件的类型不是根据文件后缀来判断的我们通常使用file命令可以查看文件的类型 $ file /bin/ls 7.编辑文件 $ vimtutor 15. 一、环境变量 1.变量 变量的作用域即变量的有效范围比如一个函数中、一个源文件中或者全局范围在该范围内只能有一个同名变量。一旦离开则该变量无效如同不存在这个变量一般。 使用号赋值运算符为变量 tmp 赋值为 shiyanlou $ tmpshiyanlou 读取变量的值使用echo命令和$符号$符号用于表示引用一个变量的值初学者经常会忘记输入 $ echo $tmp 2.环境变量 简单理解了变量的概念就很好解释环境变量了环境变量就是作用域比自定义变量要大如Shell 的环境变量作用于自身和它的子进程。 通常我们会涉及到的环境变量有三种 •当前 Shell 进程私有用户自定义变量如上面我们创建的 temp 变量只在当前 Shell 中有效。 •Shell 本身内建的变量。 •从自定义变量导出的环境变量。 也有三个与上述三种环境变量相关的命令setenvexport。 命令 说明 set 显示当前 Shell 所有环境变量包括其内建环境变量与 Shell 外观等相关用户自定义变量及导出的环境变量 env 显示与当前用户相关的环境变量还可以让命令在指定环境中运行 export 显示从 Shell 中导出成环境变量的变量也能通过它将自定义变量导出为环境变量 3.命令的查找路径与顺序 我们在 Shell 中输入一个命令Shell 是怎么知道在哪去找到这个命令然后执行的呢这是通过环境变量PATH来进行搜索的这个PATH里面就保存了Shell中执行的命令的搜索路径。 查看PATH环境变量的内容 $ echo $PATH 通常这一类目录下放的都是可执行文件当我们在 Shell 中执行一个命令时系统就会按照 PATH 中设定的路径按照顺序依次到目录中去查找如果存在同名的命令则执行先找到的那个。 创建一个 Shell 脚本文件 $ vim hello_shell.sh 在脚本中添加如下内容保存并退出注意不要省掉第一行这不是注释论坛有用户反应会有语法错误就是因为没有了第一行 #!/bin/zsh for ((i0; i10; i));do echo hello shell done exit 0 文件添加可执行权限 $ chmod 755 hello_shell.sh 执行脚本 $ ./hello_shell.sh 创建一个 C 语言hello world程序 $ vim hello_world.c #include stdio.h int main(void) { printf(hello world!\n); return 0; } 使用 gcc 生成可执行文件 $ gcc -o hello_world hello_world.c gcc 生成二进制文件默认具有可执行权限不需要修改 在 shiyanlou 家目录创建一个mybin目录并将上述 hello_shell.sh 和 hello_world 文件移动到其中 $ mkdir mybin $ mv hello_shell.sh hello_world mybin/ 现在你可以在mybin目录中分别运行你刚刚创建的两个程序 $ cd mybin $ ./hello_shell.sh $ ./hello_world 4.添加自定义路径到“PATH”环境变量 在前面我们应该注意到PATH里面的路径是以作为分割符所以我们可以这样添加自定义路径 $ PATH$PATH:/home/shiyanlou/mybin 注意这里一定要使用绝对路径 $ echo PATH$PATH:/home/shiyanlou/mybin .zshrc 上述命令中表示将标准输出以追加的方式重定向到一个文件中注意前面用到的是以覆盖的方式重定向到一个文件中使用的时候一定要注意分辨。在指定文件不存在的情况下都会创建新的文件。 5.修改和删除已有变量 变量修改 变量的修改有以下几种方式 变量设置方式 说明 ${变量名#匹配字串} 从头向后开始匹配删除符合匹配字串的最短数据 ${变量名##匹配字串} 从头向后开始匹配删除符合匹配字串的最长数据 ${变量名%匹配字串} 从尾向前开始匹配删除符合匹配字串的最短数据 ${变量名%%匹配字串} 从尾向前开始匹配删除符合匹配字串的最长数据 ${变量名/旧的字串/新的字串} 将符合旧字串的第一个字串替换为新的字串 ${变量名//旧的字串/新的字串} 将符合旧字串的全部字串替换为新的字串 变量删除 可以使用unset命令删除一个环境变量 $ unset temp 6.如何让环境变量立即生效 在上面我们在 Shell 中修改了一个配置脚本文件之后比如 zsh 的配置文件 home 目录下的.zshrc每次都要退出终端重新打开甚至重启主机之后其才能生效很是麻烦我们可以使用source命令来让其立即生效如 $ source .zshrc $ . ./.zshrc 注意第一个点后面有一个空格而且后面的文件必须指定完整的绝对或相对路径名source 则不需要。 16.搜索文件 与搜索相关的命令常用的有如下几个whereis,which,find,locate。 •whereis简单快速 $whereis who 如果想要获得更全面的搜索结果可以使用locate命令。注意,它不只是在 etc 目录下查找并会自动递归子目录进行查找 •locate快而全 查找 /usr/share/ 下所有 jpg 文件 $ locate /usr/share/\*.jpg 注意要添加*号前面的反斜杠转义否则会无法找到 如果想只统计数目可以加上-c参数-i参数可以忽略大小写进行查找whereis 的-b,-m-s同样可以是使用。 which小而精 which本身是 Shell 内建的一个命令我们通常使用which来确定是否安装了某个指定的软件因为它只从PATH环境变量指定的路径中去搜索命令 $ which man •find精而细 find应该是这几个命令中最强大的了它不但可以通过文件类型、文件名进行查找而且可以根据文件的属性如文件的时间戳文件的权限等进行搜索。find命令强大到要把它将明白至少需要单独好几节课程才行我们这里只介绍一些常用的内容。 在指定目录下搜索指定文件名的文件 $ find /etc/ -name interfaces 注意 find 命令的路径是作为第一个参数的 基本命令格式为 find [path] [option] [action] 与时间相关的命令参数 参数 说明 -atime 最后访问时间 -ctime 创建时间 -mtime 最后修改时间 下面以-mtime参数举例 •-mtime n: n 为数字表示为在n天之前的”一天之内“修改过的文件 •-mtime n: 列出在n天之前不包含n天本身被修改过的文件 •-mtime -n: 列出在n天之前包含n天本身被修改过的文件 •newer file: file为一个已存在的文件列出比file还要新的文件名 列出 home 目录中当天24 小时之内有改动的文件 $ find ~ -mtime 0 列出用户家目录下比Code文件夹新的文件 $ find ~ -newer /home/shiyanlou/Code 17.文件打包和解压缩 在讲 Linux 上的解压缩工具之前有必要先了解以下常见常用的压缩包文件格式。在 Windows 上我们最常见的不外乎这三种*.zip,*.rar,*.7z后缀的压缩文件而在 Linux 上面常见常用的除了以上这三种外还有*.gz,*.xz,*.bz2,*.tar,*.tar.gz,*.tar.xz,*tar.bz2简单介绍如下 文件后缀名 说明 *.zip zip 程序打包压缩的文件 *.rar rar 程序压缩的文件 *.7z 7zip 程序压缩的文件 *.tar tar 程序打包未压缩的文件 *.gz gzip 程序(GNU zip)压缩的文件 *.xz xz 程序压缩的文件 *.bz2 bzip2 程序压缩的文件 *.tar.gz tar 打包gzip程序压缩的文件 *.tar.xz tar 打包xz程序压缩的文件 *tar.bz2 tar 打包bzip2程序压缩的文件 *.tar.7z tar 打包7z程序压缩的文件 讲了这么多种压缩文件这么多个命令不过我们一般只需要掌握几个命令即可包括zip,rar,tar。 1.zip压缩打包程序 •使用zip打包文件夹 •设置压缩级别为9和19最大,1最小重新打包 $ zip -r -9 -q -o shiyanlou_9.zip /home/shiyanlou -x ~/*.zip $ zip -r -1 -q -o shiyanlou_1.zip /home/shiyanlou -x ~/*.zip 这里添加了一个参数用于设置压缩级别-[1-9]1表示最快压缩但体积大9表示体积最小但耗时最久。最后那个-x是为了排除我们上一次创建的 zip 文件否则又会被打包进这一次的压缩文件中注意:这里只能使用绝对路径否则不起作用。 我们再用du命令分别查看默认压缩级别、最低、最高压缩级别及未压缩的文件的大小 $ du -h -d 0 *.zip ~ | sort 通过man 手册可知 •h, --human-readable顾名思义你可以试试不加的情况 •d, --max-depth所查看文件的深度 •创建加密zip包 使用-e参数可以创建加密压缩包 $ zip -r -e -o shiyanlou_encryption.zip /home/shiyanlou 注意: 关于zip命令因为 Windows 系统与 Linux/Unix 在文本文件格式上的一些兼容问题比如换行符为不可见字符在 Windows 为 CRLFCarriage-ReturnLine-Feed回车加换行而在 Linux/Unix 上为 LF换行所以如果在不加处理的情况下在 Linux 上编辑的文本在 Windows 系统上打开可能看起来是没有换行的。如果你想让你在 Linux 创建的 zip 压缩文件在 Windows 上解压后没有任何问题那么你还需要对命令做一些修改 $ zip -r -l -o shiyanlou.zip /home/shiyanlou 18.使用unzip命令解压缩zip文件 将shiyanlou.zip解压到当前目录 $ unzip shiyanlou.zip 使用安静模式将文件解压到指定目录 $ unzip -q shiyanlou.zip -d ziptest 如果你不想解压只想查看压缩包的内容你可以使用-l参数 $ unzip -l shiyanlou.zip 注意 使用unzip解压文件时我们同样应该注意兼容问题不过这里我们关心的不再是上面的问题而是中文编码的问题通常 Windows 系统上面创建的压缩文件如果有有包含中文的文档或以中文作为文件名的文件时默认会采用 GBK 或其它编码而 Linux 上面默认使用的是 UTF-8 编码如果不加任何处理直接解压的话可能会出现中文乱码的问题有时候它会自动帮你处理为了解决这个问题我们可以在解压时指定编码类型。 使用-O英文字母大写o参数指定编码类型 unzip -O GBK 中文压缩文件.zip 3.rar打包压缩命令 rar也是 Windows 上常用的一种压缩文件格式在 Linux 上可以使用rar和unrar工具分别创建和解压 rar 压缩包。 •安装rar和unrar工具 $ sudo apt-get update $ sudo apt-get install rar unrar •从指定文件或目录创建压缩包或添加文件到压缩包 $ rm *.zip $ rar a shiyanlou.rar . 上面的命令使用a参数添加一个目录到一个归档文件中如果该文件不存在就会自动创建。 注意rar 的命令参数没有-如果加上会报错。 •从指定压缩包文件中删除某个文件 $ rar d shiyanlou.rar .zshrc •查看不解压文件 $ rar l shiyanlou.rar •使用unrar解压rar文件 全路径解压 $ unrar x shiyanlou.rar 去掉路径解压 $ mkdir tmp $ unrar e shiyanlou.rar tmp/ 4.tar打包工具 tar 的解压和压缩都是同一个命令只需参数不同使用比较方便。 下面先掌握tar命令一些基本的使用方式即不进行压缩只是进行打包创建归档文件和解包的操作。 •创建一个 tar 包 $ tar -cf shiyanlou.tar ~ •解包一个文件(-x参数)到指定路径的已存在目录(-C参数) $ mkdir tardir $ tar -xf shiyanlou.tar -C tardir •只查看不解包文件-t参数 $ tar -tf shiyanlou.tar •保留文件属性和跟随链接符号链接或软链接有时候我们使用tar备份文件当你在其他主机还原时希望保留文件的属性(-p参数)和备份链接指向的源文件而不是链接本身(-h参数) $ tar -cphf etc.tar /etc 对于创建不同的压缩格式的文件对于tar来说是相当简单的需要的只是换一个参数这里我们就以使用gzip工具创建*.tar.gz文件为例来说明。 •我们只需要在创建 tar 文件的基础上添加-z参数使用gzip来压缩文件 $ tar -czf shiyanlou.tar.gz ~ •解压*.tar.gz文件 $ tar -xzf shiyanlou.tar.gz 现在我们要使用其他的压缩工具创建或解压相应文件只需要更改一个参数即可 压缩文件格式 参数 *.tar.gz -z *.tar.xz -J *tar.bz2 -j 19.简单文件系统操作 1.查看磁盘和目录的容量 使用 df 命令查看磁盘的容量 $ df $ df -h 现在你就可以使用命令查看你主机磁盘的使用情况了。至于挂载点如果你还记得前面第 4 节介绍 Linux 目录树结构的内容那么你就应该能很好的理解挂载的概念这里就不再赘述。 使用 du 命令查看目录的容量这个命令前面其实已经用了很多次了 # 默认同样以 blocks 的大小展示 $ du # 加上-h参数以更易读的方式展示 $ du -h -d参数指定查看目录的深度 # 只查看1级目录的信息 $ du -h -d 0 ~ # 查看2级 $ du -h -d 1 ~ duestimate file space usage命令与dfreport file system disk space usage只用一字只差首先就希望注意不要弄混淆了,以可以像我这样从man手册中获取命令的完整描述记全称就不会搞混了。 二、简单的磁盘管理 下面涉及的命令具有一定的危险性操作不当可能会丢失你的个人数据初学者建议在虚拟环境中进行操作 创建虚拟磁盘的命令行语句与其他的 Linux 程序不同因为它的命令行选项格式为选项值而不是更标准的--选项 值或-选项值。dd默认从标准输入中读取并写入到标准输出中但可以用选项ifinput file输入文件和ofoutput file输出文件改变。 我们先来试试用dd命令从标准输入读入用户输入到标准输出或者一个文件 # 输出到文件 $ dd oftest bs10 count1 # 或者 dd if/dev/stdin oftest bs10 count1 # 输出到标准输出 $ dd if/dev/stdin of/dev/stdout bs10 count1 将输出的英文字符转换为大写再写入文件 $ dd if/dev/stdin oftest bs10 count1 convucase 使用 dd 命令创建虚拟镜像文件 通过上面一小节你应该掌握了dd的基本使用下面就来使用dd命令来完成创建虚拟磁盘的第一步。 从/dev/zero设备创建一个容量为 256M 的空文件 $ dd if/dev/zero ofvirtual.img bs1M count256 $ du -h virtual.img 使用 mkfs 命令格式化磁盘我们这里是自己创建的虚拟磁盘镜像 你可以在命令行输入 mkfs 然后按下Tab键你可以看到很多个以 mkfs 为前缀的命令这些不同的后缀其实就是表示着不同的文件系统可以用 mkfs 格式化成的文件系统 我们可以简单的使用下面的命令来将我们的虚拟磁盘镜像格式化为ext4文件系统 $ mkfs.ext4 virtual.img 使用 mount 命令挂载磁盘到目录树 我们先来使用mount来查看下主机已经挂载的文件系统 $ sudo mount 那么我们如何挂载真正的磁盘到目录树呢mount命令的一般格式如下 mount [options] [source] [directory] 一些常用操作 mount [-o [操作选项]] [-t 文件系统类型] [-w|--rw|--ro] [文件系统源] [挂载点] 我们现在直接来挂载我们创建的虚拟磁盘镜像到/mnt目录 $ mount -o loop -t ext4 virtual.img /mnt # 也可以省略挂载类型很多时候 mount 会自动识别 # 以只读方式挂载 $ mount -o loop --ro virtual.img /mnt # 或者mount -o loop,ro virtual.img /mnt 使用 umount 命令卸载已挂载磁盘 # 命令格式 sudo umount 已挂载设备名或者挂载点如 $ sudo umount /mnt 我们重点开一下中间的分区信息/dev/sda1/dev/sda2 为主分区分别安装了 Windows 和 Linux 操作系统/dev/sda3 为交换分区可以理解为虚拟内存/dev/sda4 为扩展分区其中包含 /dev/sda5/dev/sda6/dev/sda7/dev/sda8 四个逻辑分区因为主机上有几个分区之间有空隙没有对齐边界扇区,所以分区之间的不是完全连续的。 # 进入磁盘分区模式 $ sudo fdisk virtual.img 使用 losetup 命令建立镜像与回环设备的关联 $ sudo losetup /dev/loop0 virtual.img # 如果提示设备忙你也可以使用其它的回环设备ls /dev/loop*参看所有回环设备# 解除设备关联 $ sudo losetup -d /dev/loop0 然后再使用mkfs格式化各分区前面我们是格式化整个虚拟磁盘镜像文件或磁盘不过格式化之前我们还要为各分区建立虚拟设备的映射用到kpartx工具需要先安装 $ sudo apt-get install kpartx $ sudo kpart kpartx -av /dev/loop0 # 取消映射 $ sudo kpart kpartx -dv /dev/loop0接着再是格式化我们将其全部格式化为 ext4 $ sudo mkfs.ext4 -q /dev/mapper/loop0p1 $ sudo mkfs.ext4 -q /dev/mapper/loop0p5 $ sudo mkfs.ext4 -q /dev/mapper/loop0p6 格式化完成后在/media目录下新建四个空目录用于挂载虚拟磁盘 $ mkdir -p /media/virtualdisk_{1..3} # 挂载磁盘分区 $ sudo mount /dev/mapper/loop0p1 /media/virtualdisk_1 $ sudo mount /dev/mapper/loop0p5 /media/virtualdisk_2 $ sudo mount /dev/mapper/loop0p6 /media/virtualdisk_3 # 卸载磁盘分区 $ sudo umount /dev/mapper/loop0p1 $ sudo umount /dev/mapper/loop0p5 $ sudo umount /dev/mapper/loop0p6 然后 $ df -h 20.一、命令执行顺序的控制 顺序执行多条命令:简单的顺序执行你可以使用;来完成 有选择的执行命令:那么我们需要能够有选择性的来执行命令比如上一条命令执行成功才继续下一条或者不成功又该做出其它什么处理,比如我们使用which来查找是否安装某个命令如果找到就执行该命令否则什么也不做虽然这个操作没有什么实际意义但可帮你更好的理解一些概念 $ which cowsay/dev/null cowsay -f head-in ohch~ 你如果没有安装cowsay你可以先执行一次上述命令你会发现什么也没发生你再安装好之后你再执行一次上述命令你也会发现一些惊喜。上面的就是用来实现选择性执行的它表示如果前面的命令执行结果不是表示终端输出的内容而是表示命令执行状态的结果返回0则执行后面的否则不执行你可以从$?环境变量获取上一次命令的返回结果 ||在这里就是与相反的控制效果当上一条命令执行结果为≠0($?≠0)时则执行它后面的命令 二、管道 1.试用 先试用一下管道比如查看/etc目录下有哪些文件和目录使用ls命令来查看 $ ls -al /etc 有太多内容屏幕不能完全显示这时候可以使用滚动条或快捷键滚动窗口来查看。不过这时候可以使用管道 $ ls -al /etc | less 通过管道将前一个命令(ls)的输出作为下一个命令(less)的输入然后就可以一行一行地看。 2.cut 命令打印每一行的某一字段 打印/etc/passwd文件中以:为分隔符的第1个字段和第6个字段分别表示用户名和其家目录 $ cut /etc/passwd -d : -f 1,6 打印/etc/passwd文件中每一行的前N个字符 # 前五个包含第五个 $ cut /etc/passwd -c -5 # 前五个之后的包含第五个 $ cut /etc/passwd -c 5- # 第五个 $ cut /etc/passwd -c 5 # 2到5之间的包含第五个 $ cut /etc/passwd -c 2-5 3.grep 命令在文本中或 stdin 中查找匹配字符串 grep命令是很强大的也是相当常用的一个命令它结合正则表达式可以实现很复杂却很高效的匹配和查找不过在学习正则表达式之前这里介绍它简单的使用而关于正则表达式后面将会有单独一小节介绍到时会再继续学习grep命令和其他一些命令。 grep命令的一般形式为grep [命令选项]... 用于匹配的表达式 [文件]... 还是先体验一下我们搜索/home/shiyanlou目录下所有包含shiyanlou的所有文本文件并显示出现在文本中的行号 $ grep -rnI shiyanlou ~ -r 参数表示递归搜索子目录中的文件,-n表示打印匹配项行号-I表示忽略二进制文件。这个操作实际没有多大意义但可以感受到grep命令的强大与实用。 当然也可以在匹配字段中使用正则表达式下面简单的演示 # 查看环境变量中以yanlou结尾的字符串 $ export | grep .*yanlou$ 4. wc 命令简单小巧的计数工具 wc 命令用于统计并输出一个文件中行、单词和字节的数目比如输出/etc/passwd文件的统计信息 $ wc /etc/passwd 分别只输出行数、单词数、字节数、字符数和输入文本中最长一行的字节数 # 行数 $ wc -l /etc/passwd # 单词数 $ wc -w /etc/passwd # 字节数 $ wc -c /etc/passwd # 字符数 $ wc -m /etc/passwd # 最长行字节数 $ wc -L /etc/passwd 注意对于西文字符来说一个字符就是一个字节但对于中文字符一个汉字是大于2个字节的具体数目是由字符编码决定的 再来结合管道来操作一下下面统计 /etc 下面所有目录数 $ ls -dl /etc/*/ | wc -l 5.sort 排序命令 这个命令前面我们也是用过多次功能很简单就是将输入按照一定方式排序然后再输出,它支持的排序有按字典排序,数字排序按月份排序随机排序反转排序指定特定字段进行排序等等。 默认为字典排序 $ cat /etc/passswd | sort 反转排序 $ cat /etc/passwd | sort -r 按特定字段排序 $ cat /etc/passwd | sort -t: -k 3 上面的-t参数用于指定字段的分隔符这里是以:作为分隔符-k 字段号用于指定对哪一个字段进行排序。这里/etc/passwd文件的第三个字段为数字默认情况下是一字典序排序的如果要按照数字排序就要加上-n参数 $ cat /etc/passwd | sort -t: -k 3 -n 6. uniq 去重命令 uniq命令可以用于过滤或者输出重复行。 •过滤重复行可以使用history命令查看最近执行过的命令实际为读取${SHELL}_history文件,如我们环境中的~/.zsh_history文件不过你可能只想查看使用了那个命令而不需要知道具体干了什么那么你可能就会要想去掉命令后面的参数然后去掉重复的命令 $ history | cut -c 8- | cut -d -f 1 | uniq 不那么明显之所以不明显是因为uniq命令只能去连续重复的行不是全文去重所以要达到预期效果我们先排序 $ history | cut -c 8- | cut -d -f 1 | sort | uniq # 或者$ history | cut -c 8- | cut -d -f 1 | sort -u •输出重复行# 输出重复过的行重复的只输出一个及重复次数 $ history | cut -c 8- | cut -d -f 1 | sort | uniq -dc # 输出所有重复的行 $ history | cut -c 8- | cut -d -f 1 | sort | uniq -D 21.文本处理命令 1.tr 命令 tr 命令可以用来删除一段文本信息中的某些文字。或者将其进行转换。 使用方式 tr [option]...SET1 [SET2] 常用的选项有 选项 说明 -d 删除和set1匹配的字符注意不是全词匹配也不是按字符顺序匹配 -s 去除set1指定的在输入文本中连续并重复的字符 操作举例 # 删除 hello shiyanlou 中所有的o,l,h $ echo hello shiyanlou | tr -d olh # 将hello 中的ll,去重为一个l $ echo hello | tr -s l # 将输入文本全部转换为大写或小写输出 $ cat /etc/passwd | tr [:lower:] [:upper:] # 上面的[:lower:] [:upper:]你也可以简单的写作[a-z] [A-Z],当然反过来将大写变小写也是可以的 2.col 命令 col 命令可以将Tab换成对等数量的空格建或反转这个操作。 使用方式 col [option] 常用的选项有 选项 说明 -x 将Tab转换为空格 -h 将空格转换为Tab默认选项 操作举例 # 查看 /etc/protocols 中的不可见字符可以看到很多 ^I 这其实就是 Tab 转义成可见字符的符号 $ cat -A /etc/protocols # 使用 col -x 将 /etc/protocols 中的 Tab 转换为空格,然后再使用 cat 查看你发现 ^I 不见了 $ cat /etc/protocols | col -x | cat -A 3.join命令 学过数据库的用户对这个应该不会陌生这个命令就是用于将两个文件中包含相同内容的那一行合并在一起。 使用方式 join [option]... file1 file2 常用的选项有 选项 说明 -t 指定分隔符默认为空格 -i 忽略大小写的差异 -1 指明第一个文件要用哪个字段来对比默认对比第一个字段 -2 指明第二个文件要用哪个字段来对比默认对比第一个字段 操作举例 # 创建两个文件 $ echo 1 hello file1 $ echo 1 shiyanlou file2 $ join file1 file2 # 将/etc/passwd与/etc/shadow两个文件合并指定以:作为分隔符 $ sudo join -t: /etc/passwd /etc/shadow # 将/etc/passwd与/etc/group两个文件合并指定以:作为分隔符, 分别比对第4和第3个字段 $ sudo join -t: -1 4 /etc/passwd -2 3 /etc/group 4.paste命令 paste这个命令与join 命令类似它是在不对比数据的情况下简单地将多个文件合并一起以Tab隔开。 使用方式 paste [option] file... 常用的选项有 选项 说明 -d 指定合并的分隔符默认为Tab -s 不合并到一行每个文件为一行 操作举例 $ echo hello file1 $ echo shiyanlou file2 $ echo www.shiyanlou.com file3 $ paste -d : file1 file2 file3 $ paste -s file1 file2 file3 23.简单的重定向 在更多了解 Linux 的重定向之前我们需要先知道一些基本的东西前面我们已经提到过 Linux 默认提供了三个特殊设备用于终端的显示和输出分别为stdin标准输入,对应于你在终端的输入stdout标准输出对应于终端的输出stderr标准错误输出对应于终端的输出。 文件描述符 设备文件 说明 0 /dev/stdin 标准输入 1 /dev/stdout 标准输出 2 /dev/stderr 标准错误 我们可以这样使用这些文件描述符 默认使用终端的标准输入作为命令的输入和标准输出作为命令的输出 $ cat 按CtrlC退出 将cat的连续输出heredoc方式重定向到一个文件 $ mkdir Documents $ cat Documents/test.c\~ EOF #include stdio.h int main() { printf(hello world\n); return 0; } EOF 将一个文件作为命令的输入标准输出作为命令的输出 $ cat Documents/test.c\~ 将echo命令通过管道传过来的数据作为cat命令的输入将标准输出作为命令的输出 $ echo hi | cat 将echo命令的输出从默认的标准输出重定向到一个普通文件 $ echo hello shiyanlou redirect $ cat redirect .标准错误重定向 重定向标准输出到文件这是一个很实用的操作另一个很实用的操作是将标准错误重定向标准输出和标准错误都被指向伪终端的屏幕显示所以我们经常看到的一个命令的输出通常是同时包含了标准输出和标准错误的结果的。比如下面的操作 # 使用cat 命令同时读取两个文件其中一个存在另一个不存在 $ cat Documents/test.c\~ hello.c # 你可以看到除了正确输出了前一个文件的内容还在末尾出现了一条错误信息 # 下面我们将输出重定向到一个文件根据我们前面的经验这里将在看不到任何输出了 $ cat Documents/test.c\~ hello.c somefile # 将标准错误重定向到标准输出再将标准输出重定向到文件注意要将重定向到文件写到前面 $ cat Documents/test.c\~ hello.c somefile 21 # 或者只用bash提供的特殊的重定向符号将标准错误和标准输出同时重定向到文件 $ cat Documents/test.c\~ hello.c somefilehell 注意你应该在输出重定向文件描述符前加上,否则shell会当做重定向到一个文件名为1的文件中 3.使用tee命令同时重定向到多个文件 经常你可能还有这样的需求除了将需要将输出重定向到文件之外也需要将信息打印在终端那么你可以使用tee命令来实现 $ echo hello shiyanlou | tee hello 4.永久重定向 你应该可以看出我们前面的重定向操作都只是临时性的即只对当前命令有效那如何做到“永久”有效呢比如在一个脚本中你需要某一部分的命令的输出全部进行重定向难道要让你在每个命令上面加上临时重定向的操作嘛当然不需要我们可以使用exec命令实现“永久”重定向。exec命令的作用是使用指定的命令替换当前的 Shell及使用一个进程替换当前进程或者指定新的重定向 # 先开启一个子 Shell $ zsh # 使用exec替换当前进程的重定向将标准输出重定向到一个文件 $ exec 1somefile # 后面你执行的命令的输出都将被重定向到文件中,直到你退出当前子shell或取消exec的重定向后面将告诉你怎么做 $ ls $ exit $ cat somefile 5.创建输出文件描述符 默认在 Shell 中可以有9个打开的文件描述符上面我们使用了也是它默认提供的0,1,2号文件描述符另外我们还可以使用3-8的文件描述符只是它们默认没有打开而已你可以使用下面命令查看当前 Shell 进程中打开的文件描述符 $ cd /dev/fd/;ls -Al 同样使用exec命令可以创建新的文件描述符 $ zsh $ exec 3somefile # 先进入目录再查看否则你可能不能得到正确的结果然后再回到上一次的目录 $ cd /dev/fd/;ls -Al;cd - # 注意下面的命令与之间不应该有空格如果有空格则会出错 $ echo this is test 3 $ cat somefile $ exit 6.关闭文件描述符 如上面我们打开的3号文件描述符可以使用如下操作将它关闭 $ exec 3- $ cd /dev/fd;ls -Al;cd - 7.完全屏蔽命令的输出 在 Linux 中有一个被成为“黑洞”的设备文件,所以导入它的数据都将被“吞噬”。 在类 UNIX 系统中/dev/null或称空设备是一个特殊的设备文件它通常被用于丢弃不需要的输出流或作为用于输入流的空文件这些操作通常由重定向完成。读取它则会立即得到一个EOF。 我们可以利用设个/dev/null屏蔽命令的输出 $ cat Documents/test.c\~ nefile 1/dev/null 21 向上面这样的操作将使你得不到任何输出结果。 8.使用 xargs 分割参数列表 xargs 是一条 UNIX 和类 UNIX 操作系统的常用命令。它的作用是将参数列表转换成小块分段传递给其他命令以避免参数列表过长的问题。 这个命令在有些时候十分有用特别是当用来处理产生大量输出结果的命令如 findlocate 和 grep 的结果详细用法请参看 man 文档。 $ cut -d: -f1 /etc/passwd | sort | xargs echo 上面这个命令用于将/etc/passwd文件按:分割取第一个字段排序后使用echo命令生成一个列表。 24.一、正则表达式 正则表达式又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法英语Regular Expression在代码中常简写为 regex、regexp 或 RE计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里正则表达式通常被用来检索、替换那些符合某个模式的文本。 2.基本语法 一个正则表达式通常被称为一个模式pattern为用来描述或者匹配一系列符合某个句法规则的字符串。 选择 |竖直分隔符表示选择例如boy|girl可以匹配boy或者girl 数量限定 数量限定除了我们举例用的*,还有加号,?问号,.点号如果在一个模式中不加数量限定符则表示出现一次且仅出现一次 •表示前面的字符必须出现至少一次(1次或多次)例如google,可以匹配gooogle,goooogle等•?表示前面的字符最多出现一次(0次或1次)例如colou?r,可以匹配color或者colour;•*星号代表前面的字符可以不出现也可以出现一次或者多次0次、或1次、或多次例如“0*42”可以匹配42、042、0042、00042等。 范围和优先级 ()圆括号可以用来定义模式字符串的范围和优先级这可以简单的理解为是否将括号内的模式串作为一个整体。例如gr(a|e)y等价于gray|grey这里体现了优先级竖直分隔符用于选择a或者e而不是gra和ey(grand)?father匹配father和grandfather这里体验了范围?将圆括号内容作为一个整体匹配。 语法部分 正则表达式有多种不同的风格下面列举一些常用的作为 PCRE 子集的适用于perl和python编程语言及grep或egrep的正则表达式匹配规则(由于markdown表格解析的问题下面的竖直分隔符用全角字符代替实际使用时请换回半角字符) PCREPerl Compatible Regular Expressions中文含义perl语言兼容正则表达式是一个用 C 语言编写的正则表达式函数库由菲利普.海泽(Philip Hazel)编写。PCRE是一个轻量级的函数库比Boost 之类的正则表达式库小得多。PCRE 十分易用同时功能也很强大性能超过了 POSIX 正则表达式库和一些经典的正则表达式库。 字符 描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符。例如“n”匹配字符“n”。“\n”匹配一个换行符。序列“\\”匹配“\”而“\(”则匹配“(”。 ^ 匹配输入字符串的开始位置。 $ 匹配输入字符串的结束位置。 {n} n是一个非负整数。匹配确定的n次。例如“o{2}”不能匹配“Bob”中的“o”但是能匹配“food”中的两个o。 {n,} n是一个非负整数。至少匹配n次。例如“o{2,}”不能匹配“Bob”中的“o”但能匹配“foooood”中的所有o。“o{1,}”等价于“o”。“o{0,}”则等价于“o*”。 {n,m} m和n均为非负整数其中nm。最少匹配n次且最多匹配m次。例如“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。 * 匹配前面的子表达式零次或多次。例如zo*能匹配“z”、“zo”以及“zoo”。*等价于{0,}。 匹配前面的子表达式一次或多次。例如“zo”能匹配“zo”以及“zoo”但不能匹配“z”。等价于{1,}。 ? 匹配前面的子表达式零次或一次。例如“do(es)?”可以匹配“do”或“does”中的“do”。?等价于{0,1}。 ? 当该字符紧跟在任何一个其他限制符*,,?{n}{n,}{n,m}后面时匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如对于字符串“oooo”“o?”将匹配单个“o”而“o”将匹配所有“o”。 . 匹配除“\n”之外的任何单个字符。要匹配包括“\n”在内的任何字符请使用像“(.\n)”的模式。 (pattern) 匹配pattern并获取这一匹配的子字符串。该子字符串用于向后引用。要匹配圆括号字符请使用“\(”或“\)”。 xy 匹配x或y。例如“zfood”能匹配“z”或“food”。“(zf)ood”则匹配“zood”或“food”。 [xyz] 字符集合character class。匹配所包含的任意一个字符。例如“[abc]”可以匹配“plain”中的“a”。其中特殊字符仅有反斜线\保持特殊含义用于转义字符。其它特殊字符如星号、加号、各种括号等均作为普通字符。脱字符^如果出现在首位则表示负值字符集合如果出现在字符串中间就仅作为普通字符。连字符 - 如果出现在字符串中间表示字符范围描述如果如果出现在首位则仅作为普通字符。 [^xyz] 排除型negate字符集合。匹配未列出的任意字符。例如“[^abc]”可以匹配“plain”中的“plin”。 [a-z] 字符范围。匹配指定范围内的任意字符。例如“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。 [^a-z] 排除型的字符范围。匹配任何不在指定范围内的任意字符。例如“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。 优先级 优先级为从上到下从左到右依次降低 运算符 说明 \ 转义符 (), (?:), (?), [] 括号和中括号 *、、?、{n}、{n,}、{n,m} 限定符 ^、$、\任何元字符 定位点和序列 选择 更多正则表达式的内容可以参考以下链接 •正则表达式wiki•几种正则表达式引擎的语法差异•各语言各平台对正则表达式的支持 二、grep模式匹配命令 上面空谈了那么多正则表达式的内容也并没有提及具体该如何使用它实在枯燥如果说正则表达式是一门武功话那它也只能算得上一些口诀招式罢了要把它真正练起来还得需要一些兵器在手才行这里我们要介绍的grep命令以及后面要讲的sed,awk这些就该算作是这样的兵器了。 1.基本操作 grep命令用于打印输出文本中匹配的模式串它使用正则表达式作为模式匹配的条件。grep支持三种正则表达式引擎分别用三个参数指定 参数 说明 -E POSIX扩展正则表达式ERE -G POSIX基本正则表达式BRE -P Perl正则表达式PCRE 不过在你没学过perl语言的大多数情况下你将只会使用到ERE和BRE,所以我们接下来的内容都不会讨论到PCRE中特有的一些正则表达式语法它们之间大部分内容是存在交集的所以你不用担心会遗漏多少重要内容 在通过grep命令使用正则表达式之前先介绍一下它的常用参数 参数 说明 -b 将二进制文件作为文本来进行匹配 -c 统计以模式匹配的数目 -i 忽略大小写 -n 显示匹配文本所在行的行号 -v 反选输出不匹配行的内容 -r 递归匹配查找 -A n n为正整数表示after的意思除了列出匹配行之外还列出后面的n行 -B n n为正整数表示before的意思除了列出匹配行之外还列出前面的n行 --colorauto 将输出中的匹配项设置为自动颜色显示 注在大多数发行版中是默认设置了grep的颜色的你可以通过参数指定或修改GREP_COLOR环境变量。 2.使用正则表达式 使用基本正则表达式BRE •位置 查找/etc/group文件中以shiyanlou为开头的行 $ grep shiyanlou /etc/group $ grep ^shiyanlou /etc/group •数量# 将匹配以z开头以o结尾的所有字符串 $ echo zero\nzo\nzoo | grep z.*o # 将匹配以z开头以o结尾中间包含一个任意字符的字符串 $ echo zero\nzo\nzoo | grep z.o # 将匹配以z开头,以任意多个o结尾的字符串 $ echo zero\nzo\nzoo | grep zo* •选择# grep默认是区分大小写的这里将匹配所有的小写字母 $ echo 1234\nabcd | grep [a-z] # 将匹配所有的数字 $ echo 1234\nabcd | grep [0-9] # 将匹配所有的数字 $ echo 1234\nabcd | grep [[:digit:]] # 将匹配所有的小写字母 $ echo 1234\nabcd | grep [[:lower:]] # 将匹配所有的大写字母 $ echo 1234\nabcd | grep [[:upper:]] # 将匹配所有的字母和数字包括0-9,a-z,A-Z $ echo 1234\nabcd | grep [[:alnum:]] # 将匹配所有的字母 $ echo 1234\nabcd | grep [[:alpha:]] 下面包含完整的特殊符号及说明 特殊符号 说明 [:alnum:] 代表英文大小写字节及数字亦即 0-9, A-Z, a-z [:alpha:] 代表任何英文大小写字节亦即 A-Z, a-z [:blank:] 代表空白键与 [Tab] 按键两者 [:cntrl:] 代表键盘上面的控制按键亦即包括 CR, LF, Tab, Del.. 等等 [:digit:] 代表数字而已亦即 0-9 [:graph:] 除了空白字节 (空白键与 [Tab] 按键) 外的其他所有按键 [:lower:] 代表小写字节亦即 a-z [:print:] 代表任何可以被列印出来的字节 [:punct:] 代表标点符号 (punctuation symbol)亦即 ? ! ; : # $... [:upper:] 代表大写字节亦即 A-Z [:space:] 任何会产生空白的字节包括空白键, [Tab], CR 等等 [:xdigit:] 代表 16 进位的数字类型因此包括 0-9, A-F, a-f 的数字与字节 # 排除字符 $ echo geek|good | grep [^o] 注意:当^放到中括号内为排除字符否则表示行首。 三、sed 流编辑器 sed工具在 man 手册里面的全名为sed - stream editor for filtering and transforming text 意即用于过滤和转换文本的流编辑器。 在 Linux/UNIX 的世界里敢称为编辑器的工具大都非等闲之辈比如前面的vi/vim(编辑器之神),emacs(神的编辑器),gedit这些个编辑器。sed与上述的最大不同之处大于它是一个非交互式的编辑器下面我们就开始介绍sed这个编辑器。 sed常用参数介绍 sed 命令基本格式 sed [参数]... [执行命令] [输入文件]... # 形如 $ sed -i 1s/sad/happy/ test # 表示将test文件中第一行的sad替换为happy 参数 说明 -n 安静模式只打印受影响的行默认打印输入数据的全部内容 -e 用于在脚本中添加多个执行命令一次执行在命令行中执行多个命令通常不需要加该参数 -f filename 指定执行filename文件中的命令 -r 使用扩展正则表达式默认为标准正则表达式 -i 将直接修改输入文件内容而不是打印到标准输出设备 sed编辑器的执行命令这里”执行“解释为名词 sed执行命令格式 [n1][,n2]command [n1][~step]command # 其中一些命令可以在后面加上作用范围形如 $ sed -i s/sad/happy/g test # g表示全局范围 $ sed -i s/sad/happy/4 test # 4表示指定行中的第四个匹配字符串 其中n1,n2表示输入内容的行号它们之间为,逗号则表示从n1到n2行如果为波浪号则表示从n1开始以step为步进的所有行command为执行动作下面为一些常用动作指令 命令 说明 s 行内替换 c 整行替换 a 插入到指定行的后面 i 插入到指定行的前面 p 打印指定行通常与-n参数配合使用 d 删除指定行 sed操作举例 我们先找一个用于练习的文本文件 $ cp /etc/passwd ~ 打印指定行 # 打印2-5行 $ nl passwd | sed -n 2,5p # 打印奇数行 $ nl passwd | sed -n 1~2p 行内替换 # 将输入文本中shiyanlou 全局替换为hehe,并只打印替换的那一行注意这里不能省略最后的p命令 $ sed -n s/shiyanlou/hehe/gp passwd 注意 行内替换可以结合正则表达式使用。 行间替换 $ nl passwd | grep shiyanlou # 删除第21行 $ sed -n 21c\www.shiyanlou.com passwd 四、awk文本处理语言 在我们的环境中ubuntu上默认提供的是mawk不过我们通常可以直接使用awk命令awk语言的解释器因为系统已经为我们创建好了awk指向mawk的符号链接。 $ ll /usr/bin/awk 2.awk的一些基础概念 awk所有的操作都是基于pattern(模式)—action(动作)对来完成的如下面的形式 $ pattern {action} .awk命令基本格式 awk [-F fs] [-v varvalue] [-f prog-file | program text] [file...] 其中-F参数用于预先指定前面提到的字段分隔符还有其他指定字段的方式 -v用于预先为awk程序指定变量-f参数用于指定awk命令要执行的程序文件或者在不加-f参数的情况下直接将程序语句放在这里最后为awk需要处理的文本输入且可以同时输入多个文本文件。 4.awk操作体验 先用vim新建一个文本文档 $ vim test 包含如下内容 I like linux www.shiyanlou.com •使用awk将文本内容打印到终端# quote 不用输入 $ awk { print } test # 或者写到一行 $ awk {print} test •将test的第一行的每个字段单独显示为一行$ awk { if(NR1){ print $1 \n $2 \n $3 } else { print} } test # 或者 $ awk { if(NR1){ OFS\n print $1, $2, $3 } else { print} } test •将test的第二行的以点为分段的字段换成以空格为分隔$ awk -F. { if(NR2){ print $1 \t $2 \t $3 }} test # 或者 $ awk BEGIN{ FS. OFS\t # 如果写为一行两个动作语句之间应该以;号分开 }{ if(NR2){ print $1, $2, $3 }} test 6.awk常用的内置变量 变量名 说明 FILENAME 当前输入文件名若有多个文件则只表示第一个。如果输入是来自标准输入则为空字符串 $0 当前记录的内容 $N N表示字段号最大值为NF变量的值 FS 字段分隔符由正则表达式表示默认为 空格 RS 输入记录分隔符默认为\n即一行为一个记录 NF 当前记录字段数 NR 已经读入的记录数 FNR 当前输入文件的记录数请注意它与NR的区别 OFS 输出字段分隔符默认为 空格 ORS 输出记录分隔符默认为\n 24.一、Linux 上的软件安装 通常 Linux 上的软件安装主要有三种方式 •在线安装 •从磁盘安装deb软件包 •从二进制软件包安装 •从源代码编译安装 二、在线安装 在 Linux 下一个命令加回车等待一下软件就安装好了这就是方便的在线安装软件的方式。比如我们想安装一个软件名字叫做 w3m(w3m是一个命令行的简易网页浏览器)那么输入如下命令 $ sudo apt-get install w3m 2. apt 包管理工具介绍 APT是Advance Packaging Tool高级包装工具的缩写是Debian及其派生发行版的软件包管理器APT可以自动下载配置安装二进制或者源代码格式的软件包因此简化了Unix系统上管理软件的过程。APT最早被设计成dpkg的前端用来处理deb格式的软件包。现在经过APT-RPM组织修改APT已经可以安装在支持RPM的系统管理RPM包。这个包管理器包含以 apt- 开头的的多个工具如 apt-get apt-cache apt-cdrom 等在Debian系列的发行版中使用。 当你在执行安装操作时首先apt-get 工具会在本地的一个数据库中搜索关于 w3m 软件的相关信息并根据这些信息在相关的服务器上下载软件安装这里大家可能会一个疑问既然是在线安装软件为啥会在本地的数据库中搜索要解释这个问题就得提到几个名词了 •软件源镜像服务器 •软件源 .apt-get apt-get使用各用于处理apt包的公用程序集我们可以用它来在线安装、卸载和升级软件包等下面列出一些apt-get包含的常用的一些工具 工具 说明 install 其后加上软件包名用于安装一个软件包 update 从软件源镜像服务器上下载/更新用于更新本地软件源的软件包列表 upgrade 升级本地可更新的全部软件包但存在依赖问题时将不会升级通常会在更新之前执行一次update dist-upgrade 解决依赖关系并升级(存在一定危险性) remove 移除已安装的软件包包括与被移除软件包有依赖关系的软件包但不包含软件包的配置文件 autoremove 移除之前被其他软件包依赖但现在不再被使用的软件包 purge 与remove相同但会完全移除软件包包含其配置文件 clean 移除下载到本地的已经安装的软件包默认保存在/var/cache/apt/archives/ autoclean 移除已安装的软件的旧版本软件包 下面是一些apt-get常用的参数 参数 说明 -y 自动回应是否安装软件包的选项在一些自动化安装脚本中使用这个参数将十分有用 -s 模拟安装 -q 静默安装方式指定多个q或者-q#,#表示数字用于设定静默级别这在你不想要在安装软件包时屏幕输出过多时很有用 -f 修复损坏的依赖关系 -d 只下载不安装 --reinstall 重新安装已经安装但可能存在问题的软件包 --install-suggests 同时安装APT给出的建议安装的软件包 4.安装软件包 关于安装如前面演示的一样你只需要执行apt-get install 软件包名即可除了这一点你还应该掌握的是如何重新安装软件包。 很多时候我们需要重新安装一个软件包比如你的系统被破坏或者一些错误的配置导致软件无法正常工作。 你可以使用如下方式重新安装 $ sudo apt-get --reinstall install w3m 另一个你需要掌握的是如何在不知道软件包完整名的时候进行安装。通常我们是使用Tab键补全软件包名后面会介绍更好的方法来搜索软件包。有时候你需要同时安装多个软件包你还可以使用正则表达式匹配软件包名进行批量安装。 5.软件升级 # 更新软件源 $ sudo apt-get update # 升级没有依赖问题的软件包 $ sudo apt-get upgrade # 升级并解决依赖关系 $ sudo apt-get dist-upgrade 6.卸载软件 如果你现在觉得 w3m 这个软件不合自己的胃口或者是找到了更好的你需要卸载它那么简单同样是一个命令加回车 sudo apt-get remove w3m 系统会有一个确认的操作之后这个软件便“滚蛋了”。 7.软件搜索 当自己刚知道了一个软件想下载使用需要确认软件仓库里面有没有就需要用到搜索功能了命令如下 sudo apt-cache search softname1 softname2 softname3…… 三、使用 dpkg 从本地磁盘安装 deb 软件包 dpkg 介绍dpkg常用参数介绍 参数 说明 -i 安装指定deb包 -R 后面加上目录名用于安装该目录下的所有deb安装包 -r remove移除某个已安装的软件包 -I 显示deb包文件的信息 -s 显示已安装软件的信息 -S 搜索已安装的软件包 -L 显示已安装软件包的目录信息 2.使用dpkg安装deb软件包 我们先使用apt-get加上-d参数只下载不安装下载emacs编辑器的deb包下载完成后我们可以查看/var/cache/apt/archives/目录下的内容然后我们将第一个deb拷贝到home目录下并使用dpkg安装 $ cp /var/cache/apt/archives/emacs24_24.31-4ubuntu1_amd64.deb ~ # 安装之前参看deb包的信息 $ sudo dpkg -I emacs24_24.31-4ubuntu1_amd64.deb 如你所见这个包还额外依赖了一些软件包这意味着如果主机目前没有这些被依赖的软件包直接使用dpkg安装可能会存在一些问题因为dpkg并不能为你解决依赖关系。 # 使用dpkg安装 $ sudo dpkg -i emacs24_24.31-4ubuntu1_amd64.deb 们将如何解决这个错误了这就要用到apt-get了使用它的-f参数了修复依赖关系的安装 $ sudo apt-get -f install 3.查看已安装软件包的安装目录 如果你依然在纠结到底linux将软件安装到了什么地方那么很幸运你将可以通过dpkg找到答案 使用dpkg -L查看deb包目录信息 $ sudo dpkg -L emacs 四、从二进制包安装 二进制包的安装比较简单我们需要做的只是将从网络上下载的二进制包解压后放到合适的目录然后将包含可执行的主程序文件的目录添加进PATH环境变量即可如果你不知道该放到什么位置请重新复习第四节关于 Linux 目录结构的内容。 3. 课后作业 课程第二节实验内容安装bannertoiletfiglet 课程第三节作业 课程第四节作业 课程第五节作业 《黑客帝国》电影里满屏幕代码的“数字雨”在 Linux 里面你也可以轻松实现这样的效果你只需要一个命令cmatri 课程六作业 天冷的时候要是有个火炉就好了。这里有个有趣的程序 $ sudo apt-get install libaa-bin # 提示command not found请自行解决 $ aafire 课程七作业 cowsay命令可以让你在终端里以一种动物说话的形式打印出一段话。 课程八作业 使用以前介绍过的方法安装aview和imagemagick然后用asciiview命令显示图片使用方法可以用 man 命令查看。 课程九作业 dos 文本格式到 UNIX 文本格式的转换 #从dos 到unix文本格式转换$ cat -A [dos] | tr -d ^M | cat -A [dos] 课程十作业之前介绍过一个在命令行将图片转换为 ascii 字符查看的工具 aview/asciiview不过它是黑白的。现在这里是个彩色的 $ sudo apt-get install caca-utils
$ cacaview pic_file
$ cacademo
$ cacafire课程11作业 参考论文http://www.cricode.com/3388.html 参考网站http://blog.csdn.net/fan_hai_ping/article/details/8352087 七、遇到的问题及解决 1.第一次使用linux所以经常忘记加空格导致语句出错 解决 注意格式多使用linux熟练就好 2.使用aview时 不会下载图片。 解决尝试用实验楼自带的浏览器直接输入图片地址 成功但是之后由于没有放在shiyanlou目录下一度无法打开后来移动了就好了 转载于:https://www.cnblogs.com/yg137565645/p/4824426.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/92480.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!