Liunx命令学习
1,乱码的问题
我自己在实际情况中经常遇到,应vi打开文本文件的时候,有乱码。
进用户的目录后执行:
setenv LANG.zh_CN.GBK
2,查看linux版本
lsb_release -a
3,进目录,出目录,是经常的事情,有时候还需要同来回查看多个目录下的文件。
两个命令挺有用的:
cd - #返回上次目录 cd ~ #进到本用户的更目录
4,查看本用户的shell模式
有时候需要查看现在使用的是csh还是bsh,影响到shell脚本的编写和运行:
echo $shell
5,查看进程占cpu情况
top top -d 3 #每3秒刷新一次
6,给文件以当前用户执行的权限
chmod +x License.sh
7,查看链接操作服务器的登录状况:
who #显示连接服务器的所有连接 who am i #显示登录时用户信息 whoami #显示当前用户信息
8,利用通配符查找文件
find ./ -name "*.class" #查找本目录下的全部class文件
9,在所有文件中查找一段字符串
find ./log/ -name "*" | xargs grep "ERROR" #查出./log/文件加下所有文件中带有“ERROR”字符串的行
10,查询带有某个字符串的进程(可以得到进程的信息,包括进程号)
ps -ef | grep tomcat
11,根据进程号杀掉进程
kill -9 1234 #杀掉1234进程
12,判断用户是否存在
id -u tomcat #判断tomcat用户是否存在
13,查出谁在使用这个文件
lsof ./tomcat/
14,强制删除文件
rm -rf file
15,copy文件
cp -rf /home/apache-tomcat-6.0.35/bin/startup.sh /home/ cp -rf /home/apache-tomcat-6.0.35/bin/. /home/ #copy bin下全部文件
16,cat命令:
一次显示整个文件
cat filename
显示行号的话
cat -n flename
将几个文件合并为一个文件
cat file1 file2 > file3
假设我们配置文件是如下的格式:
name=orcal password=nanjing
在shell脚本里想取值的话:
name=`cat file | grep name | awk -F '=' '{print $2}'`
17,用sed做一些配置文件替代的操作
把"defaultCluster"替换成$cluster变量
sed -i 's/defaultCluster/'$cluster'/g' /home/conf/cluster.xml
以下是文件夹下全局替换,这个我觉得用到多文件的修改场景很适合,把10.127.10.88替换成$local_ip变量
find /home/map/ms/conf -type f | xargs -n | sed -i 's/10.127.10.88/'$local_ip'/g'
以上是对转个字符串的替换,需要文件中有defaultCluster,10.127.10.88这样的字符串,才能替换。
考虑到一半会使用xml文件来作为项目的配置文件,所以我觉得使用匹配的方式去替换比较好
sed -i 's/svrid/' $svr_id '/g' /config.xml 改写成: sed -i 's/.*\<svr_id>.*/\t\<svr_id>'${svr_id}'<\/svr_id>/' /config.xml
如此就不需要保证config.xml的<svr_id>字段内容是svrid就可以替换了,说明:其中的\t是用来缩进的
其他的替换方式:
比如配置文件内容:
... <x> <enable>0</enable> <ip>0.0.0.0</ip> ... </x> <uoa> <enable>0</enable> <ip>0.0.0.0</ip> ... </uoa> ...
1,解释一下场景<enable>字段是用0或1的,作用是把他改成1,因为xml文件中有很多<enable>字段,如果使用全局的替换,不能解决需求,考虑到<enable>字段都是在主节点(比如<uoa>这样的节点)后面的第一行,所以就想到用这样下一行匹配的方式来解决,其中的N就是这个作用
sed -i '/<uoa>/{ N s/\(<enable>\).*\(<\/enable>\)/\11\2 }' config.xml
2,上一个方式的缺陷就是万一字段顺序变了怎么办呢
我就想是不是在在一个范围内进行匹配嘛,从<uoa>到</uoa>的范围内进行匹配
sed -e '/<uoa>/,/<\/uoa>/s/\(<enable>\)/\(<\/enable>\)/\11\2/g' config.xml
18,脚本中想要执行命令的时候,指定由哪一个用户来执行:
su -logname -c "命令"
这个应该经常要使用吧。
19,wc命令
1,显示一个文件的行数
wc -l filename
2,统计demo/目录下js文件数量
find demo/ -name "*.js" | wc -l
3,统计所有js文件代码行数
find demo/ -name "*.js" | xargs cat | wc -l
4,统计所有js文件代码行数(过滤掉空行)
find demo/ -name "*.js" | xargs cat | grep -v ^$ | wc -l
20,检查ip地址的合法性:
function checkIP(){ echo $1 | grep "^[0-9]\{1,3}\.[0-9]\{1,3}\.[0-9]\{1,3}\.[0-9]\{1,3}\.$" if[$? = 1] return 1 else return 0 } checkIp "$input_ip"
说明:$1方法的第一个字段,$?上一个命令的执行结果成功与否,失败返回1,成功返回0。
21,判断
(1)数值判断:
-eq 等于则为真。 -ne 不等于则为真。 -gt 大于则为真。 -ge 大于等于则为真。 -lt 小于则为真。 -le 小于等于则为真。
(2)字串判断:
= 等于则为真。 != 不相等则为真。 -z字串 字串长度伪则为真。 -n字串 字串长度不伪则为真。
(3)文件判断:
-e文件名 如果文件存在则为真。 -r文件名 如果文件存在且可读则为真。 -w文件名 如果文件存在且可写则为真。 -x文件名 如果文件存在且可执行则为真。 -s文件名 如果文件存在且至少有一个字符则为真。 -d文件名 如果文件存在且为目录则为真。 -f文件名 如果文件存在且为普通文件则为真。 -c文件名 如果文件存在且为字符型特殊文件则为真。 -b文件名 如果文件存在且为块特殊文件则为真
例子:
while["$enable" != "y"]&&["$enable" != "n"]
if [$x -ge 225] || [$x -le 0];then return 1 fi