首页 Linux+shell命令及操作

Linux+shell命令及操作

举报
开通vip

Linux+shell命令及操作1、列出当前目录的文件、文件夹完整路径 ls -1 |awk '{print i$0}' i=`pwd`'/' 2、列出当前目录及子目录的文件、文件夹完整路径 ls -R |awk '{print i$0}' i=`pwd`'/' 2b) 列出当前目录及子目录下的文件夹完整路径 ls -FR | grep /$ | sed "s:^:`pwd`/:" 3、用find实现,好像运行要慢些 find / -name "*.*" -exec ls {} \; 4、递归列出当 终端快捷键...

Linux+shell命令及操作
1、列出当前目录的文件、文件夹完整路径 ls -1 |awk '{print i$0}' i=`pwd`'/' 2、列出当前目录及子目录的文件、文件夹完整路径 ls -R |awk '{print i$0}' i=`pwd`'/' 2b) 列出当前目录及子目录下的文件夹完整路径 ls -FR | grep /$ | sed "s:^:`pwd`/:" 3、用find实现,好像运行要慢些 find / -name "*.*" -exec ls {} \; 4、递归列出当 终端快捷键 快捷键 功能 Ctrl+C 杀除,即结束当前进程 Ctrl+Y 暂时搁置,直到输入更新 Ctrl+Z 暂时搁置 Ctrl+\ 以核心转储方式杀除 Ctrl+Shift+T 打开新的终端选项卡 Shift+Ctrl+W 关闭标签页 Ctrl+PageUp 前一个标签页 Ctrl+PageDown 后一个标签页 Shift+Ctrl+PageUp 标签页左移 Shift+Ctrl+PageDown 标签页右移 Alt+1 Alt+n:切换到第N个标签页 Shift+Ctrl+N 新建终端窗口 Shift+Ctrl+Q 关闭终端 Shift+Ctrl+C 终端中的复制 Shift+Ctrl+V 终端中粘贴 F11 全屏,双击两次F11退出全屏 Ctrl+shift + 放大(字体) Ctrl+shift — 缩小 Ctrl+0 原始大小 复制操作 1、cp操作 cp(copy) 功能说明:复制文件或目录。 语法:cp [-abdfilpPrRsuvx][-S <备份字尾字符串>][-V <备份方式>][--help][--spares=<使用时机>][--version][源文件或目录][目标文件或目录] [目的目录] 补充说明:cp指令用在复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,而最后的目的地并非是一个已存在的目录,则会出现错误信息。 参数: -a或--archive 此参数的效果和同时指定"-dpR"参数相同。 -b或--backup 删除,覆盖目标文件之前的备份,备份文件会在字尾加上一个备份字符串。 -d或--no-dereference 当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录。 -f或--force 强行复制文件或目录,不论目标文件或目录是否已存在。 -i或--interactive 覆盖既有文件之前先询问用户。 -l或--link 对源文件建立硬连接,而非复制文件。 -p或--preserve 保留源文件或目录的属性。 -P或--parents 保留源文件或目录的路径。 -r 递归处理,将指定目录下的文件与子目录一并处理。 -R或--recursive 递归处理,将指定目录下的所有文件与子目录一并处理。 -s或--symbolic-link 对源文件建立符号连接,而非复制文件。 -S<备份字尾字符串>或--suffix=<备份字尾字符串> 用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字尾字符串是符号"~"。 -u或--update 使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在,才复制文件。 -v或--verbose 显示指令执行过程。 -V<备份方式>或--version-control=<备份方式> 用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这字符串不仅可用"-S"参数变更,当使用"-V"参数指定不同备份方式时,也会产生不同字尾的备份字串。 -x或--one-file-system 复制的文件或目录存放的文件系统,必须与cp指令执行时所处的文件系统相同,否则不予复制。 --help 在线帮助。 --sparse=<使用时机> 设置保存稀疏文件的时机。 --version 显示版本信息。 2、复制目录下所有文件包括子文件到其他目录 cp -Rf ./src_directory/* ./dest_directory 在当前目录的复制操作 1、复制多个文件副本 cat timing.txt |tee timing.{1,2,3} 复制3个timing.txt的副本,命名规则为timing.1.txt 2、复制原文件内容到新文件内 cat timing.txt |tee new.txt cat读取timing.txt文件的内容,并将其全部复制到新创建的new.txt文件中。也达到了对源文件的本目录内复制。 删除操作 1、递归删除 find -name *.rpt |xargs rm -rf 2、删除目录下所有文档文件 rm * 3、删除目录下所有内容(含文件夹) rm -rf * 统计类操作 1、统计文件行数 2、统计文本中含关键字行数(即关键字个数) grep -o keyword fileName | wc -l如果一行最多一个关键字,可以简写为:grep -c keyword fileName Linux配置修改类操作 1、linux改终端目录字体颜色 在用户目录下创建.dircolors文件 内容为 DIR 40;33 其中40为背景色,33为前景色 可用的颜色代码为 字背景颜色范围:40--49 40:黑 41:深红 42:绿 43:黄色 44:蓝色 45:紫色 46:深绿 47:白色 字颜色:30--39 30:黑 31:红 32:绿 33:黄 34:蓝色 35:紫色 36:深绿 37:白色 eg: cd //回到用户主目录下 touch .dircolors //创建文件 vi .dircolors //打开文件 输入去下内容: #! /bin/bash DIR 40,33 退出vi编辑器 重启Terminal 实际应用 1、统计关键字个数 grep -o keyword fileName | wc -l如果一行最多一个关键字,可以简写为:grep -c keyword fileName 2、列出关键字所在行的行号 sed -n '/1234/=' filename 3、输出索取关键字的前m行到后n行 m=4;n=4a=$(sed -n '/1234/=' filename);sed -n "$((a-m)),$((a+n))"p filename 4、 提取两特定字符串间的多行字符 假设文件内容如下: This is line 1 AAAAAA lineA1 AAAAAA lineA2 AAAAAA lineA3 This is line 5 This is line 6 BBBBB lineB1 BBBBB lineB2 This is line 9 This is line 10 1、取出第一次匹配字符串所在行 eg:取出匹配AAAAAA的第一行 code1: sed -n '/AAAAAA/{p;q}' file output: AAAAAA lineA1 code2: awk '/AAAAAA/{print;exit}' file output: AAAAAA lineA1 简 名单名单延期单出门单老板名单 说明: 上面两行代码都是第一次遇到匹配/AAAAAA/的行就对其打印后立马退出程序。 2、匹配字符串所在行最后一行 eg:打印匹配/BBBBB/的最后一行最后一行 code1: #sed -n '/BBBBB/{h};${x;p}' file BBBBB lineB2 简单说明: 一旦匹配/BBBBB/就把这一行复制到hold space中。如果h的作用就是如果hold的space中有内容,就给起替换掉。直到文件最后一行通过x将hold space中的内容copy回pattern space中。打印输出结果就是匹配到/BBBBB/的最后一行了。 3、两个字符串间所有行 eg:打印匹配/AAAAAA/的第一行到配/BBBBB/的最后一行。 code: #sed -n '/AAAAAA/,/BBBBB/{p}' file AAAAAA lineA1 AAAAAA lineA2 AAAAAA lineA3 This is line 5 This is line 6 BBBBB lineB1 4、类似3 eg:打印匹配/AAAAAA/ 的最后一行到匹配/BBBBB/的第一行 code1: sed -n \ '/AAAAAA/ { :a H n /BBBBB/ { H x s/.*\(AAAAAA.*\)/\1/g p b } b a }' file output: AAAAAA lineA3 This is line 5 This is line 6 BBBBB lineB1 简单说明: 具体思路:将读入每一行都添加到hold space后 一直遇到/BBBBB/ 第一行将hold space中的内容换到pattern space 中进行处理。删掉最后一行/AAAAAA/前面的所有内容。从而得到结果。 code2: #!/usr/bin/perl use warnings; use strict; my @a; while(<>){ @a = () if /AAAAAA/; push @a,$_; if(/BBBBB/){ print @a; last; } } output: AAAAAA lineA3 This is line 5 This is line 6 BBBBB lineB1 简单说明: 读入每一行,如果匹配到AAAAAA 就把数组a清空。直到匹配到BBBBB 后 打印数组中的内容。退出循环。 5、两个匹配字符串间内容 eg:打印匹配AAAAAA 第一行到匹配BBBBB最后一行。 code1: sed -n '/^AAAAAA/{:a;N;${s/\(.*BBBBB[^\n]*\).*/\1/p};Ta}' file output: AAAAAA lineA1 AAAAAA lineA2 AAAAAA lineA3 This is line 5 This is line 6 BBBBB lineB1 BBBBB lineB2 简单说明: 将从AAAAAA开始的所有行都N到pattern space中,然后去掉最后一行BBBBB后面的行 打印 code2: awk '{if($1~/^AAA/){has=2;}else if($1~/^BBBB/) {has=1;}else{if(has!=2)has=0;} if(has)print}' file 上面awk的 代码 具有一定的局限性 如果下面BBBBB是不连续的话 代码就不能用了,值得学习的地方是通过标志has的值来判断是否打印。从AAAAAA开始一直打印到连续BBBBB的最后一行。 6、类似 eg:打印匹配AAAAAA最后一行到BBBBB最后一行。 code1: awk 'BEGIN{swh="off"}{if(ll~/^AA/&&$0!~/AA/){print ll;swh="on";}if(ll~/^BB/&&$0!~/^BB/){swh="off";};ll=$0;if(swh~/on/){print $0}}' file 简单说明: 该awk 也是 要求 对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗 AAAAAA 连续的 不然就不行了。 code2: 分两步: 1.获取最后一行行数 awk '{if($0~/AAAAAA/)a=FNR;if($0~/BBBBB/)b=FNR}END{print a,b}' file 2.用sed打印 5、判断是否存在某目录/文件 if test -d dir_name && test -f file_name then ...... fi Linux+shell命令 1、shell内建命令 只有shell内建命令才可改变命令行shell的属性 1、source 2、exec 3、date 2、shell函数 3、shell外部命令 Linux+shell环境变量 Linux+shell特殊变量 变量 释义 $# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数 $$ 脚本运行的ID号 $! 后台运行的最后一个进程的ID号 $@ 与$#相同,但是使用时加引号,并在引号中返回每个参数。 $- 显示shell使用的当前选项 $? 显示最后命令的退出状况。0表示没有错误。 1、$PATH 2、$@ 3、$HOME 4、shell符号型常数RE_DUP_MAX 通过命令getconf得到它的值。 5、数组 bash shell只支持一维数组,但参数个数没有限制。 声明一个数组: (其实不用声明,按数组方式直接赋值给变量即可,BASH就知道那是数组) 数组赋值: (1) array=(var1 var2 var3 ... varN) (2) array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN) (3) array[0]=var1 arrya[1]=var2 ... array[n]=varN 计算数组元素个数: ${#array[@]} 或者 ${#array[*]} BASH的特殊参数 @ 和 * 都表示“扩展位置参数,从1开始”,但形式稍有差异,但在数组里使用好像是可以通用的。 获取数组的所有元素 ${array[*]} 或 ${array[@]} for var in ${array[*]} do echo $var; done 获取数组某一个单元的长度 ${#var} 读取 用${数组名[下标]} 下标是从0开始 下标是:*或者@ 得到整个数组内容 echo ${a[2]} 赋值 1、 eg: [root@zhangyzh ~]$ a=(1 2 3 4 5) [root@zhangyzh ~]$ unset a [root@zhangyzh ~]$ echo ${a[*]} [root@zhangyzh ~]$ a=(1 2 3 4 5) [root@zhangyzh ~]$ unset a[1] [root@zhangyzh ~]$ echo ${a[*]} 1 3 4 5 [root@zhangyzh ~]$ echo ${#a[*]} 4 直接通过:unset 数组[下标] 可以清除相应的元素,不带下标,清除整个数据。 2、 eg: [root@zhangyzh ~]$ a[1]=100 [root@zhangyzh ~]$ echo ${a[*]} 1 100 3 4 5 [root@zhangyzh ~]$ a[5]=100 [root@zhangyzh ~]$ echo ${a[*]} 1 100 3 4 5 100 直接通过 数组名[下标] 就可以对其进行引用赋值,如果下标不存在,自动添加新一个数组元素 删除 [root@zhangyzh ~]$ a=(1 2 3 4 5) [root@zhangyzh ~]$ unset a [root@zhangyzh ~]$ echo ${a[*]} [root@zhangyzh ~]$ a=(1 2 3 4 5) [root@zhangyzh ~]$ unset a[1] [root@zhangyzh ~]$ echo ${a[*]} 1 3 4 5 [root@zhangyzh ~]$ echo ${#a[*]} 4 直接通过:unset 数组[下标] 可以清除相应的元素,不带下标,清除整个数据。 分片 [root@zhangyzh ~]$ a=(1 2 3 4 5) [root@zhangyzh ~]$ echo ${a[@]:0:3} 1 2 3 [root@zhangyzh ~]$ echo ${a[@]:1:4} 2 3 4 5 [root@zhangyzh ~]$ c=(${a[@]:1:4}) [root@zhangyzh ~]$ echo ${#c[@]} 4 [root@zhangyzh ~]$ echo ${c[*]} 2 3 4 5 直接通过 ${数组名[@或*]:起始位置:长度} 切片原先数组,返回是字符串,中间用“空格”分开,因此如果加上”()”,将得到切片数组,上面例子:c 就是一个新数据。 替换 [root@zhangyzh ~]$ a=(1 2 3 4 5) [root@zhangyzh ~]$ echo ${a[@]/3/100} 1 2 100 4 5 [root@zhangyzh ~]$ echo ${a[@]} 1 2 3 4 5 [root@zhangyzh ~]$ a=(${a[@]/3/100}) [root@zhangyzh ~]$ echo ${a[@]} 1 2 100 4 5 调用方法是:${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容,如果需要修改,可以看上面例子,重新定义数据 数组的提取 从尾部开始提取: array=( [0]=one [1]=two [2]=three [3]=four ) ${array[@]:1} # two three four,除掉第一个元素后所有元素,那么${array[@]:0}表示所有元素 ${array[@]:0:2} # one two ${array[@]:1:2} # two three 左边开始最短的匹配 [root@localhost dev]# echo ${array[@]#t*e} # 左边开始最短的匹配:"t*e",这将匹配到"thre" one two e four 左边开始最长的匹配 [root@localhost dev]# echo ${array[@]##t*e} # 左边开始最长的匹配,这将匹配到"three" 字符串的结尾开始最短的匹配 [root@localhost dev]# echo ${array[@] %o} # 从字符串的结尾开始最短的匹配 one tw three four 字符串的结尾开始最长的匹配 [root@localhost dev]# echo ${array[@] %%o} # 从字符串的结尾开始最长的匹配 one tw three four 子串替换 [root@localhost dev]# array=( [0]=one [1]=two [2]=three [3]=four ) 删除第一个匹配的 [root@localhost dev]# echo ${array[@] /o/m} mne twm three fmur 删除所有匹配的 [root@localhost dev]# echo ${array[@] //o/m} mne twm three fmur 没有指定替换子串,则删除匹配到的子符 [root@localhost dev]# echo ${array[@] //o/} ne tw three fur 替换字符串前端子串 [root@localhost dev]# echo ${array[@] /#o/k} kne two three four 替换字符串后端子串 [root@localhost dev]# echo ${array[@] /%o/k} one twk three four 6、$? 表示执行上一条指令返回的值。 指令成功执行,$?=0, 指令错误,$?等于错误对应的数值 将上一条指令执行返回值赋值给其他变量的方法: eg1: #判断是否为目录,是目录命令正确执行,返回值为0 test -d /home/zhangzh/scripts var=`echo $?` echo $var 结果显示为:0 说明路径是目录。 eg2: #判断是否为目录,不是目录,命令执行错误,返回值为1 test -d /home/zhangzh/scripts/run_list_gen.txt var=`echo $?` echo $var 结果显示为:1 说明所列路径不是目录结构。 7、PID 进程ID,process ID,定义进程的唯一值,也可以用$$来表示。 8、$$ 进程ID,process ID,定义进程的唯一值,同PID。 9、PPID 父进程ID,指的是建立此进程的那个进程编号。除第一个进程外,每个进程都有父进程并会拥有0个或多个子进程。为树状结构。 10、$# 变量释义:传递到脚本的参数个数 11、$* 变量释义: 12、 13、 Linux项和表达式 1、/null/dev shell正则表达式 Attention:1~14为meta字符,它在方括号中失去各字符的特殊含义。 组合表达式 1、^$ 2、^abc|efgh$ 匹配起始处有abc或结尾处有efgh 3、^(abc|efgh)$ 匹配一行正是abc或efgh字符串的行 4、 1、\ 2、. 命令释义:匹配单个字符 3、* 命令释义:匹配0个或多个前面的单个字符 4、^ 5、$ 6、[…] 7、\{n,m\} 8、\( \) 9、\n 10、{n,m} 11、+ 12、? 13、| 14、( ) 15、[:与:] 16、[.与.] 17、[=与=] 18、.. 命令释义:匹配于任意两个字符 19转义 20、区间表达式 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 :是将1个或两个数字放在\{与\}之间 1、\{n\} 2、\{n,\} 3、\{n,m\} eg: 21、交替 22、分组 23、\<与\> 即可组合使用也可单独使用 1、\< 2、\> Linux命令 1、ls 1、列出当前目录的文件、文件夹完整路径 ls -1 |awk '{print i$0}' i=`pwd`'/' 2、列出当前目录及子目录的文件、文件夹完整路径 ls -R |awk '{print i$0}' i=`pwd`'/' 3、用find实现,好像运行要慢些 find / -name "*.*" -exec ls {} \; 4、递归列出当前目录及子目录名称 ls -FR | grep /$ 5、递归列出当前目录及子目录名称,包括相关属性 ls -lR | grep "^d" # drwxr-xr-x 3 idea idea 4096 Aug 2 2009 images 6、只列出当前目录下的子目录 用ls只列出子目录 ls -d */ 7、只显示可执行文件 ls -F |sed -n ‘/\*$/’p 8、只列出文件 方法一: ls -l |grep ^d 另一种写法: ls -F | grep '/' | pr -5t 9、列出当前最新文件 find current_directory -type f |xargs ls -t |head -1 找出目录current_directory下最新的文件。 10、列出当前目录及子目录下的文件夹完整路径 ls -FR | grep /$ | sed "s:^:`pwd`/:" 2、find 1、find命令查找最近修改的文件 查找最近30分钟修改的当前目录下的.php文件find . -name '*.php' -mmin -30 查找最近24小时修改的当前目录下的.php文件find . -name '*.php' -mtime 0 查找最近24小时修改的当前目录下的.php文件,并列出详细信息find . -name '*.inc' -mtime 0 -ls 查找当前目录下,最近24-48小时修改过的常规文件。find . -type f -mtime 1 查找当前目录下,最近1天前修改过的常规文件。find . -type f -mtime +1 http://goodboy.sinaapp.com/?p=118 2、 3、echo echo打印带颜色字体 echo显示带颜色,需要使用参数-e 格式如下: echo -e "\033[字背景颜色;文字颜色m字符串\033[0m" 例如: echo -e "\033[41;37m TonyZhang \033[0m" 其中41的位置代表底色, 37的位置是代表字的颜色 注: 1、字背景颜色和文字颜色之间是英文的“""” 2、文字颜色后面有个m 3、字符串前后可以没有空格,如果有的话,输出也是同样有空格 下面看几个例子: echo -e "\033[30m 黑色字 \033[0m" echo -e "\033[31m 红色字 \033[0m" echo -e "\033[32m 绿色字 \033[0m" echo -e "\033[33m 黄色字 \033[0m" echo -e "\033[34m 蓝色字 \033[0m" echo -e "\033[35m 紫色字 \033[0m" echo -e "\033[36m 天蓝字 \033[0m" echo -e "\033[37m 白色字 \033[0m" echo -e "\033[40;37m 黑底白字 \033[0m" echo -e "\033[41;37m 红底白字 \033[0m" echo -e "\033[42;37m 绿底白字 \033[0m" echo -e "\033[43;37m 黄底白字 \033[0m" echo -e "\033[44;37m 蓝底白字 \033[0m" echo -e "\033[45;37m 紫底白字 \033[0m" echo -e "\033[46;37m 天蓝底白字 \033[0m" echo -e "\033[47;30m 白底黑字 \033[0m" 控制选项说明 : \33[0m 关闭所有属性 \33[1m 设置高亮度 \33[4m 下划线 \33[5m 闪烁 \33[7m 反显 \33[8m 消隐 \33[30m -- \33[37m 设置前景色 \33[40m -- \33[47m 设置背景色 \33[nA 光标上移n行 \33[nB 光标下移n行 \33[nC 光标右移n行 \33[nD 光标左移n行 \33[y;xH设置光标位置 \33[2J 清屏 \33[K 清除从光标到行尾的内容 \33[s 保存光标位置 \33[u 恢复光标位置 \33[?25l 隐藏光标 \33[?25h 显示光标 eg:终端打印出白底红字 echo -e “\033[47;31m 带显示字符串 \033[0m” 4、cat: 多个文件或标准输入联系起来送给标准输出 1.1、cat 显示文件连接文件内容的工具; cat 是一个文本文件查看和连接工具。查看一个文件的内容,用cat比较简单,就是cat 后面直接接文件名。 比如: de>[root@localhost ~]# cat /etc/fstabde> 为了便于新手弟兄灵活掌握这个工具,我们多说一点常用的参数; 1.0 cat 语法结构; de>cat [选项] [文件]...de> 选项-A, --show-all 等价于 -vET-b, --number-nonblank 对非空输出行编号-e 等价于 -vE-E, --show-ends 在每行结束处显示 $-n, --number 对输出的所有行编号-s, --squeeze-blank 不输出多行空行-t 与 -vT 等价-T, --show-tabs 将跳 字符显示为 ^I-u (被忽略)-v, --show-nonprinting 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外--help 显示此帮助信息并离开 1.1 cat 查看文件内容实例; de>[root@localhost ~]# cat /etc/profile 注:查看/etc/目录下的profile文件内容;[root@localhost ~]# cat -b /etc/fstab 注:查看/etc/目录下的profile内容,并且对非空白行进行编号,行号从1开始;[root@localhost ~]# cat -n /etc/profile 注:对/etc目录中的profile的所有的行(包括空白行)进行编号输出显示;[root@localhost ~]# cat -E /etc/profile 注:查看/etc/下的profile内容,并且在每行的结尾处附加$符号;de> cat 加参数-n 和nl工具差不多,文件内容输出的同时,都会在每行前面加上行号; de>[root@localhost ~]# cat -n /etc/profile[root@localhost ~]# nl /etc/profilede> cat 可以同时显示多个文件的内容,比如我们可以在一个cat命令上同时显示两个文件的内容; de>[root@localhost ~]# cat /etc/fstab /etc/profilede> cat 对于内容极大的文件来说,可以通过管道|传送到more 工具,然后一页一页的查看; de>[root@localhost ~]# cat /etc/fstab /etc/profile | morede> 1.2、cat 的创建、连接文件功能实例; cat 有创建文件的功能,创建文件后,要以EOF或STOP结束; de>[root@localhost ~]# cat > Linuxsir.org.txt << EOF 注:创建Linuxsir.org.txt文件;> 我来测试 cat 创建文件,并且为文件输入内容; 注:这是为Linuxsir.org.txt文件输入内容;> 北南南北 测试; 注:这是为Linuxsir.org.txt文件输入内容;> EOF 注:退出编辑状态;[root@localhost ~]# cat Linuxsir.org.txt 注:我们查看一下Linuxsir.org.txt文件的内容;我来测试 cat 创建文件,并且为文件输入内容;北南南北 测试;de> cat 还有向已存在的文件追加内容的功能; de>[root@localhost ~]# cat Linuxsir.txt 注:查看已存在的文件Linuxsir.txt 内容;I am BeiNanNanBei From LinuxSir.Org . 注:内容行我正在为cat命令写文档[root@localhost ~]# cat >> Linuxsir.txt << EOF 注:我们向Linuxsir.txt文件追加内容;> 我来测试cat向文档追加内容的功能; 注:这是追回的内容> OK?> OK~> 北南 呈上> EOF 注:以EOF退出;[root@localhost ~]# cat Linuxsir.txt 注:查看文件内容,看是否追回成功。I am BeiNanNanBei From LinuxSir.Org .我正在为cat命令写文档我来测试cat向文档追加内容的功能; OK?OK~北南 呈上de> cat 连接多个文件的内容并且输出到一个新文件中;假设我们有sir01.txt、sir02.tx和sir03.txt ,并且内容如下; de>[root@localhost ~]# cat sir01.txt 123456i am testing[root@localhost ~]# cat sir02.txt56789BeiNan Tested[root@localhost ~]# cat sir03.txt09876Linuxsir.org testingde> 我想通过cat 把sir01.txt、sir02.txt及sir03.txt 三个文件连接在一起(也就是说把这三个文件的内容都接在一起)并输出到一个新的文件sir04.txt 中。 注意:其原理是把三个文件的内容连接起来,然后创建sir04.txt文件,并且把几个文件的内容同时写入sir04.txt中。特别值得一提的是,如果您输入到一个已经存在的sir04.txt 文件,会把sir04.txt内容清空。 de>[root@localhost ~]# cat sir01.txt sir02.txt sir03.txt > sir04.txt[root@localhost ~]# more sir04.txt123456i am testing56789BeiNan Tested09876Linuxsir.org testingde> cat 把一个或多个已存在的文件内容,追加到一个已存在的文件中 de>[root@localhost ~]# cat sir00.txtLinuxsir.org forever[root@localhost ~]# cat sir01.txt sir02.txt sir03.txt >> sir00.txt[root@localhost ~]# cat sir00.txtLinuxsir.org forever123456i am testing56789 1.3 替换文档内容行间回车为空格 echo $(cat filename) 应用意义: 在linux中,可通过: ls -l |awk ‘{print i$0}’ i=`pwd`’/’ |tee dir_path.txit 通过以上指令,可将某目录下的一级子目录(及所有文件夹)的绝对路径打印到指定的文件内,但此时在该文件内,每行只存放一个路径,及行间含有回车,此时,若想把所有路径复制给一个数组变量,则需要将回车换成空格,采用echo $(cat filename)即可实现此功能。 5、while 用途说明 while循环是Shell中常用的语法结构,它与其他编程语言中的while有些类似,只是写法有些不一样罢了。 常用格式 格式一 while 条件; do 语句 done 格式二 死循环 while true do 语句 done 格式三 死循环 while : do 语句 done 格式四 死循环 while [ 1 ] do 语句 done 格式五 死循环 while [ 0 ] do 语句 done 使用示例 示例一 Bash代码 COUNTER=0 while [ $COUNTER -lt 10 ]; do echo The counter is $COUNTER let COUNTER=COUNTER+1 done [root@jfht ~]# COUNTER=0 [root@jfht ~]# while [ $COUNTER -lt 10 ]; do > echo The counter is $COUNTER > let COUNTER=COUNTER+1 > done The counter is 0 The counter is 1 The counter is 2 The counter is 3 The counter is 4 The counter is 5 The counter is 6 The counter is 7 The counter is 8 The counter is 9 [root@jfht ~]# 这个while循环改用for循环更好些 Bash代码 for ((COUNTER=0; COUNTER<10; ++COUNTER)) do echo The counter is $COUNTER done [root@jfht ~]# for ((COUNTER=0; COUNTER<10; ++COUNTER)) > do > echo The counter is $COUNTER > done The counter is 0 The counter is 1 The counter is 2 The counter is 3 The counter is 4 The counter is 5 The counter is 6 The counter is 7 The counter is 8 The counter is 9 [root@jfht ~]# 示例二 Bash代码 while true do date sleep 1 done [root@jfht ~]# while true > do > date > sleep 1 > done 2010年 10月 10日 星期日 16:35:22 CST 2010年 10月 10日 星期日 16:35:23 CST 2010年 10月 10日 星期日 16:35:24 CST 2010年 10月 10日 星期日 16:35:25 CST 2010年 10月 10日 星期日 16:35:26 CST 2010年 10月 10日 星期日 16:35:27 CST Ctrl+C [root@jfht ~]# 示例三 读取输入 Java代码 while read line do echo $line done [root@jfht ~]# while read line > do > echo $line > done hello hello world worldCtrl+D [root@jfht ~]# 实例四 处理命令行参数 文件 while_4.sh Bash代码 #!/bin/sh usage() { echo "usage: $0 [-a] [-e ] [-f ] [-h] [-d ] [-s ] [-q] [-x ]" } while getopts ae:f:hd:s:qx: option do case "${option}" in a) ALARM="TRUE";; e) ADMIN=${OPTARG};; d) DOMAIN=${OPTARG};; f) SERVERFILE=$OPTARG;; s) WHOIS_SERVER=$OPTARG;; q) QUIET="TRUE";; x) WARNDAYS=$OPTARG;; \?) usage; exit 1;; esac done echo "ALARM=$ALARM" echo "ADMIN=$ADMIN" [root@jfht ~]# cat while_4.sh #!/bin/sh usage() { echo "usage: $0 [-a] [-e ] [-f ] [-h] [-d ] [-s ] [-q] [-x ]" } while getopts ae:f:hd:s:qx: option do case "${option}" in a) ALARM="TRUE";; e) ADMIN=${OPTARG};; d) DOMAIN=${OPTARG};; f) SERVERFILE=$OPTARG;; s) WHOIS_SERVER=$OPTARG;; q) QUIET="TRUE";; x) WARNDAYS=$OPTARG;; \?) usage; exit 1;; esac done echo "ALARM=$ALARM" echo "ADMIN=$ADMIN" [root@jfht ~]# chmod +x while_4.sh [root@jfht ~]# ./while_4.sh ALARM= ADMIN= [root@jfht ~]# ./while_4.sh -a ALARM=TRUE ADMIN= [root@jfht ~]# ./while_4.sh -e hy ALARM= ADMIN=hy [root@jfht ~]# 问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 思考 1. 为什么 while [ 0 ] 也会是死循环? 2. 怎么使用while read line从文件中读入数据? 6、tee: 读标准输入写到标准输出和指定文件中 功能说明:读取标准输入的数据,并将其内容输出成文件 1、创建一个文件保存多个副本 tee命令:创建一个文件保存多个副本 如果同时需要一个文件的多个副本,可以创建这个文件,然后把这个文件复制多个副本,但利用tee命令可以一次实现这个功能。 命令: tee [选项] [文件..] 参数: -a 如果给出的文件已经存在,则将标准输入接收的数据追加到已有文件的后面,非覆盖 -i 忽略中断信息 例: 1、接收键盘数据,并在标准输出上显示,最后保存在三个文件中 Linux@ubuntu:~$ tee file1 file2 file3 hello world Linux@ubuntu:~$ ls -l | grep file -rw-r--r-- 1 Linux Linux 12 2011-01-24 21:03 file1 -rw-r--r-- 1 Linux Linux 12 2011-01-24 21:03 file2 -rw-r--r-- 1 Linux Linux 12 2011-01-24 21:03 file3 2、显示一个文件的内容,并将其转存到另外两个文件中。 Linux@ubuntu:~$ cat file1 | tee a b What's your job? I'm a keyboard operator. Linux@ubuntu:~$ cat a b What's your job? I'm a keyboard operator. What's your job? I'm a keyboard operator. 注: tee命令存在缓冲,每1024个字节输出一次,如果从管道接收输入数据,应该是缓冲满,才将数据转存到指定的文件中,如果不到1024个字节,则接收完从标准输入设备读入的数据,刷新一次缓冲,转存数据到指定文件中。 附:Linux系统中control+d表示文件结束。windows是control+z表示文件结束。 7、wc: 打印出文件内容的行数 语法:wc [选项] 文件… 说明:该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。 该命令各选项含义如下: - c 统计字节数。 - l 统计行数。 - w 统计字数。 这些选项可以组合使用。 输出列的顺序和数目不受选项的顺序和数目的影响。 总是按下述顺序显示并且每项最多一列。 行数、字数、字节数、文件名 如果命令行中没有文件名,则输出中不出现文件名。 例如: $ wc - lcw file1 file2 4 33 file1 7 52 file2 11 11 85 total 举例 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 : 1.统计demo目录下,js文件数量: find demo/ -name "*.js" |wc -l 2.统计demo目录下所有js文件代码行数: find demo/ -name "*.js" |xargs cat|wc -l 或 wc -l `find ./ -name "*.js"`|tail -n1 3.统计demo目录下所有js文件代码行数,过滤了空行: find /demo -name "*.js" |xargs cat|grep -v ^$|wc -l 8、file 显示文件类型 eg: find ./ -type f |xargs file 显示find查找到文件的文件名及其属于哪种类型文件。 eg: file *.log 显示当前目录下的*.log文件。 9、xargs: 10、chmod: 修改文件的权限。用于改变文件或目录的访问权限.用户用它控制文件或目录的访问权限 10.1数字表示其它用户组的文件权限 Linux文件权限分为三种: 读(r=4),写(w=2),执行(x=1)。 综合起来还有可读可执行(rx=5=4+1)、可读可写(rw=6=4+2)、可读可写可执行(rwx=7=4+2+1)。 rwx=7(即二进制111-----十进制7) rw-=6(二进制110------十进制6) r-x=5(二进制101--------十进制5) -wx=3(二进制011-------十进制3) eg: 774的权限为111 111 101 即rwxrwxr-- 表示此文件夹的所有者和所有者所属的组有可读可写可执行的权限,而其他用户只有可读的权限 同理777权限就是 111 111 111 755权限就是111 101 101 查看文件所属用户: stat -c %U filename 先来了解一下文件属性, 在shell环境里输入:ls -l 可以查看当前目录文件。如: drwxr-xr-x 2 nsf users 1024 12-10 17:37 下载文件备份 分别对应的是: 文件属性 连接数 文件拥有者 所属群组 文件大小 文件修改时间 文件名 这里r是可读,w可写,x 可执行,其中文件属性分为四段,—- — — 10个位置 例如: d   rwx   r-x  r-x 第一个字符指定了文件类型。在通常意义上,一个目录也是一个文件。如果第一个字符是横线, 表示是一个非目录的文件。如果是d,表示是一个目录。 第二段是文件拥有者的属性, 第三段是文件所属群组的属性, 第四段是对于其它用户的属性, 如上面文件夹“下载文件备份” 的访问权限,表示文件夹“下载文件备份” 是一个目录文件;文件夹“下载文件备份” 的属主有读写可执行权限;与文件夹“下载文件备份” 属主同组的用户只有读和可执行权限;其他用户也有读和可执行权限。 确定了一个文件的访问权限后,用户可以利用Linux系统提供的chmod命令来重新设定不同的访问权限。也可以利用chown命令来更改某个文件或目录的所有者。利用chgrp命令来更改某个文件或目录的用户组。 语法:该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。 1. 文字设定法 chmod [who] [+ | - | =] [mode] 文件名? 参数: 操作对象who可是下述字母中的任一个或者它们的组合: u 表示“用户(user)”,即文件或目录的所有者。 g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。 o 表示“其他(others)用户”。 a 表示“所有(all)用户”。它是系统默认值。 操作符号可以是: + 添加某个权限。 - 取消某个权限。 = 赋予给定权限并取消其他所有权限(如果有的话)。 设置mode所表示的权限可用下述字母的任意组合: r 可读。 w 可写。 x 可执行。 X 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。 s 在文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用         户ID位,“g+s”设置组ID位。 t 保存程序的文本到交换设备上。 u 与文件属主拥有一样的权限。 g 与和文件属主同组的用户拥有一样的权限。 o 与其他用户拥有一样的权限。 文件名:以空格分开的要改变权限的文件列表,支持通配符。 在一个命令行中可给出多个权限方式,其间用逗号隔开。例如:chmod g+r,o+r example 使同组和其他用户对文件example 有读权限。 chgrp命令 功能:改变文件或目录所属的组。 语法:chgrp [选项] group filename? 该命令改变指定指定文件所属的用户组。其中group可以是用户组ID,也可以是/etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列表,支持通配符。如果用户不是该文件的属主或超级用户,则不能改变该文件的组。 参数: - R 递归式地改变指定目录及其下的所有子目录和文件的属组。 例1: $ chgrp - R book /opt/local /book 改变/opt/local /book/及其子目录下的所有文件的属组为book。 chown 命令 功能:
本文档为【Linux+shell命令及操作】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_927453
暂无简介~
格式:doc
大小:228KB
软件:Word
页数:39
分类:互联网
上传时间:2014-03-28
浏览量:19