Skip to main content

I/O

File​

Cat​

concatenate files

Sort​

sort lines of text

Uniq​

report or omit repeated lines

Wc​

print newline, word, and byte counts for each file

Head and Tail​

output the first/last part of a file

head -n 5 filename
tail -f filename

Tee​

read from standard input and write to standard output and files

[me@linuxBox ~]$ ls /usr/bin | tee ls.txt | grep zip
bunzip2
bzip2
....

Nl​

number lines

Fold​

wrap each line to a specified length

Fmt​

a simple text formatter

Pr​

prepare text for printing

Printf​

format and print data

Compression​

Zip​

  • zip -r(目录) 压缩文件 源文件/源目录.
  • unzip 源文件 -d 指定路径.
zip -r archive_name.zip folder_to_compress
unzip archive_name.zip

zipinfo archive_name.zip
unzip -l archive_name.zip

Gz​

  • gzip 源文件.
  • gzip –c 源文件 > 压缩文件.
  • gzip -r 源目录 将源目录下所有子文件分别单独压缩.
  • gzip –d(解压缩) 文件.
  • gunzip 压缩文件.

Bz2​

不可压缩目录:

  • bzip2 –k(保留源文件) 源文件.
  • bzip2 –d(解压缩) –k(保留压缩文件) 压缩文件.
  • bunzip2 –k(保留压缩文件) 压缩文件.

Tar​

.tar.gz/.tar.bz2:

tar [可选参数] 压缩文件(可指定压缩路径) [-c 解压缩路径]源文件/源目录:

  • -z: 将 .tar 压缩为 .tar.gz.
  • -j: 将 .tar 压缩为 .tar.bz2.
  • -c: 打包 -x 解打包.
  • -t: 查看压缩文件.
  • -v: 显示过程.
  • -f: 指定压缩文件名.
  • -C: 指定解压缩路径.
  • -zcvf/-zxvf/-ztcf.
  • -jcvf/-jxvf/-jtvf.
tar -xzf archive.tar.gz

7z​

  • a: add.
  • x: extract.
  • -r: recursive.
  • -o: specific path.
  • -t: type.
7z x manager.7z -r -o /home/xx
7z a -t7z -r manager.7z /home/manager/*

UnAr​

Decompress files of any format:

unar archive_name.zip
unar archive_name.7z
unar archive_name.rar
unar archive_name.ISO
unar archive_name.tar.gz

LsAr​

Peek files in a compress file of any format:

lsar -l archive_name.zip
lsar -l archive_name.7z
lsar -l archive_name.ISO
lsar -l archive_name.rar
lsar -l archive_name.tar.gz

Zero Copy​

  • read + write: 4 context switch, 4 data copy (2 DMA, 2 CPU).
  • mmap + write: 4 context switch, 3 data copy (2 DMA, 1 CPU).
  • sendfile: 2 context switch, 3 data copy (2 DMA, 1 CPU).
  • scatter and gather sendfile: 2 context switch, 2 data copy (1 DMA, 1 SG-DMA).
  • 传输大文件 (无法命中内核 PageCache) 使用 异步 I/O + 直接 I/O, 传输小文件使用 Zero Copy.
location /video/ {
sendfile on;
aio on;
directio 1024m;
}

Swap​

dd if=/dev/zero of=/swapfile bs=1G count=4
mkswap /swapfile
swapon /swapfile

Mount​

主分区 (primary) 与延伸分区 (extended) 延伸分区可以继续划分成逻辑分区 (logical).

mount [-t 文件系统][-o 特殊选项] 设备文件名 挂载点(挂载目录/media /misc /mnt)
  • 无参数: 显示当前挂载设备.
  • -a: 依据 /etc/fstab 文件配置, 自动挂载.
umount 设备文件名/挂载点
fdisk –l

Repair​

sudo debugfs /dev/sda9
> debugfs: lsdel

Partition​

lsblk -pf
fdisk -l /dev/nvme1n1
cfdisk /dev/nvme1n1 # 1GB for `EFI System`, rest for `Linux filesystem`.

mkfs.fat -F 32 /dev/nvme1n1p1
mkfs.btrfs /dev/nvme1n1p2
mount -t btrfs -o compress=zstd /dev/nvme1n1p2 /mnt
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@swap

umount /mnt
mount -t btrfs -o subvol=/@,compress=zstd /dev/nvme1n1p2 /mnt
mount --mkdir -t btrfs -o subvol=/@home,compress=zstd /dev/nvme1n1p2 /mnt/home
mount --mkdir -t btrfs -o subvol=/@swap,compress=zstd /dev/nvme1n1p2 /mnt/swap
mount --mkdir /dev/nvme1n1p1 /mnt/boot

pacman -Sy archlinux-keyring
pacstrap -K /mnt base base-devel linux linux-firmware btrfs-progs
pacstrap /mnt networkmanager vim neovim amd-ucode os-prober

btrfs filesystem mkswapfile --size 32g --uuid clear /mnt/swap/swapfile
swapon /mnt/swap/swapfile
genfstab -U /mnt > /mnt/etc/fstab
arch-chroot /mnt
passwd
pacman -S grub efibootmgr
grub-install --target=x86_64-efi --efi-directory=/boot --boot-directory=/boot --removable
# grub-install --target=x86_64-efi --efi-directory=/efi --boot-directory=/efi --removable
# ln -s /efi/grub /boot/grub
grub-mkconfig -o /boot/grub/grub.cfg

Fdisk​

分区表类型 MBR

n p e l 新 主 逻辑 扩展 分区 w 激活

Parted​

分区表类型 MBR/GPT

  • mklabel 选择分区表类型
  • print 打印分区信息
  • mkpart 新建分区
  • rm 删除分区
  • unit 选择单位
  • quit 结束分区

Du​

du -sh /home/user

Loop​

挂载 ISO 镜像或创建虚拟磁盘:

losetup -a
sudo udisksctl loop-delete -b /dev/loop1
rm -rf ~/.cache/paru/clone/ttf-ms-win11-*

Host System Information​

#!/bin/bash

# Simple print cpu topology

# numactl --hardware
# ls /sys/devices/system/node/node0
# lscpu

function get_nr_processor()
{
grep '^processor' /proc/cpuinfo | wc -l
}

function get_nr_socket()
{
grep 'physical id' /proc/cpuinfo | awk -F: '{
print $2 | "sort -un"}' | wc -l
}

function get_nr_siblings()
{
grep 'siblings' /proc/cpuinfo | awk -F: '{
print $2 | "sort -un"}'
}

function get_nr_cores_of_socket()
{
grep 'cpu cores' /proc/cpuinfo | awk -F: '{
print $2 | "sort -un"}'
}

echo '===== CPU Topology Table ====='
echo

echo '+--------------+---------+-----------+'
echo '| Processor ID | Core ID | Socket ID |'
echo '+--------------+---------+-----------+'

while read line; do
if [ -z "$line" ]; then
printf '| %-12s | %-7s | %-9s |\n' $p_id $c_id $s_id
echo '+--------------+---------+-----------+'
continue
fi

if echo "$line" | grep -q "^processor"; then
p_id=`echo "$line" | awk -F: '{print $2}' | tr -d ' '`
fi

if echo "$line" | grep -q "^core id"; then
c_id=`echo "$line" | awk -F: '{print $2}' | tr -d ' '`
fi

if echo "$line" | grep -q "^physical id"; then
s_id=`echo "$line" | awk -F: '{print $2}' | tr -d ' '`
fi
done < /proc/cpuinfo

echo

awk -F: '{
if ($1 ~ /processor/) {
gsub(/ /,"",$2);
p_id=$2;
} else if ($1 ~ /physical id/){
gsub(/ /,"",$2);
s_id=$2;
arr[s_id]=arr[s_id] " " p_id
}
}

END{
for (i in arr)
printf "Socket %s:%s\n", i, arr[i];
}' /proc/cpuinfo

echo
echo '===== CPU Info Summary ====='
echo

nr_processor=`get_nr_processor`
echo "Logical processors: $nr_processor"

nr_socket=`get_nr_socket`
echo "Physical socket: $nr_socket"

nr_siblings=`get_nr_siblings`
echo "Siblings in one socket: $nr_siblings"

nr_cores=`get_nr_cores_of_socket`
echo "Cores in one socket: $nr_cores"

let nr_cores*=nr_socket
echo "Cores in total: $nr_cores"

if [ "$nr_cores" = "$nr_processor" ]; then
echo "Hyper-Threading: off"
else
echo "Hyper-Threading: on"
fi

echo
echo '===== END ====='

Screen Monitor​

Xrandr​

xrandr -s 1920x1800 # set resolution

Monitor Info​

sudo apt-get install read-edid
sudo get-edid | parse-edid

Touch Pad Synoptics​

synclient TouchpadOff=0

Audio Server​

Pipewire:

pactl info | grep "Server Name"
systemctl --user status pipewire.service

wpctl status
wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+ # 音量增加 5%
wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.5 # 音量设为 50%

pw-top
pw-cli ls Node
pw-cli info <ID>
pw-play <filename>
pw-record <filename>

Bluetooth​

sudo pacman -S bluez bluez-utils
sudo systemctl enable --now bluetooth.service
bluetoothctl
> help
> power on
> agent on
> default-agent
> scan on
> pair [MAC]
> trust [MAC]
> connect [MAC]
> devices
> exit