Linux 常用命令

搜索命令参数


man tar | grep -- -z

grep 后面 -- 表示选项到此结束,后面-z是参数

解压文件


tar -zxvf xx.tar.gz



tar -jxvf xx.tar.bz2

-f 后跟文件名

当前目录全文搜索


grep YOUR_TEXT -r .

搜索当前目录下所有包含该文本的文件

统计当前文件夹代码行数

find 指定文件后缀名,记住要引号避免 sh 解析 *


find -name "*.py" -o -name "*.md" | xargs cat|wc

# -o 参数表示或者

# xargs 把上面的输出作为参数输入给 cat

查看给定文件列表的文件大小

用 xargs -d 指定分隔符为 \n(默认会按照空格和 \n 分隔参数)


cat list.txt | xargs -d "\n" ls -alh

xargs-d表示 delimiterl,即分隔符

wget 慢慢下载


wget -i list.txt -nc --wait=60 --random-wait




其中, -i后面跟文件, -nc 表示(--no-clober没有冲突)已经下载到的文件就不要再请求了,wait=60 表示两次请求间隔 60s,random-wait 表示随机等待 2~120s

touch 修改时间戳

将 b.txt 的时间戳改为和 a.txt 一样


touch -r a.txt b.txt

-r --reference=FILE use this file’s times instead of current time

hexdump 查看字符内部编码

echo 的 - n 参数表示不要末尾加 \ n


echo -n hello | hexdump -C

子目录大小排序

du 的 -s 表示目录的大小

sort 的 -r 表示逆序


du -sh * | sort -hr

保证脚本安全执行 set -ex

set命令挺有用的呢,-e 表示如果后面的语句返回不为 0 立刻结束 shell,-x 表示显示出每条命令及参数

查找 0 字节的文件并删除


find . -size 0 -delete

批量修改文件后缀名

将当前目录下 (包含子目录) 所有的 txt 文件改为. newext 后缀:


find . -name "*.txt" -exec rename 's/.txt$/.newext/' {} \;

watch 持续观察命令输出

例如我想持续查看 output.txt 文件大小:


watch -n 1 ls -l output.txtsh

其中-n 1表示每隔 1s 刷新一次

这个命令等价于自己写个 sh 脚本:


#!/bin/sh

while [ 1 ]

do

# do your work here...

sleep 1

clear

done

批量转换编码


# 在 utf 下构造同样的目录

find default -type d -exec mkdir -p utf/{} \;



# 把转换后的文本输出到同样的目录层次下

find default -type f -exec iconv -f GBK -t UTF-8 {} -o utf/{} \;

这两行命令将 default 目录下的文件由 GBK 编码转换为 UTF-8 编码,目录结构不变,转码后的文件保存在 utf/default 目录下。

获得文件绝对路径


readlink -f $1