Linux - 碎碎念

正则表达式

^ $ .[ ] { } - ?* + ( ) |

这里以 sed 匹配 text 文件为例

1
2
3
4
5
6
7
8
9
sed -n '/b[abcd]r/p' text        # bar, bbr, bcr, bdr
sed -n '/b[a-d]r/p' text # bar, bbr, bcr, bdr
sed -n '/b[^ef]r/p' text # 排除 b.r 中 ber, bfr
sed -n '/be*r/p' text # br, ber, beer, beeer, beeeer...
sed -n '/be+r/p' text # ber, beer, beeer, beeeer...
sed -n '/be?r/p' text # br, ber
sed -n '/be{2}r/p' text # beer
sed -n '/be{2,}r/p' text # beer, beeer, beeeer, beeeeer...
sed -n '/be{2,4}r/p' text # beer, beeer, beeeer

Shell

数组拼接

1
2
s1=(11 22 33); s2=(44 55 66)
s3=(${num1[@]} ${num2[*]})

多线程运行

1
2
3
4
5
6
for i in ${series[*]}; do
{
sleep 5
}&
done
wait

常见的判断

文件状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if [ -e ${PATH} ]; then
echo "路径${PATH}存在"; fi

if [ -d ${DIR} ]; then
echo "${DIR}是目录"; fi

if [ -f ${FILE} ]; then
echo "${FILE}是文件"; fi

if [ -x ${FILE} ]; then
echo "${FILE}有执行权限"; fi

if [ -w ${FILE} ]; then
echo "${FILE}有写权限"; fi

if [ -r ${FILE} ]; then
echo "${FILE}有读权限"; fi

比较

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if [ ${num1} -eq ${num2} ]; then
echo "${num1} 等于 ${num2}"; fi

if [ ${num1} -ne ${num2} ]; then
echo "${num1} 不等于 ${num2}"; fi

if [ ${num1} -gt ${num2} ]; then
echo "${num1} 大于 ${num2}"; fi

if [ ${num1} -le ${num2} ]; then
echo "${num1} 小于等于 ${num2}"; fi

if [ ${string1} == "STRING" ]; then
echo "${string1} 等于 STRING"; fi

if [ -z ${string1} ]; then
echo "${string1} 为空"; fi

逻辑判断

1
2
3
4
5
6
7
8
if [ condition1 ] && [ condition2 ]; then
echo "condition1 且 condition2"; fi

if [ condition1 ] || [ condition2 ]; then
echo "condition1 或 condition2"; fi

if [ ! condition1 ]; then
echo "非 condition1"; fi

USB disk 挂载与解挂

查看本地设备状态和路径

1
sudo fdisk -l
1
2
3
4
5
6
7
8
9
10
11
12
...
Disk /dev/sdd:21.85 TiB,24000214335488 字节,46875418624 个扇区
Disk model: My Book Duo 25F6
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节
磁盘标签类型:gpt
磁盘标识符:2A0E2E54-B2E7-458F-9949-32EC13EE85A9

设备 起点 末尾 扇区 大小 类型
/dev/sdd1 2048 46875416575 46875414528 21.8T Microsoft 基本数据
...

可以看到插入设备的存放路径 /dev/sdd1

创建文件夹并挂载设备

1
2
sudo mkdir /mnt/usbname # 创建文件夹
sudo mount /dev/sdd1 /mnt/usbname

卸载挂载

1
sudo umount /dev/sdd1 /mnt/usbname

检查是否解挂成功

1
lsblk
1
2
3
4
NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
...
sdd 8:64 0 21.8T 0 disk
└─sdd1 8:65 0 21.8T 0 part /media/wangbj/WD20T

确保对应设备 part 后面的挂载文件夹已经解挂,方可拔出设备