本套都是shell的命令,enjoy it~

1)假设某变量aaa="史蒂芬周星驰",现在只想要输出后面的"周星驰",应该怎么办?

1
2
aaa=
"史蒂芬周星驰"
echo 
${aaa:3:3}

【评析】已知变量总字符数和要切的起始字符数,就可以用这种方法切变量了。这种方法比较常见的应用于变量是长路径的情况下。

2)使用curl获取

1
curl -I http:
//www
.163.net

【评析】curl -i 网址除了有网站的响应头信息之外,还有网站的全部内容。如果要获得http status code的内容:curl -sL -w "%{http_code}\\n"  -o /dev/null。 

3)执行历史纪录里的第505条命令

!505

【评析】打印历史纪录里最后一次cat的命令是!cat:p,如果是执行历史记录里最后一次cat的命令是!cat。执行之前操作最后一次的命令是!!。

4)已知当前时间是2016年5月16日,想要以年月日的形式输出当前时间后十天的日期。

date +%y%m%d -d 10day

【评析】如果是前十天,那就是# date +%y%m%d -d -10day

5)重复的执行"ps -ef",观察实时情况。

watch ps -ef  (默认时间是2秒一次)

6)显示剩余内存

free -m |grep cache|awk '/[0-9]/{print $4"MB"}'

7)打开/a/wow.txt,同时要跳到文件末端

vim + /a/wow.txt

【评析】如果是要把文章里的tab转换成空格的话,命令是# expand wow.txt wow2.txt

8)grep的精确查找命令

grep -w 

【评析】grep在默认情况下是包含查找,比如111.txt有单词"james",#grep "me" 111.txt,是可以查到james的,但是要精确查找,只查找me这个单词,那么就要用#grep -w "me" 111.txt

9)扫描203.90.146.0/24网络里所有开放8081端口的ip

nmap -p 8081 203.90.146/24

【评析】nmap命令不是linux自带的,需要#yum install -y nmap安装一下。 8081端口什么都不是,仅仅是一个用来测试时候的端口,而tomcat默认是8080端口,这个不要记混。

10)并排显示1.txt和2.txt

paste 1.txt 2.txt

【评析】这个方法其实用的非常少,因为排版效果很差,说是并排,其实两段文件都粘乎在一起了,非常不容易分辨,如果想要更好的排版方式,推荐#diff -y 1.txt 2.txt

11)拆分大体积的tar.gz文件,每个是100MB,然后再合并。

split -b 100m

/path/to/large/archive

/path/to/output/filescat files*>archive

12)获取wow.txt文件的owner

stat -c %U wow.txt

【评析】这玩意是不是比cut awk等切来切去的更有逼格?

13)找出文件名结尾有空格的文件

find . -type f -exec egrep -l "+$" {} \;

14)输入多行文字

cat >test.txt (ctrl+d保存退出)

【评析】如果想清空一个文件,最无脑的方法就是# >test.txt,或者是#echo /dev/null > test.txt。而用#echo > test.txt的话,其实还是有一个空格行的,这个方法并不太严谨。

15)将/A/B下的当前文件夹(不包括子文件夹)所有.sh文件都转移到/C/D里去,然后把.sh后缀全部改成.log。

1
2
3
4
5
6
7
8
9
#!/bin/bash
@written by ChrisChan
cd 
/A/B 
&& 
find 
./ -maxdepth 1 -name 
"*.sh" 
-
exec 
mv 
{} 
/C/D 
\;
cd 
/C/D
files=$(
find 
./ -name 
"*.sh"
)
for 
in 
files:
    
do
        
mv 
$i ${i%sh}log
    
done

【评析】更改文件名的后缀最简单的方法就是{变量%要换的内容}换后的内容。但是要注意这里要用for in循环,不然的话,files是那一大串的文件名,改的也只会是最后一个文件的后缀。

16)假设name.txt的内容如下,请做一个脚本能够统计所搜索的单词出现的次数。

[root@ChrisChan mysql]cat name.txt

james

james

james

wade

wade

bosh

curry

curry

curry

curry

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
read 
-p 
"plwase enter a word: " 
word
a=0
for 
in 
$(
cat 
name.txt)
        
do
                
if 
[ $i == $word ]
                        
then
                                
let 
a=a+1
                
fi
        
done
echo 
$word出现了$a次。