Linux常用命令总结

2016-01-06

以下是平时用到的Linux命令(会不定期更新)

端口扫描

方法一(推荐):

nmap -sT 192.168.0.1

方法二:

nc -v -w 2 '192.168.0.1 -i' 80-90

计划任务crontab

命令行添加计划任务:

先建立计划任务文件root

crontab < root  #导入计划任务
cron            #启动计划任务后台程序

压缩工具

7z

安装:apt-get install p7zip p7zip-full p7zip-rar

解压:7z x xxx.7z

启动项管理工具

小工具 rcconf:
#sudo apt-get rcconf
#sudo apt-get install rcconf
root 下运行: #sudo rcconf

功能更全的工具:sysv-rc-conf
#sudo apt-get update
#sudo apt-get install sysv-rc-conf
运行:#sudo sysv-rc-conf
也可以直接加入启动程序,例如把 /etc/init.d/red5 加入到系统自动启动列表中:
#sudo sysv-rc-conf red5 on

方法二:

如果要添加为开机启动执行的脚本文件,
可先将脚本复制或者软连接到/etc/init.d/目录下,
然后用:update-rc.d xxx defaults NN命令(NN为启动顺序),
将脚本添加到初始化执行的队列中去。
注意如果脚本需要用到网络,则NN需设置一个比较大的数字,如99。

删除自动启动项:

cd /etc/init.d
update-rc.d -f xxx remove

cd /etc/init/
mv xxx.conf ~    #移动掉不需要的启动项

vim /etc/rc.local   #修改自启动脚本里的启动项

Linux后台进程管理利器:supervisor

安装

apt-get install supervisor

安装2

easy_install supervisor

生成配置文件

echo_supervisord_conf >/etc/supervisord.conf

配置文件(每个进程的配置文件都可以单独分拆,放在/etc/supervisor/conf.d/目录下,以.conf作为扩展名,例如,app.conf定义了一个gunicorn的进程):

[program:app]
command=/usr/bin/gunicorn -w 1 wsgiapp:application
directory=/srv/www
user=www-data

其中,进程app定义在[program:app]中,command是命令,directory是进程的当前目录,user是进程运行的用户身份。

重启supervisor,让配置文件生效,然后运行命令supervisorctl启动进程:

supervisorctl start app

停止进程:

supervisorctl stop app

重新加载配置文件(平滑加载):

supervisorctl update

重启supervisor:

supervisorctl reload

*报错: unix:///var/run/supervisor.sock no such file

sudo touch /var/run/supervisor.sock
sudo chmod 777 /var/run/supervisor.sock
sudo service supervisor restart

*报错:supervisorctl start 报 ERROR (spawn error)

unlink /tmp/supervisor.sock

官方文档:http://supervisord.org/

MD5

根据字符串输出一段md5值:

echo -n 'hello'|md5sum|cut -d ' ' -f1

Screen

启动会话

[root@malu ~]# screen

[root@malu ~]# screen -ls
There is a screen on:
        123.pts-1.malu      (Detached)
1 Socket in /tmp/screens/S-root.
重新连接会话:
[root@malu ~]# screen -r 123

如果会话是Attached状态,可以用-d选项是之离线:

[ root@malu:~ ]$ screen -d
There are several suitable screens on:
	2412.pts-3.malu	(02/08/17 14:35:21)	(Attached)
	2314.pts-5.malu	(02/08/17 14:27:37)	(Attached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.
[ root@malu:~ ]$ screen -d 2412
[2412.pts-3.malu detached.]

[ root@malu:~ ]$ screen -ls
There are screens on:
	2412.pts-3.malu	(02/08/17 14:35:21)	(Detached)
	2314.pts-5.malu	(02/08/17 14:27:37)	(Attached)
2 Sockets in /var/run/screen/S-root.

启动一个带shell的离线screen:

# screen -dmS hack /home/act.sh

向会话发送指令:

# screen -S hack -X stuff 'ls\n'

在screen会话中创建一个新窗口,并在其中运行ping命令

# screen -S hack -X screen ping www.baidu.com

语法

# screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]

参数说明

-A  将所有的视窗都调整为目前终端机的大小。
-d <作业名称>  将指定的screen作业离线。
-h <行数>  指定视窗的缓冲区行数。
-m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r <作业名称>  恢复离线的screen作业。
-R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s  指定建立新视窗时,所要执行的shell。
-S <作业名称>  指定screen作业的名称。
-v  显示版本信息。
-x  连接到离线模式的会话(多窗口同步演示)
-ls 或 --list  显示目前所有的screen作业。
-wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

可以通过C-a ?来查看所有的键绑定,常用的键绑定有:

C-a ? 显示所有键绑定信息

C-a w 显示所有窗口列表

C-a C-a 切换到之前显示的窗口

C-a c 创建一个新的运行shell的窗口并切换到该窗口

C-a n 切换到下一个窗口

C-a p 切换到前一个窗口(与C-a n相对)

C-a 0..9 切换到窗口0..9

C-a a 发送 C-a到当前窗口

C-a d 暂时断开screen会话

C-a k 杀掉当前窗口

C-a [ 进入拷贝/回滚模式

参考文档:

http://man.he.net/?topic=screen&section=all

https://www.hclrc.com/744

http://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html

CentOS安装redis

yum install epel-release
yum install list
yum install redis

sed 命令

插入到最后一行
sed -i '$a\要插入的文字' file.txt
使用 -i 选项直接修改文件。
$ 匹配文件的最后一行位置
a 命令在后面append

*其实可以这样:
echo '要插入的文字' >> file.txt

插入到第一行
sed -i '1i\要插入的文字' file.txt

替换一行文字
sed -i 's/^被替换的文字/要替换的文字/' file.txt

匹配一行后追加文字
sed -i 's/关键字/&要追加的文字/g' file.txt

在每行的头添加字符,比如"HEAD",命令如下:

sed 's/^/HEAD&/g' file.txt

在每行的行尾添加字符,比如“TAIL”,命令如下:

sed 's/$/&TAIL/g' file.txt

"^"代表行首,"$"代表行尾

把错误输出到标准输出:2>&1

2> 表示把标准错误(stderr)重定向,尖括号后面可以跟文件名,或者是&1, &2,分别表示重定向到标准输出和标准错误。

nohup后台执行

nohup command > myout.file 2>&1 &

在上面的例子中,输出被重定向到myout.file文件中。   

使用 jobs 查看任务。   

使用 fg %n 关闭

监视某进程的资源占用情况(pid进程id):

ps -p pid

在目录中找指定后缀的文件内容包含某个关键字的:

find ./ -name "*.php"|xargs grep -n xxx

grep匹配上下文

grep -C 5 foo file 显示file文件中匹配foo字串那行以及上下5行

grep -B 5 foo file 显示foo及前5行

grep -A 5 foo file 显示foo及后5行

scp命令

scp -P 4588 root@www.abc.com:/root/sn.sh /home/admin

-r 递归目录

-v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 .

-C 使能压缩选项 .

-P 选择端口 . 注意 -p 已经被 rcp 使用 .

-4 强行使用 IPV4 地址 .

-6 强行使用 IPV6 地址 .

mount挂载目录

//挂载exfat
mount -t exfat -o iocharset=cp936 /dev/sdb1

获取BGP骨干网IP地址

//facebook
whois -h whois.radb.net -i origin AS32934|grep ^route

//谷歌 GAE解析地址:ghs.googlehosted.com
whois -h whois.radb.net -i origin AS15169|grep ^route

//[Incapsula](http://bgp.he.net/AS19551)
whois -h whois.radb.net -i origin AS19551|grep ^route

//cloudflare 节点众多,用这个查吧
http://bgp.he.net/search?search%5Bsearch%5D=cloudflare

ln建立文件系统链接

给网站目录建立软连接:

ln -s /app/www /var/www/html

按行数切割文件

split access.log.1 -l 100000 -d -a 2 access_ && ls|grep access_|xargs -n1 -i{} mv {} {}.log

说明:

-l:按行分割,上面表示将access.log.1文件按100000行一个文件分割为多个文件

-d:添加数字后缀,如00,01,02

-a 2:表示用两位数据来顺序命名

ssh

ssh连接的时候会出现:

The authenticity of host 'ssh.malu.me (14.17.80.36)' can't be established.
RSA key fingerprint is cf:ee:17:cb:2e:fc:12:d7:72:7e:ae:80:c0:91:88:a7.
Are you sure you want to continue connecting (yes/no)?

提示用户该指纹密钥需要确认才能继续连接,一般选yes就过了。

但是有些特殊情况不需要显示这个提示,那么需要在连接命令添加-o参数:

ssh -o "StrictHostKeyChecking no" user@host

或者修改 /etc/ssh/ssh_config 全局配置文件 或 ~/.ssh/config 用户配置文件:

Host *
   StrictHostKeyChecking no

ssh 在客户端中强制使用密码验证方式登陆:

在客户端,你可以在~/.ssh/config文件里加入:

PreferredAuthentications password

或者加上参数:

ssh -o PreferredAuthentications=password user@host

也可以在服务端:

sshd_config中的PubkeyAuthentication设为no

还可以把AuthenticationMethods设为publickey,password publickey,keyboard-interactive这样你就同时需要私钥和密码才能登录。

根据端口查看进程

lsof -Pnl -i4

-P : 这个选项约束着网络文件的端口号到端口名称的转换。约束转换可以使lsof运行得更快一些。在端口名称的查找不能奏效时,这是很有用的。

-n : 这个选项约束着网络文件的端口号到主机名称的转换。约束转换可以使lsof的运行更快一些。在主机名称的查找不能奏效时,它非常有用。

-l : 这个选项约束着用户ID号到登录名的转换。在登录名的查找不正确或很慢时,这个选项就很有用。

+M : 此选项支持本地TCP和UDP端口映射程序的注册报告。

-i4 : 仅列示IPv4协议下的端口。

-i6 : 仅列示IPv6协议下的端口。

另一条命令:

netstat -antp

精简返回结果:

netstat -lntp

查看磁盘信息

fdisk -l /dev/sda

lsblk

df -h

hdparm -I /dev/sda

dmesg|grep sda

查看内存占用情况

ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'

或者

top

alise 别名

常用别名设置 cat ~/.bashrc:

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

alias ls='ls -hFG'
alias l='ls -lFah'
alias ll='ls -alF'
alias lt='ls -ltrF'
alias ll='ls -alF'
alias lls='ls -alSrF'
alias llt='ls -altrF'

alias tarc='tar cvf'
alias tarcz='tar czvf'
alias tarx='tar xvf'
alias tarxz='tar xvzf'

alias g='git'
alias less='less -R'
alias os='lsb_release -a'
alias vi='vim'

# Colorize directory listing
alias ls="ls -ph --color=auto"

取消别名:

unalise cp

查看当前别名:

alise