命令
类型 | 命令 | 描述 | 附加(不用看这一列) |
---|---|---|---|
文件系统类 | ls/cd | 文件浏览、到达目录 | ext2/3/4 indexNode/ dataNode 硬链接、软链接 |
du | 磁盘使用描述 | ||
df | 磁盘系统描述 | ||
rm/rmdir/cp | 复制删除 | ||
系统状况 | free | 内存资源 | 内存模型 块 cpu/mem PC、时间片 |
iostat/memstat/netstat | 各种状态 | ||
drop_cache | 缓存管理 | ||
top/w | 直观的看状态 | ||
ps/pstree | 进程 | ||
find util | find | 找文件 | |
xargs | 标准输入输出转化 | ||
awk | 不是find util, 但是在linux上极其易用 | ||
文本处理 | vim | 必须品 | |
less/more/head/tail | 看文本的必需品 | ||
sed/tr | 文本匹配和转化 | ||
uniq | 去重 | ||
sort | 排序 | ||
wc | 字数统计 | ||
cat/zcat | 文本方式标准输出一个文件 | ||
文件处理 | tar | 包管理 | |
gzip/unzip | zip压缩 | ||
xz | 超高压缩比 | ||
od | 查看文件二进制码(遇到问题很有用),搭配sublime和 notepad++ | ||
网络操作 | curl | 配合chrome控制台 | |
wget | 下载 | ||
python -m SimpleHTTPServer | 单线程文件服务器 | ||
tcpdump | 就像charles抓包 | ||
进程、用户相关 | kill/killAll | 干掉进程 | |
lsof | 找到一个文件的持有句柄的进程 | ||
who/su/sudo/ssh | 我是谁, 我在哪, 我要干什么 | ||
chown/chmod | 我能做什么 | ||
useradd/grpadd/passwd | 我能管谁 | ||
其他了解 | systemd | 虚拟化、容器化伴侣 | |
service、supervisor | 老式伴侣 | ||
nohup | 标准输出重定向 | ||
> < | 标准输入输出重定向 | ||
0 1 2 | 标准输入、输出、错误输出 | ||
2 >&1 | 标准错误输出重定向到标准输出 |
内存分析
pmap 查阅一个进程对应的内存地址
使用C语言可以把这块地址读出来:
gdb --batch --pid 858 -ex "dump memory d.dump 0x7fdf20000000 0x7fdf20000000+49156"
gdb调试这段C语言。
关闭端口
sudo iptables -A INPUT -p tcp --dport 25 -j DROP
引申:
sudo iptables -A OUTPUT -p udp --dport 25 -j ACCEPT
编程
数组
声明一个数组:
declare -a arr
将一个文件度取到数组里面去
arr=($(cat y | awk '{print $0}'))
或者
n=0
while read line
do
avrr[$n]=$line
let n=$n+1
done < y
取数组大小以及数组值
${av[$i]}
或者
${av[@]}
业余积累
安装图床软件Chevereto-Free
php的安装命令(Cent OS)
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --enable-fastCGI --enable-fpm --with-curl --with-gd --enable-mbstring
原封不懂的拷贝目录结构而不拷贝数据
这种方法会打印出目录结构的构造语句, 需要拷贝执行:
find /server/ -maxdepth 3 -type d -exec ls -AdFhl {} \; | awk 'function auth(str){ read=0; if (substr(str,0,1)=="r") {read=4} write=0; if(substr(str,2,1)=="w") { write=2} exec=0; if (substr(str,3,1)=="x") {exec = 1} return read+write+exec;} {file_name=$9; owner=$3; group=$4; auth_of=auth(substr($1, 2, 3))""auth(substr($1, 5, 3))""auth(substr($1, 8, 3)); print "mkdir -p "file_name" && chown "owner":"group" "file_name" && chmod "auth_of" "file_name}'
折叠一下就是:
find /server/ -maxdepth 3 -type d -exec ls -AdFhl {} \; | awk '
function auth(str){
read=0;
if (substr(str,0,1)=="r") { read=4}
write=0;
if (substr(str,2,1)=="w") { write=2}
exec=0;
if (substr(str,3,1)=="x") { exec = 1}
return read+write+exec;
}
{
file_name=$9;
owner=$3;
group=$4;
auth_of=auth(substr($1, 2, 3))""auth(substr($1, 5, 3))""auth(substr($1, 8, 3));
print "mkdir -p "file_name" && chown "owner":"group" "file_name" && chmod "auth_of" "file_name
}'
之前想过使用管道输出给 tar 来构建, 命令为:
find /server/ -maxdepth 3 -type d | xargs tar -cvfp dir.tar
但是 tar 命令仍然会将目录下所有文件压缩, 因此还需要再改进
分析acess.log找到访问请求次数
zcat logs/access.2016-01-12.log.gz | awk '{if($7!="/heart.html"){print $7}}' | sort -n | awk -F '?' '{if($1 ~ /.*[0-9]/){split($1, arr, "/"); last_index_flag="/"+arr[length(arr)]; print substr($1, 0, index($1, last_index_flag)-2)}else{print $1}}' | uniq -c
折叠一下是:
zcat logs/access.2016-01-12.log.gz | awk '{if($7!="/heart.html"){print $7}}' | sort -n | awk -F '?' '{
if($1 ~ /.*[0-9]/){
split($1, arr, "/");
last_index_flag="/"+arr[length(arr)];
print substr($1, 0, index($1, last_index_flag)-2)
} else {
print $1
}}' | uniq -c
目的是为了查看tomcat服务器上的http访问日志中每一个访问请求的访问次数. heart.html是服务器心跳用的, 有的请求是使用了Spring的 ${Variable} 写法. 但是上诉代码只能屏蔽使用数字写法的, 使用其他写法的得使用正则去匹
写bash脚本 ftp upload
代码片段:
function scpToFtp() {
file_to_copy_to_ftp=$1
file_on_remote=$2
if [ -f $file_to_copy_to_ftp ]
then
ftp -i -n <<UPLOAD
open ftp.ftp.com
user ftp_user ftp_password
binary
put $file_to_copy_to_ftp $file_on_remote
quit
UPLOAD
echo "from "$file_to_copy_to_ftp" >>> "$file_on_remote
fi
}
scpToFtp file1 file2
次数有一大坑: put 那儿 所有空白字符都是空格,
不可以有制表等其他字符 出现
JAVA运维命令积累
jinfo 查看和修改java_opts
直接使用
jstat 查询jvm运行状态
jstat -gc 查询gc状态
jstat -class 查询类的加载情况
jmap 查询内存使用情况
jmap -dump:format=b,file=heap.bin 导出内存文件, 使用 eclipse memory anazy 分析
jmap -heap 查询内存使用情况