2023年8月2日发(作者:)

Linux命令语法总结⽂章⽬录第⼀章 认识Linux发⾏版 = 内核版 + GNU软件 + 封闭源码软件。1991年Linux诞⽣。常⽤的Linux发⾏版:1. CentOS2. Debian3. Fedora Core4. Red Hat Linux5. SuSE6. 内核中最为重要的⼏部分进程调度内存管理(内存管理硬件提供了虚拟接⼝)虚拟⽂件系统⽹络接⼝(⽹络接⼝可分为⽹络协议和⽹络设备驱动程序)2. Linux的特点1. 模块化程度⾼2. 源码公开3. 设备独⽴性4. ⼴泛的硬件⽀持5. 安全性及可靠性好6. 可移植性强7. ⽤户界⾯良好8. 良好的⽹络与⽂件系统⽀持第⼆章 ubuntu图形界⾯每次使⽤ubuntu之前⽤户都必须 登录 才能使⽤系统办公软件openoffice、图像处理GIMP、⾳频播放Rhythmbox(Ogg格式)、视频播放Totem默认浏览器Firefox关于包管理⼯具ubuntu对软件包定义了两种状态:期望状态和当前状态。【dpkg】最早的Deb包管理⼯具dpkg + 选项 + 参数选项-i-R含义安装软件安装⼀个⽬录下⾯所有的软件包【apt】软件安装:

sudo apt-get install + 软件名软件卸载:

sudo apt-get remove +软件名【synaptic】图形类包管理⼯具关于期望状态和当前状态期望状态:⽤户希望某个软件包处于的状态当前状态:⽤户操作该软件包后的最终状态第三章 ubuntu字符界⾯1. 登录与注销创建临时账户1.

useradd ⽤户名2.

adduser ⽤户名⽤useradd创建账户不会创建同名的⽤户⽬录、不会⾃动选择shell脚本、不会设置密码等。⽽adduser则不会出现上述问题。登录注销注册等命令使⽤login进⾏登录和不同账户间切换使⽤

logout 注销exit : 退出shell界⾯passwd :修改登录的⼝令关机:shutdown(-h)、

halt (只有root⽤户能⽤)、

poweroffshutdown -h 10 :在10分钟后⾃动关机重启:shutdown(-r)、init、reboot2. ⽬录与⽂件【⽬录或⽂件操作】pwd:获取当前所在的⽬录cd:更改当前⽬录mkdir:在当前⽬录下创建新的⽬录(后跟多个名可同时创建多个⽬录)rmdir:删除⼀个空⽬录mv:让⼀个⽬录向另⼀个⽬录移动或重命名⽂件。该命令的功能是把⽂件移动到指定的⽬录mv test testdir :将test⽂件移动到testdir⽬录下cp:复制⽬录或⽂件cp ex000 /dir111:ex000被复制到dir111中cp ex111 ex111_1:可实现复制⽂件后并重命名,在当前⽬录下存在原⽂件和重命名后的源⽂件。也就是这两个都存在。rm -rf:删除不是空⽬录的⽬录(⽂件夹)(⾥⾯有东西)。删除⽬录或⽂件touch:创建⼀个⽂件;也可以更改⽂档或⽬录的⽇期时间。touch ex030308:创建⼀个⽂件touch -at 04011011 ex030308:修改访问时间ls:查看⽬录和⽂件ls -a:查看所有⽂件(包括“.”开头的隐藏⽂件)ls -i:可以显⽰⽂件索引节点号ls -l:列出⽂件的详细信息(如创建者、创建时间、⽂件读写权限等)ls -m:⽤ “,”来分隔每个⽂件和⽬录的名称ls -R:列出当前⼯作⽬录下的所有⽂件和⼦⽬录tree:以树状图列出⽂件的⽬录内容tree -ltree -i:不以阶梯状列出⽂件或⽬录名称tree -a:查看所有⽂件(包括隐藏⽂件)tree -s:列出⽂件会⽬录的⼤⼩tree -t:按⽂件和⽬录的更改时间进⾏排序file:显⽰⽂件或⽂件系统的详细信息start:显⽰⽂件详细信息【⽂件内容显⽰】cat:创建和显⽰⽂件。创建并写⼊,然后Ctrl+D退出并保存⽂件。cat > ex030401:创建并写⼊cat -n ex030401:对输出的内容以⾏为单位编号进⾏显⽰chmod:改变⽂件权限。语法:chmod 【u/g/o/a】【+/-/=】【r/w/x】通过使⽤1(执⾏)、2(写)和4(读)三种数值及其任意形式组合来确定权限。例如:chmod 777 ex111 、chmod a=rwx ex111选项ugo解释表⽰⽤户(user,指⽂件或⽬录所有⼈)表⽰同组⽤户(group,与⽂件或⽬录所有⼈组ID相同的⽤户)表⽰其他⽤户(others)选项-=r解释表⽰移除权限表⽰重置权限表⽰读取⽂件或⽬录的权限(read)a选项+表⽰所有⽤户(all)解释表⽰添加权限w选项x表⽰写⼊⽂件或⽬录的权限(write)解释表⽰执⾏的权限(execute)more:分页显⽰⽂件内容按下 “Space(空格)键进⾏翻页”less:分页⾃由显⽰⽂件使⽤page down 和page up进⾏⾃由查看head:指定显⽰⽂件的前若⼲⾏默认显⽰前10⾏内容head -12 ex1111:显⽰前12⾏内容tail:查看⽂件末尾指定的若⼲⾏内容默认显⽰后10⾏内容tail -12 ex1111:显⽰后12⾏内容【⽂件内容处理】对⽂件内容进⾏排序、在⽂件中查找指定内容、对⽂件内容进⾏剪切、粘贴和统计等。sort:对⽂件内容进⾏排序逆序:sort -r ex1111uniq:检查⽂件中重复内容,可以报告或删除⽂件中重复的⾏。使⽤

uniq命令显⽰⽂件内容时,重复内容仅显⽰⼀次grep:在⽂件中查找指定内容grep 'a' ex111:在ex111中查找所有包含字母a的⾏并显⽰出来grep -c 'a' ex111 :显⽰ex111中包含字母a的⾏数diff:对两个⽂件进⾏⽐较diff3:对三个⽂件进⾏⽐较sdiff:合并两个⽂件,并以交互的⽅式输出结果。cmp:逐字节对不同⽂件进⾏⽐较cmp -l ex111 ex222:列出所有不⼀样的地⽅comm:对两个有序⽂件进⾏⽐较第⼀列显⽰第⼀个出现、第⼆个显⽰只在第⼆个出现、第三个显⽰共同部分。cut:剪切数据cut -b 2 ex111 :-b在处理中⽂⽂档时会有乱码;2–每⾏的第⼆个字符cut -c 3 ex111:-c在不会出现乱码cut -d 'b' -f 2 ex111:-d:⽤于以字符“b”分割-f:⽤于截取以字母“b”为分割的第⼆个域paste:对⽂件内容进⾏粘贴paste ex111 ex222:将222的内容粘贴到111中去wc:统计指定⽂件中的字符数、单词数和⾏数,并将结果统计输出wc -c ex111:查看⽂件中的字符数wc -w ex111:查看⽂件中的单词数wc -l ex111:查看⽂件中的⾏数【⽂件查找】find:在本地硬盘中搜索⽂件或⽬录find -name "ex*":使⽤模糊查询查找当前⼯作⽬录下所有以”ex“开头的⽂件find -atime -1:搜索⼀天之内被存取过的⽂件find / -empty:查找系统中为空的⽂件或⽂件夹locate:在数据库中查找⽂件。对于刚创建的⽂件,⽴即使⽤该命令会搜索不到所创建的⽂件。⽐find快。whereis:查找指定位置的⽂件位置。只能是⼆进制、源代码或者是帮助⽂件。which:查找可执⾏⽂件的位置会在环境变量$PATH 设置的⽬录⾥查找符合条件的⽂件。【磁盘管理】检查磁盘空间、挂载和卸载⽂件系统、显⽰和分配配额等。df:检查磁盘空间占⽤情况df -h:显⽰磁盘空间df -T:列出⽂件系统的类型df -t:查看选定⽂件系统的磁盘信息df -x:不显⽰选定的⽂件系统的磁盘信息du:查看⽬录或⽂件所占磁盘空间⼤⼩-h、-s、-amount:将⽂件系统挂载到指定的挂载点上quota:检查磁盘的使⽤空间与限制、对磁盘进⾏配额edquota:为⽤户或⼯作组指定磁盘配额repquota:显⽰⽂件系统的配额信息quotaoff:关闭指定⽂件系统的磁盘配额功能umount:卸载⽂件系统【备份压缩】zip:产⽣具有“zip”扩展名的压缩⽂件zip ex111zip -d ex111:删除压缩包中的ex111⽂件zip -m:向压缩⽂件中添加⽂件unzip:对.zip类型的⽂件进⾏解压unzip -o :覆盖原先⽂件unzip -n :不覆盖原先⽂件zipinfo:列出压缩⽂件的信息gzip:产⽣具有“gz”扩展名的压缩⽂件gunzip:对“gz”压缩包进⾏压缩bzip2:产⽣具有“bz2”扩展名的压缩⽂件bunzip2:解压相应格式的⽂件bzip2recover:修复压缩包compress:产⽣扩展名为“.z"的压缩⽂件uncompress:解压“.z"的压缩⽂件dump:将⽬录内的⽂件进⾏备份tar:备份【获取帮助】man:获取命令的帮助whatis:查看⼀个命令执⾏什么功能help:查看⼀个内部命令的帮助信息info:获取帮助【其他命令】clear:清屏echo:在显⽰器上显⽰⼀段⽂字,⼀般起到⼀个提⽰的作⽤echo $(pwd):使⽤echo命令输出当前⼯作⽬录date:显⽰时间和⽇期cal:显⽰⽇期,以⽇历的形式ps:查看当前进程ps -A:查看所有的进程ps U user01:查看user01⽤户的所有进程kill:终⽌某⼀进程last:显⽰最近登录系统的⽤户信息history:显⽰历史指令。默认保留最近执⾏的1000条指令第四章 vi编辑器如何使⽤vi编辑器对⽂件进⾏访问、如何在编辑⽂件时实现光标移动、如何实现对⽂本的修改以及如何更改vi编辑器的设置等1. vi编辑器简介【三种模式】(1)命令模式从键盘上输⼊相关命令,控制屏幕光标的移动,删除字符、字或⾏的内容,撤销⽂本的修改、移动和复制等可以进⼊插⼊模式或底线模式(2)插⼊模式进⾏⽂字编辑按Esc键可返回命令模式(3)底线模式主要进⾏⼀些⽂字编辑的辅佐功能,⽐如字符串搜索、替换、保存⽂件等操作【vi的⼀些命令】vi:创建⼀个⽂件并进⼊vi编辑器:w:对⽂件内容进⾏保存:n:继续编辑后续⽂件(如果有多个⽂件):N:返回之前的⽂件进⾏编辑(有多个⽂件):rew:直接返回第⼀个⽂件进⾏编辑:q:退出编辑器:q!:不存盘退出⽂件,强制退出:wq:保存并退出:wq!:强制保存并退出:w ⽂件名:⽂件另存:1,7 write ⽂件名:部分⽂件另存:1,9 w! ⽂件名:覆盖或替换掉⽂件中部分内容:10,12 w >> ⽂件名:将当前⽂件中的内容添加⾄以后⽂件的末尾。(向【⽂件名】中追加内容)撤销对⽂件内容修改:按Esc回到命令模式,再按u,即撤销了之前输⼊的内容:set numbet:显⽰⾏号:set nonumber:关闭⾏号2. 移动光标【⽅向键、字母键、组合键】操作按键→↓←↑功能将光标向右移动将光标向下移动将光标向左移动将光标向上移动操作按键ljhk使⽤组合键移动7→ == 7l5↓ == 5j 向下移动5个字符【逐单词移动】在包含单词的⽂档中,单词间默认以空格分开操作按键wbe功能将光标移动到下⼀个单词开头将光标向前移动⼀个单词将光标移动到单词的词尾移动多个单词3w2b5e【在某⼀⾏内移动】操作按键f+任何字母键任意数字键+|$^功能将光标移动到⽂本中下⼀个所指定的字母将光标移动到数字键指定的字符位置(每⾏第⼀个字符标记为1)将光标移动到当前⾏的⾏末将光标移动到当前⾏的⾏⾸⽰例fy23|$^【在不同⾏上移动】操作按键数字+G:任意数字:$-+功能将光标移动到数字对应⾏的⾏⾸(若只输⼊G,则可直接移动到⽂件最后⼀⾏)将光标移动到数字对应⾏的⾏⾸将光标移动⼤⽂件最后⼀⾏⾏⾸将光标向上移动⼀⾏将光标向下移动⼀⾏⽰例10G:10:$–++【在屏幕上移动】将光标移动到屏幕上的特定位置。操作按键MLH功能将光标移动⾄当前屏幕中间将光标移动⾄当前屏幕最下⽅将光标移动⾄当前屏幕最上⽅⽰例MLH【返回初始位置】在命令模式下,输⼊两个单引号 ‘’【调整显⽰⽂本】通过移动屏幕上显⽰的内容来调整光标所在的位置。操作按键Ctrl+DCtrl+UCtrl+FCtrl+B功能向下移动半屏⽂本内容向上移动半屏⽂本内容显⽰⽂件下⼀屏的⽂本内存显⽰⽂件上⼀屏的⽂本内容实例Ctrl+DCtrl+UCtrl+FCtrl+B3. ⽂本添加命令iaO(⼤写)功能在光标当前位置左侧插⼊⽂本在光标当前位置右侧插⼊⽂本在光标当前位置上⽅插⼊⽂本命令IAo(⼩写)功能在⾏⾸插⼊⽂本在⾏末插⼊⽂本在光标当位置下⽅插⼊⽂本4. ⽂本查找和替换【向前或向后查找字符串】/字符串:在命令模式下输⼊,查找匹配的字符串n:继续向前查找(但是光标是往后⾛) 或者

/字符串N:继续向后查找 或者

?字符串【替换指定字符】r:单个字符替换。将光标移动到想替换的字符处,按下r,在输⼊要替换的字符即可,再按Esc返回即可替换完成R:逐字符覆盖⽂本。输⼊的每个字符都将逐个替换光标所造位置的字符,直到按下Esc键返回命令模式为⽌。【替换⾏操作】操作(在命令模式下)cwcc:s/TWO/Date(:与s之间没有空格)Ccf所选字符(例cfU):1,$ s/owe/one(1,$表⽰从⽂件第⼀⾏到最后⼀⾏):g/⾏包含的字符串/s/旧/新:1,$ s/旧/新/g功能修改单词,(先要查找)直接替换当前⾏的内容查找某⾏中某个单词并进⾏替换(这⾥将two替换为date)修改某⾏的某段⽂本内容(替换到末尾)对当前光标所在位置到所选字符之间这⼀段⽂本进⾏替换在所有⾏上搜索并替换⾏内第⼀个⽬标内容指定某⾏中的内容进⾏替换(g表⽰从⽂件的第⼀⾏查找⾄最后⼀⾏)在所有⾏上搜索并替换⾏内所有⽬标内容(g表⽰对找到的所有⽬标字符串进⾏替换)5. ⽂本复制、剪切和粘贴复制、粘贴、剪切操作合集:字符复制剪切粘贴ylxp单词ywdwp⾏yyddp操作ylpxyf字符df字符ywdwyyy$ddd$功能复制字符粘贴字符(⼤写P粘贴⾄光标上⼀⾏,p⾄下⼀⾏)剪切字符复制光标所在位置与指定字符之间的⽂本内容剪切光标所在位置与指定字符之间的⽂本内容以单词为单位进⾏复制, 2yw:复制两个单词以单词为单位进⾏剪切复制⾏,7yy:复制7⾏复制当前光标处⾄⽂件末尾间的全部⾏剪切⾏剪切当前光标⾄⽂件末尾间的全部内容复制和移动⽂本::2 copy 15:将第2⾏复制到第15⾏:1,6 copy 16:将1,6⾏之间的⽂本块复制到16⾏:8,12 move 18:将8,12⾏之间的⽂本块复制到18⾏6. ⽂本删除和撤销操作x数字xdwddDdf字符:2d:1,功能删除光标所在的字符。删除单个字符删除多个字符,如7x删除⼀个单词删除单⾏删除⼀⾏中的⼀部分。删除光标所在位置后的⼀部分内容删除改⾏中光标到字符之间的指定⽂本删除指定⾏(这⾥删除第⼆⾏)删除指定⽂本块往后接着删除撤销最近⼀次删除(也可以对覆盖替换进⾏撤销)撤销⼀⾏上的所有修改7. 更改vi编辑器设置操作:set number / :set nonumber(简写nu/nonu):set autoindex / :set noautoindex (ai/noai):set showmode / :set noshowmode:set ignorecase / :set noignorecase (ic/ noic):set list / :set nolist:set showmatch / :set noshowmatch:set wrapmargin=数字:set all功能显⽰和隐藏⾏号设置和取消字符⾃动缩进显⽰或隐藏当前编辑状态搜索时忽略⼤⼩写显⽰和隐藏特殊字符是否显⽰特殊字符的匹配设置每⾏中最后⼀个字符到屏幕右边界的字符个数查看编辑器当前的设置第五章 实⽤程序介绍多列内容输出column、⽂件内容查找grep、基本数学运算bc、⽂件内容排序sort、⽂件内容⽐较uniq、comm、diff,⽂件内容替换tr,单⾏数据编辑sed和数据操作⼯具awk。1. 多列内容输出columncolumn:将内容多列输出参数:-x:输出是从左到右显⽰,再从上到下显⽰。没有-x则是从上到下再从左到右显⽰。例⼦:column -x ex111 | more:排列并显⽰column ex111 | more2. ⽂件内容查找grep【在多个⽂件内容中查找字符串】格式:grep string 。string为待查找的内容,file 是查找的⽂件例如:grep e ex111 ex222:在这两个⽂件中查找“e”grep apple *:在当前⽬录下的所有⽂件中查找“apple”【在⽂件中查找多个单词】grep 'my phone' ex111查找的多个字符串要⽤单引号括起来【查找单词时忽略字母的⼤⼩写】grep -i Joy ex111:在ex111中查找Joy ,忽略⼤⼩写-i:选项,忽略⼤⼩写【其他选项⽤法】-v:输出不包含⽬标字符串的⾏-l:只输出包含⽬标字符串⽂件的⽂件名-n:输出⽂件中包含⽬标字符串的⾏和它的⾏号,两者以冒号隔开。【使⽤正则表达式】反斜杠()为转义字符字符.^$. ^ $组合使⽤功能匹配单个普通字符指⽰某⾏的起始指⽰某⾏的末尾例⼦grep '...' ex211:查找⽂件中所有长度为3的字符串grep '^a' ex111:查找所有以a开头的⾏grep 't$' ex111:查找所有以t结尾的⾏grep '^...$' ex111:查找所有长度为3的⾏3. 基本数学运算bc输⼊命令bc启动程序,即可输⼊要计算的表达式字符+-*/^scale功能加法减法乘法除法幂运算输出的⼩数部分(默认为零)例⼦1+24-22*3(结果6)8/2(结果4)2^4(结果16)scale=2 12/7 (结果1.71)4. ⽂件内容排序sortsort的标准排序规则是按ASCLL码表的值升序排序。sort排序默认字段分割符是空格。基本使⽤:

sort ⽂件名选项或符号-d-f-r-n-k+、--t>-o功能对⽂件内容按字典顺序排序(只对数字、字母、空格进⾏排序)排序时忽略字母的⼤⼩写对⽂件内容反序排序(降序排序)对⽂件中的数字进⾏排序,按数值⼤⼩排序,⽽不是ASCLL码对⽂件内容按某⼀字段进⾏排序对⽂件的内容限定排序(+表⽰从分割符开始,-表⽰到分割符结束)指定分隔符重定向符,将排序结果写⼊指定⽂件将被排序⽂件重写例⼦sort -d ex111sort -f ex111sort -r ex111sort -n ex111sort -k 1 ex111:按第⼀个⼦段进⾏排序sort +1 -3 ex111:⽐较内容限定在2,3列字段。sort -k 2 -t: ex111:以:分隔字段sort ex111 > ex222:将排序后的结果写⼊ex222sort -o ex111 ex2225. ⽂件内容⽐较uniq、comm、diff【识别和删除重复⾏uniq】选项-c-d-u功能可将相邻重复⾏的重复次数显⽰在⾏⾸查看⽂件中相邻重复⾏的其中⼀⾏查看⽂件中不相邻且不重复的⾏删除所有重复⾏(包括相邻不相邻的)。先删除,然后排序再删除例⼦uniq -c ex111uniq -d ex111uniq -u ex111uniq ex111、sort ex111 | uniq【按⾏⽐较两个⽂件comm】comm可实现按⾏⽐较两个有序⽂件的异同。comm ex01 ex02执⾏comm的结果解释:列号123comm -3 ex01 ex02含义只存在于⽂件ex01中的⾏只存在于⽂件ex02中的⾏两个⽂件中都存在的⾏-3 表⽰不输出第三列【查看⽂件不同之处diff】diff的输出结果是告诉⽤户如何将前⼀个⽂件的内容转换为后⼀个⽂件内容。diff ex111 ex222字母含义例⼦内容1c1解释c 修改< pull—>abuse3d2”开头,⼀下两⾏内容同理。将前⼀⽂件的第⼀⾏“pull”改为后⼀⽂件的第⼀⾏“abuse”“—”为分隔符d 删除若将前⼀⽂件的第三⾏“hit”删除,前⼀⽂件和后⼀⽂件的第2⾏便相同了a 添加>eat>beat前⼀⽂件的第5⾏之后添加后⼀⽂件的第5⾏“eat”和第6⾏“beat”6. ⽂件内容替换tr功能替换实例解释< ex111的意思是将⽂件的内容作为tr的输⼊。将⽂件中所有的’r’替换成’R’将⽂件中所有的换⾏符(n)替换成空格替换字符tr 'r' 'R' < ex111替换字符tr 'n' '' < ex111tr 'pe-' 'PE,'ex111tr '[a-g]' '[1-7]' 0时,$n表⽰待检索⽂件中的第n释义个字段。当n=0时,$0表⽰待检索⽂件中的所有字段awk '{print NF}' ex111:得到⽂件中每⾏字段的个数例⼦就是那个变量的例⼦awk '{print $NF}' ex111:输出每⾏的最后⼀个字段,和$5是⼀样的awk '{print NR,$0}' ex111:输出⽂件中每⼀⾏的⾏号在awk检索⽂件时,表⽰当前被检索⾏的字段个数在awk检索⽂件时,表⽰当前被检索⾏的⾏号【使⽤⾃定义变量、字符串和数字】选项功能例⼦awk -v test='student' '{print test}' ex111:test为⾃定义变量,将其赋值为“student”后,使⽤print进⾏输出。awk -v test='student' '{print test $0}' ex111:还可以同时使⽤⾃定义变量和预定义变量。awk '{print "num:"$1,"name:"$2}' ex111:这样双引号⾥的字符串被原样输出了。awk '{print 89.8}' ex111还可以进⾏运算后输出: awk 'print{89.7-2}' ex111-v设置⼀个⾃定义变量,然后才能在进⾏操作时使⽤""双引号通过使⽤双引号输出若⼲个字符串使⽤数字【使⽤正则表达式】命令awk '/[tT]/ {print}' ex111awk '/[p-z]/ {print}' ex111awk '/^[a-s]/ {print}' ex111awk '/[^a-s]/ {print}' ex111解释在⽂件中查找包含字母“T”或“t”的⾏并输出在⽂件中查找包含p到z的任意⼀个字母的⾏并输出^表⽰⾏的起始,查找所有起始字符为a到s中任意⼀个字母的⾏并输出[^a-z]表⽰按字母顺序逐⾏查找从a到z内的所有字母,只要某⾏包含了从a到z以外的任意⼀个字符,这⼀⾏就会被输出。【使⽤指定的字段选择记录】命令awk '$3=="f" {print}' ex111awk '$1~/[Bb]us/ {print}' ex111&&、||、!解释查找第三个字段的值为f的记录查找第⼀个字段中匹配/[Bb]us/的记录并输出与或⾮备注在⽐较字符串时,⼀定要在待⽐较内容的两侧加双引号awk '$1!~/[Bb]us/ {print}' ex111:查找不匹配的记录【使⽤awk命令⽂件】可以将awk命令放⼊⼀个awk⽂件中,⽅便后续调⽤。awk -f ex111_awk:使⽤-f选项来调⽤⽂件ex111_awk的内容,并对⽂件执⾏⽂件中的操作。预定义变量的释义:预定义变量在awk对⽂件进⾏检索时使⽤的字段分隔符,默认为空格或制表符(Tab键)FS(查找时使⽤的字段分隔符)RS(查找时使⽤的记录分隔符)OFS(输出时使⽤的字段分隔符)ORS(输出时使⽤的字段分隔符)释义在awk对⽂件进⾏检索时使⽤的记录分隔符,默认为换⾏符在awk输出检索时使⽤的字段分隔符,默认为空格位于每⼀条记录的末尾,是在awk输出检索结果时使⽤的记录分隔符,默认为换⾏符。例⼦:BEGIN{FS="_"OFS="~"}{print $1,$2}【awk命令的扩展】⼀下为⼀个awk⽂件:/Mike/ || /Amy/ {print $1print $2,$4}“{”必须跟在待检索内容的末尾,不能另起⼀⾏在“{}”中,必须⼀条语句单独占⼀⾏awk还可以进⾏数学运算第六章 shell脚本编程基础1. 脚本⼊门【调试和运⾏脚本】使⽤

sh 命令来调试shell脚本,语法为

sh[-nvx] script参数说明:序号123456参数-n-v-x-e-u-c含义读⼀遍脚本中的命令但不执⾏,⽤于检查脚本中的语法错误⼀边执⾏脚本,⼀边将执⾏过的脚本命令输出到屏幕上显⽰提供跟踪执⾏信息,将执⾏的每⼀条命令与结果⼀次打印出来若有⼀个命令失败就⽴即退出置换时把未设置的变量看作出错使shell解析器从字符串⽽⾮⽂件中读取并执⾏命令定义变量时的命名规则:1. 定义变量时,变量名不加$符号2. 变量名和等号之间不能有空格3. ⾸字符必须是字母(a-z,A-Z)4. 中间不能有空格,可以使⽤下划线(_)5. 不能使⽤标点符号6. 不能使⽤bash⾥的关键字2. 条件结构化语句【使⽤case语句】格式:case VALUE inVALUE1) command1 command2 ;;VALUE2) command1 command2 ;;*) command1 command2 ;;esac例⼦:运⾏此脚本时,输⼊1-4之间的整数,将会分别输出60,70,80,100,否则将提⽰“error”#!/bin/bashecho "please input a number bewteen 1 to 4"read NUMcase $NUM in1) echo "your 60";;2) echo "your 70";;3) echo "your 80";;4) echo "your 100";;*) echo "error";;esac【使⽤if语句】(1)if…fi格式:if conditionthen command1 command2 ...fi例⼦:#!/bin/bashecho "please input a number"read NUMif [ "$NUM" -gt "0" ] #-gt是⼤于的意思then

echo "the number is a positive num"fi条件-判断语句必须以if开始,以fi闭合结束,这是shell的语法规则在条件中的condition须以“[ ]”进⾏闭包,并且在condition和⽅括号之间必须有空格,左右两边都要有在

[]中只能有⼀个条件判断式在条件判断式中可以使⽤逻辑运算符号和⽐较运算符组合成新的条件判断式(2)if…else…fiif conditionthen command1 command2 ...else command ...fi(3)if…elif…else…fiif conditionthen command1 command2 ...elif condition2then

command1 ...else command ...fi(4)test命令⽤法类型字符串判断命令str1 = str2-n str1-z str1str1 > <数字的判断-eq-ne-le-lt⽤法当字符串内容、长度相等时为真当串的长度⼤于0时为真当串的长度为0时为真当串str1为⾮空时为真⽐较⼤⼩,但必须转义相等不相等⼩于等于⼩于类型-ge命令-gt⼤于等于⽤法⼤于⽤户可读为真可写为真⽂件为正规⽂件为真可执⾏为真⽂件为⽬录为真⽂件为字符特殊⽂件为真⽂件为块特殊⽂件为真⽂件⼤⼩⾮0时为真当⽂件描述符(默认为1)指定的设备为终端时为真与或⾮⽂件的判断-r file-w-f-x-d-c-b-s-t复杂逻辑判断-a-o!3. 循环结构化命令【使⽤for】for循环有3种结构:列表for循环、不带列表for循环、类似C语⾔的for循环。列表for循环:计算1~200之间所有偶数的和#!/bin/bashecho "1-200之间偶数的和"sum=0for i in {2..200..2}do sum=$(($sum+i))doneecho "sum=$sum"不带列表的for循环:根据⽤户的输⼊进⾏相应的输出,其中$#表⽰参数的个数#!/bin/bashsum=0echo "number of argument is $#"echo "what you input is:"for argumentdo

echo "$argument" sum=$(($sum+$argument))doneecho $sum类C语⾔风格for循环:#!/bin/bashsum=0for((i=2;i<=200;i=i+2))do let "sum=sum+i"doneecho "the sum is:" $sum【使⽤while】语法:while conditiondo

commanddone例⼦:让⽤户输⼊⼀个数,若这个数等于29则直接退出while循环,若不等于20则给出相应的提⽰。#!/bin/bashecho "please input a number bewteen 1 to 100"read iwhile [ $i -lt 101 ] && [ $i -gt 0 ]do

if [ $i -eq 29] then echo "you are right" exit 0 elif [ $i -lt 29] then

echo "you should try a bigger one" else echo "you should try a smaller one" fi read i #循环输⼊done【使⽤until】until中,测试的条件为假,进⼊循环体。格式:until conditiondo

commanddone例⼦:使⽤until在屏幕上输出1-10的数字。#!/bin/bashnum=1until ((num>10))do

echo $num num=$(($num+1))done【break和continue】break:强⾏退出当前循环continue:⽤于让脚本跳过后⾯的语句,并在执⾏下⼀次循环4. 使⽤函数在shell中,函数必须先定义后使⽤。语法:function_name(){ list of commands [ return value ]}如果不显⽰的增加return语句,函数会将最后⼀条的运⾏结果作为返回值返回。在shell函数中,函数的返回值只能是整数,⼀般⽤来表⽰函数是否运⾏成功,0表⽰成功,其他值表⽰失败。【函数的使⽤】#!/bin/bashhello(){ #声明 echo "hello ,shell"}hello #调⽤【函数参数传递】在shell中,函数可以通过位置变量来传递参数语法格式:

functionName param1 。当函数执⾏时,$1表⽰对应的参数1。例⼦:#!/bin/bashsum(){ echo "the first is $1" echo "the second is $2" sum=$(($1+$2)) echo "the sum of params is : $sum" echo "output all param $*"}sum 1 9【函数的返回值】在shell中,函数的返回值只能是0-255之间的⼀个整数,返回值将保存到变量“$?”中。例⼦:根据⽤户输⼊的年份,判断并输出该年份是否是闰年#!/bin/bashleapyear(){ year=$1 if [ $[ $year%4 ] -eq 0 ] && [ $[ $year%100 ] -ne 0 ] || [ $[ $year%400 ] -eq 0 ] then Isleapyear=0 else Isleapyear=1 fi}echo "please enter a number:"read Nleapyear $Ncase $Isleapyear in 0) echo "this year is a leap year" ;; 1) echo "this year is not a leap year" ;;esac【函数的引⽤】使⽤

. ⽂件的路径 来调⼊这⾥clock是⼀个函数⽂件#!/bin/bash. ./clock #此处是⽤空格隔开的的实⼼点clock使⽤上⾯这种⽅式调⽤函数时,函数⽂件的路径应该与脚本⽂件的路径相同,否则在调⽤时需使函数所在的⽂本的绝对路径或相对路径。【全局变量与局部变量】在默认情况下,shell脚本中定义的变量都是全局变量局部变量的关键字为

local5. 特殊变量的⽤法变量名$#$*$$$!$@$-$?释义传递到脚本的参数个数以⼀个单字符显⽰所有向脚本传递的参数脚本运⾏的当前进程ID号后台运⾏的最后⼀个进程的ID号与$*相同,但是使⽤时加引号,并在引号中返回每个参数显⽰shell使⽤的当前选项,与set命令功能相同显⽰最后命令的退出状态。0表⽰没有错误,其他任何值表明有错误6. 综合实例【打印⼀个直⾓三⾓形】#!/bin/bashfor((i=1;i<9;i++))do for((j=1;j

jline=1until [ $jline -gt $iline ]doecho -ne "$iline*$jline=$((iline*jline))t"((jline++))doneecho((iline++))done【判断是否是闰年】#!/bin/bashleapyear(){ year=$1 if [ $[ $year%4 ] -eq 0 ] && [ $[ $year%100 ] -ne 0 ] || [ $[ $year%400 ] -eq 0 ] then Isleapyear=0 else Isleapyear=1 fi}echo "please enter a number:"read Nleapyear $Ncase $Isleapyear in 0) echo "this year is a leap year" ;; 1) echo "this year is not a leap year" ;;esac || $* | 以⼀个单字符显⽰所有向脚本传递的参数 || $$ | 脚本运⾏的当前进程ID号 || $! | 后台运⾏的最后⼀个进程的ID号 ||

@∣与*相同,但是使⽤时加引号,并在引号中返回每个参数 || $- | 显⽰shell使⽤的当前选项,与set命令功能相同 || $? | 显⽰最后命令的退出状态。0表⽰没有错误,其他任何值表明有错误 |6. 综合实例【打印⼀个直⾓三⾓形】#!/bin/bashfor((i=1;i<9;i++))do for((j=1;j

jline=1until [ $jline -gt $iline ]doecho -ne "$iline*$jline=$((iline*jline))t"((jline++))doneecho((iline++))done【判断是否是闰年】#!/bin/bashleapyear(){ year=$1 if [ $[ $year%4 ] -eq 0 ] && [ $[ $year%100 ] -ne 0 ] || [ $[ $year%400 ] -eq 0 ] then Isleapyear=0 else Isleapyear=1 fi}echo "please enter a number:"read Nleapyear $Ncase $Isleapyear in 0) echo "this year is a leap year" ;; 1) echo "this year is not a leap year" ;;esac

2023年8月2日发(作者:)

Linux命令语法总结⽂章⽬录第⼀章 认识Linux发⾏版 = 内核版 + GNU软件 + 封闭源码软件。1991年Linux诞⽣。常⽤的Linux发⾏版:1. CentOS2. Debian3. Fedora Core4. Red Hat Linux5. SuSE6. 内核中最为重要的⼏部分进程调度内存管理(内存管理硬件提供了虚拟接⼝)虚拟⽂件系统⽹络接⼝(⽹络接⼝可分为⽹络协议和⽹络设备驱动程序)2. Linux的特点1. 模块化程度⾼2. 源码公开3. 设备独⽴性4. ⼴泛的硬件⽀持5. 安全性及可靠性好6. 可移植性强7. ⽤户界⾯良好8. 良好的⽹络与⽂件系统⽀持第⼆章 ubuntu图形界⾯每次使⽤ubuntu之前⽤户都必须 登录 才能使⽤系统办公软件openoffice、图像处理GIMP、⾳频播放Rhythmbox(Ogg格式)、视频播放Totem默认浏览器Firefox关于包管理⼯具ubuntu对软件包定义了两种状态:期望状态和当前状态。【dpkg】最早的Deb包管理⼯具dpkg + 选项 + 参数选项-i-R含义安装软件安装⼀个⽬录下⾯所有的软件包【apt】软件安装:

sudo apt-get install + 软件名软件卸载:

sudo apt-get remove +软件名【synaptic】图形类包管理⼯具关于期望状态和当前状态期望状态:⽤户希望某个软件包处于的状态当前状态:⽤户操作该软件包后的最终状态第三章 ubuntu字符界⾯1. 登录与注销创建临时账户1.

useradd ⽤户名2.

adduser ⽤户名⽤useradd创建账户不会创建同名的⽤户⽬录、不会⾃动选择shell脚本、不会设置密码等。⽽adduser则不会出现上述问题。登录注销注册等命令使⽤login进⾏登录和不同账户间切换使⽤

logout 注销exit : 退出shell界⾯passwd :修改登录的⼝令关机:shutdown(-h)、

halt (只有root⽤户能⽤)、

poweroffshutdown -h 10 :在10分钟后⾃动关机重启:shutdown(-r)、init、reboot2. ⽬录与⽂件【⽬录或⽂件操作】pwd:获取当前所在的⽬录cd:更改当前⽬录mkdir:在当前⽬录下创建新的⽬录(后跟多个名可同时创建多个⽬录)rmdir:删除⼀个空⽬录mv:让⼀个⽬录向另⼀个⽬录移动或重命名⽂件。该命令的功能是把⽂件移动到指定的⽬录mv test testdir :将test⽂件移动到testdir⽬录下cp:复制⽬录或⽂件cp ex000 /dir111:ex000被复制到dir111中cp ex111 ex111_1:可实现复制⽂件后并重命名,在当前⽬录下存在原⽂件和重命名后的源⽂件。也就是这两个都存在。rm -rf:删除不是空⽬录的⽬录(⽂件夹)(⾥⾯有东西)。删除⽬录或⽂件touch:创建⼀个⽂件;也可以更改⽂档或⽬录的⽇期时间。touch ex030308:创建⼀个⽂件touch -at 04011011 ex030308:修改访问时间ls:查看⽬录和⽂件ls -a:查看所有⽂件(包括“.”开头的隐藏⽂件)ls -i:可以显⽰⽂件索引节点号ls -l:列出⽂件的详细信息(如创建者、创建时间、⽂件读写权限等)ls -m:⽤ “,”来分隔每个⽂件和⽬录的名称ls -R:列出当前⼯作⽬录下的所有⽂件和⼦⽬录tree:以树状图列出⽂件的⽬录内容tree -ltree -i:不以阶梯状列出⽂件或⽬录名称tree -a:查看所有⽂件(包括隐藏⽂件)tree -s:列出⽂件会⽬录的⼤⼩tree -t:按⽂件和⽬录的更改时间进⾏排序file:显⽰⽂件或⽂件系统的详细信息start:显⽰⽂件详细信息【⽂件内容显⽰】cat:创建和显⽰⽂件。创建并写⼊,然后Ctrl+D退出并保存⽂件。cat > ex030401:创建并写⼊cat -n ex030401:对输出的内容以⾏为单位编号进⾏显⽰chmod:改变⽂件权限。语法:chmod 【u/g/o/a】【+/-/=】【r/w/x】通过使⽤1(执⾏)、2(写)和4(读)三种数值及其任意形式组合来确定权限。例如:chmod 777 ex111 、chmod a=rwx ex111选项ugo解释表⽰⽤户(user,指⽂件或⽬录所有⼈)表⽰同组⽤户(group,与⽂件或⽬录所有⼈组ID相同的⽤户)表⽰其他⽤户(others)选项-=r解释表⽰移除权限表⽰重置权限表⽰读取⽂件或⽬录的权限(read)a选项+表⽰所有⽤户(all)解释表⽰添加权限w选项x表⽰写⼊⽂件或⽬录的权限(write)解释表⽰执⾏的权限(execute)more:分页显⽰⽂件内容按下 “Space(空格)键进⾏翻页”less:分页⾃由显⽰⽂件使⽤page down 和page up进⾏⾃由查看head:指定显⽰⽂件的前若⼲⾏默认显⽰前10⾏内容head -12 ex1111:显⽰前12⾏内容tail:查看⽂件末尾指定的若⼲⾏内容默认显⽰后10⾏内容tail -12 ex1111:显⽰后12⾏内容【⽂件内容处理】对⽂件内容进⾏排序、在⽂件中查找指定内容、对⽂件内容进⾏剪切、粘贴和统计等。sort:对⽂件内容进⾏排序逆序:sort -r ex1111uniq:检查⽂件中重复内容,可以报告或删除⽂件中重复的⾏。使⽤

uniq命令显⽰⽂件内容时,重复内容仅显⽰⼀次grep:在⽂件中查找指定内容grep 'a' ex111:在ex111中查找所有包含字母a的⾏并显⽰出来grep -c 'a' ex111 :显⽰ex111中包含字母a的⾏数diff:对两个⽂件进⾏⽐较diff3:对三个⽂件进⾏⽐较sdiff:合并两个⽂件,并以交互的⽅式输出结果。cmp:逐字节对不同⽂件进⾏⽐较cmp -l ex111 ex222:列出所有不⼀样的地⽅comm:对两个有序⽂件进⾏⽐较第⼀列显⽰第⼀个出现、第⼆个显⽰只在第⼆个出现、第三个显⽰共同部分。cut:剪切数据cut -b 2 ex111 :-b在处理中⽂⽂档时会有乱码;2–每⾏的第⼆个字符cut -c 3 ex111:-c在不会出现乱码cut -d 'b' -f 2 ex111:-d:⽤于以字符“b”分割-f:⽤于截取以字母“b”为分割的第⼆个域paste:对⽂件内容进⾏粘贴paste ex111 ex222:将222的内容粘贴到111中去wc:统计指定⽂件中的字符数、单词数和⾏数,并将结果统计输出wc -c ex111:查看⽂件中的字符数wc -w ex111:查看⽂件中的单词数wc -l ex111:查看⽂件中的⾏数【⽂件查找】find:在本地硬盘中搜索⽂件或⽬录find -name "ex*":使⽤模糊查询查找当前⼯作⽬录下所有以”ex“开头的⽂件find -atime -1:搜索⼀天之内被存取过的⽂件find / -empty:查找系统中为空的⽂件或⽂件夹locate:在数据库中查找⽂件。对于刚创建的⽂件,⽴即使⽤该命令会搜索不到所创建的⽂件。⽐find快。whereis:查找指定位置的⽂件位置。只能是⼆进制、源代码或者是帮助⽂件。which:查找可执⾏⽂件的位置会在环境变量$PATH 设置的⽬录⾥查找符合条件的⽂件。【磁盘管理】检查磁盘空间、挂载和卸载⽂件系统、显⽰和分配配额等。df:检查磁盘空间占⽤情况df -h:显⽰磁盘空间df -T:列出⽂件系统的类型df -t:查看选定⽂件系统的磁盘信息df -x:不显⽰选定的⽂件系统的磁盘信息du:查看⽬录或⽂件所占磁盘空间⼤⼩-h、-s、-amount:将⽂件系统挂载到指定的挂载点上quota:检查磁盘的使⽤空间与限制、对磁盘进⾏配额edquota:为⽤户或⼯作组指定磁盘配额repquota:显⽰⽂件系统的配额信息quotaoff:关闭指定⽂件系统的磁盘配额功能umount:卸载⽂件系统【备份压缩】zip:产⽣具有“zip”扩展名的压缩⽂件zip ex111zip -d ex111:删除压缩包中的ex111⽂件zip -m:向压缩⽂件中添加⽂件unzip:对.zip类型的⽂件进⾏解压unzip -o :覆盖原先⽂件unzip -n :不覆盖原先⽂件zipinfo:列出压缩⽂件的信息gzip:产⽣具有“gz”扩展名的压缩⽂件gunzip:对“gz”压缩包进⾏压缩bzip2:产⽣具有“bz2”扩展名的压缩⽂件bunzip2:解压相应格式的⽂件bzip2recover:修复压缩包compress:产⽣扩展名为“.z"的压缩⽂件uncompress:解压“.z"的压缩⽂件dump:将⽬录内的⽂件进⾏备份tar:备份【获取帮助】man:获取命令的帮助whatis:查看⼀个命令执⾏什么功能help:查看⼀个内部命令的帮助信息info:获取帮助【其他命令】clear:清屏echo:在显⽰器上显⽰⼀段⽂字,⼀般起到⼀个提⽰的作⽤echo $(pwd):使⽤echo命令输出当前⼯作⽬录date:显⽰时间和⽇期cal:显⽰⽇期,以⽇历的形式ps:查看当前进程ps -A:查看所有的进程ps U user01:查看user01⽤户的所有进程kill:终⽌某⼀进程last:显⽰最近登录系统的⽤户信息history:显⽰历史指令。默认保留最近执⾏的1000条指令第四章 vi编辑器如何使⽤vi编辑器对⽂件进⾏访问、如何在编辑⽂件时实现光标移动、如何实现对⽂本的修改以及如何更改vi编辑器的设置等1. vi编辑器简介【三种模式】(1)命令模式从键盘上输⼊相关命令,控制屏幕光标的移动,删除字符、字或⾏的内容,撤销⽂本的修改、移动和复制等可以进⼊插⼊模式或底线模式(2)插⼊模式进⾏⽂字编辑按Esc键可返回命令模式(3)底线模式主要进⾏⼀些⽂字编辑的辅佐功能,⽐如字符串搜索、替换、保存⽂件等操作【vi的⼀些命令】vi:创建⼀个⽂件并进⼊vi编辑器:w:对⽂件内容进⾏保存:n:继续编辑后续⽂件(如果有多个⽂件):N:返回之前的⽂件进⾏编辑(有多个⽂件):rew:直接返回第⼀个⽂件进⾏编辑:q:退出编辑器:q!:不存盘退出⽂件,强制退出:wq:保存并退出:wq!:强制保存并退出:w ⽂件名:⽂件另存:1,7 write ⽂件名:部分⽂件另存:1,9 w! ⽂件名:覆盖或替换掉⽂件中部分内容:10,12 w >> ⽂件名:将当前⽂件中的内容添加⾄以后⽂件的末尾。(向【⽂件名】中追加内容)撤销对⽂件内容修改:按Esc回到命令模式,再按u,即撤销了之前输⼊的内容:set numbet:显⽰⾏号:set nonumber:关闭⾏号2. 移动光标【⽅向键、字母键、组合键】操作按键→↓←↑功能将光标向右移动将光标向下移动将光标向左移动将光标向上移动操作按键ljhk使⽤组合键移动7→ == 7l5↓ == 5j 向下移动5个字符【逐单词移动】在包含单词的⽂档中,单词间默认以空格分开操作按键wbe功能将光标移动到下⼀个单词开头将光标向前移动⼀个单词将光标移动到单词的词尾移动多个单词3w2b5e【在某⼀⾏内移动】操作按键f+任何字母键任意数字键+|$^功能将光标移动到⽂本中下⼀个所指定的字母将光标移动到数字键指定的字符位置(每⾏第⼀个字符标记为1)将光标移动到当前⾏的⾏末将光标移动到当前⾏的⾏⾸⽰例fy23|$^【在不同⾏上移动】操作按键数字+G:任意数字:$-+功能将光标移动到数字对应⾏的⾏⾸(若只输⼊G,则可直接移动到⽂件最后⼀⾏)将光标移动到数字对应⾏的⾏⾸将光标移动⼤⽂件最后⼀⾏⾏⾸将光标向上移动⼀⾏将光标向下移动⼀⾏⽰例10G:10:$–++【在屏幕上移动】将光标移动到屏幕上的特定位置。操作按键MLH功能将光标移动⾄当前屏幕中间将光标移动⾄当前屏幕最下⽅将光标移动⾄当前屏幕最上⽅⽰例MLH【返回初始位置】在命令模式下,输⼊两个单引号 ‘’【调整显⽰⽂本】通过移动屏幕上显⽰的内容来调整光标所在的位置。操作按键Ctrl+DCtrl+UCtrl+FCtrl+B功能向下移动半屏⽂本内容向上移动半屏⽂本内容显⽰⽂件下⼀屏的⽂本内存显⽰⽂件上⼀屏的⽂本内容实例Ctrl+DCtrl+UCtrl+FCtrl+B3. ⽂本添加命令iaO(⼤写)功能在光标当前位置左侧插⼊⽂本在光标当前位置右侧插⼊⽂本在光标当前位置上⽅插⼊⽂本命令IAo(⼩写)功能在⾏⾸插⼊⽂本在⾏末插⼊⽂本在光标当位置下⽅插⼊⽂本4. ⽂本查找和替换【向前或向后查找字符串】/字符串:在命令模式下输⼊,查找匹配的字符串n:继续向前查找(但是光标是往后⾛) 或者

/字符串N:继续向后查找 或者

?字符串【替换指定字符】r:单个字符替换。将光标移动到想替换的字符处,按下r,在输⼊要替换的字符即可,再按Esc返回即可替换完成R:逐字符覆盖⽂本。输⼊的每个字符都将逐个替换光标所造位置的字符,直到按下Esc键返回命令模式为⽌。【替换⾏操作】操作(在命令模式下)cwcc:s/TWO/Date(:与s之间没有空格)Ccf所选字符(例cfU):1,$ s/owe/one(1,$表⽰从⽂件第⼀⾏到最后⼀⾏):g/⾏包含的字符串/s/旧/新:1,$ s/旧/新/g功能修改单词,(先要查找)直接替换当前⾏的内容查找某⾏中某个单词并进⾏替换(这⾥将two替换为date)修改某⾏的某段⽂本内容(替换到末尾)对当前光标所在位置到所选字符之间这⼀段⽂本进⾏替换在所有⾏上搜索并替换⾏内第⼀个⽬标内容指定某⾏中的内容进⾏替换(g表⽰从⽂件的第⼀⾏查找⾄最后⼀⾏)在所有⾏上搜索并替换⾏内所有⽬标内容(g表⽰对找到的所有⽬标字符串进⾏替换)5. ⽂本复制、剪切和粘贴复制、粘贴、剪切操作合集:字符复制剪切粘贴ylxp单词ywdwp⾏yyddp操作ylpxyf字符df字符ywdwyyy$ddd$功能复制字符粘贴字符(⼤写P粘贴⾄光标上⼀⾏,p⾄下⼀⾏)剪切字符复制光标所在位置与指定字符之间的⽂本内容剪切光标所在位置与指定字符之间的⽂本内容以单词为单位进⾏复制, 2yw:复制两个单词以单词为单位进⾏剪切复制⾏,7yy:复制7⾏复制当前光标处⾄⽂件末尾间的全部⾏剪切⾏剪切当前光标⾄⽂件末尾间的全部内容复制和移动⽂本::2 copy 15:将第2⾏复制到第15⾏:1,6 copy 16:将1,6⾏之间的⽂本块复制到16⾏:8,12 move 18:将8,12⾏之间的⽂本块复制到18⾏6. ⽂本删除和撤销操作x数字xdwddDdf字符:2d:1,功能删除光标所在的字符。删除单个字符删除多个字符,如7x删除⼀个单词删除单⾏删除⼀⾏中的⼀部分。删除光标所在位置后的⼀部分内容删除改⾏中光标到字符之间的指定⽂本删除指定⾏(这⾥删除第⼆⾏)删除指定⽂本块往后接着删除撤销最近⼀次删除(也可以对覆盖替换进⾏撤销)撤销⼀⾏上的所有修改7. 更改vi编辑器设置操作:set number / :set nonumber(简写nu/nonu):set autoindex / :set noautoindex (ai/noai):set showmode / :set noshowmode:set ignorecase / :set noignorecase (ic/ noic):set list / :set nolist:set showmatch / :set noshowmatch:set wrapmargin=数字:set all功能显⽰和隐藏⾏号设置和取消字符⾃动缩进显⽰或隐藏当前编辑状态搜索时忽略⼤⼩写显⽰和隐藏特殊字符是否显⽰特殊字符的匹配设置每⾏中最后⼀个字符到屏幕右边界的字符个数查看编辑器当前的设置第五章 实⽤程序介绍多列内容输出column、⽂件内容查找grep、基本数学运算bc、⽂件内容排序sort、⽂件内容⽐较uniq、comm、diff,⽂件内容替换tr,单⾏数据编辑sed和数据操作⼯具awk。1. 多列内容输出columncolumn:将内容多列输出参数:-x:输出是从左到右显⽰,再从上到下显⽰。没有-x则是从上到下再从左到右显⽰。例⼦:column -x ex111 | more:排列并显⽰column ex111 | more2. ⽂件内容查找grep【在多个⽂件内容中查找字符串】格式:grep string 。string为待查找的内容,file 是查找的⽂件例如:grep e ex111 ex222:在这两个⽂件中查找“e”grep apple *:在当前⽬录下的所有⽂件中查找“apple”【在⽂件中查找多个单词】grep 'my phone' ex111查找的多个字符串要⽤单引号括起来【查找单词时忽略字母的⼤⼩写】grep -i Joy ex111:在ex111中查找Joy ,忽略⼤⼩写-i:选项,忽略⼤⼩写【其他选项⽤法】-v:输出不包含⽬标字符串的⾏-l:只输出包含⽬标字符串⽂件的⽂件名-n:输出⽂件中包含⽬标字符串的⾏和它的⾏号,两者以冒号隔开。【使⽤正则表达式】反斜杠()为转义字符字符.^$. ^ $组合使⽤功能匹配单个普通字符指⽰某⾏的起始指⽰某⾏的末尾例⼦grep '...' ex211:查找⽂件中所有长度为3的字符串grep '^a' ex111:查找所有以a开头的⾏grep 't$' ex111:查找所有以t结尾的⾏grep '^...$' ex111:查找所有长度为3的⾏3. 基本数学运算bc输⼊命令bc启动程序,即可输⼊要计算的表达式字符+-*/^scale功能加法减法乘法除法幂运算输出的⼩数部分(默认为零)例⼦1+24-22*3(结果6)8/2(结果4)2^4(结果16)scale=2 12/7 (结果1.71)4. ⽂件内容排序sortsort的标准排序规则是按ASCLL码表的值升序排序。sort排序默认字段分割符是空格。基本使⽤:

sort ⽂件名选项或符号-d-f-r-n-k+、--t>-o功能对⽂件内容按字典顺序排序(只对数字、字母、空格进⾏排序)排序时忽略字母的⼤⼩写对⽂件内容反序排序(降序排序)对⽂件中的数字进⾏排序,按数值⼤⼩排序,⽽不是ASCLL码对⽂件内容按某⼀字段进⾏排序对⽂件的内容限定排序(+表⽰从分割符开始,-表⽰到分割符结束)指定分隔符重定向符,将排序结果写⼊指定⽂件将被排序⽂件重写例⼦sort -d ex111sort -f ex111sort -r ex111sort -n ex111sort -k 1 ex111:按第⼀个⼦段进⾏排序sort +1 -3 ex111:⽐较内容限定在2,3列字段。sort -k 2 -t: ex111:以:分隔字段sort ex111 > ex222:将排序后的结果写⼊ex222sort -o ex111 ex2225. ⽂件内容⽐较uniq、comm、diff【识别和删除重复⾏uniq】选项-c-d-u功能可将相邻重复⾏的重复次数显⽰在⾏⾸查看⽂件中相邻重复⾏的其中⼀⾏查看⽂件中不相邻且不重复的⾏删除所有重复⾏(包括相邻不相邻的)。先删除,然后排序再删除例⼦uniq -c ex111uniq -d ex111uniq -u ex111uniq ex111、sort ex111 | uniq【按⾏⽐较两个⽂件comm】comm可实现按⾏⽐较两个有序⽂件的异同。comm ex01 ex02执⾏comm的结果解释:列号123comm -3 ex01 ex02含义只存在于⽂件ex01中的⾏只存在于⽂件ex02中的⾏两个⽂件中都存在的⾏-3 表⽰不输出第三列【查看⽂件不同之处diff】diff的输出结果是告诉⽤户如何将前⼀个⽂件的内容转换为后⼀个⽂件内容。diff ex111 ex222字母含义例⼦内容1c1解释c 修改< pull—>abuse3d2”开头,⼀下两⾏内容同理。将前⼀⽂件的第⼀⾏“pull”改为后⼀⽂件的第⼀⾏“abuse”“—”为分隔符d 删除若将前⼀⽂件的第三⾏“hit”删除,前⼀⽂件和后⼀⽂件的第2⾏便相同了a 添加>eat>beat前⼀⽂件的第5⾏之后添加后⼀⽂件的第5⾏“eat”和第6⾏“beat”6. ⽂件内容替换tr功能替换实例解释< ex111的意思是将⽂件的内容作为tr的输⼊。将⽂件中所有的’r’替换成’R’将⽂件中所有的换⾏符(n)替换成空格替换字符tr 'r' 'R' < ex111替换字符tr 'n' '' < ex111tr 'pe-' 'PE,'ex111tr '[a-g]' '[1-7]' 0时,$n表⽰待检索⽂件中的第n释义个字段。当n=0时,$0表⽰待检索⽂件中的所有字段awk '{print NF}' ex111:得到⽂件中每⾏字段的个数例⼦就是那个变量的例⼦awk '{print $NF}' ex111:输出每⾏的最后⼀个字段,和$5是⼀样的awk '{print NR,$0}' ex111:输出⽂件中每⼀⾏的⾏号在awk检索⽂件时,表⽰当前被检索⾏的字段个数在awk检索⽂件时,表⽰当前被检索⾏的⾏号【使⽤⾃定义变量、字符串和数字】选项功能例⼦awk -v test='student' '{print test}' ex111:test为⾃定义变量,将其赋值为“student”后,使⽤print进⾏输出。awk -v test='student' '{print test $0}' ex111:还可以同时使⽤⾃定义变量和预定义变量。awk '{print "num:"$1,"name:"$2}' ex111:这样双引号⾥的字符串被原样输出了。awk '{print 89.8}' ex111还可以进⾏运算后输出: awk 'print{89.7-2}' ex111-v设置⼀个⾃定义变量,然后才能在进⾏操作时使⽤""双引号通过使⽤双引号输出若⼲个字符串使⽤数字【使⽤正则表达式】命令awk '/[tT]/ {print}' ex111awk '/[p-z]/ {print}' ex111awk '/^[a-s]/ {print}' ex111awk '/[^a-s]/ {print}' ex111解释在⽂件中查找包含字母“T”或“t”的⾏并输出在⽂件中查找包含p到z的任意⼀个字母的⾏并输出^表⽰⾏的起始,查找所有起始字符为a到s中任意⼀个字母的⾏并输出[^a-z]表⽰按字母顺序逐⾏查找从a到z内的所有字母,只要某⾏包含了从a到z以外的任意⼀个字符,这⼀⾏就会被输出。【使⽤指定的字段选择记录】命令awk '$3=="f" {print}' ex111awk '$1~/[Bb]us/ {print}' ex111&&、||、!解释查找第三个字段的值为f的记录查找第⼀个字段中匹配/[Bb]us/的记录并输出与或⾮备注在⽐较字符串时,⼀定要在待⽐较内容的两侧加双引号awk '$1!~/[Bb]us/ {print}' ex111:查找不匹配的记录【使⽤awk命令⽂件】可以将awk命令放⼊⼀个awk⽂件中,⽅便后续调⽤。awk -f ex111_awk:使⽤-f选项来调⽤⽂件ex111_awk的内容,并对⽂件执⾏⽂件中的操作。预定义变量的释义:预定义变量在awk对⽂件进⾏检索时使⽤的字段分隔符,默认为空格或制表符(Tab键)FS(查找时使⽤的字段分隔符)RS(查找时使⽤的记录分隔符)OFS(输出时使⽤的字段分隔符)ORS(输出时使⽤的字段分隔符)释义在awk对⽂件进⾏检索时使⽤的记录分隔符,默认为换⾏符在awk输出检索时使⽤的字段分隔符,默认为空格位于每⼀条记录的末尾,是在awk输出检索结果时使⽤的记录分隔符,默认为换⾏符。例⼦:BEGIN{FS="_"OFS="~"}{print $1,$2}【awk命令的扩展】⼀下为⼀个awk⽂件:/Mike/ || /Amy/ {print $1print $2,$4}“{”必须跟在待检索内容的末尾,不能另起⼀⾏在“{}”中,必须⼀条语句单独占⼀⾏awk还可以进⾏数学运算第六章 shell脚本编程基础1. 脚本⼊门【调试和运⾏脚本】使⽤

sh 命令来调试shell脚本,语法为

sh[-nvx] script参数说明:序号123456参数-n-v-x-e-u-c含义读⼀遍脚本中的命令但不执⾏,⽤于检查脚本中的语法错误⼀边执⾏脚本,⼀边将执⾏过的脚本命令输出到屏幕上显⽰提供跟踪执⾏信息,将执⾏的每⼀条命令与结果⼀次打印出来若有⼀个命令失败就⽴即退出置换时把未设置的变量看作出错使shell解析器从字符串⽽⾮⽂件中读取并执⾏命令定义变量时的命名规则:1. 定义变量时,变量名不加$符号2. 变量名和等号之间不能有空格3. ⾸字符必须是字母(a-z,A-Z)4. 中间不能有空格,可以使⽤下划线(_)5. 不能使⽤标点符号6. 不能使⽤bash⾥的关键字2. 条件结构化语句【使⽤case语句】格式:case VALUE inVALUE1) command1 command2 ;;VALUE2) command1 command2 ;;*) command1 command2 ;;esac例⼦:运⾏此脚本时,输⼊1-4之间的整数,将会分别输出60,70,80,100,否则将提⽰“error”#!/bin/bashecho "please input a number bewteen 1 to 4"read NUMcase $NUM in1) echo "your 60";;2) echo "your 70";;3) echo "your 80";;4) echo "your 100";;*) echo "error";;esac【使⽤if语句】(1)if…fi格式:if conditionthen command1 command2 ...fi例⼦:#!/bin/bashecho "please input a number"read NUMif [ "$NUM" -gt "0" ] #-gt是⼤于的意思then

echo "the number is a positive num"fi条件-判断语句必须以if开始,以fi闭合结束,这是shell的语法规则在条件中的condition须以“[ ]”进⾏闭包,并且在condition和⽅括号之间必须有空格,左右两边都要有在

[]中只能有⼀个条件判断式在条件判断式中可以使⽤逻辑运算符号和⽐较运算符组合成新的条件判断式(2)if…else…fiif conditionthen command1 command2 ...else command ...fi(3)if…elif…else…fiif conditionthen command1 command2 ...elif condition2then

command1 ...else command ...fi(4)test命令⽤法类型字符串判断命令str1 = str2-n str1-z str1str1 > <数字的判断-eq-ne-le-lt⽤法当字符串内容、长度相等时为真当串的长度⼤于0时为真当串的长度为0时为真当串str1为⾮空时为真⽐较⼤⼩,但必须转义相等不相等⼩于等于⼩于类型-ge命令-gt⼤于等于⽤法⼤于⽤户可读为真可写为真⽂件为正规⽂件为真可执⾏为真⽂件为⽬录为真⽂件为字符特殊⽂件为真⽂件为块特殊⽂件为真⽂件⼤⼩⾮0时为真当⽂件描述符(默认为1)指定的设备为终端时为真与或⾮⽂件的判断-r file-w-f-x-d-c-b-s-t复杂逻辑判断-a-o!3. 循环结构化命令【使⽤for】for循环有3种结构:列表for循环、不带列表for循环、类似C语⾔的for循环。列表for循环:计算1~200之间所有偶数的和#!/bin/bashecho "1-200之间偶数的和"sum=0for i in {2..200..2}do sum=$(($sum+i))doneecho "sum=$sum"不带列表的for循环:根据⽤户的输⼊进⾏相应的输出,其中$#表⽰参数的个数#!/bin/bashsum=0echo "number of argument is $#"echo "what you input is:"for argumentdo

echo "$argument" sum=$(($sum+$argument))doneecho $sum类C语⾔风格for循环:#!/bin/bashsum=0for((i=2;i<=200;i=i+2))do let "sum=sum+i"doneecho "the sum is:" $sum【使⽤while】语法:while conditiondo

commanddone例⼦:让⽤户输⼊⼀个数,若这个数等于29则直接退出while循环,若不等于20则给出相应的提⽰。#!/bin/bashecho "please input a number bewteen 1 to 100"read iwhile [ $i -lt 101 ] && [ $i -gt 0 ]do

if [ $i -eq 29] then echo "you are right" exit 0 elif [ $i -lt 29] then

echo "you should try a bigger one" else echo "you should try a smaller one" fi read i #循环输⼊done【使⽤until】until中,测试的条件为假,进⼊循环体。格式:until conditiondo

commanddone例⼦:使⽤until在屏幕上输出1-10的数字。#!/bin/bashnum=1until ((num>10))do

echo $num num=$(($num+1))done【break和continue】break:强⾏退出当前循环continue:⽤于让脚本跳过后⾯的语句,并在执⾏下⼀次循环4. 使⽤函数在shell中,函数必须先定义后使⽤。语法:function_name(){ list of commands [ return value ]}如果不显⽰的增加return语句,函数会将最后⼀条的运⾏结果作为返回值返回。在shell函数中,函数的返回值只能是整数,⼀般⽤来表⽰函数是否运⾏成功,0表⽰成功,其他值表⽰失败。【函数的使⽤】#!/bin/bashhello(){ #声明 echo "hello ,shell"}hello #调⽤【函数参数传递】在shell中,函数可以通过位置变量来传递参数语法格式:

functionName param1 。当函数执⾏时,$1表⽰对应的参数1。例⼦:#!/bin/bashsum(){ echo "the first is $1" echo "the second is $2" sum=$(($1+$2)) echo "the sum of params is : $sum" echo "output all param $*"}sum 1 9【函数的返回值】在shell中,函数的返回值只能是0-255之间的⼀个整数,返回值将保存到变量“$?”中。例⼦:根据⽤户输⼊的年份,判断并输出该年份是否是闰年#!/bin/bashleapyear(){ year=$1 if [ $[ $year%4 ] -eq 0 ] && [ $[ $year%100 ] -ne 0 ] || [ $[ $year%400 ] -eq 0 ] then Isleapyear=0 else Isleapyear=1 fi}echo "please enter a number:"read Nleapyear $Ncase $Isleapyear in 0) echo "this year is a leap year" ;; 1) echo "this year is not a leap year" ;;esac【函数的引⽤】使⽤

. ⽂件的路径 来调⼊这⾥clock是⼀个函数⽂件#!/bin/bash. ./clock #此处是⽤空格隔开的的实⼼点clock使⽤上⾯这种⽅式调⽤函数时,函数⽂件的路径应该与脚本⽂件的路径相同,否则在调⽤时需使函数所在的⽂本的绝对路径或相对路径。【全局变量与局部变量】在默认情况下,shell脚本中定义的变量都是全局变量局部变量的关键字为

local5. 特殊变量的⽤法变量名$#$*$$$!$@$-$?释义传递到脚本的参数个数以⼀个单字符显⽰所有向脚本传递的参数脚本运⾏的当前进程ID号后台运⾏的最后⼀个进程的ID号与$*相同,但是使⽤时加引号,并在引号中返回每个参数显⽰shell使⽤的当前选项,与set命令功能相同显⽰最后命令的退出状态。0表⽰没有错误,其他任何值表明有错误6. 综合实例【打印⼀个直⾓三⾓形】#!/bin/bashfor((i=1;i<9;i++))do for((j=1;j

jline=1until [ $jline -gt $iline ]doecho -ne "$iline*$jline=$((iline*jline))t"((jline++))doneecho((iline++))done【判断是否是闰年】#!/bin/bashleapyear(){ year=$1 if [ $[ $year%4 ] -eq 0 ] && [ $[ $year%100 ] -ne 0 ] || [ $[ $year%400 ] -eq 0 ] then Isleapyear=0 else Isleapyear=1 fi}echo "please enter a number:"read Nleapyear $Ncase $Isleapyear in 0) echo "this year is a leap year" ;; 1) echo "this year is not a leap year" ;;esac || $* | 以⼀个单字符显⽰所有向脚本传递的参数 || $$ | 脚本运⾏的当前进程ID号 || $! | 后台运⾏的最后⼀个进程的ID号 ||

@∣与*相同,但是使⽤时加引号,并在引号中返回每个参数 || $- | 显⽰shell使⽤的当前选项,与set命令功能相同 || $? | 显⽰最后命令的退出状态。0表⽰没有错误,其他任何值表明有错误 |6. 综合实例【打印⼀个直⾓三⾓形】#!/bin/bashfor((i=1;i<9;i++))do for((j=1;j

jline=1until [ $jline -gt $iline ]doecho -ne "$iline*$jline=$((iline*jline))t"((jline++))doneecho((iline++))done【判断是否是闰年】#!/bin/bashleapyear(){ year=$1 if [ $[ $year%4 ] -eq 0 ] && [ $[ $year%100 ] -ne 0 ] || [ $[ $year%400 ] -eq 0 ] then Isleapyear=0 else Isleapyear=1 fi}echo "please enter a number:"read Nleapyear $Ncase $Isleapyear in 0) echo "this year is a leap year" ;; 1) echo "this year is not a leap year" ;;esac