辅助
#
快捷键
#
ctrl alt f1/f2/... # 终端切换
帮助
#
man
-f # 简要介绍
-k # 通配搜索
whatis # man -f
apropos # man -k
命令行
#
clear
pwd # 当前路径
bash
-c # 执行命令字符串
set -o # 设置快捷键模式,默认emacs
快捷键
<Tab> bash补全
<C-c> 中断
<C-d> eof
<C-tab> ls
<C-l> clean
<C-a> 移到行首
<C-e> 移到行尾
<C-u> 删除到行首
<C-k> 删除到行尾
<C-p> 上一个命令
<C-n> 下一个命令
<C-r> 查看历史 # <C-s> 向前查看历史
<C-s> 冻结
<C-q> 解冻
<C-t> 交换字符
<C-w> 删word
<C-z> 暂停到后台
<C-\> 中断
<C-/> 撤消
<C-_> 删除一行
<M-r> 取消历史变更
场景
禁用<C-s><C-q>, 以使<C-s>变为向前查看历史
stty -ixon -ixoff
stty STOP ^w # 把原<C-s>改成<C-w>
zsh
fish
tmux
session
window
pane
~/.tmux.conf
快捷键prefix <C-b>
系统
prefix
? # 帮助
: # 命令模式
[ # 复制模式
tmux
kill-server
source a
session
prefix
d # 脱离
D # 选择脱离
r # 重绘
s # 选择
~ # 信息历史
tmux
ls
attach a
# 返回session
-t name
rename-session a
switch -t a
window
prefix
c # 新建
& # 关闭
, # 命名
. # 编号
w # 选择
[0-9] # 切换
n # 向后切换
p # 向前切换
l # 置换
f # 所有window查找
pane
prefix
" # 横分
% # 竖分
x # 关闭
! # 移到新window
方向 # 切换
o # 切换到下一个
<C-o> # 向下旋转
<M-o> # 向上旋转
{ # 向前置换
} # 向后转换
<C-方向> # 调整size
<M-方向> # 5倍调整size
空格 # 切换布局
<M-[0-5]> # 选择布局
q # 显示编号
内置命令
source-file a
screen
-ls # 查看所有session
-r # 进入id
echo
watch -n 1 -d netstat -ant # 监视
forturn # 随机名言
toilet # 彩虹字
cowsay # 牛说
source # 当前shell执行
figlet # 大写字
sl # 火车
cal 9 1752 # 打印日历
date +%Y/%m/%d/%H:%M
bc
maxima # 符号计算
factor # 分解质因数
expect # 为运行的脚本预填表单
o-> 结束
#!/usr/bin/expect
spawn ssh outrun@192.168.1.103
expect "*password"
send "asdf\n"
expect eof
o-> 交互
#!/usr/bin/expect -f
spawn sudo /usr/local/mysql/bin/mysqld_safe --user=mysql
expect "*password:*"
send -- "asdf"
send -- "\n"
interact # interact留下交互, exit退出
o-> 后台执行 # 不要expect eof
if [fork]!=0 exit
disconnect
script/scriptreply # 终端录制
script -t 2>timing.log -a output.log
scriptreply timing.log output.log
jobs # 后台作业
fg # 后台作业调度到前台
bg # 继续执行后台作业
nohup
nohup *** > /dev/null 2>&1 &
文字处理
#
uniq # 删除重复列
cat file1 file2 # 上下拼接
paste file1 file2 # 左右拼接
-d '-' # 加分隔符
tac # 倒转行显示
wc # 统计行, 单词, 字符
grep
-v grep # 过滤掉grep
常用
grep -nr --exclude-dir={.git, res, bin} 'a' .
# 递归查找
xargs
-d "\t" # 定义分隔符
-t # -t打印执行的命令
-L 1 # 1行执行一次
-n 1 # 一次使用1项
-I arg1 sh -c 'echo arg1; mkdir arg1'
# 执行多命令
--max-procs 0 # 并行执行,不限数量
常用
代码行数
find -name "*.go" -or -name "*.py" |xargs grep -v "^$" |wc -l
复制最近修改的文件
ls -rt | tail -4 | xargs -i cp -r {} ~/sdb/work/ryxWork/架构/
awk
awk '{print $1}'
awk '{cmd="kubectl delete pvc "$1;system(cmd)}'
# 按行执行命令
sed
sed -i '1i\new line'
# 第一行前插入
常用
替换文本
sed -i "s/a/b/g" `grep -rl "a" ./`
sort
-r # reverse
-n # 显示行号
more
less
iconv
-l # 列出已知的编码
-f gbk -t utf-8 -c orig.txt -o tgt.txt # 转码
head -2
tail -2
-f
paste file1 file2 # 合并两个文件或两栏内容
-d '+' # 分隔符
nano
strings # 打印可打印字符
jq . a.json # 验证json格式
pv -qL 10 # 文件缓慢显示
aview # 图片文件化
媒体处理
#
convert # 转换图片
convert a.jpg a.png # 转格式
-resize 1024x768
convert -resize a.jpg a1.jpg
-sample 50%x50% # 缩略图
-rotate 270 # 顺时针旋转270度
-flip # 左右翻转
-paint 4 # 旋转角度
-draw # 加文字
convert -fill black -pointsize 60 -font helvetica -draw 'text 10,80 "A" ‘ a.jpg a1.jpg
# 用黑色, 60磅, helvetica字体, 在位置10,80 写A
-raise 5x5 # 右下增加
+raise 5x5 # 左上增加
-bordercolor red -border 5x5 # 红色边框
-mattecolor black -frame 5x5 # 黑色边框
-noise 3 # 油画
-monochrome # 噪声
-blur 80 # 高斯模糊
-flop # 底片
-negate # 黑白
-charcoal 2 # 炭笔
-spread 30 # 漩涡
-swirl 67 # 凸起
ffmpeg
系统
#
启动与任务
#
grub
/etc/default/grub # 设置文件
grub2-mkconfig -o /boot/grub2/grub.cfg # 使设置生效,update-grub 是debian下做的包装
upstart # 状态 waiting, starting, pre-start, spawned, post-start,running,pre-stop, stopping, killed, post-stop
systemv
systemd
systemctl
status
daemon-reload # 修改service文件后重载
systemctl list-units # list known units
systemctl list-unit-files # 已知的services
systemctl list-sockets # list socket units ordered by the listening address
systemctl enable NAME # 设置开机启动, 生成service脚本命令
systemctl disable NAME
systemctl start NAME
systemctl stop NAME
systemctl restart NAME
systemctl reload NAME
service
service start
service restart
service stop
service status
service --status-all
chkconfig iptables on/off # 设置服务启动
--level 2345 iptables off # 查看各level服务状态
--list iptables
at # 某时间运行一次
osmo # 计划任务软件
reap # 用于定时删除目录中文件,并打印日志
-h # 打印帮助信息
-t # 后台运行, 并设置时间间隔
-s # single 单次运行
cron
介绍
crond服务在systemd中被timer取代
使用
$ service crond start
$ service crond stop
$ service crond restart
$ service crond reload # 重载配置
$ crontab crontest.cron # 添加定时任务。打印的文件在用户根目录下
$ crontab -l # 列出用户目前的crontab
$ crontab -u # 设定某个用户的cron服务
$ crontab -r # 删除某个用户的cron服务
$ crontab -e # 编辑某个用户的cron服务
# crontab -u root -l 查看root的设置
/etc/crontab # 系统配置文件
/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly # 每小时、天、周、月执行的脚本
定时格式
M H D m d cmd
M: 分钟(0-59)每分钟用*或者 */1表示
H: 小时(0-23)
D: 天(1-31)
m: 月(1-12)
d: 一星期内的天(0~6,0为星期天)
cmd: 如 ~/a.sh
例子
crontest.cron文件中
15,30,45,59 * * * * echo "aa.........." >> aa.txt
# 每15分钟执行一次打印
0 */2 * * * date # 每两个小时
日志
#
dmesg # 启动日志
rsyslog # 日志管理, syslog的实现, 在systemd中被systemd-journal取代
mcelog # machine check exception log
journalctl # 日志查看
-x # 显示解释
-e # 显示到底部
-u # 指定unit名, 如kubelet
--no-pager # 不输出到管道来分页
-f # 追加显示
-q # 只显示warn以上信息
--user-unit # 指定用户
--since "2018-03-26"
--until "2018-03-26 03:00"
场景
journalctl -f --user-unit onedrive
journalctl -xefu kubelet --no-pager
电源
#
poweroff # 立即关机
shutdown -h now
-h # 关机
-r # 重启
pm-suspend # 挂起电脑
halt
用户
#
w # 在线用户名, 终端号, 登录时间, 空闲时间, 终端连接所有进程时间, 当前进程时间, 当前命令
id outrun # 用户信息
su
常用
切换登录
sudo -i su outrun
sudo
id # 用户信息, 所在组
passwd # 修改密码
useradd outrun # 创建用户
-g outrun # 指定组
-r # 是系统用户
-d /home/outrun # 指定登录目录
-u 544 # 指定id
userdel -r user1 # 完全删除用户
groups user1 # 查看组
groupadd ftp # 创建组
usermod # 修改用户状态
-a -G root outrun # 加入组
-l newuser user1 # 改名
-L user1 # 锁定
-U user1 # 解锁
-d /home/ftp ftp # 改登录目录
-u 123 outrun # 修改id
内核
#
uname -a # 查看版本
modprobe vboxdrv # 内核
lsmod # 显示当前系统加载的模块,如systemctl中start了的模块
dkms
status
配置
#
env # 查看所有环境变量
envsubst # 编译文件中环境变量
envsubst '${THREAD_NUM}' < decoder.conf.template > decoder.conf
getent # 查看系统数据库中数据
group docker # 查看docker用户组
ulimit -s unlimited # 限制shell启动资源, 不限制堆栈大小
-a 显示各种限制
-u 10000 最大用户数
-n 102400 文件句柄数
-d unlimited 数据段长度
-m unlimited 内存大小
-t unlimited cpu时间
-v unlimited 虚拟内存
系统设备
#
接口查看
#
lspci
lsusb
显示器
#
xrandr
# 多显示器布局
-q # 列出所有屏幕
--verbose # 列出所有屏幕详情
--output eDP1 # 指定屏幕
--off # 禁用屏幕
--primary # 指定主显示器
--mode # 分辨率
--pos # 指定屏幕在背景板的位置, 根据各屏幕分辨率、位置算
--rotate # 旋转屏幕
normal
left
right
inverted
声卡
#
amixer set Master 100% # 调节音量
alsamixer # 调节声音
alsactl # 设置alsamixer
store # 保存
restore # 加载
aplay -l
/etc/asound.conf
defaults.pcm.card 1
defaults.pcm.device 1
defaults.ctl.card 1
pactl
场景
默认声卡
pactl list short sources
pactl list short sinks
pactl set-default-source alsa_input.pci-0000_00_1b.0.analog-stereo
pactl set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo
系统监控
#
综合监控
#
uptime # 当前时间, 运行时间, 用户数, 系统负载
tload # 系统负载图(用字符画)
top
top -d 1 -p pid [,pid ...]
htop
按键
h # 帮助
atop
btop
nmon
glances
netdata
vmstat # 获得有关进程、swap、内存、cpu等系统信息
dstat # 定时收集系统信息
sar # 全面的系统活动情况
-u 3 5 # 查CPU负载, 3秒一次共5次
-d # 磁盘
-r # 内存
-W # SWAP
-n DEV # 网络接口
-n SOCK # socket连接信息
-n TCP # TCP连接
-b # I/O速率
-q # 平均负载
lxtask # GUI监控CPU、内存
sysdig
sysdig
-c
topprocs_cpu # 进程cpu top
evt.cpu=0 # 只统计cpu0
topprocs_net # 进程带宽 top
topprocs_file # 进程硬盘i/o top
topfiles_bytes # 文件读写 top
proc.name=httpd # 指定进程名
topfiles_time # 文件时间 top
topprocs_errors # 进程error top
topfiles_errors # 文件error top
topscalls_time # 系统调用时间 top
topscalls "evt.failed=true" # 系统调用出错 top
topconns # 网络连接 top
fdcount_by
proc.name "fd.type=file" # 进程文件描述符
fdbytes_by
fd.directory "fd.type=file" # 目录读写 top
fd.filename "fd.directory=/tmp/" # /tmp目录文件 读写top
fd.type # fd type i/o
echo_fds "fd.filename=passwd" # 所有名为passwd文件的i/o
stdout
proc.name=bash # 进程标准输出
fileslower 1 # 文件i/o 大于1ms
spy_users # 命令执行情况
-A # 只显示可读数据
-s 4096 # 指定 data buffer 字节
-r trace.scap # 指定trace file
-pc # 详情
csysdig # 交互式工具
-vcontainers # 容器资源
-pc # 详情
内存
#
slabtop # 内核片缓存信息
CPU
#
powertop # intel开发,找到高功率进程
mpstat # cpu统计信息
进程
#
pidstat -p 434 # 进程使用资源的情况
-u 1 # CPU
-r 1 # 内存
-d 1 # 磁盘
-w # 上下文切换
ps
aux # 用在unix style中, BSD格式显示
ef # 用在system v style中, 标准格式显示
pstree # 进程关系
pwdx [pid] # 查看进程工作目录
ll /proc/[pid]/cwd
pmap [pid] # 进程
kill 1024
-9
# 3 QUIT 退出(同ctrl + \)
# 1 HUP 终端断线
# 2 INT 中断(同ctrl + c)
# 9 KILL 强制终止
# 15 TERM 终止
# 18 CONT 继续(与STOP相反, 同fg/bg)
# 19 STOP 暂停(同ctrl + z)
-l # 列出所有信号名称和编号
常用
删除名字的进程
ps -ef|grep -v "grep"|grep aurora/app.js |awk '{print $2}'| xargs kill -9
pkill Xorg # kill 所有包含
killall Xorg # kill 所有包含
xkill # 运行后 在xwindow点击kill窗口
网络
#
配置
#
hostname
nmtui # 设置网卡
nmcli # 设置网络连接
sudo nmcli c mod 'Wired connection 1' ipv4.never-default false
# 解决manual ip不能设置路由的问题
wpa_supplicant
iwlist # 列出无线网
iwconfig # 无线网卡设置
wifi-menu
pppoe # 宽带
ifconfig
打开, 关闭网卡
ifconfig eth0 up
ifconfig eth0 down
临时修改ip
ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up
# up表示立即激活
临时mac
ifconfig enp0s20u6u3 hw ether 00:50:56:c0:00:02
虚拟网卡
ifconfig wlp7s0:1 ip netmask
# 共用一个ip
netctl # 配置网卡服务
route
-n # 查看路由表
//添加到主机的路由
route add –host 192.168.168.110 dev eth0
route add –host 192.168.168.119 gw 192.168.168.1
//添加到网络的路由
route add –net IP netmask MASK eth0
route add –net IP netmask MASK gw IP
route add –net IP/24 eth1
//添加默认网关
route add default gw IP
//删除路由
route del –host 192.168.168.110 dev eth0
arp -n # 显示局域网 ip mac表
-s ip mac # 设置ip mac表
ip # 网卡与ip信息
添加路由
ip route add 10.146.81.0/24 via 10.146.81.29
配置ip段互斥的宿主机转发
服务器
ip link set up dev tun0
sysctl net.ipv4.ip_forward=1
/etc/sysctl.d/30-ipforward.conf
net.ipv4.ip_forward=1
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.forwarding=1
客户端
ip addr add 192.168.123.201/24 dev eth0 # 要转发的网段
ip link set up dev eth0
ip route add default via 192.168.123.100 dev eth0 # 服务器ip
hostapd # 无线热点
yum install hostapd
vi /etc/hostapd/hostapd.conf
wpa_passphrase=asdfasdf
ssid=myflowers
interface=p3p1
yum install dhcp
vi /etc/dhcp/dhcpd.conf
option domain-name-servers 192.168.0.1,8.8.8.8; # 自己的dns提供商
option routers 192.168.0.42; # 本机ip
option domain-name "mydhcp";
option domain-name-servers 192.168.0.1;
log-facility local7;
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.160 192.168.0.170;
option broadcast-address 192.168.0.255;
}
测试工具
#
ab # 压测
ab -c 10 -n 100 https://www.baidu.com/
# 10并发100次, url结尾要有/
mtr # myTrace, 合并ping与traceroute,默认发送ICMP包, 做持续探测, 避免节点波动的影响
traceroute # 做一次探测, 默认UDP包, 发包TTL值逐渐增大
-I # 使用ICMP包
ping
telnet
nslookup # 查域名ip
dig # 域名解析
nmblookup -A ip # 查ip域名
nmap
-sP ip/24 # 查看网内所有ip
-p1-65535 # 扫描所有端口
常用
nmap 192.168.100.1/24 -p1-65535
nc # netcat, 功能全面
-U a.sock # 指定socket
-v # 显示详情
-z # 只测试连通
-u # 使用udp
o-> 测试udp端口
nc -vzu 127.0.0.1 1194
o-> 文件传输
nc -l -p 9999 | tar xf -
tar cf - $(find . -name "*") | nc -v 10.99.11.44 9999
rinetd # TCP端口转发
rinetd.conf
0.0.0.0 80 192.168.1.2 80
rinetd -c /etc/rinetd.conf
simplehttp
python -m SimpleHTTPServer 8080
请求工具
#
curl
curl -v # 详细头信息
curl -H "Cookie: foo=bar; baz=val" # 发送cookie
curl -X post -k http://localhost:9090/a -H "Content-Type: text/plain" -d '{"name": "a"}'
# post请求
curl -O http://104.223.142.166/isu80 # 抓文件
wget
-i filelist.txt # 下载一个文件中的所有url
-x # 强制创建目录
-P # 目录prefix
-r # 递归下载
-l # 最大递归深度, inf或0代表无限制
-k # 修改链接,指向本地文件
-p # 下载所有用于显示页面的资源, 如图片
-L # 只跟踪relative链接
-N # 只获取比本地新的文件
-np # 不追踪父目录
-m # 缩写-N -r -l inf --no-remove-listing
--no-remove-listing # 不删除listing文件
常用
爬网站
wget -x -P curSite -r -l 100 -k -L -np http://nodeapi.ucdok.com/api/
带cookie
wget --post-data="username=u1&password=asdf" --save-cookies=cookie --keep-session-cookies "http://www.abc.com/logging.php"
wget -x -P curSite -r -l 1 -k -L -np --load-cookies=cookie --keep-session-cookies "https://www.abc.com/display/1"
ssh
ssh 10.1.10.2 -L 9901:localhost:5901
# 用ssh建tunnel访问内部端口
ssh -t -L 5900:localhost:5900 remote_host 'x11vnc -localhost -display :0'
# 本机执行命令并端口映射
sshpass
sshpass -p asdf ssh root@47.74.230.238
sshfs -o allow_other root@ip:~ /mnt # 挂载远程目录
scp a.txt root@ip:~
w3m # 命令行浏览器
vnc # 远程桌面
Virtual Network Computing
相关文章
linux 自带远程桌面--VNC服务配置说明
安装
yum install vnc*
yum install *vnc-server*
启动
vncserver :1
登录
vncviewer # fedora 下gnome自带的vncviewer名为:Remote Desktop Viewer
输入192.168.0.62:1 # 实际端口号为5901, 如果服务号为2则为5902
或者浏览器java-plugin
localhost:5801 # 需要安装java
监控
#
iftop -n # 流量监控
ntop # 流量监控, web界面
# localhost:3000
-W 3001
# Loss%丢包率, Snt每秒包数, Last最近一次延迟, Avg平均值, Best最小值, Worst最大值, StDev标准差
-u # 使用udp包
--no-dns # 不对ip做域名反解析
-4 # 只用ipv4
-6 # 只用ipv6
结果
1,2,3,4 本地网络
5,6 运营商骨干网络
7,8,9,10 目标服务器本地网络
8 链路负载均衡
tcpdump
-v # verbose输出
-vvv # 最详细输出
-n # 网络地址显示数字
-nn # ip和端口显示
-i # 指定网卡
-c 100 # 100条后退出
-w file1 # 保存到文件
-r file1 tcp # 从文件读取,指定tcp协议
-G 5 -w /opt/capfile-%Y_%m%d_%H%M_%S # 滚动日志
greater 200 # 报文字节大于200
host 192.168.0.1 # 包含ip
port 80 # 包含端口
port !80
dst host 192.168.0.1 # 目标ip
dst port 80 # 目标端口
src host
src port
net 192.168.0.1/32 # 包含网段
udp/tcp/icmp/igmp/arp # 指定协议
ip # ip协议
ip proto ospf # 类型为ospf的ip包
ip[9]=6 # ip包头第10字节为6(tcp协议)
ether multicast # 二层类型为多播
ether src host 00:0c:29:9a:1f:4e # 二层mac
常用
tcpdump -i eth0 -vnn \(src host 8.8.8.8 and port 80 \) or \(src host 10.10.10.10 and dst port 443\)
tcpdump -n tcp port 8383 -i lo and src host 183.14.132.117
iotop # 实时监视io
p # 显示pid
o # 只显示活跃
iostat # 负载情况
lsof -i:8080 # 列出当前系统打开的文件,必须root运行才准确
-i # 端口
-P # 显示端口号而非名称
-n # 显示ip而非域名
-i -n -P # 查看进程句柄数
nicstat # 网络流量统计
netstat
-a # 显示所有
-n # 显示数字,而不是别名
-t # 仅显示tcp
-u # 仅显示udp
-p # 显示建立链接的程序名
-l # 仅列出listen的服务
-o # 显示timer, 如keepalive
-antpu # 端口
tapestat # 磁带驱动器信息
ss # 端口,性能高
-l # listening
防火墙
#
getenforce # 查看selinux状态
sestatus -v # 查看selinux状态
setenforce 0 # 临时关闭selinux
1 # 启用
ufw # ubuntu, 简化防火墙
iptables [-t 表] -命令 匹配 操作
参数
-t # 要操作的匹配表
命令
-P # 策略, INPUT等
-A # append, 添加
-I 1 # 在第2条前添加
-D 1 # delete, 删除
-R 1 # 替换
-L # list 显示
-n # 端口以数字显示
-v # verbose, 显示更多信息
-F # flush
-X # 清除自定chain
-Z # 清除统计数
规则
-p # 协议
-i # 指定网卡流入
-o # 指定网卡流出
-s # 来源ip, !表示排除
-d # 目标ip
--sport # 源端口
--dport # 目标端口
-m # 使用模块, 会根据-p选择模块
动作
-j # 跳转
ACCEPT
四表(table)
raw # 跟踪
mangle # 标记
nat # 修改ip、port
filter # 过滤, 默认
五链(chain)
PREROUTING
FORWORD # INPUT前转发到POSTROUTING
INPUT
OUTPUT
POSTROUTING
策略(policy)
ACCEPT # 通过
REJECT # 拒绝,返回数据
返回数据包
ICMP port-unreachable
ICMP echo-reply
tcp-reset
iptables -A INPUT -p TCP --dport 22 -j REJECT --reject-with ICMP echo-reply
DROP # 丢弃
REDIRECT # 导向端口(PNAT)
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT--to-ports 8081
MASQUERADE # 改写来源ip为本机ip, 可指定目标端口范围
iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 21000-31000
LOG # 日志, 记在/var/log
iptables -A INPUT -p tcp -j LOG --log-prefix "input packet"
ULOG
SNAT # 改写源地址, 只适用POSTROUTING
iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT --to-source 192.168.10.15-192.168.10.160:2100-3200
DNAT # 改写目标地址, 只适用POSTROUTING
iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.10.1-192.168.10.10:80-100
TOS
MIRROR # 对调源ip与目标ip后返回
QUEUE # 封包入队列待处理,实现功能如:计算联机费用
RETURN # 退出当前规则链, 返回主规则链
TTL
MARK # 对包做标记数字
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 22
规则(rule) # 自定义的条件
配置文件
/etc/sysconfig/iptables
/usr/libexec/iptables/iptables.init
save
rules.v4 # 自定义配置
*filter
:INPUT ACCEPT [186:19951]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [71:11164]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 23 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 24 -j ACCEPT
COMMIT
命令
systemctl enable iptables.service
service iptables save
service iptables restart
iptables-restore < rules.v4
# 导入配置
案例
关iptables
service iptables stop
chkconfig iptables off
查看
iptables -L -n -v --line-numbers
查nat表
iptables -t nat -L
flush, 生效
iptables -F
service命令
service iptables save
service iptables stop
service iptables start
service iptables restart
开机启动
/etc/network/if-pre-up.d/iptables
iptables-restore < rules.v4
插入规则
iptables -I INPUT 2 -s 202.54.1.2 -j DROP
删除规则
iptables -D INPUT 4
开放所有input/output
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
开放input/output tcp 22
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
vpn转发
iptables -t nat -A POSTROUTING -s 192.168.252.0/24 -j SNAT --to-source 10.171.83.146
屏蔽私有地址
iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
屏蔽ip
iptables -A INPUT -s 1.2.3.4 -j DROP
iptables -A INPUT -s 192.168.0.0/24 -j DROP
iptables -A OUTPUT -d 192.168.1.0/24 -j DROP
iptables -A OUTPUT -o eth1 -d 192.168.1.0/24 -j DROP
屏蔽端口
iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP
iptables -A INPUT -i eth1 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP
记录并屏蔽
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
mac屏蔽
iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP
# *only accept traffic for TCP port # 8080 from mac 00:0F:EA:91:04:07 * ##
iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT
屏蔽icmp
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP
开启范围端口
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT
开启范围ip
iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT
nat
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 123.4.5.100
# 改写来自192.168.1.0/24的包, 源ip为123.4.5.100
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -i eth1 -j DNAT --to 123.4.5.100
# 改写来自192.168.1.0/24的包, 目标ip为123.4.5.100
iptables -t nat -A POSTROUTING -s 172.27.0.0/16 -d 10.0.0.1 -p tcp --dport 80 -j SNAT --to-source MASQUERADE
# 改写来自172.27.0.0/16去向10.0.0.1:80的tcp包, 源ip为本机ip
iptables -t nat -A PREROUTING -d 192.168.1.1 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1
# 改写去向192.168.1.1:80的tcp包, 目标ip为10.0.0.1
firewall
systemctl start firewalld
o-> ftp
firewall-cmd --zone=public --add-port=20/tcp --permanent
firewall-cmd --zone=public --add-port=21/tcp --permanent
firewall-cmd --permanent --add-port=1000-2000/tcp
firewall-cmd --complete-reload
o-> 8080
firewall-cmd --query-port=8080/tcp
--add-port=8080/tcp --permanent --zone=public
--reload
--get_active-zones
--list-all
--set-default-zone=public
o->
firewall-cmd --permanent --remove-port=8080/tcp
存储
#
硬盘
#
fdisk -l
cfdisk
sfdisk
parted
mkfs
mkswap
testdisk /dev/sdb1
e2fsck -a /dev/sdb1 # 修复ext2
ntfsfix -d -b /dev/sdb1 # 修复ntfs坏扇区和脏标记
fsck /dev/sda1 # 检查并修复
udisks --detach 设备编号 # 移除磁盘
mount /dev/sdb1 /mnt
-o acl # 打开acl功能
-o loop x.iso # 挂载文件
-o iocharset=utf8 # 指定编码
-t vfat # 指定类型
umount
-n # 执行umount却不写入
-l # lazy
-f # force
df -h # 已挂载分区列表
-T # 查看分区类型
blktrace # 磁盘访问情况
lsblk # 查看挂载的分区
lvs
LVM逻辑卷的创建流程如下:
将一个磁盘或分区格式化为物理卷:pvcreate /dev/sdb1
将物理卷添加到一个卷组中:vgcreate linuxcast-vg /dev/sdb1 /dev/sdb2
基于卷组创建一个逻辑卷mylv:lvcreate -L 10G -n mylv linuxcast-vg
格式化逻辑卷:mkfs.ext4 /dev/linuxcast-vg/mylv
挂载使用:mount /dev/linuxcast-vg/mylv /mnt
逻辑卷查看命令:
pvdisplay
pvs
vgdisplay
vgs
lvdisplay
lvs
删除一个逻辑卷:
lvremove /dev/linuxcast-vg/mylv
删除一个卷组:
vgremove linuxcast-vg
删除一个物理卷:
pvremove /dev/sda1
nfsiostat # nfs驱动器信息
cifsiostat # CIFS信息
growpart # 磁盘热扩容
文件操作
#
fuser # 查看文件被谁使用
-u # 列出使用者用户名
-uk # 终止文件的所有进程
-n tcp 8080 # 列出端口的进程号
ldd /bin/ls # 查看可执行文件动态引用模块
rename 's/\.bak$//' *.bak # 重命名
rm -rf
touch
-t 0712250000 file # 修改文件时间戳(YYMMDDhhmm)
ls *[0-9]*
-t # 时间排序
-R # 递归显示文件
-l # 详情
-S # 按大小排列
-r # reverse
-h # 自动大小单位
-F # 加后缀标识类型
-Z # 显示文selinux状态
tree
mkdir
rmdir
cd
~
-
cp
-r # 递归
-p # 带权限复制
-d # 保留链接
-a # -dpr
mv
whereis
which
find .
maxdepth 1
-name "*.go"
-type f
-atime +100 # 100天未使用过的执行文件
-mtime -10 # 10天内创建或修改的文件
-exec chmod +x # 对找到的文件执行命令
-xdev # 忽略块设备
file # 探测文件类型
file 可执行文件 # 可查看是否静态编译
ln
du -d 1 -h
-s # 只返回汇总情况
-k # 统一单位
tar xf
cfzv x.tar.gz x # 压缩
xfzv x.tar.gz # 解压
--exclude=/proc
gzip x # 压缩
-d x # 解压
unzip
常用
unzip中转码
unzip -P “$(echo 中文 | iconv -f utf-8 -t gbk)”
unzip-beta # 解压并转码中文
diff # 改变以匹配第二个文件
diff -y a b
diff dir1 dir2
diff -uN a b > b.patch
patch -p0 < b.patch
patch -RE -p0 < b.patch
diff -uNra a b > b.patch
cd a
patch -p1 < ../b.patch
patch -RE -p1 < ../b.patch
rsync -av --exclude=.git --exclude=logs/* ./* 192.168.0.14:/data/app/ext-marketing/
vimdiff a b
mucommander # 跨平台文件管理软件
shred # 文件粉碎
rclone # 云存储同步
config # 配置向导
ls [name]: # 显示文件
lsd [name]: # 显示文件夹
copy a [name]:a # 上传
cleanup # 只保留最新版本
sync # 本地向远程同步
mount # 双向一致同步
fusermount -u /path/to/local/mount
# umount
rclone-browser # rclone GUI
onedrive
onedrive --resync
常用命令
systemctl --user enable onedrive
systemctl --user start onedrive
journalctl --user-unit onedrive -f
权限
#
chmod ugo+rwx # u拥有者, g群组, o其他人, +添加, -删除, r读、w写、x执行
chmod a+rwx # a指所有人
chattr +i file # 改变属性
lsattr file
chown -R outrun:outrun .
chgrp -R outrun .
getfacl # 查看一个文件的ACL设置
setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
-b # 去掉所有acl设置
-m u:sudo:rwx filename # 配置用户权限
-m g:sudo:r-x filename # 配置组的权限
-x u:user1 filename # 删除一个ACL设置
-d -m g:sudo:rwx # 指定default
chcon # 修改文件安全上下文
-R # 递归
-t # type
-u # user
-r # role
--reference # 参照更新
chcon -R -t mysqld_db_t /data
chcon -R --reference=/var/lib/mysql /data
功能软件
#
包管理
#
snap
list # 列已安装
info # 查看仓库所有版本
find # 搜索
install
remove
refresh # 更新
refresh all
revert # 还原到上个版本
--revision # 指定版本
run # 运行命令
start # 运行service
--enable # 开机启动
stop # 停止service
save # 存配置快照
saved # 列出所有快照
rpm # 源 rpm fusion
-i 安装
-e 卸载
-qa 查看安装的包名
-ql 包名, 查看安装的文件
-qc 包名, 查看软件的配置文件
pacman
命令 pacman<操作> [选项] [目标]
操作
-Q # 查询
-S # 安装
-R # 删除
-D # 数据库
-F # 文件
选项
选项-S, -R, -U
-s
选项-S, -U
选项-Q
-s # 搜索
-e # 明确指定的
-n # 本地的
-q # 静默
-i # 详情, 两个i显示备份文件和修改状态, 显示依赖
-l # 列出文件
-o # 显示拥有此文件的包名
选项-R
-s # 递归
-c # 级联依赖此包的包
-n # 不记录备份信息
选项-S
-s # 搜索
-y # 刷新, 两个y强制升级所有包数据库
-q # 静默
-u # 系统升级
-c # 清理, 一个c清理未安装包, 两个c清理所有cache
选项-D
选项-F
目标
常用
-Qeq | pacman -S - # 重新安装所有包
-S $(pacman -Qnq) # 重新安装所有包
-Ss ^ibus-* # 通配search
-S $(pacman -Ssq fcitx*) # 通配安装
-R $(pacman -Qsq fcitx) # 通配删除
-Rcns plasma # 删除plasma
-Rns # 删依赖并删配置
-Scc # 清除缓存
-Qii zsh # 包信息
-Ql zsh # 查看安装的文件
-Qo /bin/zsh # 查看文件属于的包
-Qdt # 查孤儿包
源
mirrors.163.com
apt
源
阿里云mirror: https://developer.aliyun.com/mirror
ubuntu
sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
downgrade # 用于给pacman安装过后软件降级
yum
list # 列出所有包
updates # 列可更新的包
installed # 列已安装
extras # 已安装但不在yum repository的包
search
install
remove
info # 包详情
updates
installed
extras
provides # 包文件
whatprovides 'bin/isstat' # 查看命令属性哪个包
history
list
redo 序号 # 重新做序号
undo 序号 # 恢复历史中执行的动作
groups list # 查看安装的组
设置代理
/etc/yum.conf
proxy=http://XXX.XXX.XXX.XXX:XXXX
或
proxy=FTP://XXX.XXX.XXX.XXX:XXXX
proxy_username=你的用户名
proxy_password=你的用户名的密码
编译用包
build-essential # yum中基本编译依赖包
yum install make cmake apr* autoconf automake curl-devel gcc gcc-c++ zlib-devel openssl openssl-devel pcre-devel gd kernel keyutils patch perl kernel-headers compat* mpfr cpp glibc libgomp libstdc++-devel ppl cloog-ppl keyutils-libs-devel libcom_err-devel libsepol-devel libselinux-devel krb5-devel zlib-devel libXpm* freetype libjpeg* libpng* php-common php-gd ncurses* libtool* libxml2 libxml2-devel patch freetype-devel ncurses-devel libmcrypt libtool flex pkgconfig libevent glib libgnomeui-devel
dpkg # 管理deb包程序
-i # 安装
-r # 删除
pkgfile # 查看命令所需的包
编译
#
:() { :|:& };: # fork bombmake
make
注意
缩进只能用tab
命令
make
make install
make glide
条目里执行shell
@echo $(shell $(SHELL_PATH))
o->
TESTS = test/*.js
REPORTER = spec
TIMEOUT = 10000
MOCHA_OPTS =
test:
@NODE_ENV=test ./node_modules/mocha/bin/mocha \
--reporter $(REPORTER) \
--timeout $(TIMEOUT) \
$(MOCHA_OPTS)
$(TESTS)
test-cov
@$(MAKE) test MOCHA_OPTS='--require blanket' REPORTER=html-cov > coverage.html
test-all: test test-cov
.PHONY: test
o->
TESTS = $(shell ls -S `find test -type f -name "*.js" -print`)
TESTTIMEOUT = 5000
MOCHA_OPTS =
REPORTER = spec
install:
@$PYTHON=`which python2.6` NODE_ENV=test npm install
test:
@NODE_ENV=test ./node_modules/mocha/bin/mocha \
--reporter $(REPORTER) \
--timeout $(TIMEOUT) \
$(MOCHA_OPTS) \
$(TESTS)
test-cov:
@$(MAKE) test REPORTER=dot
@$(MAKE) test MOCHA_OPTS='--require blanket' REPORTER=html-cov > coverage.html
@$(MAKE) test MOCHA_OPTS='--require blanket' REPORTER=travis-cov
reinstall: clean
@$(MAKE) install
clean:
@rm -rf ./node_modules
build:
@./bin/combo views .
.PHONY: test test-cov clean install reinstall
cmake
makepkg # 创建软件包
调试
#
perf # 性能调优
strace # 跟踪系统调用
itrace # linux系统编程中跟踪进程的库函数调用
-S ./hello # 跟踪所有系统调用
dtrace # 应用程序动态跟踪
bpftrace # btrace2.0
gdb
SystemTap # 内核动态探针
图形程序
#
桌面
#
kde
xfce
gnome
#
启动
.xinitrc
exec gnome-session
startx
gnome3应用程序列表
/usr/share/applications
取消ctrl+alt+down/up
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-down "['']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-up "['']"
gnome-shell
alt + f2后输入lg
gnome terminate
ctrl + shift + c/v # 复制/粘贴
ctrl + shift + t/n # 打开新标签/新窗口
ctrl + w 或 alt + backspace # 删除最后的word
ctrl + shift + w/q # 关闭当前term/所有term
ctrl + shift + f/g/h # 搜索/搜索下一个/搜索上一个
ctrl + pageUp/pageDown # 切换标签
ctrl + shift + pageUp/pageDown # 移动标签
alt + 1/2/3/..../0 # 切换到第1/2/3/....../10个标签
系统快捷键
右键快捷键
shift + f10
i3
#
启动
.xinitrc
exec i3
awesome
#
启动
.xinitrc
exec /usr/bin/awesome >> ~/.cache/awesome/stdout 2>> ~/.cache/awesome/stderr
命令
awesome
awesome-client
配置
配置模板
/etc/xdg/awesome/rc.lua
.config/awesome/rc.lua
Variable definitions # 可定义布局优先级
Menu # 右键菜单
Wibar # 生成screen, 设壁纸
Mounse bindings # 鼠标键绑定函数
Key bindings # 快捷键
Rules # client规则, 如在哪个screen显示
Signals # client启动信号触发动作
自定义
API
文档地址
https://awesomewm.org/apidoc/
快捷键简写
modkey # win键
Mod1 # alt
gears # 工具组件
wibox # wibar
widget
layout
beautiful # theme
init(gears.filesystem.get_configuration_dir() .. "/themes/default/theme.lua")
# 主题
useless_gap = 5 # 窗口间隔
theme.lua文件
theme.wallpaper = "~/.config/awesome/themes/awesome-wallpaper.png"
# 背景
naughty
notify({ preset = naughty.config.presets.critical, title = "Oops, there were errors during startup!", text = awesome.startup_errors })
menubar
menu_gen
hotkeys_popup
awful
layout
tag({ "1", "2", "3", "4", "5", "6", "7", "8", "9" }, s, awful.layout.layouts[1])
key({ modkey }, "F12", function () awful.spawn{ "xlock" } end)
# 快捷键
awful.key({ "Mod1" }, "Escape", function () awful.menu.menu_keys.down = { "Down", "Alt_L" } awful.menu.clients({theme = { width = 250 }}, { keygrabber=true, coords={x=525, y=330} }) end),
widget
rules
spawn("firefox", { tag = mouse.screen.selected_tag })
util.spawn_with_shell("~/.config/awesome/autorun.sh")
# 随桌面启动脚本
autorun.sh
#!/usr/bin/env bash
# nothing to use
function run {
if ! pgrep $1 ; then
$@&
fi
}
if randr | grep -q 'eDP1 connected' ; then
run xrandr --output VIRTUAL1 --off --output eDP1 --mode 1920x1080 --pos 0x720 --rotate normal --output DP1 --off --output DP2-1 --mode 2560x1080 --pos 3360x720 --rotate normal --output DP2-2 --off --output DP2-3 --off --output HDMI2 --off --output HDMI1 --primary --mode 2560x1440 --pos 1920x0 --rotate left --output DP2 --off
fi
run ibus-daemon -d -x
run nm-applet
插件
revelation # 全局client
shifty # 动态tag
naughty # 通知
vicious # widgets
obvious # widgets
bashets # widgets
小程序
#
cmatrix # 终端黑客帝国
screenfetch
import # 截图
import a.png # 选取区域
-pause 3 -frame a.png # 截窗口, 延迟3秒(为了选定)
xgamma -gamma .75 # 调整屏幕色值
display # 显示图片
display *.png # 幻灯片
-delay 5 # 5百分之秒切换
快捷键
空格 # 下一张
退格 # 上一张
h # 水平翻转
v # 垂直翻转
/ # 顺时针翻转90度
\ # 逆时针旋转90度
> # 放大
< # 缩小
f7 # 模糊
任务栏
#
nm-applet
# 联网
输入法
#
fcitx
ibus
ibus-daemon -d -x -r # ibus后台运行
模拟
#
wine
winetricks # 安装wine的各种依赖
cabextract # microsoft cabinet获取工具
资源管理
#
nautilus
快捷键
<Ctrl+L> # 路径编辑
<Ctrl+W> # 关闭tab
<Ctrl+Shift+W> # 关闭所有tab
<Ctrl+T> # 新建tab
<F9> # 侧边栏