This website requires JavaScript.

Linux 常用命令和配置

系统

SSH

允许 Root 用户名密码登录

vim /etc/ssh/sshd_config

PermitRootLogin yes
PasswordAuthentication yes

发现SSH登录失败记录

grep "Failed password" /var/log/auth.log

命令

批量执行脚本

ls *.sh | while read f;do bash $f || wx_remind "Error! file:$f";done

显示目录大小

du -h  cache/
du -h cache/ | tail -n 1

删除空目录

rm -d

mv 常用参数

-n 不覆盖已存在的文件
-u 当源文件比目标文件新的时候移动,或者目标文件不存在的时候移动

重新配置默认Java版本

update-alternatives --config java

查看端口是否被暂用

sudo netstat -ap | grep 8080
sudo netstat -ant | grep 3306

查找文件内容

grep -inr "xxx" ./ 找到目录中包含查找字符串的文件
grep -l "xxx" ./ 只返回文件名
grep -nw apple fruit.txt 查找完整单词.
grep -nv apple fruit.txt 找到不匹配的记录
grep -c apple fruit.txt 查找匹配到的行数
grep -i break-in auth.log | awk {'print $12'} 查找内容并输出第12列.
ping -c 1 example.com | grep 'bytes from' | cut -d = -f 4  显示位于bytes from行的第四列,其中分隔符为=

xargs

将单行输入转换成多行输出

-n选项可以限制每次调用命令时用到的参数个数。

cat example.txt | xargs -n 3

通过指定分隔符分割参数

-d选项指定分隔符

echo "splitXsplitXsplitXsplit" | xargs -d X -n 2
find /smbMount -iname '*.docx' -print0 | xargs -0 grep -L image 找到内容中不包含image的文件

传入格式化参数

xargs有一个选项-I,可以用于指定替换字符串,这个字符串在xargs解析输入时被参数替换掉。如果将-I与xargs结合使用,对于每一个参数,指定命令只会执行一次。

cat args.txt | xargs -I {} ./cecho.sh -p {} -l

cat

将stdin 和另外一个文件中的数据组合在一起

echo 'Text through stdin' | cat - file.txt

删除多余的空白行(两行之间只留一个空白行)

cat -s file

输出的内容显示行号

cat -n lines.txt

格式化输出

printf  "%-5s %-10s %-4s\n" No Name  Mark
printf  "%-5s %-10s %-4.2f\n" 1 Sarath 80.3456
printf  "%-5s %-10s %-4.2f\n" 2 James 90.9989
printf  "%-5s %-10s %-4.2f\n" 3 Jeff 77.564

替换字符

echo 'This is ROT-13 encrypted.' | tr 'A-Za-z' 'N-ZA-Mn-za-m'  --加密
echo 'Guvf vf EBG-13 rapelcgrq.' | tr 'A-Za-z' 'N-ZA-Mn-za-m'  --解密
tr 'A-Z' 'a-z' people.txt
tr ',' '\t' < us_presidents.csv > us_presidents.tsv
tr -dc [:print:] < file1 > file2 移除不可见字符
tr -d '\015\032' < windows_file > unix_file  移除换行符
tr -s '  ' < file1 > file2 移除双空格

kill 进程

pgrep gedit或pidof mysql 通过名字找到进程
ps aux | grep 'badprocesses' | cut -c 11-15 | xargs kill -9

查看占用端口的进程并Kill

sudo lsof -i tcp:80
sudo lsof -i tcp:80 -s tcp:listen
sudo lsof -t -i tcp:80 -s tcp:listen | sudo xargs kill

查看进程使用的环境变量

cat /proc/12501/environ | tr '\0' '\n'

终端翻页

Shift+[page up/page down]

查看开启的端口

netstat -tnlp

显示CPU信息

cat /proc/cpuinfo

硬盘测试

dd if=/dev/zero of=test bs=64k count=4k oflag=dsync
dd if=/dev/zero of=test bs=8k count=256k conv=fdatasync

创建目录

mkdir -p new_folder/{folder_1,folder_2,folder_3,folder_4,folder_5}

创建文件

touch file_{1..1000} 创建一千个文件
touch {apple,banana,cherry,durian}
touch {1..10..2} 创建奇数文件
touch {w..d..2}
touch {apple,banana,cherry,durian}_{01..100}{w..d}

复制文件

复制文件到多个目录

echo /home/user/1/ /home/user/2/ /home/user/3/ | xargs -n 1  cp /home/user/my_file.txt

复制文件的2-10,30-35,49-最后一列

cut -c 2-10,30-35,49- dir_content.txt
cut -f 2,6 -d "," us_presidents.csv  -d 指定分隔符

各发行版特有命令

CentOS

rpm -qa 显示已安装的软件
yum provides ab 查找一个命令在哪个软件包中

Ubuntu

dpkg-l 显示已安装软件
apt-get -u dist-upgrade 版本更新
apt-get --purge remove apache 完全删除软件,并且不保留配置文件
apt-cache search string 搜索软件列表中搜索字符串
dpkg-reconfigure tzdata 配置时区

Arch

pacman -Qq |wc -l  --显示安装了多少软件
pacman -Rs package_name --删除软件,若关联软件与其他软件没有依赖关系也一并删除.
pacman -Rn 删除软件的同时删除备份文件。

其他配置

中文支持

set-up-a-clean-utf8-environment

禁Ping

修改/etc/sysctl.conf加一行

net.ipv4.icmp_echo_ignore_all = 1

执行sysctl -p加载配置后生效。

临时启用Ping

echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

禁止IP

iptables -I INPUT -s 124.115.0.199 -j DROP
/etc/rc.d/init.d/iptables save
service iptables restart

修改DNS

vim /etc/resolv.conf

在PATH中添加一条新路径

export PATH="$PATH:/home/user/bin"

我的 alias 清单

## Show hidden files ##
alias l.='ls -d .* --color=auto'
## get rid of command not found ##
alias cd..='cd ..'
## a quick way to get out of current directory ##
alias ..='cd ..'
alias ...='cd ../../../'
alias ....='cd ../../../../'
alias .....='cd ../../../../'
alias .4='cd ../../../../'
alias .5='cd ../../../../..'
## Colorize the grep command output for ease of use (good for log files)##
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
## Create parent directories on demand
alias mkdir='mkdir -pv'
alias path='echo -e ${PATH//:/\\n}'
alias now='date +"%T"'
alias nowtime=now
alias nowdate='date +"%Y-%m-%d"'
## top
alias cpu='top -o cpu'
alias mem='top -o rsize' # memory
## copy the working directory path
alias cpwd='pwd|tr -d "\n"|pbcopy'
## DNS
alias flush="sudo killall -HUP mDNSResponder"
## Get your current public IP
alias ip="curl icanhazip.com"

参考文档

Power Up Your Command Line

Power Up Your Command Line II

Power Up Your Command Line III

Power Up Your Command Line IV

Bash-Snippets :A collection of small bash scripts for heavy terminal users

simple-bash-scripts:A collection of simple Bash scripts.

0条评论
avatar