共有 274 篇文章
Stack alignment in x64 assembly
2022-08-23 - 2024-09-15
AOS

gcc会在call指令之前让rsp16字节对齐。

cpu在call的时候将rip压栈rsp -= 8,所以进入被调用者之后rsp = 8 (mod 16)。如果在这个函数里面还要call其他函数的话就要将rsp减掉奇数个8让它重新16字节对齐。

BOOT: 从FAT32分区搜索并读取loader
2022-08-22 - 2024-09-15
AOS

初始化寄存器

我将物理地址0x050000-0x070008之间的内存分配给了堆栈。栈顶设置为0x070008的原因是,kernel函数在编译后会在函数开头加上这样一行汇编代码sub $0x8,%rsp,将栈顶设置为0x070008可以保证在经过此操作后,栈顶为0x070000

File Permission
2022-08-19 - 2024-09-18

修改文件或目录所有者

1# 修改文件的所有者为root
2chown root <file>
3# 修改文件的所有者和所有组为root
4chown root: <file>
5# 修改文件的所有者为root,所有组为akvicor
6chown root:akvicor <file>
7# 修改文件的所有组为root
8chown :root <file>

修改文件或目录的访问权限

1# chmod <xxx> <file/dir>
2chmod 777 file
3# chmod <u/g/o/a><+/-><r/w/x> <file/dir>
4chmod u+x file

目标

  • u: 用户
  • g: 组
  • o: 其他用户
  • a: 全部

操作

  • +: 加
  • -: 减

权限

  • r: 读
  • w: 写
  • x: 执行

特殊权限

  • s: ->u组,简称SUID的特殊权限。当执行该文件时将具有该文件所有者的权限。
  • s: ->g组,简称SGID的特殊权限。在该目录下创建的文件和目录都属于该目录所属的组
  • t: ->o组,简称SBIT的特殊权限。只能让所属主以及root可以删除/移动/重命名该目录下的文件

其中sudo命令就是通过u组的s权限实现的。

zsh
2022-08-09 - 2024-09-18

oh-my-zsh主题显示执行时间

oh-my-zsh主题显示执行时间

进入主题目录~/.oh-my-zsh/themes

在想要修改的主题文件中添加如下代码:

 1function preexec() {
 2  timer=${timer:-$SECONDS}
 3}
 4
 5function precmd() {
 6  if [ $timer ]; then
 7    timer_show=$(($SECONDS - $timer))
 8    if [[ $timer_show -ge $min_show_time ]]; then
 9      RPROMPT='%{$fg_bold[red]%}(${timer_show}s)%f%{$fg_bold[white]%}[%*]%f %{$reset_color%}%'
10    else
11      RPROMPT='%{$fg_bold[white]%}[%*]%f'
12    fi
13    unset timer
14  fi
15}
16
17autoload -Uz add-zsh-hook
18add-zsh-hook preexec preexec
19add-zsh-hook precmd precmd
Linux User/Group
2022-08-09 - 2024-09-18

概念和相关文件

在 Linux 用户系统中存在两类组。第一类是主要用户组(主组),第二类是附加用户组(附属组)。

  • 主组:也被称为primary group、first group或initial login group,用户的默认组,用户的gid所标识的组。
  • 附属组:也被称为Secondary group或supplementary group,用户的附加组。

存储文件

  • 用户帐户及相关信息都存储在/etc/passwd文件中,
  • 用户组信息存储在/etc/shadow/etc/group文件。

id命令

通过id命令查看用户的主组和附属组

Usbfs
2022-08-09 - 2024-09-18

赋予用户组操作usb设备的权限

创建用户组并添加用户到用户组

 1# 创建用户组
 2groupadd usbfs
 3# 查看usbfs用户组的id
 4#   usbfs:x:1001:
 5cat /dev/group | grep usbfs
 6# 把akvicor添加到用户组
 7useradd -G usbfs akvicor
 8  # 或
 9vim /etc/group
10  # 修改 usbfs:x:1001:
11  # 为   usbfs:x:1001:akvicor

添加访问权限

1# 进入目录
2cd /etc/udev/rules.d
3# 创建配置文件
4vim xxx.rules
5# 写入信息到配置文件

允许用户组usbfs访问usb设备

Debian Install
2022-08-09 - 2024-09-18

Debian安装说明

Debian 源

1wget https://paste.akvicor.com/api/106

Debian 12 + i3

修改时区

1# 修改时区
2ln -sf /usr/share/zoneinfo/Etc/GMT-8 /etc/localtime
3# 同步硬件时间
4hwclock -w

配置源

1curl https://paste.akvicor.com/api/101 > /etc/apt/sources.list
2# 注释掉不需要用到的源,如 bookworm-proposed-updates(介于stable和testing之间), bookworm-backports(新特性移植到旧版本)
3
4apt update
5apt upgrade
6reboot

安装基础工具

1apt install apt-transport-https ca-certificates
2apt install vim curl wget git gcc g++ make screen bc jq zsh

添加基础bash命令

1# 添加ll命令.bashrc
2alias l='ls -al --color=auto'
3alias ll='ls -alh --color=auto'

笔记本电源操作

1vim /etc/systemd/logind.conf
2 HandleLidSwitch=ignore # 合上屏幕
3 HandlePowerKey=ignore # 电源按键

修改启动展示信息

ssh登录信息

Windows IP Local Port Range
2022-08-08 - 2024-09-18
1:: 查看Windows系统TCP端口范围
2netsh int ipv4 show dynamicportrange protocol=udp
3:: 修改Windows系统TCP端口范围
4netsh int ipv4 set dynamicport tcp start=30000 num=35535
5:: 查看Windows系统UDP端口范围
6netsh int ipv4 show dynamicportrange protocol=udp
7:: 修改Windows系统UDP端口范围
8netsh int ipv4 set dynamicport udp start=30000 num=35535
Linux IP Local Port Range
2022-08-08 - 2024-09-18
1# 查看当前临时端口的范围
2sysctl net.ipv4.ip_local_port_range
3cat /proc/sys/net/ipv4/ip_local_port_range
4# 暂时性修改临时端口的范围
5echo 1024 65535 > /proc/sys/net/ipv4/ip_local_port_range
6sysctl -w net.ipv4.ip_local_port_range="1024 64000"
7# 永久性修改临时端口范围
8vim /etc/sysctl.conf # 编辑此文件并添加下面一行内容
9net.ipv4.ip_local_port_range = 1024 65535
Xset
2022-08-01 - 2024-09-18

xset:用于设置显示器的各种用户属性选项。如果想要持久化设置,可以将设置写入.xinitrc文件中。

dpms(Display Power Manage System)和屏保是互相作用的,这两个值谁设的小谁生效。

Ruby
2022-07-29 - 2024-09-18

编写

编写ruby.html放在layouts/shortcodes/文件夹中

1<!-- layouts/shortcodes/ruby.html -->
2<ruby>
3  {{ .Get "text" }}<rp>(</rp><rt>{{ .Get "title" }}</rt><rp>)</rp>
4</ruby>

使用

1{{< ruby title="完全没理解" text="太棒了,我逐渐理解一切" >}}
太棒了,我逐渐理解一切(完全没理解)