我经常用到的Linux命令

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值