regular expressions cheatsheet

Regular Expressions Matching Table metacharacter matching things \d \D matching all the digits(0 to 9), matching any non-digit character .(dot) matching any single character(letter, digit, whitespace, everything) [] matching a single letter inside [](square brackets) [^] matching any single character except for the letters inside [](square brackets) with the ^(hat) [-] [^-] indicating a character range to match a single character \w \W this is equivalent to the character range [A-Za-z0-9_], matching any non-alphanumeric character {} to match repetition of character * + to match either 0 or more or 1 or more of the character that it follows(it always follows a character or group) ? this metacharacter allows to match either 0 or 1 of the preceding character or group \s \S to match all whitespaces, matching any non-whitespace character ␣ to match space \t to match tab \n to match new line \r to match carriage return(useful in Windows environments) ^ $ the start and the end of the line, it’s only used at the beginning or end of a line () match groups (()) nested groups (|) to denote different possible sets of characters \b to match the boundary between a word and a non-word character Details \d the 123s ...

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 ...

常数变易法(微分方程求解)

1. 常数变易法求解一阶线性微分方程过程 对于一阶线性微分方程: $$ \frac{\mathrm{d}y}{\mathrm{d}x}+P(x)y=Q(x) \tag{1} $$ 如果$Q(x)=0$则方程为齐次, $Q(x)\ne0$则方程为非齐次. 而常数变易法的求解就是先求出齐次方程的通解 $$ \frac{\mathrm{d}y}{\mathrm{d}x}+P(x)y=0 \tag{2} $$ 该齐次方程的通解为$y=Ce^{-\int{P(x)\mathrm{d}x}}$ $(C=\pm e^{C_1})$ 然后使用$u(x)$(以后简写为$u$)替换该通解中的常数$C$, 即便换为: $$ y=ue^{-\int{P(x)\mathrm{d}x}} \tag{3} $$ 然后, 将(3)代入(1)中, 得: $$ u^{\prime}e^{-\int{P(x)}\mathrm{d}x}=Q(x) \tag{4} $$ 通过"分离变量"即可求出$u$: $$ u=\int{Q(x)e^{\int{P(x)\mathrm{d}x}}\mathrm{d}x}+C \tag{5} $$ 将(5)在带回到(3)中即可求出$y$: $$ y=Ce^{-\int{P(x)\mathrm{d}x}}+e^{-\int{P(x)\mathrm{d}x}}\int{Q(x)e^{\int{P(x)\mathrm{d}x}}\mathrm{d}x} $$ 于是, 便得到了(1)的通解, 观察可以发现, 前面为(1)对应的齐次方程的通解, 后面为当C=0是(1)的特解, 因此得到结论: 一阶非齐次线性方程的通解等于对应的齐次方程的通解与非齐次方程的一个特解之和. 但是问题就是 为什么可以使用非齐次方程对应的齐次方程的通解来进行求解?, 上面的方法一气呵成只是告诉了我们应该这样做, 但我们却不知道为什么这么做. 但我学的很蒙, 于是进行了一番搜索找到了一些好的文章, 打算自己总结一下, 相关文章都放在了参考处. 2. 原理探讨 通过《“常数变易法"的探讨》文章知道我们现在使用的常数变易法只是结论, 而非推导过程. 该结论是拉格朗日十一年的研究成果. 因此在此介绍一些该结论得出的过程. 首先, 对于求解一阶线性微分方程最先想到的方法就是"分离常量”, 于是首先对(1)进行移项操作得: $$ \mathrm{d}y=[Q(x)-P(x)y]\mathrm{d}x $$ 观察怎样都无法将y单独移动到左边, 因此分离常量的方法不可以求解此方程. 于是想到使用$u=\frac{y}{x}$的方法进行求解得到: $$ u\prime{}x+u(1+P(x)x)=Q(x) $$ ...

C 语言函数调用和VLA和alloca栈的变化探讨

NOTE: 以下讨论使用的平台为 x86-64,使用的编译器为 gcc,以下提供的伪汇编码 采用 intel 格式。 文章中提到的代码,可以在 Code 找到。 一些重要的寄存器和指令 函数调用过程中,比较重要的寄存器主要有三个 rip rbp rsp。 rip 寄存器存放的为下一条要执行指令的地址,Instruction Pointer。 rbp 为基寄存器,存放的为前一个 rbp 的值,Base Pointer。 rsp 为栈寄存器,一直指向函数调用栈的底部,Stack Pointer。 比较重要的指令有 call push pop leave ret。 call addr 指令会首先将 call 返回之后要执行的地址压入栈中(返回地址),设置 rip 的值为 addr,然后跳转的这个位置去执行,大致可以等效于一下指令。 # 假设当执行到 call 指令时 CPU 就会自动设置 rip 寄存器为下一条要执行的指令 push rip mov rip, addr # 按理设置了 rip 寄存器,CPU 就会去执行 rip 地址的指令,这里写 jmp 只是想要更清晰的表示 call 的流程 jmp addr push rbp 指令会将 rsp 寄存器下移一个 word 的长度,rbp 中的内容移动到 rsp 寄存器所指向的地址中。 ...