1、
解决/etc/init.d/after.local不起作用(init.d目录下的其他文件也是如此设置)
查看等级 runlevel=`who -r | awk '{print $2}'`修改等级 chkconfig after.local $runlevel
2、
$ a=`echo root:x:0:0:root:/root:/bin/bash | cut -d : -f 1,5`
$ echo $a
root:root
上面的例子中,把 root:x:0:0:root:/root:/bin/bash 重定向到cut命令里,-d表示分隔符,这里使用冒号: 作为分隔符,-f 表示字段,选择了第1,和第5个字段
3、
shell中的eval命令将会首先扫描命令行进行所有的替换,然后再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量。
例如
$:cat ext
count=3
cmd=echo
cmd="$cmd \$$count"
ext 11 22 33
此时cmd=" echo $3"
eval $cmd 等价于 "echo 33 "
如果是bash,可以用indirect expansion来搞,语法为 ${!var}。
比如
foo=bar
bar=123
echo ${!foo}
会打印 123
4、
如果需要找到某些文件后进行操作,有三种方法
第一种find,后面加-exec 命令 {} \;注意空格
find ./ -type f -name "[^s]*" -exec dos2unix {} \;
第二种管道和xargs命令,xargs是一条Unix和类Unix操作系统的常用命令。它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题
ls -l|awk '{if($4~/oinstall/) print $9}'|xargs rm -rf
第三种使用``
rm -rf `ls -l|awk '{if($4~/oinstall/) print $9}'`
5、
linux关闭命令输入时显示,不显示命令代码,但显示命令结果
stty -echo(关闭回显)
stty echo(开启回显)
6、
查找/目录下包含ORACLE_HOME内容的文档,是检测文件内容,不是名字
find / -type f -exec grep -l "ORACLE_HOME" {} \;
7、
for循环如何将数字转换成list,用$(seq 1 50)
for num in $(seq 1 50)
do
......
done
8、
根据ip和子网掩码计算网络号
echo 192.168.10.10/255.255.255.0|awk 'BEGIN{FS="[./]";OFS="."} END{ print and($1,$5),and($2,$6),and($3,$7),and($4,$8)}'
9、
lvm工具位置
LVM能够动态调整逻辑卷的大小。实际上你的LVM卷按照通常分区的概念是在同一个分区上(当然这取决于你安装时如何分区,我说的是一般情况),每个LVM卷都能动态扩展到整个分区的大小,只要你的三个逻辑卷已用空间之和小于这个分区的大小,那么你可以向任何LVM卷上继续拷贝文件。
RedHat、Ubuntu: /sbin/lvm
你可以用which lvm 或者 whereis lvm 在你的系统上查找。
pvscan
vgdisplay
查看具体磁盘大小
# fdisk -l /dev/diskname
2. 初始化PV
# pvcreate -f /dev/diskname
# pvremove /dev/diskname 删除pv
3. 创建VG
# vgcreate -s pesize vg_name /dev/diskname
4. 扩展VG
# vgextend /dev/vg_name /dev/diskname1 /dev/diskname2
5. 删除VG
? 卸载文件系统
? 先删除VG中所有的lv
? 去激活VG
# vgchange -a n /dev/vg_name
? 删除VG
# vgremove /dev/vg_name
6. 激活VG
# vgchange -a y vg_name
7. 去激活VG
# vgchange -a n vg_name
8. 创建LV
? 指定LE数量(LV大小为100个LE)
# lvcreate -l 100 -n Name /dev/vg_name
? 指定大小(LV大小为100M)
# lvcreate -L 100 -n Name /dev/vg_name
9. 扩展LV
? 指定LE数量(LV扩展100个LE)
# lvextend -l 100 /dev/vg_name/lv_name
? 指定大小(LV扩展100M)
# lvextend -L 100 /dev/vg_name/lv_name
10. 删除LV
# lvremove /dev/vg_name/lv_name
11. 创建文件系统
? 创建文件系统
# mkfs.ext3 /dev/vg_name/lv_name
? 创建文件系统挂载的目录
# mkdir /fsname
? 挂载文件系统
# mount /dev/vg_name/lv_name /fsname
? 卸载文件系统
# umount /fsname
10、
linux中>和>>区别
> 直接把内容生成到指定文件,会覆盖源文件中的内容,还有一种用途是直接生成一个空白文件,相当于touch命令
>>尾部追加,不会覆盖掉文件中原有的内容
11、
tar 解压缩 tar -vxf 文件名
gzip解压缩 gzip -dvf 文件名
tar -cvf [包名] 〔要打包的文件命〕例如:/home下有1.out,2.out,3.out三个文件,我想把它打包并且起名为“123.tar”并且存在/opt下。tar -cvf /opt/123.tar /home/*.out然后在opt下就有一个名为123.tar的包了。里面包含文件1.out,2.out,3.out.
不压缩用:tar -cvf out.tar 1.out 2.out 3.out
gz压缩用:tar -czvf out.tar.gz 1.out 2.out 3.out
bz2压缩用:tar -cjvf out.tar.bz2 1.out 2.out 3.out
输出文件名是写在前面的。
12、
test.sh >/dev/null 意思是将脚本输出全部指向 /dev/null。/dev/null可以理解为黑洞,可以无限往里面扔垃圾。所以这个相当于不输出了。test.sh > 2>&1 ,这里1是标准输出,2是错误输出。 2>&1的意思就是将错误输出的内容也输出到标准输出流中。就是说将该脚本所有的输出都送到标准输出流中
13、
文件比较运算符
-e filename 如果 filename存在,则为真 [ -e /var/log/syslog ]
-d filename 如果 filename为目录,则为真 [ -d /tmp/mydir ]
-f filename 如果 filename为常规文件,则为真 [ -f /usr/bin/grep ]
-L filename 如果 filename为符号链接,则为真 [ -L /usr/bin/grep ]
-r filename 如果 filename可读,则为真 [ -r /var/log/syslog ]
-w filename 如果 filename可写,则为真 [ -w /var/mytmp.txt ]
-x filename 如果 filename可执行,则为真 [ -L /usr/bin/grep ]
filename1-nt filename2 如果 filename1比 filename2新,则为真 [ /tmp/install/etc/services -nt /etc/services ]
filename1-ot filename2 如果 filename1比 filename2旧,则为真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]
字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)
-z string 如果 string长度为零,则为真 [ -z "$myvar" ]
-n string 如果 string长度非零,则为真 [ -n "$myvar" ]
string1= string2 如果 string1与 string2相同,则为真
[ "$myvar" = "one two three" ]
string1!= string2 如果 string1与 string2不同,则为真
[ "$myvar" != "one two three" ]
算术比较运算符
num1-eq num2 等于 [ 3 -eq $mynum ]
num1-ne num2 不等于 [ 3 -ne $mynum ]
num1-lt num2 小于 [ 3 -lt $mynum ]
num1-le num2 小于或等于 [ 3 -le $mynum ]
num1-gt num2 大于 [ 3 -gt $mynum ]
num1-ge num2 大于或等于 [ 3 -ge $mynum ]
14、
举例说:
脚本名称叫test.sh 入参三个: 1 2 3
运行test.sh 1 2 3后
$*为"1 2 3"(一起被引号包住)
$@为"1" "2" "3"(分别被包住)
$#为3(参数数量)