Linux中vi、vim操作和几个linux命令

2011年11月1日 | 分类: 乱七八糟 | 标签: ,

Linux中vi、vim操作

Linux中文本编辑常用vi、vim编辑器。它们功能强大,非常适合全键盘操作,有必要整理一下。现在多使用vim,因为它编辑文本有显示不同颜色区分。

vim有三种模式:
Command Mode(命令模式),控制光标移动、删除字符、删除某行、复制粘贴一行或者多行。以及进入Insert Mode和Last Line Mode。
Insert Mode(编辑模式),新增及修改文字,按Esc键进入Command Mode。
Last Line Mode(底行模式),保存退出vim,查找替换字符串等。

Command Mode下移动光标:

命令 说明
h或向左方向键 光标向左移动一个字符
j或向下方向键 光标向下移动一个字符
k或向上方向键 光标向上移动一个字符
l或向右方向键 光标向右移动一个字符
Ctrl+f或PageDown键 屏幕向后移动一页
Ctrl+b或PageUp键 屏幕向前移动一页
Ctrl+d 屏幕向后移动半页
Ctrl+u 屏幕向前移动半页
数字0或shift+6 移到该行行首
$ 移到该行行尾
G 移到文本最后
gg 移到文本开头
nG n是数字,移到文本第n行
-(减号) 移到上一行开始
+(加号) 移到下一行开始
H 移到当前屏幕的第一行
M 移到当前屏幕的中间一行
L 移到当前屏幕的最后一行
n空格(n是数字) 按下数字n然后按空格,则光标向右移动n个字符,如果该行字符数小于n,则光标继续从下行开始向右移动,一直到n
n回车(n是数字) 光标向下移动n行

Command Mode下复制、删除:

命令 说明
x 删除光标所在位置的字符
X 删除光标前一字符
nx,nX n为数字,删除n个字符
dd 删除当前行
ndd n为数字,删除光标所在的向下n行
D 删除光标后的所有字符
d$ 删除当前光标到行尾的所有字符
dG 删除光标所在行到末行的所有数据
dw 删除从当前光标处到下一个字的开始间的所有字符
yy 复制光标所在行
nyy n为数字,复制从光标所在行起向下n行
yw 复制当前字从光标处到下一个字之间的内容
y$ 复制从当前光标处到该行末尾的所有内容
p 粘贴到当前光标右侧
P 粘贴到当前光标左侧

Command Mode下查找、替换:

命令 说明
/word 向光标之后寻找一个字符串名为word的字符串
?word 向光标之前寻找一个字符串名为word的字符串
n 向后寻找下一个
N 向前寻找上一个
:n1,n2s/word1/word2/g 在n1和n2行间查找word1这个字符串并替换为word2,你也可以把”/”换成”#”
:1,$s/word1/word2/g 从第一行到最末行,查找word1并替换成word2
:1,$s/word1/word2/gc 加上c表示,在替换前需要用户确认

取消命令:

命令 说明
u 取消最后一次命令,还原功能

进入Insert Mode:

命令 说明
i 在当前字符前插入字符
I 在当前行行首插入字符
a 在当前字符后插入字符
A 在当前行行末插入字符
o 在当前行下插入新的一行
O 在当前行上插入新的一行
r 替换光标所在的字符,只替换一次
R 一直替换光标所在的字符,一直到按下ESC

Last Line Mode:

命令 说明
:w 保存文件,不退出
:w! 若文本属性为只读时,强制保存
:wq 保存并退出
:q 退出
:q! 退出,放弃所作的修改
:w [filename] 编辑后的文档另存为filename
:r [filename] 在当前光标所在行的下面读入filename文档的内容
:set nu 在每行的行首显示行号
:set nonu 取消行号
ZZ 若文档没有改动,则不储存离开,若文档改动过,则储存后离开,等同于:wq
n1,n2 w [filename] 将n1到n2的内容另存为filename这个文档
:! command 暂时离开vim运行某个linux命令,例如 :! ls /home 暂时列出/home目录下的文件,然后会提示按回车回到vim

这些命令掌握其中常用的部分就可以了。

来源http://www.live-in.org/archives/774.html

==========

Linux ssh登录命令

ssh命令用于远程登录上Linux主机。

常用格式:ssh [-l login_name] [-p port] [user@]hostname
更详细的可以用ssh -h查看。

举例

不指定用户:

ssh 192.168.0.11

指定用户:

ssh -l root 192.168.0.11

ssh root@192.168.0.11

如果修改过ssh登录端口的可以:

ssh -p 12333 192.168.0.11

ssh -l root -p 12333 216.230.230.114

ssh -p 12333 root@216.230.230.114

另外修改配置文件/etc/ssh/sshd_config,可以改ssh登录端口和禁止root登录。改端口可以防止被端口扫描。

编辑配置文件:

vim /etc/ssh/sshd_config

找到#Port 22,去掉注释,修改成一个五位的端口:

Port 12333

找到#PermitRootLogin yes,去掉注释,修改为:

PermitRootLogin no

重启sshd服务:

service sshd restart

来源http://www.live-in.org/archives/832.html

==========

Linux进程查看命令

Linux下查看进程的命令有:ps、pstree、top。

1、ps
ps命令用于查看当前进程的情况。

一般格式:
ps [选项]

常用选项:
-a :显示系统中与tty相关的(除会话组长之外)所有进程的信息。
-e :显示所有进程的信息。
-f :以树形格式显示进程信息。
-j :以工作格式显示进程信息。
-l :以长格式显示进程信息。
-r :只显示正在运行的进程。
-u :显示面向用户的格式(包括用户名、CPU及内存使用情况等信息)。
-x :显示所有终端上的进程信息。

常用命令:
1)显示当前控制台的进程。

ps

PID TTY TIME CMD
28320 pts/0 00:00:00 bash
28441 pts/0 00:00:00 ps

2)显示系统中所有进程。

ps -e

3)显示所有用户进程的详细情况。

ps aux

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 2156 668 ? Ss Sep23 0:04 init [3]
root 1114 0.0 0.2 2260 552 ? S<s Sep23 0:00 /sbin/udevd -d
root 1193 0.0 0.2 32696 564 ? Ssl Sep23 0:00 brcm_iscsiuio
root 1386 0.0 0.2 1812 616 ? Ss Sep23 0:00 syslogd -m 0
root 1441 0.0 0.4 7204 1064 ? Ss Sep23 0:00 /usr/sbin/sshd
root 1452 0.0 0.3 2832 832 ? Ss Sep23 0:00 xinetd -stayalive -pidfile /var/run/xinetd.pid
……
root 28318 0.0 1.1 10196 2892 ? Ss 19:38 0:00 sshd: root@pts/0
root 28320 0.0 0.5 3716 1516 pts/0 Ss 19:38 0:00 -bash
root 28444 0.0 0.3 2532 908 pts/0 R+ 20:44 0:00 ps aux

相关信息说明:
USER 启动进程的用户。
PID 进程ID号。
%CPU 运行该进程占用CPU的时间与该进程总的运行时间的比例。
%MEM 该进程占用内存和总内存的比例。
VSZ 虚拟内存的大小,以KB为.单位。
RSS 占用实际内存的大小,以KB为单位。
TTY 该进程建立时所对应的终端,“?”表示该进程不占用终端。
STAT 进程的运行状态,其中包括以下几种代码:
D 不可中断的睡眠。
R 执行。
S 睡眠。
T 跟踪或停止。
Z 终止。
W 没有内存驻留页。
< 高优先权的进程。
N 低优先权的进程。
L 有锁入内存的页面(用于实时任务或UO任务)。
START 开始运行的时间。

2、pstree
pstree命令将进程用树状结构显示出来,显示出进程间的相互关系。

一般格式:
pstree [选项]

常用选项:
-a :显示进程的完整命令。
-A :使用ASCII字符显示。
-u :显示用户名。
-p :显示程序PID。

常用命令:

pstree -Aup

3、top
top命令动态显示系统当前任务情况,相当于任务管理器。

一般格式:
top [选项]

常用选项:
-b :使用批量模式,不接受命令行输入。
-c :显示每个进程的完整信息。
-d <间隔秒数> :设置两次刷新的间隔时间。
-i:忽略空闲和僵尸进程。
-n <执行次数> :设置更新次数。
-s :安全模式运行,禁用一些效互指令。
-S :累积模式,输出每个进程的总的CPU时间,包括已死的子进程。

在top执行过程中还有交互命令:
space 立即更新。
c 切换到命令名显示,或显示整个命令(包括参数)。
f,F 增加显示字段,或删除显示字段。
h,? 显示有关安全模式及累积模式的帮助信息。
k 提示输入要杀死的进程ID,目的是用来杀死该进程(默认信号为15)。
i 禁止空闲进程和僵尸进程。
l 切换到显法负载平均值和正常运行的时间等信息。
m 切换到内存信息,并以内存占用大小排序。
n 提示显示的进程数,比如输入3,就在整屏上显示3个进程。
o,O 改变显示字段的顺序。
r 把renice应用到一个进程,提示输入PID和renice的值。
s 改变两次刷新时间间隔,以秒为单位。
t 切换到显示进程和CPU状态的信息。
A 按进程生命大小进行排序,最新进程显示在最前。
M 按内存占用大小排序,由大到小。
N 以进程ID大小排序,由大到小。
P 按CPU占用情况排序,由大到小。
S 切换到累积时间模式。
T 按时间/累积时间对任务排序。
W 把当前的配置写到~/.toprc中。

常用命令:
就用top可以了。

来源http://www.live-in.org/archives/878.html

==========

Linux kill命令

一、kill命令

kill命令用来终止一个进程的运行。通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须用kill命令来终止。kill 命令是通过向进程发送指定的信号来结束相应进程的。在默认情况下,采用编号为15的TERM信号。TERM信号将终止所有不能捕获该信号的进程。对于那些 可以捕获该信号的进程就要用编号为9的kill信号,强行“杀掉”该进程。

一般格式:
kill [-s 信号 | -p] [-a] 进程号
kill -l [信号]

选项:
-s 指定需要发送的信号,既可以是信号名(如SIGKILL),也可以是对应信号的号码(如9)。
-p 指定kill命令只是显示进程的PID(进程标志号),并不真正发出结束信号。
-l 显示信号名称列表,这也可以在/usr/include/linux/signal.h文件中找到。

注意:
1、kill命令可以带信号号码选项,也可以不带。如果没有信号号码,kill命令就会发出终止信号(15),这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源。也可以用kill向进程发送特定的信号。例如:
kill -2 123
它的效果等同于在前台运行PID为123的进程时按下Ctrl+C键。但是,普通用户只能使用不带signal参数的kill命令或最多使用-9信号。

2、kill可以带有进程ID号作为参数。当用kill向这些进程发送信号时,必须是这些进程的主人。如果试图撤销一个没有权限撤销的进程或撤销一个不存在的进程,就会得到一个错误信息。

3、可以向多个进程发信号或终止它们。

4、当kill成功地发送了信号后,shell会在屏幕上显示出进程的终止信息。有时这个信息不会马上显示,只有当按下Enter键使shell的命令提示符再次出现时,才会显示出来。

5、应注意,信号使进程强行终止,这常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态。发送信号时必须小心,只有在万不得已时,才用 kill信号(9),因为进程不能首先捕获它。要撤销所有的后台作业,可以输入kill 0。因为有些在后台运行的命令会启动多个进程,跟踪并找到所有要杀掉的进程的PID是件很麻烦的事。这时,使用kill 0来终止所有由当前shell启动的进程,是个有效的方法。

常用命令:
例如有个PID为123的进程。

删除进程:
kill 123

强制终止进程:
kill -9 123

二、信号
前面说了可以用kill -l查看所有信号。计算机上进程状态至少包括:初始、就绪、执行、等待、终止五个状态。信号相当于一个中断机制,可以改变进程的状态。

CentOS下常见信号:
SIGHUP (1) :重新启动进程
SIGINT (2) :相当于用Ctrl+c中断进程
SIGKILL (9) :强制终止进程
SIGUSR1 (10) :用户定义的信号
SIGTREM (15) :正常结束进程
SIGSTOP (19) :停止进程
SIGTSTP (20) :相当于用Ctrl+z将前台进程转入后台

三、killall命令

killall命令用来终止某个程序名称的所有进程。

一般格式:
killall [选项] [-s 信号] 程序名称

选项:
-i 在终止进程前询问用户,交互方式
-l 显示所有信号名
-q 不显示完成信息
-u USER 终止某个用户运行的进程

常用命令:

终止httpd程序:
killall httpd

强制终止httpd程序:
killall -9 httpd

参考资料:
http://www.linuxde.net/2011/09/861.html

来源http://www.live-in.org/archives/887.html

==========

Linux du命令

du命令用于显示文件或目录占用空间大小,显示的是所占的块的数量。块是Linux文件系统分配磁盘空间的最小单位,块的大小定义和文件系统有关, 使用“getconf PAGESIZE”命令查看块大小。如果一个文件大小小于块的大小它也占用了一个块,比如一个文件大小是76字节但是在du里查看它就是占了4K,因为系 统块的大小就是4K。

语法:du [选项] [目录或文件]

常用选项:
-a:显示目录下的所有文件
-s:显示所有文件的总计
-h:以更好的格式、可读性显示

du:显示当前目录下的所有目录和它们的子目录大小,不显示任何文件。

du *:显示当前目录下的所有目录、文件和它们的子目录大小,不显示子目录内的文件。

du -sh:以提高可读性的格式显示当前目录大小总计。

du -ah:以提高可读性的格式显示当前目录下面的所有目录和文件大小。

du -sh *:以提高可读性的格式显示当前目录下所有目录和文件,不显示子目录内的目录和文件。

du -ah *:以提高可读性的格式显示当前目录下面的所有目录和文件大小(用*显示所有会按字母顺序排序)

来源http://www.live-in.org/archives/808.html

==========

Linux 管道命令

管道命令在Linux中十分有用,管道命令操作符是“|”,它能将经由前一个命令输出的标准输出,作为管道后一个命令的标准输入。

1、grep命令
grep是一个文本搜索工具,用于在文本或标准输入中查找指定的匹配,并输出到标准输出上。

一般格式:
grep [选项] 模式 [文件…]

常用选项:
-E, –extended-regexp :将查找模式解释成扩展的正则表达式。
-F, –fixed-strings :将查找模式解释成单纯的字符串。
-c, –count :只是输出文件中匹配的行的总数
-i, –ignore-case :忽略大小写。
-n, –line-number :输出时加上行号。
-r, –recursive :以递归方式查询目录下的所有子目录中的文件。
-v, –invert-match :只显示不包含匹配的行。

举例:
1)查找是否安装过httpd
# rpm -qa | grep httpd

2)在hi.txt中查找字符串Hello
# grep ‘Hello’ hi.txt

# cat hi.txt | grep ‘Hello’

2、cut命令
cut命令用于截取字符串,显示到标准输出上。

一般格式:
cut [选项]… [文件]…

常用选项:
-b, –bytes=LIST :以字节为单位。
-c, –characters=LIST :以字符为单位。
-d, –delimiter=DELIM :表示分隔符,默认情况下为TAB。
-f, –fields=LIST :以字段为单位。

截取范围:
N :只有第N项
N- :从第N项一直到行尾
N-M :从第N项到第M项(包括M)
-M :从一行的开始到第M项(包括M)
– :从一行的开始到结束的所有项

举例:
1)找出passwd中的所有用户名
# cat /etc/passwd | cut -d ‘:’ -f1
root
bin
daemon
adm
lp

smmsp
sshd
apache
rpc
pcap
nscd
rpm
named

# cut -d ‘:’ -f1 /etc/passwd 一样效果。

2)查看vps上有哪些IP ssh登陆失败,并计算次数
# lastb | cut -c 23-38 | uniq -c
9 213.229.124.66
6 178.162.239.192
1 121.9.245.177
8 147.213.138.201
11 119.161.208.37
61 220.225.70.251
6 123.30.108.208
3 h-sys.biz
7 220.225.70.251
6 61.111.18.25

3、sort命令
sort命令用于将文件内容排序,显示到标准输出上。排序是根据某个或多个关键字进行排序。

一般格式:
sort [选项]… [文件]…

常用选项:
-b, –ignore-leading-blanks :忽略每行前面开始出的空格字符和制表符。
-c, –check :检查文件是否已经按照顺序排序。
-d, –dictionary-order :排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f, –ignore-case :忽略大小写。
-i, –ignore-nonprinting :排序时,除了040至176之间的ASCII字符外,忽略其他的非打印字符。
-m, –merge :将几个排序好的文件进行合并。
-M, –month-sort :规定月份的比较次序是(未知)<”JAN”<”FEB”<…<”DEC”。
-n, –numeric-sort :依照数值的大小排序。
-r, –reverse:按逆序排序。默认排序输出是按升序排序的。
-t :字符将指定的“字符”作为字段间的分隔符,默认为TAB。
-u, –unique :与-c选项一起用,严格地按顺序检查;否则,对排序后的重复行只输出第一行。
-k n1[,n2] :指定从文本行的第n1字段开始至第n2字段(不包括第n2字段)中间的内容作为排序关键字。如果没有n2,则关键字是从第n1个字段到行尾的所有字段。 n1和n2可以是小数形式。如”x.y”,x表示第x字段,y表示第x字段中的第y个字符。字段和字符的文职都是从1开始算起的。

举例:
1)将/etc/passwd中按第三列uid的数值大小排序输出
# cat /etc/passwd | sort -n -t ‘:’ -k 3

4、uniq命令
uniq命令将排序好后文件中的重复行去除。

一般格式:
uniq [选项]… [INPUT [OUTPUT]]

常用选项:
-c, –count :显示输出时,在每行的行首加上该行在文件中出现的次数。
-d, –repeated :只显示重复行。
-i, –ignore-case :忽略大小写。
-f, –skip-fields=N :忽略比较前N个字段。
-s, –skip-chars=N :忽略比较前N个字符。
-u, –unique :只显示文件中不重复的行。

举例:
1)查看/etc/passwd中,所有群组gid及它们的用户数
# cat /etc/passwd | cut -d ‘:’ -f4 | sort -n | uniq -c

参考资料:
http://fhqdddddd.blog.163.com/blog/static/1869915420112141191453/
http://xu020408.blog.163.com/blog/static/265489200972585911657/

来源http://www.live-in.org/archives/908.html

==========

Linux查看用户身份命令

Linux查看用户登录情况和用户身份有w、who、whoami、id这几个命令。

1、w
w命令用来查看当前登录系统的用户以及其正在执行的程序。

# w
01:38:50 up 5 days, 21:09, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.0.100 12:27 0.00s 0.02s 0.00s w

2、who
who命令用来查看当前有哪些用户登录。

# who
root pts/0 2011-09-25 12:27 (192.168.0.100)

3、whoami
whoami命令用来查看自身的用户名。相当于”id -un”。

# whoami
root

4、id
id命令用来查看用户和它所属群组的ID。群组包括当前有效群组和所属的其它群组。

# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

来源http://www.live-in.org/archives/885.html

  1. 2011年11月2日07:03

    评论不了了呢

    • iGFW
      2011年11月2日09:50

      呵呵,你评论被识别为垃圾评论了

  2. 2011年11月1日18:16

    Vi 和 vim 不同的, vim 較為方便,這些都要不斷使用才會掌握,我那網頁就是vim轉為html的, :TOhtml 然後 :wq

  3. 2011年11月1日18:11

    翻*墙*吧提供公开免费VPN账号和免费SSH账号
    来源:http://fanqiang8.info/free.html

    查看 s s h 密码
    查看 v p n 密码

    获取翻*墙教程和其他免费账号:chinagfw igfw.net ssh91
    常用链接:youtube facebook twitter

    付费账号推荐:

    防止域名被墙:请收藏邮件地址 fanq8&foxmail.com(&换成@),发送任意邮件到此邮箱可获得本站最新地址

    ps:v p n如无法连接,请去掉强制加密!

    • iGFW
      2011年11月1日22:47

      感谢提供的信息

  4. 小z
    2011年11月1日17:48

    嗯,跟着楼主慢慢学。vi会用的话确实很强大。