(1)VI中的缩进
自动缩进打开:
在命令模式下,输入 :set autoindent
,然后按回车打开自动缩进。通过设置 shiftwidth
确定缩进级别。例如,:set shiftwidth=4
把每级缩进设置为四个空格
设置缩进级别:
在命令模式下,可以使用 >>
命令让现有的一行增加一级缩进,使用 <<
命令减少一级缩进。在这些命令前面加上一个整数,即可让多行增加或减少一级缩进。
缩进代码块
可以使用 :set noautoindent
命令关闭自动缩进。还可以使用这个命令和 autoindent
命令的简写,即 :set ai
和 :set noai
。还可以使用 :set ai sw=4
在一个命令中打开缩进并设置缩进级别。
如果希望每次启动 vi 会话时都启用自动缩进并把缩进级别设置为四个空格,那么在主目录中的 .exrc 文件中添加 set ai sw=4
行。
(2)搜索
可以参考:http://www.ibm.com/developerworks/cn/aix/library/au-vitips.html
(3)VI插件
http://www.ibm.com/developerworks/cn/linux/l-tip-vim2/index.html
http://www.ibm.com/developerworks/cn/linux/l-tip-vim1/index.html
(4)配对符号间的跳转
%:将光标定位在大括号,中括号上,然后按下输入%,将能让光标定位于该大括号或是中括号的另一半上。对检查逻辑复杂,构造繁乱的代码 中的错误极其有用。
(5)列出目录,排序操作
按照时间排序:-t, 一般使用倒序:-r,即倒序,这样最新的文件在最下面,容易找到。 常用 ll -tr
按照大小排序:ll -Sh, 或者ll -Shr
(6)Yum安装之后的位置查找
先#rpm -qa | grep ABC, 再使用rpm -ql packageName
例子如下:查找安装好的qt
yum install qt.x86_64
#rpm -qa | grep qt
qt-3.3.6-23.el5
再rpm -ql qt-3.3.6-23.el5
(7)C、C++语言的编译相关
gcc -v:查看gcc的版本
cc hello.c -o hello.o:使用cc编译c语言代码
gcc hello.c -o helloworld.o:使用gcc编译c语言代码
(8)制作makefile文件
qmake -project
qmake -makefile
VI 可参考:http://yang2001.blog.51cto.com/25307/271807
1、交换两个字符位置xp;
上下两行调换ddp;
上下两行合并 J;
从当前位置复制到行尾y$
如果要粘贴到其他地方 p 就可以了
删除所有行 dG
从当前位置删除到行尾d$
2、:X
保存后就加密了
:X
然后系统会提示输入密码
输入密码后存盘退出
下次编辑时请使用
vi -x filename
系统会提示你输入密码,呵呵
例:以HP-UX为例
a、加密
vi file
:X
(Are you sure?(y/n)[n]:)回答y
输入密码回车以后再保存,就加密成功了
b、解密
vi -C file 或者 vi -x file
在 Key: 后面输入密码进入file
:X
(Are you sure?(y/n)[n]:)回答y
直接回车以后再用 wq 或者 wq! 保存,就把file解密成功了
顺便提一下:加密后的脚本不能被解释执行!
c、:X(uppcase X)
key:......
后用wq!存盘,不能用:x,否则加密失效
打开时:
vi -x file
key: .....
4、单个字符替换用r;
覆盖多个字符用R;
用多个字符替换一个字符用s;
整行替换用S;
:%s/old_word/new_word/g;这个指令是于在整个文件中替换特定字符串 ;
5、H 跳到第一行
M 跳到中间一行
L 跳到最后一行
将光标移到第n行,按下 mk
将光标移到第m行,按下 "ay‘k
即将第n到m的行存到a寄存器,以此类推,b,c........寄存器等
想粘贴到某处,直接将光标移到某地,按下 ‘ap 即可
6、删除命令
d l 删除当前字符(与x命令功能相同)
d 0 删除到某一行的开始位置
d ^ 删除到某一行的第一个字符位置(不包括空格或TA B字符)
d 3 w 删除到第三个单词的结尾位置
d b 删除到某个单词的开始位置
d W 删除到某个以空格作为分隔符的单词的结尾位置
d B 删除到某个以空格作为分隔符的单词的开始位置
d 7 B 删除到前面7个以空格作为分隔符的单词的开始位置
d) 删除到某个语句的结尾位置
d 4) 删除到第四个语句的结尾位置
d( 删除到某个语句的开始位置
d } 删除到某个段落的结尾位置
d { 删除到某个段落的开始位置
d 7 { 删除到当前段落起始位置之前的第7个段落位置
d /t e x t 删除从文本中出现“ t e x t”中所指定字样的位置,一直向前直到下一个该字样所出现的位置(但不包括该字样)之间的内容
d fc 删除从文本中出现字符“c”的位置,一直向前直到下一个该字符所出现的位置(包括
该字符)之间的内容
d tc 删除当前行直到下一个字符“ c”所出现位置之间的内容
D 删除到某一行的结尾
5 d d 删除从当前行所开始的5行内容
d L 删除直到屏幕上最后一行的内容
d H 删除直到屏幕上第一行的内容
d G 删除直到工作缓存区结尾的内容
d 1 G 删除直到工作缓存区开始的内容
7、修改操作
c l 更改当前字符
c w 修改到某个单词的结尾位置
c 3 w 修改到第三个单词的结尾位置
c b 修改到某个单词的开始位置
c W 修改到某个以空格作为分隔符的单词的结尾位置
c B 修改到某个以空格作为分隔符的单词的开始位置
c 7 B 修改到前面7个以空格作为分隔符的单词的开始位置
c 0 修改到某行的结尾位置
c) 修改到某个语句的结尾位置
c 4) 修改到第四个语句的结尾位置
c( 修改到某个语句的开始位置
c } 修改到某个段落的结尾位置
c { 修改到某个段落的开始位置
c 7 { 修改到当前段落起始位置之前的第7个段落位置
c tc 修改当前行直到下一个字符c所出现位置之间的内容
C 修改到某一行的结尾
c c 修改当前行
5 c c 修改从当前行所开始的5行内容
折行
:set wrapmargin=4
:set number 加行号!
:g/$/s// ABC/g
:g/^/s//def /g
在文本每行的头和尾添加字符串.
8、替换操作
s 将当前字符替换为一个或多个字符
S 将当前行替换为一个或多个字符
5 s 将从当前字符开始的5个字符替换为一个或多个字符
注:vi替换使用规则:
:g/s1/s/s2/s3/g
第一个g表示对每一个包括s1的行都进行替换,第二个g表示对每一行包括s1的行所有的s2都用s3替换
s表示替换,s2是要被替换的字符串,他可以和s1相同(如果相同的话用//代替),s3是替换字符串
9、移动
fx
往右移动到 x 字符上--〉fx
往左移动到 x 字符上--〉Fx
往右移动到 x 字符前--〉tx
往左移动到 x 字符后--〉Tx
(注意:以上四个命令中,其中x是键入的字符)
;-->分号,配合 f 和 t 使用,重复一次
,-->逗号,配合 f 和 t 使用,反方向重复一次
10、
标记文本
mchar 用字母char标记当前光标的位置
`char 移至char所标记处
‘char 移至char标记所在行的开头处
" 移至当前行上一次所在位置(在光标移动之后)――一个双引号
‘‘ 移至当前行上第一次所在位置的行的开头处(在光标移动之后)――两个单引号
ctrl+f向下翻页,ctrl+b向上翻页(对于telnet上去的时候比较有用)
shift+4到本行末尾,shift+6到本行开头
11、追加到缓冲区
对于已经有内容的缓冲区,可以继续追加内容在其后面,例如:
"Ad4w 删除光标后4个字,并附加到缓冲区a
"Ay) 取样从光标到文件尾的内容,并附加到缓冲区a
"K3yy 取样从光标所在行起的3行内容,并附加到缓冲区k
注意:在追加缓冲区的命令中,原缓冲区的名字一定要大写,才能将内容追加进去,否则是覆盖原缓冲区的内容。追加内容在原缓冲区末尾另起一行。
12、在:命令行模式下,首先可以确定命令的范围
.表示当前行;数字表示行号,如1表示第一行,2表示第二行;$表示最后一行
范围用,分隔
然后用命令
d表示删除,y表示复制......大家都知道的
最后说一句,%表示全文
:%d
是删除全文
13、恢复前几次操作应用什么命令呀? :em52:
14、:n,n1 d
n和n1都是行数, d是删除这些行 .表示当前的行。
: n
n是行数,直接转到n行。
: r 文件名
把文件添加到当前的文件中
:n,n1 w 文件名
把从n行到n1行写道另外一个文件中
15、查找:
在一个单词上用*,就向下查找此单词,#是向上
用/\<hello\>查找hello,就不会查找到hello_world(用此替换也很好用)
替换:
如有一文件,内容为:
aa
bb
cc
dd
用:%s/.*/printf("& is :%d\\n",&)/
文件内容为变为:
printf("aa is :%d\n",aa)
printf("bb is :%d\n",bb)
printf("cc is :%d\n",cc)
printf("dd is :%d\n",dd)
&为查找到的内容
用:~为重复上一次替换
用系统命令编辑:
如有一文件,内容为:
333
222
334
444
111
553
554
233
运行命令:%!sort 文件内容为:
111
222
233
333
334
444
553
554
用此方法可以使用许多系统命令进行编辑,大家可以灵活运用
其他特殊用法:
用q: 看一看有什么用? 可以编辑你用过的命令
程序中在一个调用函数(如:printf)上用K,可以直接调出printf的帮助
这些是我比较常用的,并且我觉的很有用的命令,敬请指教。
16、、:n1,n2w filename (把行N1-N2之间内容写入新文件FILENAME)
:.=(显示光标所在行的行号)
u(恢复上一次的操作)
:!(shell-command 执行SHELL命令的操作)
:n (直接把光标定义到N行)
:line1,line2mline3: 将line1--line2之间的内容移到line3下 相当于word的剪贴
:line1,line2tline3:将line1--line2之间的内容copyline3下,相当于word的粘贴
17、由于vi 是建立在 EX 上的 所以 当键入 : 时就来到了 EX 命令状态
:ab string strings
例如 ":ab usa United States of America" ,
当你在文件里插入 usa 时
United States of America 就蹦出来了
:map keys new_seq
定义你当前 键盘命令
:set [all]
vi or ex 的编辑状态
如 显示每行 :set nu
18、
3、把文件内容反转:g/^/m0/ ------〉这个m0怎么解析 呢 ?
valentine 解释:
xp和ddp 应该理解为删除一个字符(x)和删除一行(dd),然后在p(paste),这样便不需记新命令了.
把文件内容反转 (按行反转)
:g/^/m0/ 应该是 :g/^/m0 无最后的/
m-->move
0-->line No 1
试想,从第1行开始,每一行依次放在文件的开头处,会有什么结果???
19、Shell的调试
http://bbs.chinaunix.net/thread-1849499-1-1.html
linux论坛:http://bbs.chinaunix.net/forum-24-1.html
20、把shell在萤幕的输出同时保在log
21、批量重命名
http://blogold.chinaunix.net/u1/56521/showart_2012781.html
将当前目录里面所有.txt的文件重命名为.sql的文件:
rename 's/\.txt$/\.sql/' *.txt
去掉当前目录里面所有.sql结尾文件的后缀名
rename 's/\.sql$//' *.sql
22、使用jinfo查看java进程信息:jinfo -flags pid
jinfo -flags 21528
23、让程序等待:sleep
sleep 10:暂停10秒
sleep $[ ${INTERVAL}*${TIMES} ]:根据变量的值进行计算之后进行休眠
24、本地变量中的只读变量:当前shell有效
readonly abc: 设置变量为只读变量,也不能取消
查看只读变量:readonly, 则显示当前shell下的只读变量
【注意】删除只读变量使用unset -f variable, 但是不能从环境变量中取消指定的变量和函数
25、环境变量:用于全部的子进程, 通过env进行查看
通过export环境文件/etc/profile或~/.bash_profile来完成的
26、位置变量
位置变量指的是shell程序在运行时传入的参数。
例如要向shell程序传递参数“Beijing is a beautiful city”
$0 |
$1 |
$2 |
$3 |
$4 |
$5 |
$6 |
$7 |
$8 |
$9 |
bash |
Beijing |
is |
a |
beautiful |
city |
|
|
|
27、PS1、PS2
PS1, 终端显示时的命令前面的提示信息;
[simpleanti@PLATQA136025 ~]$ echo $PS1
[\u@\h \W]\$
PS2:在命令行下面输入多行时的提示符号
- [simpleanti@PLATQA136025 logs]$ for loop in `cat test.txt`
- > do
- > echo $loop
- > done
- abc
- def
- hij
28、特殊变量
变量名 |
含义 |
$0 |
shell或shell脚本的名字 |
$* |
以一对双引号给出参数列表 |
$@ |
将各个参数分别加双引号返回 |
$# |
参数的个数 |
$_ |
代表上一个命令的最后一个参数 |
$$ |
代表所在命令的PID |
$! |
代表最后执行的后台命令的PID |
$? |
代表上一个命令执行后的退出状态 |
29、shift变量
由于位置变量最多可以传9个给脚本,但是如果超过9个,则可以考虑shift变量该搞定。 shift n:变量向左边移动n个位置, 即如果传递的a b c, shift 1之后,则传递的参数为b c
- echo "no.1:"$1
- echo "no.2:"$2
- echo "no.3:"$3
- echo "--------------------------------"
- shift 1
- echo "no.1:"$1
- echo "no.2:"$2
- echo "no.3:"$3
执行脚本:./test.txt a b c, 则结果为:
- [simpleanti@PLATQA136025 logs]$ ./test.txt a b c
- no.1:a
- no.2:b
- no.3:c
- --------------------------------
- no.1:b
- no.2:c
- no.3:
30、双引号
除了$、`、\三个之外的字符,在双引号内的字符都原样输出
- [simpleanti@PLATQA136025 logs]$ echo -e "ert, $SHELL '\n* china `echo ali`"
- ert, /bin/bash '
- * china ali
31、单引号
除了\外,在单引号中的字符原样输出
- [simpleanti@PLATQA136025 logs]$ echo -e 'ert, $SHELL \n* china `echo ali`'
- ert, $SHELL
- * china `echo ali`
32、历史记录相关:history
set | grep HIS
history默认保存1000个,保存在/root/.bash_history
history -c:历史全部清理, 想每次退出的时候清理历史记录,则history -c保存在.bash_logout
!213:执行213号命令(可以从history查到编号)
!!:执行上一条命令
- 12:45:07 root@ST-TEST:[/]#ps aux | grep [a]pp
- root 0 0.0 0.0 384 320 - A May 09 70:22 swapper
- 12:45:18 root@ST-TEST:[/]#ps aux | grep vi
- root 692402 0.0 0.0 656 600 pts/1 A 12:44:55 0:00 vi [a]pp
- 12:45:26 root@ST-TEST:[/]#ps aux | grep \[a]pp
- root 0 0.0 0.0 384 320 - A May 09 70:22 swapper
- 12:45:44 root@ST-TEST:[/]#ps aux | grep \[a\]pp
- root 0 0.0 0.0 384 320 - A May 09 70:22 swapper
- 12:46:04 root@ST-TEST:[/]#ps aux | grep \\[a\\]pp
- root 692402 0.0 0.0 656 16 pts/1 A 12:44:55 0:00 vi [a]pp
34、shell中数组相关的操作
35、统计字符串中某个字符出现的个数
abcdabcd 我想统计b出现的个数
方法1:awk -F'b' '{print NF-1}'
- [leonardo@PLATQA129249 ~]$ echo "abcbb" | awk -F'b' '{print NF-1}'
- 3
方法2:echo “aoa”|grep -o a|wc-l
统计字符之类的方法算是非常多的, 如
str=abcbddd
str=${str//[^b]}
echo $str
echo $str|awk '{print gsub("b","b")}'
35、查看系统情况
常用top命令,但是不会显示cache的大小,所以会出现看起来进程使用内存较少,但是总的内容确使用很多的情况。此时需要使用vmstat
top按照内存大小顺序显示如下:
- top - 19:47:31 up 62 days, 1:27, 3 users, load average: 4.77, 3.94, 2.90
- Tasks: 135 total, 1 running, 134 sleeping, 0 stopped, 0 zombie
- Cpu(s): 29.9%us, 5.2%sy, 0.0%ni, 64.4%id, 0.0%wa, 0.1%hi, 0.4%si, 0.0%st
- Mem: 16444080k total, 15435264k used, 1008816k free, 689448k buffers
- Swap: 2096440k total, 160k used, 2096280k free, 12249560k cached
- PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
- 5899 leonardo 20 0 4076m 1.2g 51m S 273.8 7.6 63:52.54 java
- 4027 napoli 25 0 1672m 663m 9860 S 0.0 4.1 2:04.12 java
vmstat使用显示:
- [leonardo@inc-153-29 ~]$ vmstat
- procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
- r b swpd free buff cache si so bi bo in cs us sy id wa st
- 4 0 160 1030212 689448 12249528 0 0 1 3 1 0 2 1 97 0 0
36、 vim黏贴代码格式混乱的解决方法
参考:http://blog.csdn.net/CommShare/archive/2011/03/01/6215088.aspx
在/etc/vim中,修改vimrc,添加 set pastetoggle=<F9>
36、VI中粘贴时防止被复制的内容变形
每次复制代码时,如果代码里有 // 这样的注释就容易让格式乱掉,通过下面的设置就可以避免这种情况。
粘贴代码时取消自动缩进
VIM在粘贴代码时会自动缩进,把代码搞得一团糟糕,甚至可能因为某行的一个注释造成后面的代码全部被注释掉,我知道有同学这个时候会用vi去打开文件再粘贴上去(鄙人以前就是这样),其实需要先设置一下
set paste
然后再进入插入模式粘贴,代码就不会被自动缩进。可是敲代码的时候需要自动缩进,又得改回来:
set nopaste
最方便的方法就是在.vimrc中加一句:
set pastetoggle=<F9>
以后在插入模式下,只要按F9键就可以切换自动缩进。
- [leonardo@PLATQA136019 ~]$ grep '.\{40,\}' /usr/share/dict/words
- pneumonoultramicroscopicsilicovolcanoconiosis
- [leonardo@PLATQA136019 ~]$ grep '^i.\{18\}n$' /usr/share/dict/words
- institutionalisation
- institutionalization
- intercrystallization
- interdifferentiation
- internationalisation
- internationalization
实例3:列出apache文件中的有用信息,去除以#开头的注释信息
grep -v '^#' httpd.conf | grep -v '^$'
或者 grep -v "^#" httpd.conf | grep -v "^$"
39、输入输出重定向
实例1:正确和错误输出到同一文件中
ll abcde > tmp.txt 2>&1
还可以使用ll abcde &> tmp.txt达到同样的效果
实例2:正确和错误追加到同一文件中
ll abcde >> tmp.txt 2>&1
40、列出文件夹
ll | grep '^d'
- [leonardo@PLATQA136019 client]$ ll | grep '^d'
- drwxrwxr-x 2 leonardo leonardo 4096 2月 28 10:52 nmon
- drwxrwxr-x 2 leonardo leonardo 4096 2月 23 09:28 Perf-Result
41、unzip到某个目录下面
unzip -o -d ./dist/ dubbo.registry.server-2.0.2-SNAPSHOT-dist.zip
-o:不提示的情况下覆盖文件
-d:指定解压到某个目录下面, -d ./dist/即为解压到当前目录的dist文件夹下面
42、MSN消息监控Linux
赶星:http://ganxing.blog.51cto.com/624086/162563
43、杀掉进程
- function killProcess()
- {
- ps -ef | grep [n]ormandy.server | awk '{print $2}' | xargs kill -9
- if [ "0" != $? ]; then
- echo "The normandy process not exists!!!"
- else
- echo $?
- echo "The normandy process killed!!!"
- fi
- }
本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/481276,如需转载请自行联系原作者