《转自》
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 |
这些命令掌握其中常用的部分就可以了。
来源:
==========
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
来源:
==========
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
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可以了。
来源:
==========
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
参考资料:
来源:
==========
Linux du命令
du命令用于显示文件或目录占用空间大小,显示的是所占的块的数量。块是Linux文件系统分配磁盘空间的最小单位,块的大小定义和文件系统有关, 使用“getconf PAGESIZE”命令查看块大小。如果一个文件大小小于块的大小它也占用了一个块,比如一个文件大小是76字节但是在du里查看它就是占了4K,因为系 统块的大小就是4K。
语法:du [选项] [目录或文件]
常用选项:
-a:显示目录下的所有文件
-s:显示所有文件的总计
-h:以更好的格式、可读性显示
du:显示当前目录下的所有目录和它们的子目录大小,不显示任何文件。
du *:显示当前目录下的所有目录、文件和它们的子目录大小,不显示子目录内的文件。
du -sh:以提高可读性的格式显示当前目录大小总计。
du -ah:以提高可读性的格式显示当前目录下面的所有目录和文件大小。
du -sh *:以提高可读性的格式显示当前目录下所有目录和文件,不显示子目录内的目录和文件。
du -ah *:以提高可读性的格式显示当前目录下面的所有目录和文件大小(用*显示所有会按字母顺序排序)
来源:
==========
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/
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)