Linux 常用命令和配置

命令

批量执行脚本

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

创建符号链接而不进行文件复制

cp -s

显示目录大小

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

find 查找文件

传送门:35 个 Linux ‘find’ 命令的使用方法

显示目录名

find . -print 使用换行符输出每个文件或目录名
find . -print0 使用空字符'\0'来分割
find . -type f -print0 | xargs -0 ls -l  显示目录/文件名并传递给xargs
find source_code_dir_path -type f -name "*.c" -print0 | xargs -0 wc –l  统计源代码目录中所有c程序文件的行数

文件名模式查找

find /home/slynux -name '*.txt' -print  会搜索所有以.txt结尾的文件或目录 ,可以是通配符或者正则。 注意单引号会阻止扩展,双引号不会。
find . -name '*.php' -exec grep -l 'eval' {} \; 在当前目录中找到所有php文件中包含eval的文件.

忽略大小写

find . -iname "example*" -print

逻辑操作符

-a和-and选项可以执行逻辑与操作,-o和-or选项可以执行逻辑或操作

find . \( -name '*.txt' -o -name '*.pdf' \) -print

限制查找路径

-regex选项和-path类似,不过前置是基于正则表达式来匹配文件。

find /home/users -path '*/slynux/*' -name '*.txt' –print

匹配.py或.sh文件

find . -regex '.*\.(py\|sh\)$'
find . -iregex '.*\(\.py\|\.sh\)$' 忽略大小写

否定参数!

find . ! -name "*.txt" -print 匹配所有不以.txt结尾的文件

限制查找的目录深度

find . -mindepth 2 -maxdepth 5 -name "f*" -print

根据文件类型查找文件

普通文件 f
符号链接 l
目录 d
字符设备 c
块设备 b
套接字 s
FIFO P

find ./ -type f -exec grep -H 't_totalpv_dayavg' {} \;

根据文件的时间戳进行搜索

按天

访问时间(-atime):用户最近一次访问文件的时间
修改时间(-mtime):文件内容最后一次被修改的时间
变化时间(-ctime):文件元数据(例如权限或所有权)最后一次改变的时间。

find . -type f -atime -7 -print 打印出在最近7天内被访问过的所有文件
find . -type f -atime 7 -print 打印恰好在7天前被访问过的所有文件。
find . -type f -atime +7 -print 打印出访问时间超过7天的所有文件。

按分

访问时间(-amin):
修改时间(-mmin):
变化时间(-cmin):

find . -type f -amin +7 -print 打印出7分钟之前访问的所有文件。
find . -type f -newer file.txt -print 找出比file.txt修改时间更近的所有文件。

基于文件大小搜索

find . -type f -size +2k 大于2KB的文件
find . -type f -size -2k 小于2KB的文件
find . -type f -size  2k 大小等于2KB的文件

其他单位:

b 块(512字节)
C 字节
w 字(2字节)
k 千字节(1024字节)
M 兆字节(1024K字节)
G 吉字节(1024M字节)

根据权限查找

find . -type f -name "*.php" ! -perm 644 –print 查找没有配置好权限的文件
find . -type f -user slynux -print 查找用户slynux拥有的所有文件

利用find执行相应的操作

find . -type f -name "*.swp" -delete 删除找到的.swp文件
find . -type f -user root -exec chown slynux {} \;利用-exec选项后面可以接命令,其中花括号{}代表文件名。注意该命令结尾的\;必须对分号转义,否则shell将其视为find命令的结束,而非chown命令的结束。
find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \; 将十天前的文件复制到OLD目录中

为每个匹配到的文件调命令可是不小的开销。可以用加号(+)作为命令结尾。这样find会生成一份包含所有搜索结果的列表,然后将其作为指定命令的参数,一次性执行。

find . -type f -name '*.c' -exec cat {} \;>all_c_files.txt
find . -type f -name '*.c' -exec cat {} > all_c_files.txt \;
fine . -type f -name '*.c' -exec cat {} >all_c_files.txt +

查找文件内容

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 指定分隔符

发现SSH登录失败记录

1
grep "Failed password" /var/log/auth.log
Jan  2 14:04:40 Master sshd[12614]: message repeated 2 times: [ Failed password for root from 182.100.67.129 port 45213 ssh2]
Jan  2 14:04:51 Master sshd[12618]: Failed password for root from 182.100.67.129 port 50977 ssh2
Jan  2 14:04:56 Master sshd[12618]: message repeated 2 times: [ Failed password for root from 182.100.67.129 port 50977 ssh2]

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 删除软件的同时删除备份文件.

其他配置

Ubuntu使用root登陆

sudo passwd root
vim /etc/ssh/sshd_config
将PermitRootLogin 的值改为yes
sudo service ssh restart

中文支持

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

Centos设置静态IP

vim /etc/sysconfig/network-scripts/ifcfg-eth0
添加以下内容
IPADDR=192.168.1.8
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=no更改为ONBOOT=yes
BOOTPROTO=dhcp更改为BOOTPROTO=none

在PATH中添加一条新路径

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

SED

SED 札记

打赏支持:如果你觉得我的文章对你有所帮助,可以打赏我哟。