Linux_Little_Tricks

Linux Little Tricks data model LLP64 and LP64 搜索引擎小技巧 cats and dogs Result about cats or dogs "cats and dogs" Result about exact term “cats and dogs” cats -dogs Fewer dogs in result cats +dogs More dogs in result cats filetype:pdf PDFs about cats Supported types: pdf, doc(x), xls(x), ppt(x), html * 模糊 .... 范围 intitle:标题 inurl:网址 related:相关类型 define:word etymology:"word," joker site:drive.google.com Proxy Browser: SwitchyOmega gfwlist: https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt Terminal Proxy CapsLock -> Ctrl X11 xev 展示按下按键的信息 pacman -S xorg-xmodmap: xmodmap xmodmap -pke xmodmap -pke > ~/.Xmodmap 使用 remaps 脚本 Wayland dconf write /org/gnome/desktop/input-sources/xkb-options "['caps:ctrl_modifier']" 触控板设置 xorg 使用 libinput 配置触控板 dwm 默认触控板无法使用单击, 双击等 在 xorg.conf.d 目录下添加 30-touchpad.conf 配置文件, 并添加以下配置 30 表示执行顺序 (10 比 30 先执行) .conf 后缀 arch wiki 说必须加上不可以省略 Section "InputClass" Identifier "touchpad" Driver "libinput" MatchIsTouchpad "on" Option "Tapping" "on" Option "TappingButtonMap" "lmr" Option "NaturalScrolling" "true" EndSection 多显示器设置 Xorg Multiple Monitors X11 默认多显示器是相同输出, xrandr 可以用来查看显示器输出端口的信息, 可以通过两种方式设置 ...

ArchLinux_Installation

一. Basic Install 制作启动盘 1. 系统启动方式 输入 ls /sys/firmware/efi/efivars 查看系统的启动方式 如果有输出,则为UEFI启动 2. 网络连接 ip link 查看网卡的名称等信息 有线网络 使用 dhcpcd 进行有线网络连接, 和激活无限网络dhcp功能 无线网络 使用 rfkill(Radio Frequency Kill) 检查 wifi 是否被禁用 $ rfkill list 0: phy0: Wireless LAN Soft blocked: yes // yes 为禁用, no 为未禁用(软件禁用) Hard blocked: yes // yes 为禁用, no 为未禁用(硬件禁用) 如果被禁用使用 rfkill unblock wifi 取消禁用 使用 iwctl 进行无线网络连接 iwctl$ help iwctl$ device list iwctl$ station device(name) scan iwctl$ station device(name) get-networks iwctl$ station device(name) connect SSID(name) 使用 ping archlinux.org 检查网络是否可用 3. 设置系统时间 TODO timedatectl set-ntp true 确保时钟正确, 正确则没有输出 To check the service status, use timedatectl status 4. 磁盘分区 磁盘规划 EFI: 100M /: 100G 或者 一整块硬盘(如果是多硬盘的话) /home/{username}/Downloads: 剩下的空间 或 其他整块硬盘 swap: 不设置 swap 分区 分区和格式化 lsblk 查看系统硬盘情况 fdisk /dev/{disk} 用来进行磁盘分区 fdisk$ m # 查看帮助 fdisk$ g # 创建一个 GPT 分区,用来作为 EFI 分区 fdisk$ # ... fdisk$ n # 用来创建其他分区 fdisk$ # ... fdisk$ l # 查看支持的所有分区类型 ef(EFI 分区类型) 83(Linux 分区类型) fdisk$ t # 来更改创建分区的分区类型 fdisk$ # NOTE: 将 GPT 分区改为 EFI 分区类型, 其余分区改为 Linux 分区类型 fdisk$ w # 保存退出 fdisk$ q # 取消修改退出 使用 mkfs.{format} /dev/{disk} 格式化磁盘 mkfs.vfat 格式化 EFI 分区 mkfs.ext4 格式化其他分区 NOTE: 不适用 SWAP 分区 将根目录挂在到 /mnt 目录下, 将 EFI 分区挂载到 /mnt/efi 其余目录挂在到 /mnt/* 目录下 5. 系统下载与安装 FIXME: vim /etc/pacman.d/mirrorlist 设置安装源, 可以先使用国内的源,后面在去掉就行。 Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch 安装系统基本包 pacstrap /mnt base base-devel linux linux-headers linux-firmware man-db man-pages networkmanager vim bash-completion base base-devel linux linux-headers linux-firmware man-db man-pages networkmanager vim bash-completion 6. 生成系统自动挂载分区文件(fstab文件) genfstab -L /mnt >> /mnt/etc/fstab cat /mnt/etc/fstab 检查写入是否正确 7. 将 root 目录由安装镜像系统切换到要安装的系统 arch-chroot /mnt 8. 时间区域设置 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 使用hwclock创建/etc/adjtime hwclock --systohc 9. 系统本地化设计 设置本地语言 vim /etc/locale.gen 找到文件中的 en_US.UTF-8 UTF-8 zh_CN.UTF-8 UTF-8 locale-gen 加载设置的语言项 打开文件 vim /etc/locale.conf 并在里面输入一行 LANG=en_US.UTF-8 设置主机名称 vim /etc/hostname 然后输入自己定义的主机名称(sakura) 设置本机地址 vim /etc/hosts 添加以下内容 127.0.0.1 localhost ::1 localhost 10. 设置 root 密码 passwd root 11. 安装 ucode intel-CPU pacman -S intel-ucode AMD-CPU pacman -S amd-ucode 12. bootloader Arch GRUB wiki pacman -S grub efibootmgr pacman -S os-prober 用来检查 windows 系统, 单系统可以不装 grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB vim /boot/grub/grub.cfg 修改GRUB_CMDLINE_LINUX_DEFAULT 变量中的参数 去掉 quiet log level 由 3 变为 5, 方便排错 加入 nowatchdog 可以加快开机启动速度 grub-mkconfig -o /boot/grub/grub.cfg 基本系统安装完成 exit umount -R /mnt reboot 二. GUI 1. 创建一个普通用户 pacman -S sudo useradd -m -g users -G wheel -s /bin/bash {username} -m 创建用户的home目录 -g 指定初始的用户组 -G 指定扩展的用户组 -s 指定默认的shell 设置密码 passwd {username} 设置vim /etc/sudoers去掉注释%wheel ALL=(ALL) ALL 2. X11 pacman -S xorg xorg-xinit xorg-xrandr Xorg arch wiki xorg is a package group xinit 可以手动的启动 Xorg display server。 xorg-xrandr pacman -S xf86-input-libinput xf86-input-libinput 3. 声卡驱动 alsa-utils 配置复杂 pulseaudio 配置简单 pulseaudio-bluetooth pulseaudio-alsa pipewire 新框架(使用有问题) pipewire-media-session A very simple session manager wireplumber pipewire-pulse pipewire-alsa pipewire-jack 一些前端配置工具 pamixer pulsemixer pavucontrol ...

阅读 Linux 核心源代码 lib/list_sort.c

Linux 核心代码中,对链表的排序算法是一种归并排序的变种。采用的排序方式为自下而上 的排序,这种方式可以避免 cache thrashing。 合并时机 Linux 中的对归并排序的改进主要是改变了两个链表的合并时机。该算法会有一个 pending 链表用来记录排序好的子链表,且保证每个子链表的长度都为 $2^k$。当 pending 中 即将出现第三个 $2^k$ 长度的链表时,就会合并已存在的两个 $2^k$ 长度的链表使其 变为一个 $2^{k+1}$ 长度的链表,所以在 pending 链表中永远不会存在超过 2 个 长度为 $2^k$ 的链表。 使用一个变量 count 来追踪 pending 中 $2^k$ 长度链表的个数,可以通过 count 中 k+1 k k-1 这 3 个 bits 来确定 pending 中 $2^k$ 长度链表的个数。下表 中的 3 个 bits 分别表示 k+1 k k-1,当 k 为 0 时,认为 -1 bit 为 1。 count $2^k$ 长度链表个数 …000… 0 …001… 0 …010… 0 …011… 1 …100… 1 …101… 2 源码分析 __attribute__((nonnull(2,3))) void list_sort(void *priv, struct list_head *head, list_cmp_func_t cmp) { struct list_head *list = head->next, *pending = NULL; size_t count = 0; /* Count of pending */ if (list == head->prev) /* Zero or one elements */ return; /* Convert to a null-terminated singly-linked list. */ head->prev->next = NULL; // .... } 函数的参数: ...