Linux 常用命令

chmod

1
2
3
4
5
6
7
8
#修改web目录下所有文件夹与文件的权限
chmod -R 755 web
#修改web目录下的所有目录权限
find web -type d -exec chmod 755 {} \;
#修改web目录下的所有文件权限
find web -type f -exec chmod 644 {} \;
#批量清空web目录下所有文件内容
for i in `find web -type f`;do cat /dev/null > $i;done

chown

1
2
3
4
#修改文件或目录的所属组和所有者
chown -R 组:用户 路径
#修改web目录及子文件所属组和所有者
chown -R www:www web

端口/进程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#杀死所有进程名包含WorkerMan的进程
ps aux|grep WorkerMan|grep -v grep|awk '{print $2}'|xargs kill -9;
# 管道符 "|" 用来隔开两个命令, 管道符左边命令的输出会作为管道符右边命令的输入
# "ps -ef" 是linux里查看所有进程的命令, 这时检索出的进程将作为下一条命令"grep WorkerMan"的输入
# "grep workerman" 的输出结果是所有含有关键字"WorkerMan"的进程
# "grep -v grep" 是在列出的进程中去除含有关键字"grep"的进程
# "xargs kill -9" 中的 xargs 命令是用来把前面命令的输出结果(PID)作为"kill -9"命令的参数, 并执行该命令, "kill -9"会强行杀掉指定进程
# "ps x" 是linux里显示所有进程的命令, 不以终端机来区分
# "awk '{print $1}'" 会匹配输出结果的第一个字段, $2 表示输出第二个字段;若是 awk '{print $1, $2}' 会匹配输出结果的第一个和第二个字段


#查看指定端口被哪个程序占用了
netstat -anp|grep 8383
lsof -i:8383

#查看所有的端口占用情况
netstat -ano

#Windows查看指定端口的占用情况
netstat -aon|findstr "9050"
协议 本地地址 外部地址 状态 PID
TCP 127.0.0.1:9050 0.0.0.0:0 LISTENING 2016

#Windows 查看PID对应的进程
tasklist|findstr "2016"

#Windows 结束进程
taskkill /f /t /im tor.exe

tar/zip

1
2
3
4
5
6
7
8
9
#tar打包
tar -cvf web.tar web/
#tar解压
tar -xvf web.tar

#zip打包
zip -r web.zip web/
#zip解压并覆盖
unzip -o web.zip

文件

1
2
3
4
5
6
7
#新增文件
touch test.txt
#清空文件
> test.txt

#查看当前目录下的文件数量
ls | wc -l

df/du

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#查看磁盘的使用情况以及文件系统被挂载的位置
df -lh

#查看目录所占空间
du -sh [可选,目录名]

#列出目录下所有文件大小
du -sh *

#获得机器中所有的硬盘的分区情况
fdisk -l

#查看目录挂载点
df [目录名] -kh

防火墙 Firewall

1
2
3
4
5
6
7
8
#查看所有信息
firewall-cmd --list-all
#添加开放端口(--permanent 表示永久生效)
firewall-cmd --add-port=80/tcp --permanent
#删除开放端口
firewall-cmd --remove-port=80/tcp --permanent
#重启服务
systemctl restart firewalld

yum

1
#安装失败后, 删除 /etc/yum.repos.d 目录下对应的 repo, 然后运行 yum clean all

ENV

1
2
3
4
5
6
#查看PATH环境变量
echo $PATH
#设置PATH
export PATH=路径1:路径2
#重新执行
source .bashrc

服务器时间同步以及修改为24小时制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#安装ntpdate工具
yum -y install ntp ntpdate
#设置系统时间与网络时间同步
ntpdate cn.pool.ntp.org
#将系统时间写入硬件时间
hwclock --systohc
#强制系统时间写入CMOS中防止重启失效
hwclock -w

#修改为24小时制
vi /etc/sysconfig/clock
ZONE="Asian/Shanghai"
UTC=false

cp /etc/localtime /usr/share/zoneinfo/Asia/Shanghai

通过进程名来杀死指定进程

1
pkill -f "进程名"

创建软链接

1
ln -s 源文件或目录 目标文件或目录

防火墙 Iptables

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#添加iptables 3306 端口
iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
#永久保存iptables规则
service iptables save

#添加iptables 3306 端口
vi /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
#保存退出并重启

#查看添加的iptables规则
iptables -nvL
#查看防火墙状态
service iptables status
#停止防火墙
service iptables stop
#启动防火墙
service iptables start
#重启防火墙
service iptables restart
#永久关闭防火墙
chkconfig iptables off
#永久关闭后重启
chkconfig iptables on

scp - Linux 之间复制文件和目录

1
2
3
4
5
6
7
8
# 参数说明 
-r 递归复制整个目录
-P 指定端口号(大写的 P)

# 本地复制至远程
scp local_file remote_username@remote_ip:remote_folder
# 远程复制到本地
scp remote_username@remote_ip:remote_folder local_file

删除过期文件

1
rm -rf /data/`date -d "3 days ago" +%Y%m%d`.txt

Centos7 开机启动自定义脚本

1
2
3
4
5
6
#1. 赋予脚本可执行权限
chmod +x /test.sh
#2. 打开 /etc/rc.d/rc.local, 在末尾添加以下内容
/bin/sh /test.sh
#3. 在 centos7 中, /etc/rc.d/rc.local 权限被降低了, 需要赋予执行权限
chmod +x /etc/rc.d/rc.local

systemctl

1
2
3
4
5
6
# 查看启动项 enabled是开机启动, disabled是开机不启动
systemctl list-unit-files
# 查看开机启动项
systemctl list-unit-files | grep enable
# 查看某服务
systemctl list-unit-files | grep postfix

指定用户运行命令

1
su - 用户名 -c "命令"

SSH 免密公钥登录

1
2
3
4
5
6
7
8
# 服务器 IP:121.21.211.211,端口:7777,用户名:www

# 生成 RSA 公钥私钥文件(这里存储路径 /Users/sev/.ssh)
ssh-keygen -t rsa
# 将公钥追加到远程服务器的 authorized_keys 文件
ssh-copy-id -i /Users/sev/.ssh/id_rsa.pub -p 7777 www@121.21.211.211
# 尝试登录
ssh -p 7777 www@121.21.211.211

rsync 远程数据同步

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 参数说明
-v, --verbose 详细模式输出
-a, --archive 归档(压缩)模式,表示以递归方式传输文件,并保持所有文件属性等同于 -rlptgoD (无 -H,-A,-X)
-r, --recursive 对子目录以递归模式处理
-e, --rsh=COMMAND 指定使用rsh,ssh方式进行数据同步
-z, --compress 在传输过程中进行压缩
-i, --itemize-changes 输出对所有更新的变更摘要
-h, --human-readable 用人类可读的格式输出数字

--delete 删除那些 DST 中 SRC 没有的文件(镜像同步)
--exclude=PATTERN 排除符合匹配规则的文件

-l, --links 不处理符号链接(保留符号链接)
-L, --copy-links 将符号链接处理为具体的文件或者文件夹
-p, --perms 保留权限
-o, --owner 保留所有者(仅限superuser)
-g, --group 保留组
-t, --times 保留修改时间
--devices 保留设备文件(仅限superuser)
--specials 保留特殊文件
-D 和--devices --specials一样

# Example - 同步本地本件(/Users/sev/test/ 目录下的文件)至远程服务器的 /home/www/test 目录下
rsync -azv -e "ssh -p 7777" --delete \
--exclude=.git \
--exclude=.idea \
--exclude=vendor \
--exclude=.gitignore \
--exclude=.gitlab-ci.yml \
--exclude=.DS_Store \
/Users/sev/test/ www@121.21.211.211:/home/www/test

expect 自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 常用选项
-c 执行脚本前先执行的命令,可多次使用。
-d debug模式,可以在运行时输出一些诊断信息,与在脚本开始处使用exp_internal 1相似。
-D 启用交换调式器,可设一整数参数。
-f 从文件读取命令,仅用于使用#!时。如果文件名为"-",则从stdin读取(使用"./-"从文件名为-的文件读取)。
-i 交互式输入命令,使用"exit""EOF"退出输入状态。
-- 标示选项结束(如果你需要传递与expect选项相似的参数给脚本时),可放到#!行:#!/usr/bin/expect --。
-v 显示expect版本信息

# 内部命令
spawn 交互程序开始后面跟命令或者指定程序
expect 获取匹配信息匹配成功则执行expect后面的程序动作
send exp_send 用于发送指定的字符串信息
exp_continue 在expect中多次匹配就需要用到
send_user 用来打印输出 相当于shell中的echo
exit 退出expect脚本
eof expect执行结束 退出
set 定义变量
puts 输出变量
set timeout 设置超时时间
interact 交互模式

SSH 登录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/expect -f
# 脚本名称:login.exp;运行命令:expect login.exp
spawn ssh root@192.168.0.77
expect {
"*yes/no" {
send "yes\r"
exp_continue
}
"*assword:" {
send "123456\r"
}
}

expect "]#" {
send "pwd\r"
}
expect "]#" {
send "exit\r"
}

expect eof

shell 内嵌 except 脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/sh
echo "Hello"

/usr/bin/expect <<-EOF
spawn ssh root@192.168.0.77
expect {
"*yes/no" {
send "yes\r"
exp_continue
}
"*assword:" {
end "123456\r"
}
}

expect "]#" {
send "pwd\r"
}
expect "]#" {
send "exit\r"
}

expect eof
EOF

echo "World"
0%