xargs 命令 xargs 命令时给其他命令传递参数的一个过滤器,也是组合多个命令的工具,能将标准输入数据转换成为命令行参数。 能够处理管道或者stdin并将其转换成特定的命令参数 能将单行或者多行输入转换成为其他格式,例如单行变多行,多行变单行。 xargs 的默认命令是echo,默认定界符是空格 也就是说,通过管道传递给xargs的输入将会包含换行和空白 通过xargs的处理,换行和空白会被空格取代 xargs 是构建单行命令的重要组件之一。 参数: -n 定义多行输出 -n3 以分界符为边界,拆分为3个一行输出 -d 定义分界符 -d ‘:’ 以冒号作为分界符 -I 指定一个替换字符串{} ,这个字符会在xargs扩展时被替换掉,当-I与xargs结合使用时,每一个参数命令都会被执行一次。 随手笔记 2016-12-24 评论 1827 次浏览
第二十三讲——Find命令 先瞎扯淡两句 常用变量的赋值: let sum=$sum+1-等价于 let sum+=1 -等价于let sum++ 文件查找: locate:(很少使用)非实时,模糊匹配,查找是根据全系统文件数据库进行的,可能在刚装完数操作系统后无法执行该命令,因为数据库尚未生成,但是我们可以手动生成。 updatedb:手动生成文件数据库,执行此命令耗时较长,因为要将系统中的每一个文件记录下来。 虽然locate是非实时的,并且是模糊匹配的,但是locate是基于数据库查询的,速度上比find更快。 对于一个文件来说,如果属主被删除,那么该文件的属主将会变成属主的id号。 Find命令的特点: 实时查找 精确查找 支持众多的查找标准 遍历指定目录中的所有文件 完成查找速度慢 find命令格式 find 查找路径 查找标准 查找到以后的处理动作 查找路径:不填写则默认为当前目录 查找标准:默认为指定路径下的所有文件 -name 根据文件名查找(精确匹配) -name ‘filename’ 文件名通配 * 任意长度任意字符 ?一个或零个字符 []括号内任意一个字符 -iname 文件名匹配不区分大小写 -regex parttern基于正则表达式查找 -user 查找,通过文件属主查找 -grep 根据文件属组查找 -uid 根据用户uid -gid 根据用户gid -nouser 查找没有属主的文件,我们应当定期执行此命令 -nogroup 查找没有属组的文件 -type 根据文件类型查找 f 文件 d 目录 c字符设备 b 块设备 l 链接文件 p 管道文件 s 套接字文件 -size 根据文件大小查找 -size xxK/M/G 默认单位为字节 -size +10K 大于10K -size -10K 小于10K -size -1M 满足0.xM的文件统统被认为满足1M -size -10M 9.x-10M的文件都会显示 find /etc –size 10K –ls 组合查找: -a 与 -o 或 -not 非 如果我们给了两个条件,则默认连接方式为-a 摩根定律: find /etc –not -user1 -a -not -user user2 等价于 find /etc –not \(-user user1 –o –user user2\) 对括号内取反。 整个取反等价于单个取反把括号内的符号反过来(-a或者-o) 根据文件的时间戳查找 -mtime 修改时间 -ctime 改变时间 -atime 访问时间 -mtime # 在#天前(刚好#天前)访问过。 -# #天内访问过 +# 至少#天没有访问过 -atime +5 至少有五分钟没有访问过。 -perm mod(权限)权限精确匹配 mod 精确匹配权限(九位) -perm 644 精确匹配权限 /mod 九位任意权限匹配则符合 -perm /644 任何一位 -mod 包含权限内的文件全部在内,例如755包含644. -prem -644 所有包含在644权限的所有权限 处理动作:默认为显示到屏幕 默认为 –print(显示) -ls 类似于ls –l 显示文件的详细信息 -ok command {} \; -ok 每一个操作都需要用户的确认 -exec command {} \; {}为文件定位符 -exec 不需要用户的确认,直接执行 xargs 使用管道连接,xargs是从标准输入接收命令并执行 find /etc -size +1M |xargs echo {} >>/tmp/test.txt 将查找到的文件路径写入文件,并且之间以空格隔开 find /etc –size +1M –exec echo {} >>/tmp/test.txt \; 将找到的文件路径写入文件,每个文件占一行 给自己讲linux 2016-12-23 评论 1465 次浏览
第二十二讲——vim文本编辑器 打开文件: Vim +12 filename 打开文件后,光标出现在第十二行的第一个字符 Vim + filename 打开文件后,光标处于整个文件的尾部。 Vim +/pattern(正则) 打开文件,定位至第一次被模式匹配的行首 关闭文件: 编辑模式(命令模式),删除,复制 输入模式,敲击动作录入到屏幕 末行模式,在屏幕下方可以键入命令,用于管理文件。 进入vim时,默认是编辑模式 i 当前光标所在字符之前插入数据。 a 在当前光标所在字符之后插入数据 o 在光标所在行的下方新建一行并转为输入模式 I 在当前光标所在行首插入数据 A 在当前光标所在行尾插入数据 O 在当前行的上方新建一行并插入数据 ESC 退出输入模式,还原为编辑模式 末行模式,必须从编辑模式下键入冒号 :10-20d 删除第10-20行 :w 保存文件,只读文件保存不了,管理员除外。 :q 不保存退出文件 :wq 保存并退出 :q! 强行退出(不保存) 末行模式-编辑模式 esc Vim中移动光标(快速定位) 一 逐字符移动光标 H左 J下 K上 L右 使用数字加上上下左右,可以一次性移动N个字符 二 以单词为单位移动 w: 移至下一个单词的词首 e: 跳至当前或者下一个单词的词尾 b: 跳至当前或者上一个单词的词首 三 行内跳转 数字0:跳到绝对行首 ^: 表示第一个非空白字符的行首 $: 跳至行尾,绝对行尾。 四 行间跳转 ( 或者 ) 在句子(语句间跳转) { 或者 } 在段落间跳转 #G 跳转至第#行 G 跳至最后一行 在末行模式下也可以实现跳转,给出行号,回车即可。 五 翻屏操作(编辑模式) Ctrl + F 向下翻一屏 Ctrl + B 向上翻一屏 Ctrl + D 向下翻半屏 Ctrl + U 向上翻半屏 六 删除单个字符 X:删除光标所在处单个字符 #x: 删除光标所在处及向后的N个字符 七 删除命令 d: 与行内跳转命令组合删除 d:告诉vim编辑器有删除动作。 dd: 删除光标所在行 #dd: 向下删除含光标所在行的n行 在末行模式下可以使用 startADD,endADD d 删除从start开始end结束的行。 相对表示法: .,+6d 从当前行向下删除6行 $ 表示最后一行 + 向下的n行 $-10 倒数第10行 刚刚删除的内容可以粘贴到其他地方(剪切) 八 粘贴命令 大写P:粘贴至上一行(粘贴复制为整行) 小写p:粘贴至下一行(粘贴复制为整行) 复制或者删除的为非整行时, 小写p:粘贴至当前光标的后方 大写P:粘贴至当前光标的前方 九 复制命令y y 告诉vim编辑器进行复制操作 yy 复制以整行 #yy 复制光标所在行开始向下的n行 十 先删除内容在转换为输入模式(修改) c: change 用法同d命令 cc 清空当前行,在转入输入模式 十一 替换 r :替换单个字符 R:转换为替换模式,通过输入覆盖 ESC退出替换模式。 十二 撤销编辑操作(编辑模式) u 撤销前一次的编辑操作,可以连续撤销 vim 至在缓存中保留最近50次的操作。 Ctrl+r: 撤销刚才的撤销操作。 十三 重复此前的操作 “ . ”重复上一次的编辑操作 十四 可视化模式 v/V 进入可视化操作,可以选中光标经过的字符。 v: 按字符选取 V:按矩形块选取。 十五 查找,支持正则表达式。 /pattern模式,从光标向下查找 ?pattren 模式,从光标出向上查找 n: 向下跳转 N:向上跳转 十六 查找并替换(末行模式下) 同sed命令 :startadd,endadd s@pattren@string@@gi i: 忽略字符的大小写 g: 全局替换 1,$ 全文 % vim中的全文指定 十七 使用vim编辑多个文件命令 Vim filename1 filename2 filename3 filename4 如果打开的文件默认是第一个,则可以在末行模式下输入 next: 切换至下一个文件 prev:切换至上一个文件 last: 切换至最后一个文件 first: 切换至第一个文件 q:只能退出当前文件 qa:退出所有文件 十八 分屏显示(窗口拆分) Ctrl+w,s 水平拆分窗口 Ctrl+w,v 垂直拆分窗口 窗口间切换 Ctrl+w 上下左右切换 q:退出当前窗口 qa:退出所有窗口 十九 分窗口显示(多个窗口) Vim -o小写 水平显示窗口 Vim -O大写 垂直显示窗口 二十 将当前文件的部分内容存为另一个文件 末行模式下的w命令 :w 保存为当前文件 :w /path/to/filename 将文件另存为 :startadd,Endaddw /path/to/filename将指定内容另存为 二十一 将另外一个文件的内容附加在当前内容中 :r /path/to 在当前光标后附加一个文件的内容 二十二 跟shell交换(末行模式) :!command 输入shell中的命令 二十三 高级话题 显示、取消行号 Set nu set nonu 行号不是文件的组成部分,只显示当前进程有效 忽略或区分大小写 set ic(ignorecase) set noic 设置自动缩进 Set ai/autoindent set noai 查找到的文本高亮显示 Set hlsearch set nohlserch 语法高亮(语法着色) Syntax on 开启语法高亮 Syntax off 关闭语法高亮 只对当前的vim进程有效,永久 有效需要写入/etc/vimrc ~/.vimrc配置文件。 Vim配置文件 Vim的全局配置文件 /etc/vimrc 对所有用户生效 Vim的用户配置文件,仅对用户生效 ~/.vimrc 影藏文件,如果没有自己创建 当vim在正常编辑的情况下意外退出,会在文件所在目录下生成一个隐藏的swp文件,这时打开文件会有报错信息,可以从中恢复编辑过的内容。 顺便复习一下几个测试表达式的条件所有是在[ ]中括号内进行测试 整数测试: -le -ge -eq -lt -gt 字符测试: == != > < -n测试字符串是否为空 -s字符串是否不空 string 是否不空 文件测试: -d目录 -f文件 -e是否存在 -r是否可读 -w是否可写 -x是否可执行 组合测试: -a 与关系 -o或关系 !非关系 If [ $# -gt 1 –a $# -lt 3 ]等价于if [ $# -gt 1 ] && [$# -lt 3 ] 给自己讲linux 2016-12-22 评论 1458 次浏览
第二十一讲——sed流处理 Sed:stream editor。流编辑器(文本编辑器) Sed是一个行编辑器,是逐行进行处理的 编辑器: 行编辑器 sed 全屏编辑器 vim Sed命令bin不是直接对文本进行处理,而是逐行将文件数据读取到内存中去,而后从内存中完成编辑,并将编辑后的数据输出到屏幕上来,这个内存空间我们称为模式空间(对sed而言)。 因为sed处理文本也不是每一行都处理的,或者说,sed也可以指定仅处理那些行。而这些行也可以像grep那样做模式过滤,符合模式的处理,不符合的不处理,处理结束后将模式空间的内容打印至屏幕。Sed本身也是一种语言,仅对文本做编辑。 sed [option] {script sed 脚本 } [input file] sed ‘adresscommand’ file……(文件可以有多个) 地址 命令 连写,中间无空格 符合adress的行执行以下的命令 Command: d 删除符合条件的行(显示不匹配的行,默认全部输出) p 打印符合条件的行,p命令是特殊命令的处理结果,符合条件打印,而sed默认会将模式空间中的内容打印,所以匹配的行会打印两遍。 -n 只打印符合条件的行(默认全部输出) a\”string” 在指定的行后面追加新行(匹配行的下一行),内容为string \n 换行,可在匹配行后添加新行 i\string 在指定行的前面添加新行,内容为string r filedir 将指定文件中的内容添加至符合条件的行处,只要有符合的行就执行,并非只执行一次。 w filename 将指定范围内的内容另存至指定的文件中。 s 查找并替换,s/模式/替换的内容/g|i 模式(parttern),可使用正则 s默认是匹配每一行的第一个,末尾加修饰符 g(全局替换,整行替换) i(查找时忽略大小写) 分隔符可以是///,也可以是###,还可以是@@@等等可以再特殊查找下避免混淆。 Sed 中可以使用后向引用,使用转义后的括号分组,然后引用括号内的内容。 Sed ‘@\(string\)@\1@g’ 在查找替换中,引用模式匹配的整个串使用 & 字符,引用前面匹配的字符串。 -n 静默模式,不再提示模式空间中的内容。 -i 直接修改源文件,这是个很危险的操作。 -f 指定一个sed脚本。 -e script -e script 可以执行多个sed命令 -r 使sed支持扩展的正则表达式,sed默认只支持基本的正则表达式。 使用sed’命令提取文件/目录的父目录: echo /passwd/1/2/3/4/5 |sed -r ‘s@^(/.*/)[^/]+/?@\1@g’ id命令: id –n –u 用户的用户名username id –n –g 用户的组名 groupname bc计算器: bc命令进入计算界面 scale=2 保留两位精度 可以使用echo “scal=2;10/2” |bc 使用echo命令将参数送入bc计算器 还可以使用 bc <<< “scal=2;100/3” 类似于输入重定向。 For循环 for 变量 in 列表 do 循环体 done 列表为一大堆数,for语句会对这一堆数进行遍历。 {1..100} 整数列表,1-100的整数 seq命令 seq 起始数 步进长度 结束数 结束数未必是列表中一定出现的,因步进长度而定。 起始数为1,步进长度为1时可以省略 Bash不支持浮点运算。 declare –i sum 声明一个整数变量 declare –x 变量 声明一个变量为环境变量 类似于export 在shell中键入export env printenv 都可以打印当前环境的变量声明。 给自己讲linux 2016-12-21 评论 1514 次浏览
第二十讲——条件测试类型 条件测试类型有三类: 整数测试 字符测试 文件测试 整数测试:双目操作符 -eq 测试两个整数是否相等 -nq 测试两个整数是否不等 -gt 测试一个数是否大于另一个数 -lt 测试一个数是否小于另一个数 -ge 测试一个数是否大于等于另一个数 -le 测试一个数是否小于等于另一个数 使用方法有两种(条件测试的表达式) 一是 test expression 例如:test $n –ge $m 二是使用中括号: [ expression ]中括号与测试语句间有空格 If [ $UID –eq 0 ] 等价于if [ `id –u username` -eq 0 ] 后者引用了命令的执行结果 If id username ; then 判定用户是否存在,这是一个执行的状态返回值 如果我们要取一个命令的状态执行结果,不能加引号,要么直接调用,要么让命令先执行,然后取$?的值。 Exit 退出当前进程,用于定义撞他返回结果(定义状态码),如果exit后不跟数值,则将前一条命令的状态返回值作为整个脚本的状态返回值。 文件测试: -e filename 测试文件是否存在 -f filename 测试是否为普通文件 -d filename 测试指定路径是否为目录 -r filename 测试对当前执行脚本的用户是否有读权限 -w filename 测试对当前执行脚本的用户是否有写权限 -x filename 测试当前执行脚本的用户是否有执行权限 -s filename 测试是否为空文件 变量测试:字符的大小比较是无意义的 [ $str1 == $str2 ] 测试两个字符串是否相等 [ $str1 != $str2 ] 测试两个字符串是否不等 [ $str1 ] 测试字符串是否不空 [ -s $str1 ] 测试字符串是否不空 [ -n $str1 ] 测试字符串是否为空 在这里顺便啰嗦一下bash中的语句逻辑关系 逻辑与 && 当第一个条件为真时,第二个条件必须判断 逻辑或 || 当第一个条件为假时第二个条件必须判断 逻辑非 ! 逻辑符又称为短路操作符,只要有一个条件满足,则后面的都不执行。 Shell下的算术运算 let命令 a=1 b=2 let c=$a+$b $[算术运算符表达式] $((算数运算符表达式)) expr 算数运算表达式各操作数和运算符之间要有空格。 C=`expr $a + $b` 顺便再复习一下系统变量, 环境变量:export 作用域为当前shell及其子shell 本地变量:作用域为当前shell 局部变量:作用域为代码段 位置变量:$!,$2.$3以及后向引用中的\1,\2,\3等等 特殊变量:$? 上一条命令执行的状态返回值 $# 脚本中引用参数的个数 $0 脚本名称 $1 第一个参数 $2 第二个参数,最多有9个 给自己讲linux 2016-12-20 评论 1456 次浏览
split 拆分文件 split拆分较大的文本文件时有较大的优势,速度很快。嗯,我回忆一下split命令的使用情况。 参数: -l 按 行 为单位指定分割 例如:-l 10000 以一万为单位分割文件 -b 按指定的文件大小为分割单位 例如:-b M 以1M为单位切割文件,可以指定大小 split -l 10000 1.txt split -b 2M 1.txt -d -a -d 指定用数字作为文件的后缀,后不跟参数 -a 指定后缀的长度 split -l 10000 1.txt -d -a 2 name #此处的name为自定义拆分后的文件名,跟在最后,不需参数指定 split -b 2M 1.txt -a 2 -d name #此处顺序可以打乱,但是name并非-d的参数 随手笔记 2016-12-20 评论 1986 次浏览