apt-get upgrade:升级软件
apt-get install software_name :安装软件
apt-get --purge remove software_name :卸载软件及其配置
apt-get autoremove software_name:卸载软件及其依赖的安装包
dpkg --list:罗列已安装软件
进程相关的命令
1.CPU占用最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k3|head -10
2.内存消耗最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k4|head -10
3.虚拟内存使用最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k5|head -10
4.也可以试试
ps auxw --sort=rss
ps auxw --sort=%cpu
5.看看几个参数含义
%MEM 进程的内存占用率
MAJFL is the major page fault count,
VSZ 进程所使用的虚存的大小
RSS 进程使用的驻留集大小或者是实际内存的大小(RSS is the "resident 5. set size" meaning physical memory used)
TTY 与进程关联的终端(tty)
6.查看进程
ps -ef |grep java
-e 显示所有进程。
-f 全格式。
查找文件
find / -name filename.txt 根据名称查找/目录下的filename.txt文件。
find . -name "*.xml" 递归查找所有的xml文件
find . -name "*.xml" |xargs grep "hello world" 递归查找所有文件内容中包含hello world的xml文件
grep -H 'spring' *.xml 查找所以有的包含spring的xml文件
find ./ -size 0 | xargs rm -f & 删除文件大小为零的文件
ls -l | grep '.jar' 查找当前目录中的所有jar文件
grep 'test' d* 显示所有以d开头的文件中包含test的行。
grep 'test' aa bb cc 显示在aa,bb,cc文件中匹配test的行。
grep '[a-z]\{5\}' aa 显示所有包含每个字符串至少有5个连续小写字符的字符串的行
批量修改文件名
rename 原来的名字 现在的名字 20009999*
批量更改目录下所有文件的后缀名。
命令格式:rename 's/\.csv/\.txt/' *
批量把目录下所有文件名包含大写部分修改为小写。
命令格式:rename 'y/A-Z/a-z/' *(反着写就是小写变大写)
删除目前下所有文件的后缀名
命令格式:rename 's/.csv//' *或者rename 's/\.bak$//' *.bak
给所有文件添加后缀名。
命令格式:rename 's/$/\.txt/' *
统一在所有文件名前添加某个字符串
命令格式:rename 's/^/googluck/' *
环境变量
查看全局环境变量命令printenv
查看局部环境变量命令set
文件和用户相关的命令
添加用户 useradd user 默认在home目录下尽力目录
useadd -D 查看linux系统的默认值
删除用户 userdel user (默认不删除此用户的家目录) userdel user -r 同时删除此用户的家目录
列举出系统中所有不是由你运行的程序!
ps aux | grep -v `whoami`
在多个文件中替换掉相同的文本
如果你有个文件,想在多个位置进行替换,这里有很多方法来实现。调用test[someting]把当前目录里所有文件中的Windows替换成Linux,你可以像这样运行它:
perl -i -pe 's/Windows/Linux/;' test*
要替换当前目录以及下层目录里所有文件中的Windows为Linux,你可以这样运行:
find . -name '*.txt' -print | xargs perl -pi -e's/Windows/Linux/ig' *.txt
或者如果你更需要让它只作用于普通文件上
find -type f -name '*.txt' -print0 | xargs --null perl -pi -e 's/Windows/Linux/'
如何获得自己网络的公网地址:
我们需要装上bind-untils(不一定都要安装)才能使用dig命令
yum install bind-utils
这个时候,运行命令就可以获取公网的ip。
# dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'"' '{ print $2}'
这时候可以有很多玩法
myip="$(dig +short myip.opendns.com @resolver1.opendns.com)"
echo "My WAN/Public IP address: ${myip}"
Option 2:curl
# curl icanhazip.com
ubuntu配置网卡
修改配置文件/etc/network/interface
auto eth0
iface eth0 inet static
address 10.112.18.106
network 10.112.18.0
netmask 255.255.255.0
broadcast 10.112.18.255
gateway 10.112.18.254
up route add -net 192.168.1.128 netmask 255.255.255.128 gw 192.168.1.2
up route add default gw 192.168.1.200
down route del default gw 192.168.1.200
down route del -net 192.168.1.128 netmask 255.255.255.128 gw 192.168.1.2
dns-nameservers 10.112.18.1
就是最后一行dns-nameservers,可以添加多个,用空格分开,最后一行会修改/etc/resolv.conf文件
source /etc/network/interfaces.d/*.cfg
如果配置了上述一行,还会执行上述文件。
RedHat、CentOS、Fedora平台
使用配置文件/etc/sysconfig/network-scripts/route-interface,interface可以根据实际的网卡换成网卡名,比如我要在eth0上加静态路由,那就写route-eth0
配置文件的格式如下:
ADDRESS0=X.X.X.X
NETMASK0=x.x.x.x
GATEWAY0=X.X.X.x
ADDRESS1=X.X.X.X
NETMASK1=x.x.x.x
GATEWAY1=X.X.X.x
添加路由ip route x.x.x.x/x nexthop dev inteface
tail
最常用的tail -f
tail -300f shopbase.log #倒数300行并进入实时监听文件写入模式
grep
# grep str /tmp/test 在文件 '/tmp/test' 中查找 "str"
# grep ^str /tmp/test 在文件 '/tmp/test' 中查找以 "str" 开始的行
# grep [0-9] /tmp/test 查找 '/tmp/test' 文件中所有包含数字的行
# grep str -r /tmp/* 在目录 '/tmp' 及其子目录中查找 "str"
egrep命令是grep的一个衍生,支持POSIX扩展正则表达式。
grep forest f.txt #文件查找
grep forest f.txt cpf.txt #多文件查找
grep 'log' /home/admin -r -n #目录下查找所有符合关键字的文件
cat f.txt | grep -i shopbase
grep 'shopbase' /home/admin -r -n --include *.{vm,java} #指定文件后缀
grep 'shopbase' /home/admin -r -n --exclude *.{vm,java} #反匹配
seq 10 | grep 5 -A 3 #上匹配
seq 10 | grep 5 -B 3 #下匹配
seq 10 | grep 5 -C 3 #上下匹配,平时用这个就妥了
cat f.txt | grep -c 'SHOPBASE'
awk
1 基础命令
awk '{print $4,$6}' f.txt
awk '{print NR,$0}' f.txt cpf.txt
awk '{print FNR,$0}' f.txt cpf.txt
awk '{print FNR,FILENAME,$0}' f.txt cpf.txt
awk '{print FILENAME,"NR="NR,"FNR="FNR,"$"NF"="$NF}' f.txt cpf.txt
echo 1:2:3:4 | awk -F: '{print $1,$2,$3,$4}'
2 匹配
awk '/ldb/ {print}' f.txt #匹配ldb
awk '!/ldb/ {print}' f.txt #不匹配ldb
awk '/ldb/ && /LISTEN/ {print}' f.txt #匹配ldb和LISTEN
awk '$5 ~ /ldb/ {print}' f.txt #第五列匹配ldb
3 内建变量
NR:NR表示从awk开始执行后,按照记录分隔符读取的数据次数,默认的记录分隔符为换行符,因此默认的就是读取的数据行数,NR可以理解为Number of Record的缩写。
FNR:在awk处理多个输入文件的时候,在处理完第一个文件后,NR并不会从1开始,而是继续累加,因此就出现了FNR,每当处理一个新文件的时候,FNR就从1开始计数,FNR可以理解为File Number of Record。
NF: NF表示目前的记录被分割的字段的数目,NF可以理解为Number of Field。
find
# find / -name file1 从 '/' 开始进入根文件系统查找文件和目录
# find / -user user1 查找属于用户 'user1' 的文件和目录
# find /home/user1 -name \*.bin 在目录 '/ home/user1' 中查找以 '.bin' 结尾的文件
# find /usr/bin -type f -atime +100 查找在过去100天内未被使用过的执行文件
# find /usr/bin -type f -mtime -10 查找在10天内被创建或者修改过的文件
# locate \*.ps 寻找以 '.ps' 结尾的文件,先运行 'updatedb' 命令
# find -name '*.[ch]' | xargs grep -E 'expr' 在当前目录及其子目录所有.c和.h文件中查找 'expr'
# find -type f -print0 | xargs -r0 grep -F 'expr' 在当前目录及其子目录的常规文件中查找 'expr'
# find -maxdepth 1 -type f | xargs grep -F 'expr' 在当前目录中查找 'expr'
sudo -u admin find /home/admin /tmp /usr -name \*.log(多个目录去找)
find . -iname \*.txt(大小写都匹配)
find . -type d(当前目录下的所有子目录)
find /usr -type l(当前目录下所有的符号链接)
find /usr -type l -name "z*" -ls(符号链接的详细信息 eg:inode,目录)
find /home/admin -size +250000k(超过250000k的文件,当然+改成-就是小于了)
find /home/admin f -perm 777 -exec ls -l {} \; (按照权限查询文件)
find /home/admin -atime -1 1天内访问过的文件
find /home/admin -ctime -1 1天内状态改变过的文件
find /home/admin -mtime -1 1天内修改过的文件
find /home/admin -amin -1 1分钟内访问过的文件
find /home/admin -cmin -1 1分钟内状态改变过的文件
find /home/admin -mmin -1 1分钟内修改过的文件
pgm
批量查询vm-shopbase满足条件的日志
pgm -A -f vm-shopbase 'cat /home/admin/shopbase/logs/shopbase.log.2017-01-17|grep 2069861630'
tsar
tsar是咱公司自己的采集工具。很好用, 将历史收集到的数据持久化在磁盘上,所以我们快速来查询历史的系统数据。当然实时的应用情况也是可以查询的啦。大部分机器上都有安装。
tsar ###可以查看最近一天的各项指标
tsar --live ###可以查看实时指标,默认五秒一刷
tsar -d 20161218 ###指定查看某天的数据,貌似最多只能看四个月的数据
tsar --mem
tsar --load
tsar --cpu
###当然这个也可以和-d参数配合来查询某天的单个指标的情况
top
top除了看一些基本信息之外,剩下的就是配合来查询vm的各种问题了
ps -ef | grep java
top -H -p pid
获得线程10进制转16进制后jstack去抓看这个线程到底在干啥
其他
netstat -nat|awk '{print $6}'|sort|uniq -c|sort -rn
#查看当前连接,注意close_wait偏高的情况,比如如下
Ctrl + u 删除光标之前到行首的字符
Ctrl + k 删除光标之前到行尾的字符
Ctrl + c 取消当前行输入的命令,相当于Ctrl + Break
Ctrl + a 光标移动到行首(ahead of line),相当于通常的Home键
Ctrl + e 光标移动到行尾(end of line)
Ctrl + f 光标向前(forward)移动一个字符位置
Ctrl + b 光标往回(backward)移动一个字符位置
Ctrl + l 清屏,相当于执行clear命令
Ctrl + r 显示:号提示,根据用户输入查找相关历史命令(reverse-i-search)
Ctrl + w 删除从光标位置前到当前所处单词(word)的开头
Ctrl + t 交换光标位置前的两个字符
Ctrl + y 粘贴最后一次被删除的单词
Ctrl + Alt + d 显示桌面
Alt + b 光标往回(backward)移动到前一个单词
Alt + d 删除从光标位置到当前所处单词的末尾
Alt + F2 运行
Alt + F4 关闭当前窗口
Alt + F9 最小化当前窗口
Alt + F10 最大化当前窗口
Alt + Tab 切换窗口
Alt +按住左键 移动窗口(或在最下面的任务栏滚动鼠标滑轮)
使用Linux命令找出日志文件中访问量最大的top10 IP地址
检验你是否熟悉Linux命令的常见问题:使用 Linux命令找出日志文件中访问量最大的top10 IP地址
日志文件test.log格式如下:
时间 IP ****
linux 命令如下:
cat test.log|awk -F" " '{print $2}'|sort|uniq -c|sort -nrk 1 -t' '|awk -F" " '{print $2}'|head -10
问题剖析:
1.cat *.log将文本内容打印到屏幕
2.使用awk命令可以按照分割符将一行分割为多个列,第一列用$1表示,第二列用$2表示,依次类推
awk -F" " '{print $2} //表示用空格作为分隔符进行分割,打印出第2列
3.sort 进行排序,默认是按照ascii码进行排序的
4.uniq -c 统计相邻的行的重复数量,结果是类似 3 127.13.13.13,前面的数字代码重复的行数
sort|uniq -c //统计重复的行数
5.sort -n是按照数值进行由小到大进行排序, -r是表示逆序,-t是指定分割符,-k是执行按照第几列进行排序
sort -nrk 1 -t' '
6.使用awk命令可以按照分割符将一行分割为多个列,第一列用$1表示,第二列用$2表示,依次类推
awk -F" " '{print $2}' //表示用空格作为分隔符进行分割,打印出第2列
7.head -n表示取前n个
head -10