常用命令汇总

该博文为我之前文章重新设置文章格式,改为markdown格式,更加美观。

中文乱码

/etc/sysconfig/i18n,LANG="zh_CN.UTF-8"

查看环境变量

env

查看当前用户的计划任务

crontab   -l     

查看挂接的分区状态

mount | column   -t  

查看所有分区

fdisk   -l       

查看各分区使用情况

// df从整体上反映文件系统对节点和磁盘块的使用情况,du主要统计目录或文件所占磁盘空间的大小。

// 显示已用可用的磁盘空间
df   -hT      
// 显示当前目录磁盘使用统计
du -sh *
// 显示当前目录最大的10个文件或者文件夹
du -s * | sort -nr | head

查看所有交换分区

swapon  -s       

查看内存使用量和交换区使用量

free   -m       

查看内存总量

grep    MemTotal     /proc/meminfo

查看空闲内存量

grep   MemFree  /proc/meminfo

查看磁盘参数

`hdparm   -i    /dev/hda `   

查看启动时IDE设备检测状况

dmesg | grep IDE 

查看系统负载

cat /proc/loadavg

修改IP地址

ifconfig eth0 192.168.0.22 netmask 255.255.255.0

修改MAC地址

ifconfig eth0 down; ifconfig eth0 hw ether 00:24:24:47:96:22; ifconfig eth0 up

查看网络端口

netstat -tulnp

统计代码行数

find . -name "*.java" | xargs cat|grep -v -e ^$ -e ^\s*\/\/.*$|wc -l

同类型文件拷贝

find some-dir -type f -name "*.txt" -exec cp \{\} new-dir \;
find some-dir -type f -name "*.txt" -print0 | xargs -0 cp --target-directory=new-dir
find some-dir -type f -name "*.txt" -print0 | xargs -I{} -0 cp -v {} /tmp/log-files
// 其中{}为参数列表标记,-0表示当文件名为空白行,那么当前的执行命令不起作用,-I表示用来替换初始参数。

查看不间断增长的日志

tail -f -n 5 my_server_log

分析CPU过高的java线程

top -n1 -H | grep -m1 java
printf "%x" $PID
jstack $PID | grep -A500 $NID | grep -m1 "^$" -B 500

十进制与十六进制互转

printf "%x\n" 4095
d2h(){echo "obase=16; $@"|bc}
printf "%d\n" 0xfff
h2d(){echo "ibase=16; $@"|bc}

操作文件名中有空白字符文件

find . -name "*.txt" -type f -print0 | while read -d $'\0' file; do cat "$file" >> merge.txt; done
     find . -print0 | while read -d $'\0' file; do cp -v "$file" /tmp; done

找出所有文件内容包含MapReduce的文件

find . -name "*.java" -print0 | xargs -0 grep -l "MapReduce"
// 当前目录下的所有文件查找
grep -RnsI --color=auto "MapReduce"  *

列出所有的maven依赖

mvn dependency:resolve
mvn -o dependency:list | grep ":.*:.*:.*" | cut -d] -f2- | sed 's/:[a-z]*$//g' | sort -u
// cut中的-f m-n 表示显示第m栏到第n栏
// sed 's/要替换的字符串/新的字符串/g'
// sort -u 删除重复行

找出所有符号链接文件

find ./ -type l -ls 

如何找出大于10MB的tar.gz

find / -type f -name *.tar.gz -size +10M -exec ls -l {} \; 

显示PATH变量里的文件夹

echo src::${PATH} | awk 'BEGIN{pwd=ENVIRON["PWD"];RS=":";FS="\n"}!$1{$1=pwd}$1!~/^\//{$1=pwd"/"$1}{print $1}' 

批量制作目录的备份

find -type -f -exec cp {} {}.bak \; 

用sed方法删除数字、特殊字符等

sed "s,\x1B\[[0-9;]*[a-zA-Z],,g" 

删除结尾空白

sed -i 's/[ \t]\+$//g' file.txt 

查看gclog 间隔1秒打印一次,共打印10条

jstat -gcutil 6148 1s 10

dump当前内存

jmap -dump:format=b,file=./dumpfile1 6148

查看加载的对象统计

jmap ‐histo 6148

查看两个目录中不同的文件

diff -qr /dirA /dirB  

仅在file2中的行(不在file1中出现)

grep -Fxv -f file1 file2

递归的修改当前目录内所有文件和目录的权限为777

find . -print -exec chmod 777 {} \; 

删除空文件

find . -type f -size 0 -delete 
// 删除空目录
find . -type d -empty -delete

不重复的行

 awk '!($0 in a) {a[$0];print}' file 

maven下载源码

mvn dependency:sources -DincludeGroupIds=com.jcraft,org.testng -Dclassifier=sources 

排查jar冲突

 mvn dependency:tree -Dverbose -Dincludes=com.alibaba:druid 

tail 文件内容时,对每行输出增加一个时间戳

tail -f file | while read; do echo -e "$(date +%T.%N) $REPLY"; done 

tr 命令用于转换字符、删除字符和压缩重复的字符

// 将文件中的小写字母转化为大写字母
cat filename | tr [:lower:] [:upper:]
cat filename | tr a-z A-Z
// 将文件中的{}替换为()
tr '{}' '()' < oldfile > newfile
// 替换空格为\t
echo "This Is Example" | tr [:space:] '\t'
// 如果有多个空格,用-s选项压缩重复空格
echo "This  Is     Example" | tr -s [:space:] '\t'
// 删除指定字符,使用-d选项,如删除小写字母
echo "This Is Example" | tr -d a-z

paste合并文件的行

cat old
1,2
3,4
5,6
$ cat new
A,B
C,D
E,F
H,I
$ paste old new
1,2     A,B
3,4     C,D
5,6     E,F
        H,I
// 使用-d选项,作为分隔符
$ paste -d '---' old new 
// 使用-s选项,每个文件合并为单一的一行
$ paste -d, -s old new 

grep 使用

// Grep OR
    grep 'Tech\|Sales' employee.txt
    grep -E 'Tech|Sales' employee.txt
    egrep 'Tech|Sales' employee.txt
    grep -e Tech -e Sales employee.txt
// Grep AND
    grep -E 'Dev.*Tech' employee.txt
    grep -E 'Manager.*Sales|Sales.*Manager' employee.txt
// Grep NOT
    grep -v Sales employee.txt

BASH快捷键

ctrl-r 搜索命令行历史记录
ctrl-w 删除键入的最后一个单词
ctrl-u 可以删除行内光标所在位置之前的内容
ctrl-k 可以删除光标至行尾的所有内容
alt-b 和 alt-f 可以以单词为单位移动光标
ctrl-a 可以将光标移至行首
ctrl-e 可以将光标移至行尾

Bash History Expansion

// 执行历史上的一条命令,n为序号
$ !n 
// 执行上一条命令
$ !! 
$ !-1

// 使用关键字执行命令
$ !ps
ps -ef | grep http

// 替换前一条命令
$ ls /etc/cron.daily/logrotate

$ ^ls^cat^
cat /etc/cron.daily/logrotate

// 获取第一个参数(:^)
$ cp /etc/passwd /backup

$ ls -l !cp:^
ls -l /etc/passwd

$ ls -l !!:^
$ ls -l !^

// 获取最后参数(:$)
$ cp /etc/passwd /backup

$ ls -l !cp:$
ls -l /backup

$ls -l !!:$
$ls -l !$

// 获取第n个参数(:n)
$ tar cvfz /backup/home-dir-backup.tar.gz /home

$ ls -l !tar:2
ls -l /backup/home-dir-backup.tar.gz

// 获取所有参数(!*)
$ cp /etc/passwd /backup

$ ls -l !cp:*
ls -l /etc/passwd /backup

$ ls -l !*

// 获取部分参数(x-y)
$ tar cvf home-dir.tar john jason ramesh rita

$ ls -l !tar:3-5
ls -l john jason ramesh

$ ls -l !tar:2-$


// 去掉路径名称的尾部(:h)
$ ls -l /very/long/path/name/file-name.txt

$ ls -l !!:$:h
ls -l /very/long/path/name


// 去掉路径名称的头部(:t)
$ ls -l /very/long/path/name/file-name.txt

$ ls -l !!:$:t
ls -l file-name.txt


// 替换命令行的内容(:s)
$ cp /etc/password /backup/password.bak
$ !!:gs/password/passwd/
cp /etc/passwd /backup/passwd.bak

// 打印命令不执行(:p)
$ tar cvf home-dir.tar john jason ramesh rita

$ tar cvfz new-file.tar !tar:3-:p
tar cvfz new-file.tar john jason ramesh

xargs

$ find . -name "*sh*"
// 合并为一行
$ find . -name "*bash*" | xargs
$ ls -1 *.sh | xargs

$ find . -name "*.sh" | xargs grep "ksh"

// 删除临时文件 -0 处理文件名中的空格
$ find /tmp -name "*.tmp" -print0 | xargs -0 rm

// 统计多个文件的行数
$ ls -1 *.sh | xargs wc -l 

// 批量重命名
$ ls | xargs  -t  -I  {} mv {} {}.old

取两个文件的交集

grep -Fx -f file1 file2

编码转换

for i in `find . -name "*.java"`; do iconv -f gbk -t utf-8 $i > $i.new; done​
find . -name "*.new" | sed 's/\(.*\).new$/mv "&" "\1"/' | sh 

搜索关键字杀死一组进程

ps -ef|grep "keyword"|grep -v grep|cut -c 9-15|xargs kill -9
ps aux|grep "keyword"|grep -v grep |awk '{print $2}'|xargs kill -9
pgrep "keyword" | xargs kill -9
pkill "keyword"

创建目录

//创建目录,包括中间目录
mkdir -p long/directory/path
//创建目录,并进入
mkdir dir && cd $_
// 进入一个目录执行命令,并返回当前目录
(cd /tmp && ls)

打印PATH

echo $PATH | tr ':' '\n'
tr ':' '\n' <<< $PATH

按行分割文件

split -dl 200 --additional-suffix=.txt words wrd

你可能感兴趣的:(OS)