Linux Command

http://bblove1234.blog.ubuntu.org.cn/category/linux-实践记录/

Diff 创建软件补丁,用patch 打补丁

归类于:  UNIX SHELL 日志 — harry199 @ 12:51 pm

diff 是生成源码补丁的必备工具。其命令格式为:
diff [命令行选项] 原始文档 新文档
常用命令行选项如下:
-r 递归处理目录     -u 输出统一格式(unified format)
-N patch 里包含新文档  -a patch 里能够包含二进制文档
他的输出在stdout 上,所以您可能需要把他重定向到一个文档。
输出格式保存了上下文(缺省是上下各三行,最少需要两行),这样,patch 的时候能够允许行号不精确匹配的情况出现。另外,在 patch 文档的开头明确地用—和+++标示出原始文档和当前文档,也方便阅读。
通常,我们需要对整个软件包做修改,并生成一个patch 文档,下面是典型的操作过程。
tar xzvf software.tar.gz # 展开原始软件包, 其目录为
software
cp -a software software-orig # 做个修改前的备份
cd software   [修改,测试……]
cd ..
diff -ruNa software-orig software > software-my.patch
现在我们就能够保存software-my.patch 做为这次修改的结果,至于原始软件包,能够不必保存。等到下次需要再修改的时候,能够用patch 命令把这个补丁打进原始包,再继续工作。比如是在linux kernel 上做的工作,就不必每次保存几十兆修改后的源码了。这是好处之一,好处之二是维护方便,由于unified patch 格式有一定的模糊匹配能力,能减少原软件包升级带来的维护工作量。
patch
patch 程式根据补丁(patch)文档修改一个文档。补丁文档通常是使用diff 程式建立的一个列表,这个列表包含如何修改原始文档的一些指令。由于节省时间和空间,Patch 经常用于源代码的修补。能够想象一个有1MB 的程式包,这个程式包的下一个版本仅仅改变了前面一个版本的两个文档的内容,这个新版本能够完全以一个1MB 的新版本进行发布或以一个仅仅有1KB 的补丁文档进行发布。这个补丁文档能够对第一个版本的进行更新,更新后的版本就和第二个版本完全一致了。因此,假如已下载了第一个版本,那么为了下一个版本而进行的大数据量下载工作就能够有效地避免。
常用命令行选项;
patch [命令行选项] [待patch 的文档[patch]]
-pn patch level(n 是数字) -b[后缀] 生成备份,缺省是.orig 为了说明什么是patch level,这里看一个patch 文档的头标记。
diff -ruNa xc.orig/config/cf/Imake.cf xc.bsd/config/cf/Imake.cf
— xc.orig/config/cf/Imake.cf Fri Jul 30 12:45:47 1999   +++ xc.new/config/cf/Imake.cf Fri Jan 21 13:48:44 2000
这个patch 假如直接应用,他会去找xc.orig/config/cf 目录下的Imake.cf 文档,假如您的源码树的根目录是缺省的xc 而不是 xc.orig,除了mv xc xc.orig 之外,有无简单的方法应用此patch 呢?patch level 就是为此而设:patch 会把目标路径名砍去开头 patch level 个节(由/分开的部分)。在本例中,能够用下述命令:
cd xc;
patch -p1 patch20020523.patch
递归的比较目录 dir1 和 dir2 内,任何各文档之不同处,并将不同处记录到patch20020523.patch 文档中。
patch -p1

2008-06-04

Vlinux_Windows下的shell子集(方便与日常文本处理)

归类于:  LINUX 实践记录 — harry199 @ 11:21 am

结合cygwin制作出的Vlinux小工具

包含有常用linux命令,awk、grep等正则表达式的相关处理功能

Windows的设定:

环境变量上添加Vlinux的解压路径后,

即可在cmd命令行上使用 ~

FIND 命令详解

归类于:  LINUX 实践记录,  UNIX SHELL 日志 — harry199 @ 11:04 am

find  path  -option  [  -print ]  [ -exec  -ok  command ]  {} /;
#-print 将查找到的文件输出到标准输出
#-exec  command  {} /;     —–将查到的文件执行command操作,{} 和 /;之间有空格
#-ok 和-exec相同,只不过在操作前要询用户

====================================================

-name  filename             #查找名为filename的文件
-perm                       #按执行权限来查找
-user   username            #按文件属主来查找
-group groupname            #按组来查找
-mtime  -n +n               #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime   -n +n              #按文件访问时间来查
-perm                       #按执行权限来查找
-user   username            #按文件属主来查找
-group groupname            #按组来查找
-mtime  -n +n               #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime   -n +n              #次募梦适奔淅床檎椅募?n指n天以内,+n指n天以前
-ctime   -n +n              #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup                    #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                     #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer  f1 !f2              找文件,-n指n天以内,+n指n天以前
-ctime   -n +n              #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup                    #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                     #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer  f1 !f2              #查更改时间比f1新但比f2旧的文件
-type    b/d/c/p/l/f        #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size     n[c]              #查长度为n块[或n字节]的文件
-depth                      #使查找在进入子目录前先行查找完本目录
-fstype                     #查更改时间比f1新但比f2旧的文件
-type    b/d/c/p/l/f        #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size     n[c]              #查长度为n块[或n字节]的文件
-depth                      #使查找在进入子目录前先行查找完本目录
-fstype                     #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount                      #查文件时不跨越文件系统mount点
-follow                     #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio                     #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount                      #查文件时不跨越文件系统mount点
-follow                     #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio                       #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune                      #忽略某个目录

====================================================
$find  ~  -name  “*.txt”  -print    #在$HOME中查.txt文件并显示
$find  .   -name  “*.txt”  -print
$find  .   -name  “[A-Z]*”  -pri26nbsp;   #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune                              #忽略某个目录

=====================================================
$find  ~  -name  “*.txt”  -print    #在$HOME中查.txt文件并显示
$find  .   -name  “*.txt”  -print
$find  .   -name  “[A-Z]*”  -print  #查以大写字母开头的文件
$find  /etc  -name  “host*”  -print #查以host开头的文件
$find  .  -name  “[a-z][a-z][0--9][0--9].txt”   -print  #查以两个小写字母和两个数字开头的txt文件
$find .  -perm  755  -print
$find  .  -perm -007  -exec ls -l {} /;  #查所有用户都可读写执行的文件同-perm 777
$find  . -type d  -print
$find  .  !  -type  d  -print
$find  .  -type l  -print

$find  .  -size  +1000000c  -print       #查长度大于1Mb的文件
$find  .  -size  100c        -print      # 查长度为100c的文件
$find  .  -size  +10  -print             #查长度超过期作废10块的文件(1块=512字节)

$cd /
$find  etc  home  apps   -depth  -print  | cpio  -ivcdC65536  -o  /dev/rmt0
$find  /etc -name “passwd*”  -exec grep  “cnscn”  {}  /;  #看是否存在cnscn用户
$find . -name “yao*”  | xargs file
$find  . -name “yao*”  |  xargs  echo   “” > /tmp/core.log
$find  . -name “yao*”  | xargs  chmod  o-w

======================================================

find  -name april*                      在当前目录下查找以april开始的文件
find  -name  april*  fprint file        在当前目录下查找以april开始的文件,并把结果输出到file中
find  -name ap* -o -name may*  查找以ap或may开头的文件
find  /mnt  -name tom.txt  -ftype vfat  在/mnt下查找名称为tom.txt且文件系统类型为vfat的文件
find  /mnt  -name t.txt ! -ftype vfat   在/mnt下查找名称为tom.txt且文件系统类型不为vfat的文件
find  /tmp  -name wa* -type l           在/tmp下查找名为wa开头且类型为符号链接的文件
find  /home  -mtime  -2                 在/home下查最近两天内改动过的文件
find /home   -atime -1                  查1天之内被存取过的文件
find /home -mmin   +60                  在/home下查60分钟前改动过的文件
find /home  -amin  +30                  查最近30分钟前被存取过的文件
find /home  -newer  tmp.txt             在/home下查更新时间比tmp.txt近的文件或目录
find /home  -anewer  tmp.txt            在/home下查存取时间比tmp.txt近的文件或目录
find  /home  -used  -2                  列出文件或目录被改动过之后,在2日内被存取过的文件或目录
find  /home  -user cnscn                列出/home目录内属于用户cnscn的文件或目录
find  /home  -uid  +501                 列出/home目录内用户的识别码大于501的文件或目录
find  /home  -group  cnscn              列出/home内组为cnscn的文件或目录
find  /home  -gid 501                   列出/home内组id为501的文件或目录
find  /home  -nouser                    列出/home内不属于本地用户的文件或目录
find  /home  -nogroup                   列出/home内不属于本地组的文件或目录
find  /home   -name tmp.txt   -maxdepth  4  列出/home内的tmp.txt 查时深度最多为3层
find  /home  -name tmp.txt  -mindepth  3  从第2层开始查
find  /home  -empty                     查找大小为0的文件或空目录
find  /home  -size  +512k               查大于512k的文件
find  /home  -size  -512k               查小于512k的文件
find  /home  -links  +2                 查硬连接数大于2的文件或目录
find  /home  -perm  0700                查权限为700的文件或目录
find  /tmp  -name tmp.txt  -exec cat {} /;
find  /tmp  -name  tmp.txt  -ok  rm {} /;

find   /  -amin   -10       # 查找在系统中最后10分钟访问的文件
find   /  -atime  -2         # 查找在系统中最后48小时访问的文件
find   /  -empty              # 查找在系统中为空的文件或者文件夹
find   /  -group  cat        # 查找在系统中属于 groupcat的文件
find   /  -mmin  -5         # 查找在系统中最后5分钟里修改过的文件
find   /  -mtime  -1        #查找在系统中最后24小时里修改过的文件
find   /  -nouser             #查找在系统中属于作废用户的文件
find   /  -user   fred       #查找在系统中属于FRED这个用户的文件

查当前目录下的所有普通文件
——————————————————————————–

# find . -type f -exec ls -l {} /;
-rw-r–r–    1 root     root        34928 2003-02-25  ./conf/httpd.conf
-rw-r–r–    1 root     root        12959 2003-02-25  ./conf/magic
-rw-r–r–    1 root     root          180 2003-02-25  ./conf.d/README
查当前目录下的所有普通文件,并在- e x e c选项中使用ls -l命令将它们列出

=================================================
在/ l o g s目录中查找更改时间在5日以前的文件并删除它们:
$ find logs -type f -mtime +5 -exec  -ok  rm {} /;

=================================================
查询当天修改过的文件
[root@book class]# find  ./  -mtime  -1  -type f  -exec  ls -l  {} /;

=================================================
查询文件并询问是否要显示
[root@book class]# find  ./  -mtime  -1  -type f  -ok  ls -l  {} /;
< ls … ./classDB.inc.php > ? y
-rw-r–r–    1 cnscn    cnscn       13709  1月 12 12:22 ./classDB.inc.php
[root@book class]# find  ./  -mtime  -1  -type f  -ok  ls -l  {} /;
< ls … ./classDB.inc.php > ? n
[root@book class]#

=================================================
查询并交给awk去处理
[root@book class]# who  |  awk  ‘{print $1″/t”$2}’
cnscn   pts/0

=================================================
awk—grep—sed

[root@book class]# df  -k |  awk ‘{print $1}’ |  grep  -v  ‘none’ |  sed  s”///dev////g”
文件系统
sda2
sda1
[root@book class]# df  -k |  awk ‘{print $1}’ |  grep  -v  ‘none’
文件系统
/dev/sda2
/dev/sda1

1)在/tmp中查找所有的*.h,并在这些文件中查找“SYSCALL_VECTOR”,最后打印出所有包含”SYSCALL_VECTOR”的文件名

A) find  /tmp  -name  “*.h”  | xargs  -n50  grep SYSCALL_VECTOR
B) grep  SYSCALL_VECTOR  /tmp/*.h | cut   -d’:'  -f1| uniq > filename
C) find  /tmp  -name “*.h”  -exec grep “SYSCALL_VECTOR”  {}  /; -print

2)find / -name filename -exec rm -rf {} /;
find / -name filename -ok rm -rf {} /;

3)比如要查找磁盘中大于3M的文件:
find . -size +3000k -exec ls -ld {} ;

4)将find出来的东西拷到另一个地方
find *.c -exec cp ‘{}’ /tmp ‘;’

如果有特殊文件,可以用cpio,也可以用这样的语法:
find dir -name filename -print | cpio -pdv newdir

6)查找2004-11-30 16:36:37时更改过的文件
# A=`find ./ -name “*php”` |  ls -l –full-time $A 2>/dev/null | grep “2004-11-30 16:36:37″

SHELL脚本编程,常用命令说明

归类于:  LINUX 实践记录,  UNIX SHELL 日志 — harry199 @ 9:50 am

shell中命令行的常用用法

shell执行选项
-n 测试shell script语法结构,只读取shell script但不执行
-x 进入跟踪方式,显示所执行的每一条命令,用于调度
-a Tag all variables for eXPort
-c “string” 从strings中读取命令
-e 非交互方式
-f 关闭shell文件名产生功能
-h locate and remember functions as defind
-i 交互方式
-k 从环境变量中读取命令的参数
-r 限制方式
-s 从标准输入读取命令
-t 执行命令后退出(shell exits)
-u 在替换中如使用未定义变量为错误
-v verbose,显示shell输入行

/************************************************************************************ CMD 代表在shell中以命令行模式执行的shell语法
LANG 代表在shell中的基本shell语法及其用法
TT 代表shell编程中的特殊情况,及其使用方式
/************************************************************************************

#!/bin/ksh shell的 Linux下脚本语言的解释器(用来说明当前的脚本语言类型)

特殊用法 ^代表行首 $代表结尾

CMD——date得用法: DATE=’date +”%m/%d %T”‘
date +”%m/%d %T”
date +”%y%m%d%H%M”
date +%Y%m%d-%H%M%S
LastExecTime=`date -d “$1 $2″ +”%s”`
LastExecTime=`expr $LastExecTime – 60 /* 5`
date -d “2008/12/12″ OR date -d “2008-12-12″ 显示字符串的内容而不是NOW当前的时间
%s Displays the number of seconds since January 1, 1970, Coordinated Universal Time (CUT).//

CMD——touch 的用法 -a access time 设定访问时间
-m modify time 设定修改时间
touch -m -t 09021130 test.txt 以当年为时间,设置修改时间为09/02 11:30
qoo@pdm20111[/work/qoo/tmp/wangj]touch -m -t 0602011130 deltmp.sh
qoo@pdm20111[/work/qoo/tmp/wangj]l
-rwxr-xr-x 1 qoo qoo 53 Feb 01 2006 deltmp.sh*

CMD——管道得用法 ps -ef | grep “PDDB”$TARGET”.exec” | grep -v grep | awk ‘{print $2}’`(对指定的进程进行输出及查询)

CMD——cut的用法 cut -d 指定与空格和tab键不同的域分隔符。
cut -d’:’ -f1 抽出以‘:’为分隔符的第一个域中的内容
cut -b18- 将文件中每行第18以后字符全部剪出
cut -b18 只剪出每行的第18个字符
- c用来指定剪切范围,如下所示:
- c 1,5-7 剪切第1个字符,然后是第5到第7个字符。
-c1-50 剪切前5 0个字符。

CMD——uniq的用法 grep SYSCALL_VECTOR /tmp/*.h | cut -d’:’ -f1| uniq > filename
在这里uniq去除重复的行文本
-c 打印每一重复行的重复次数
uniq -u输出唯一行 -d 输出重复行

CMD——tr ” ” “/n” 将空格换成/n

CMD——特殊赋值 kill -USR1 `cat $DIR_WORK/PDDB”$t”.exec.pid`(通过cat命令获取文件ID并传参给kill)

CMD——find的用法 find . -name “*.java” -type f -print |xargs grep “BBBB” /dev/null
-type f 为指定按照正则表达式的方式进行搜索
find . -type f -exec ls -l {} /;
exec选项后面跟随着所要执行的命令,然后是一对儿{ },一个空格和一个/,最后是一个分号;
find /logs -type f -mtime +5 -exec rm {} /;为了在/logs目录中查找更改时间在5日以前的文件并删除它们;
find . -name system -prune -o -name “*.txt” -type f -print | grep -v “FAILURE_NOTICE.txt” 忽略system目录,查找当前目录下txt文件,排除其中的”FAILURE_NOTICE.txt”

CMD——rsh的用法 rsh host -l username 在远程主机上登陆shell并执行命令
# rsh $clm -l $cluser /usr/local/bin/mvs-ftp -i $tmp1 -o $tmp2
# rsh $clm -l $cluser chmod 666 $tmp2

CMD——ssh的用法 在执行 sshd 之前可以指定它的 port,例如:sshd –p 999
若有安装 SSL,可以指定 SSL 的 port 443,例如:sshd –p 443
这样就可以经过 SSL 及 SSH 双重的保护,但必须去指明使用的 port
ssh –l user –p 443 mouse.oit.edu.tw 才行,若不指明则仍然使用预设的port 22

CMD——expr的用法 用来计算的  $var=expr $var + 1

LANG——路径变量的赋值 STD=”/prod/qoo” (注意双引号的作用,亦可不用)
LANG——引用变量 $STD(使用$符加变量名的方式)
LANG——文件包含: . /prod/qoo/run/etc/SONYBIN.def (注意点后有个空格,后面既是所要包含的文件全路径)
LANG——参数的用法 [ ! -d $DIR_WORK ] 以此为例进行说明类似的还有
-d 确认文件夹是否存在
-f 具有强制的作用,亦可用来判定文件的存在(不太确定?)普通文件
-t 指定为交互模式
-L 符号连接
-z 测试变量是否为空 -z $VAR 当变量为空是 条件为真
-w 文件可写
-r 文件可读
-s 文件长度大于0、非空
-x 可执行
-eq 等于
-e 测试文件是否存在
-z 空串。
-n 非空串。
LANG——FOR得用法 for TARGET in 0700 (将0700赋予TARGET进行循环,以此类推)
do
done
LANG——if 得用法 if[ ]; then
do something
fi
LANG——wc的用法 wc 几行匹配,有多少个字,这些字占用多少字节的空间
-c 有多少个字
-l 只显示包含匹配字符的行号
-w
LANG——expr index=`expr $index + 1 ` 逻辑运算符 即index=index+1

LANG——cat的特殊用法 cat -v filename //查看文件中的特殊字符
cat -b /etc/named.conf // -b 只能对非空白行进行编号 -n 可以对所有行进行编号

TT——$$ 获取当前进程号 PID=$$;export PID ($$为当前的进程ID,通过export关键字将进程ID导入环境变量)

TT——读文件操作 `cat $ResultFile | awk ‘{print $1}’ | sort -u` 从目标$ResultFile文件中读取数据,输出第一个域,并去掉多余行

TT——读文件的另一种方法 while read LINE
do
echo “$LINE”
:
done <$FILENAME

TT——#@ 传参 if [[ ${#@} /dev/null 2>&1 &

TT——命令的赋值 使用数字键 1 左边的键码将命令括起来 如:`ls` ,通过此法可获取命令行的输出数据

TT——字符串拼串 STSFILE=STA*.txt ,如左边所示:将任意形式的变量或字符组合在一起

TT—— more PDE50K | more 另一种JOB执行方式,它可以将执行的信息全部的输出来,并分屏显示

TT—— let 的用法 let "cun=cun-400" // 执行该条语句

TT—— -mtime n File's data was last modified n*24 hours ago 最后修改时间为N天前的文件数据

TT—— java -cp -classpath ${JAVA_HOME}/java -Xmx128m -cp ${CLASSPATH} ${JOB} $1 >> $LogFile
将JAVA的classpath加入环境搜索路径
#java -cp -classpath //set search path for application class and resources
java -X #-X print help on non-standard options

----------------------------------------------------------------------------------------------------------------
#
# AWK COMMAND SHELL中正则表达式之AWK命令
#
----------------------------------------------------------------------------------------------------------------

awk '{print $3,$2}' 抽出第二和第三列中的内容,常配合如下用法 grep ls cat等等
ps -ef | awk '{print $3,$2}'

awk -v tms=$file -v表示为变量分配一个值

ll | grep haha*.txt | awk '{print $3,$2}'
awk '{split(s,a,fs)}' 在fs上将s分成序列a
如awk 'BEGIN {print split("123#456#678",myarray,"#")}'
以#为分隔符将字符串划分成myarray数组
awk -F, '{print $1 "," $3 }' 以,号为分隔符提取字段 或awk -F',' '{print $1 "," $3 }'

CMD——AWK内置的字符串函数的用法
/******************************************************************
gsub(r,s) 在整个$ 0中用s替代r
gsub(r,s,t) 在整个t中用s替代r
index(s,t) 返回s中字符串t的第一位置
length(s) 返回s长度
match(s,r) 测试s是否包含匹配r的字符串
split(s,a,fs) 在fs上将s分成序列a
sprint(fmt,exp) 返回经fmt格式化后的exp
sub(r,s) 用$0中最左边最长的子串代替s
substr(s,p) 返回字符串s中从p开始的后缀部分
substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分
******************************************************************/

----------------------------------------------------------------------------------------------------------------

关于文件描述符的説明

----------------------------------------------------------------------------------------------------------------

默认情况下始终有3个"文件"处于打开状态, stdin (键盘), stdout (屏幕), and stderr (错误消息输出到屏幕上).
exec 3< $g_tmp1 打开文件$g_tmp1并为其分配描述符 3
exec <filename 命令会将stdin重定向到文件中. 从这句开始, 后边的输入就都来自于这个文件了, 而不是标准输入了(通常都是键盘输入).

exec 3' date.file

shell中SED命令的用法一 -n 整个文件都打印出来,并且匹配行打印了行号。如果只关心实际行号,使用- e选项。
shell中SED命令的用法二 sed -e 's:%host%:'$hostname':' -e 's:%userid%:'$userid':' -e 's:%passwd%:'$passwd':'
-e 's:%ipaddress%:'$ipaddress':' -e 's:%cluser%:'$cluser':' -e 's:%clpasswd%:'$clpasswd':'
-e 's:%clfile%:'$clfile':' -e 's:%hostfile%:'$hostfile':' -e 's:%hostjcl%:'$hostjcl':'
-e 's:%timeout%:'$timeout':' $template > $tmp1
date >> $G_DATAFILE
以上中 将%host% 替换成$hostname 并送到标准输出 (完成字符串的替换)

----------------------------------------------------------------------------------------------------------------

TEST COMMAND命令的用法 在bash和pdksh环境中,test命令用来测试条件表达式

----------------------------------------------------------------------------------------------------------------
其用法如下:
test expression
test命令可以和多种系统运算符一起使用。这些运算符可以分为四类:整数运算符、字符串运算符、文件运算符和逻辑运算符

1) 整数运算符
int1 -eq int2 如果int1 和int2相等,则返回真。
int1 -ge int2 如果int1 大于等于int2,则返回真。
int1 -gt int2 如果int1 大于int2,返回真。
int1 -le int2 如果int 1小于等于int 2,则返回真。
int1 -lt int2 如果int 1小于int2,则返回真。
int1 -ne int2 如果int1 不等于int2,则返回真。
2) 字符串运算符
str1 = str2 如果str1 和str2相同,则返回真。
str1 != str2 如果str1 和str2不相同,则返回真。
-n str 如果str 的长度大于零,则返回真。
-z str 如果str 的长度等于零,则返回真。
3) 文件运算符
-d filename 如果filename 为目录,则返回真。
-f filename 如果filename 为普通的文件,则返回真。
-r filename 如果filename 可读,则返回真。
-s filename 如果filename 的长度大于零,则返回真。
-w filename 如果filename 可写,则返回真。
-x filename 如果filename 可执行,则返回真。
4) 逻辑运算符
! expr 如果expr 为假,则返回真。
expr1 -a expr2 如果expr1 和expr2同时为真,则返回真。
expr1 -o expr2 如果expr1 或expr2有一个为真,则返回真。

tcsh中没有test命令,但它同样支持表达式。tcsh支持的表达式形式基本上和C语言一样。
这些表达式大多数用在if和while命令中。

----------------------------------------------------------------------------------------------------------------

COMM COMMAND 説明

----------------------------------------------------------------------------------------------------------------

如果想对两个有序的文件进行比较,可以使用comm命令。

语法:comm [- 123 ] file1 file2

说明:该命令是对两个已经排好序的文件进行比较。其中file1和file2是已排序的文件。comm读取这两个文件,然后生成三列输出:仅在file1中出现的行;仅在file2中出现的行;在两个文件中都存在的行。如果文件名用”- “,则表

示从标准输入读取。

选项1、2或3抑制相应的列显示。例如
comm – 12就只显示在两个文件中都存在的行;
comm – 23只显示在第一个文件中出现而未在第二个文件中出现的行;
comm – 123则什么也不显示。

—————————————————————————————————————-

MVS-FTP COMMAND 説明

—————————————————————————————————————-
ftp -i -n 这意味着不要自动登录,而是关闭交互模式。这使得脚本可以使用user命令进行登录
-v 表示禁止远程服务器回应
ftp -i -n -v 43.17.42.25 <<EOF
user padics padics

ftp -i -n $DEST_HEST<<FTPIT
user anonymous $USER@$THISHOST

—————————————————————————————————————-

用SHELL匹配正则表达式 举例説明

—————————————————————————————————————-
[0-2][0-4]/{2/}/.[0-2][0-4]/{2/}/.[0-2][0-4]/{2/} // this is a ipadress regular by bash shell

RECORD=`echo $LINE | awk ‘ { if($6~/GET/ && $7~/’”$DMZ_SERVER”‘/ && $7~//_/) printf(”%s”,$4) }’ ` //其中~代表匹配正则表达式,~其后要紧跟正则表达式

2008-01-09

SHELL 文件操作

归类于:  LINUX 实践记录 — harry199 @ 4:56 pm

读取并修改文件最后一行内容

old=hehe.txt
new=haha.txt

line=`cat -n hehe.txt | awk ‘{print $1}’ | tail -1`  //输出文件行号

$line=expr $line – 1  //排除文件最后一行

out=`head -$line  hehe.txt` >haha.txt //将修改后的内容写入临时文件中

echo “new test word” >>haha.txt //追加上最后一行

的新内容

rm $old
mv $new $old  //更换成原来的文件名

2008-01-08

shell 查询并删除相关文件

归类于:  LINUX 实践记录 — harry199 @ 4:21 pm

UNIX_AIX SHELL

本脚本用于删除指定目录下的过期文件,并保留特定文件
过程分为三步:
1. find命令 查找所要求的 txt 普通文件
2. 可用 xargs ls -l 来将结果以列表形式输出,并对输出列表中的内容进行排查 如:grep -v “FAILURE_NOTICE.txt”
其中 grep -v “./system/” 用来排查不需要处理的路径
3. 最后通过系统调用 xargs 或 -exec 来执行删除操作

find . -name “*txt” -type f -print | xargs ls -l | grep -v “FAILURE_NOTICE.txt” | grep -v system | awk ‘{print $9}’ | xargs rm -rf

find . -name “*txt” -type f -print | grep -v “FAILURE_NOTICE.txt” | grep -v “./system/” | xargs rm -rf

注:KSH上的以上操作为

 find . -name system -prune -o -name “*.txt” -type f -print | grep -v “FAILURE_NOTICE.txt”

详细内容请参考附件

2007-12-11

redhat 9 分辨率的调节

归类于:  LINUX 实践记录 — harry199 @ 8:22 pm

IBM R32 笔记本安装 Redhat 9 出现 屏幕分辨率为800×600 而不能调节的问题。
经过调查及实践,现将解决办法整理如下:
1. 为了便于操作,ROOT 图形界面,在 /etc/X11/XF86Config 目录或 /etc/XF86config 目录下找到 XF86config,用 Vi 打开,便于编辑.
  Section “Monitor”
  Identifier “Monitor0″
  VendorName “Monitor Vendor”
  ModelName “未探测过的显示器”
  HorizSync 31.5 – 37.9
  VertRefresh 48.0 – 65.0
  Option “dpms”
EndSection

Section “Device”
  Identifier “Videocard0″
  Driver “radeon”
  VendorName “Videocard vendor”
  BoardName “ATI Radeon Mobility M6″
  VideoRam 16384
EndSection

Section “Screen”
  Identifier “Screen0″
  Device “Videocard0″
  Monitor “Monitor0″
  DefaultDepth 24
  SubSection “Display”
  Depth 24
  Modes “800*600″ “600*480″
  EndSubSection
EndSection

将上面的800*600 600*480,改成”1024×768″ “800×600″,保存退出。
2. 使用 redhat-config-xfree86 命令
运行 #redhat-config-xfree86 linux系统将自动检测显示器并保存配置
我正是应用此命令完成了我的IBM本本设定!!!!

你可能感兴趣的:(Linux Command)