add some linux cmds

This commit is contained in:
shzhxh 2021-05-28 17:13:55 +08:00
parent 94727ea035
commit abccc26724
30 changed files with 542 additions and 21 deletions

View File

@ -1,3 +1,175 @@
### 文件/外设
#### access, faccessat
检查用户对一个文件的权限
#### close
关闭文件描述符
#### dup, dup2, dup3
复制文件描述符
#### fcntl
管理文件描述符
#### getcwd, getwd, get_current_dir_name
获取当前工作目录
#### ioctl
控制设备
```c
/*
* 通过控制设备文件来控制设备。特别是字符设备,如终端(teminals)。
* fd : 设备文件的文件描述符,要求设备文件必须是打开的。
* request : 依赖于设备的请求码。关于此参数的宏和定义在<sys/ioctl.h>
* TCGETS : 获取当前串口设置(Tty Ctrl GET Serial port Settings)
* TIOCGPGRP : 获取终端上进程的组ID(Tty IO Ctrl Get the Process GRouP id)
* 第三个参数:无类型(untyped)的指针它是char *argp。
* 返回值:非负表示成功,负数表示失败。
* EBADF : fd无效。
* EFAULT : argp引用了不可访问的内存区域。
* EINVAL : request或argp无效。
* ENOTTY : fd没有关联到字符设备。
*/
int ioctl(int fd, unsigned long request, ...);
```
#### lseek
重新定位读/写文件的位移
#### open, openat, creat
打开或创建文件
#### read
从文件描述符读
#### stat,fstat,lstat,fstatat
获取文件状态
#### umask
设置文件模式的掩码
### 进程
#### arch_prctl
设置特定架构的线程状态
#### clone, __clone2
创建子进程
```c
/* 类似于fork()。与fork()不同的是clone()出来的子进程可以共享父进程的部分上下文,如虚拟地址空间、文件描述符表、信号句柄的表(table of signal handlers)。
* clone()的一个作用是创建线程,多个线程可以共享地址空间。
* fn : 函数的标记子进程从此处开始执行。而fork()出来的子进程是从调用点开始执行的。
* child_stack : 指定子进程的栈。由于栈是向下增长的,所以此参数应指向栈的高地址。
* 当函数fn(arg)返回时子进程终止。fn的返回值即为子进程的退出状态。子进程也可以调用exit()终止或接收到fatal信号后终止。
* flags :
* arg : 函数fn的参数。
*/
int clone(int (*fn)(void *), void *child_stack, int flags, void *arg, ...);
```
#### execve
执行程序
#### getgid, getegid
获得调用进程的组ID
#### getgroups, setgroups
获取、设置所附加组ID的列表
#### getpgid, getpgrp
获得进程的组
#### getpid, getppid
获取进程ID
#### getpriority, setpriority
获取、设置调度优先级
#### getresuid, getresgid
获取真实(r)有效(e)已保存的(s)用户ID、组ID
#### getsid
获取会话(session)ID
#### getuid, geteuid
获得调用进程的用户ID
#### pipe, pipe2
创建管道
#### prctl
对进程的操作
#### setgid
设置组ID
#### setpgid, setpgrp
设置进程的组
#### setresuid, setresgid
设置真实(r)有效(e)已保存的(s)用户ID、组ID
#### setsid
创建会话并设置进程组ID
#### setuid
设置用户ID
#### sched_setaffinity, sched_getaffinity
设置、获取线程对CPU的亲和力掩码(affinity mask)
#### sched_setparam, sched_getparam
设置、获取调度参数
#### sched_setscheduler, sched_getscheduler
设置、获取调度策略
#### sched_yield
让出处理器
#### times
获取进程相关的一些时间
#### wait, waitpid, waitid
等待子进程状态改变
@ -46,7 +218,71 @@ pid_t wait4(pid_t pid, int *wstatus, int options, struct rusage *rusage);
// 返回值: 与waitpid相同。
```
#### wait3,wait4
BSD风格的wait
### 内存
#### brk, sbrk
改变数据段的大小
#### mmap,munmap
把文件或设备映射(或取消映射)到内存
#### mprotect, pkey_mprotect
设置对一个内存区域的保护
### 信号
#### kill
向进程发送信号
#### sigaction, rt_sigaction
检测并改变一个信号的行为
#### sigaltstack
设置、获取信号栈的上下文
#### sigprocmask, rt_sigprocmask
检测并改变被阻塞的信号
#### sigreturn, rt_sigreturn
从信号handler返回并清空stack frame
#### sigsuspend, rt_sigsuspend
等待一个信号
#### sigwaitinfo, sigtimedwait, rt_sigtimedwait
同步等待排队的信号
#### tkill, tgkill
向线程发信号
### 计时器
#### clock_getres, clock_gettime, clock_settime
时钟和时间的函数
#### clock_nanosleep
可指定时钟的高精度睡眠(high-resolution sleep with specifiable clock)
#### getitimer, setitimer
获取、设置间隔计时器(interval timer)的值
#### gettimeofday
@ -60,3 +296,38 @@ struct timeval {
}
```
#### settimeofday
设置时间。
### 网络
#### connect
在socket上发起一个连接
#### socket
创建通信的端点
### 其它
#### gethostname, sethostname
获取、设置hostname
#### reboot
重启系统
#### sysinfo
获取系统信息
#### syslog, klogctl
read and/or clear kernel message ring buffer; set console_loglevel
#### uname
获取内核信息

View File

@ -0,0 +1,13 @@
#### qemu中安装alpine
```bash
qemu-img create -f raw image_file 8G # to create hard disk images
qemu-system-x86_64 -m 1G -cdrom iso_image -boot order=d -net nic -net user -drive file=disk_image,format=raw # installing the OS
# 用户名为root无密码
setup-alpine
# 启动alpine
qemu-system-x86_64 -m 1G -net nic -net user -drive file=disk_image,format=raw
```

View File

@ -8,3 +8,9 @@ read [options] [name ...] # 读取一行,把它分成多个字段,这些字
-p <prompt> # 在读取之前,先输出不带换行符的字符串<prompt>
```
#### 示例
```bash
cat file1 | while read line # 从文件file1中依次读出每行的内容到变量line
```

View File

@ -0,0 +1,11 @@
#### 简介
把很多实用程序放到一个文件里。
```bash
busybox <applet> [args] # 执行busybox里的程序<applet>
<applet> [args] # 当把busybox符号链接为<applet>,可直接执行它
busybox --install [-s] [DIR] # 把busybox安装进DIR目录其实就是把busybox复制进DIR再换个名字。如果使用-s参数则创建的是符号链接。
busybox --list[-full] # 列出程序名,如加上-full则列出完整的路径。
```

View File

@ -4,8 +4,9 @@ git clone [options] <repository> [directory]
#### 选项
```
```bash
-b, --branch <name> # 指向name所代表的分支
--origin <name>, -o <name> # 不用origin而用<name>追踪远程仓库
--origin <name>, -o <name> # 用<name>追踪远程仓库默认是origin
--depth <N> # 使用浅层克隆,其深度为<N>
```

View File

@ -64,9 +64,9 @@ rgrep # 等价于grep -r
##### 文本行控制
```
-A NUM, --after-context=NUM
-B NUM, --before-context=NUM
-C NUM, -NUM, --context=NUM
-A NUM, --after-context=NUM # 打印出匹配的行后面NUM行的内容。
-B NUM, --before-context=NUM # 打印出匹配的行前面NUM行的内容。
-C NUM, -NUM, --context=NUM # 打印输出内容的NUM行。
```
##### 文件与目录选择
@ -129,4 +129,3 @@ word$ //行尾匹配

View File

@ -0,0 +1,3 @@
#### 简介
解压工具

View File

@ -1,2 +1,82 @@
#### 简介
追踪系统调用和信号(signals)
```bash
strace [options] <command> [args]
# 在最简单的情况下strace运行指定的命令直到它退出。它会记录进程使用的系统调用和接收的信号。结果默认输出到标准错误也可用-o选项输出到文件中。
# 输出的格式:
# 系统调用名 + 传递的参数 + “=” + 返回值
# 如果返回-1(发生了错误),还会附加错误符号和错误信息
# 如果是信号则会打印出信号符号和siginfo结构体
# 如果是未知的系统调用则显示为16进制的形式。
# 系统调用的参数里如果有字符指针,则会解引用为字符串。字符串太长则用省略号表示 。
# 系统调用的参数里,简单的指针(如数组)用方括号标注,复杂的指针(如结构体)用花括号标注。
# 系统调用里的简单指针,数组用逗号分隔元素,位集(bit-sets)用空格分隔元素。
# ~[]表示位集里的元素全都设置了,这样比较省空间。
```
#### 选项
##### 输出格式
```bash
-i # 打印出系统调用的指针。
-o <filename> # 把输出写入文件filename而不是写到stderr.
-t # 打印出系统调用的时间,精确到秒。
-tt # 打印出系统调用的时间,精确到毫秒。
-ttt # 打印出epoch以来的秒数+系统调用的时间(精确到毫秒)。
-T # 打印系统调用所花费的时间。
```
##### 统计
```bash
-c # 统计每个系统调用的时间、调用次数和错误次数。
-S <sortby> # 对输出的结果排序。可选参数有time,calls,name,nothing默认time.
```
##### 过滤
```bash
-e <expr> # 用expr来定义要追踪的事件及追踪它的方式。
# expr的格式[qualifier=][!][?]<value1>[,[?]value2...]
-e trace=<set> # 指定要追踪的系统调用。默认trace=all。
# set指系统调用的集合open,close,read,write
-e trace=%file # 追踪以文件名为参数的系统调用
-e trace=%process # 追踪进程管理的系统调用
-e trace=%network # 追踪网络相关的系统调用
-e trace=%signal # 追踪信号相关的系统调用
-e trace=%ipc # 追踪IPC相关的系统调用
-v # 打印出系统调用参数的详细信息。
```
##### 追踪
```bash
-f # 仅追踪子进程。这些子进程就是要追踪的进程它们一般由fork,vfork或clone系统调用创建。
```
##### 启动
```bash
-p <pid> # 把pid附加到进程。
```
##### 其它
```bash
-d # 显示一些调试信息。
-V # 打印版本号。
```

View File

@ -99,6 +99,7 @@ V # 选择,以行为单位
:s/vivian/sky/g //替换当前行所有vivian为sky
:%s/[a-z]//ig //删除文档中所有字母,且忽略大小写
:%s/old/new/gc //查找全部文件并提示是否把old替换为new
:%s/^\s\+// //替换行首的所有空白字符空白字符指空格或tab
:n,$s/vivian/sky //从第n行到最后一行替换第一个vivian为sky
```

View File

@ -1,17 +1,29 @@
#### for arch linux
#### 安装wps
```bash
# for arch linux
git clone https://aur.archlinux.org/wps-office.git
cd wps-office
wget http://kdl1.cache.wps.com/ksodl/download/linux/a21/wps-office_10.1.0.5707~a21_x86_64.tar.xz
makepkg -si
# 安装字体
```
#### 安装字体
```bash
# for arch linux
git clone https://aur.archlinux.org/ttf-wps-fonts.git
cd ttf-wps-fonts
makepkg -si
# 安装字体方法二
suod cp -r fonts_dir /usr/share/fonts # 直接把字体文件夹复制到对应目录下即可
# for ubuntu
sudo apt install ttf-mscorefonts-installer
# 适用于所有Linux系统
sudo cp -r fonts_dir /usr/share/fonts # 直接把字体文件夹复制到对应目录下即可
```

63
Software/包管理/apk.md Normal file
View File

@ -0,0 +1,63 @@
#### 简介
Alpine的包管理器
```
apk [options] <command> [args]
```
#### 命令
##### 安装与删除
```bash
apk add
apk del
```
##### 系统管理
```bash
apk fix
apk update
apk upgrade
apk cache
```
##### 检索
```bash
apk info
apk list
apk dot
apk policy
```
##### 仓库管理
```
apk index
apk fetch
apk manifest # 显示包里所包含文件的checksums
apk verify
```
##### 其它
```bash
apk audit
apk stats
apk version
```
#### 全局选项
```bash
-U, --update-cache # 相当于‘--cache-max-age 1即缓存中的索引最长可存在1分钟
--cache-max-age <AGE> # 缓存中的索引最长可以存在<AGE>分钟
--no-cache # 不使用本地缓存
```
#### 提交选项

View File

@ -1,5 +1,5 @@
```
uniq [options] [input [output]] # 过滤input中的重复行输出output
uniq [options] [input [output]] # 过滤input中的重复行输出output
# 注一般与sort命令连用选排序再过滤
```

View File

@ -2,6 +2,29 @@
打印网络连接、路由表、接口统计数据、伪装连接和组播成员。
```bash
netstat [-vWeenNcCF] [Af] -r # 显示内核路由表
# Af : 默认inet
# -6|-4
# -A <af>
# --<af>
# af可能的值inet, inet6, ax25, netrom, ipx, ddp, x25
netstat [-vWnNcaeol] [socket...] # 显示打开的套接字
# socket :
# -t, --tcp
# -u, --udp
# -U, --udplite
# -S, --sctp
# -w, --raw
# -x, --unix
# --ax25
# --ipx
# --netrom
netstat {[-vWeenNac] -i | [-cnNe] -M | -s [-6tuw]} # 显示网络接口,或伪装连接,或统计数据。
```
#### 选项
```

View File

@ -14,11 +14,11 @@ fdisk [options] device # 管理磁盘分区表
#### fdisk命令
```
```bash
# DOS(MBR)
a # 切换可启动标记
b
c
c # 切换DOS兼容性标记
# Generic
d # 删除分区
@ -35,18 +35,18 @@ m # 显示帮助信息
u
x # 扩展功能(experts only)
Script
I
O
# Script
I # 从脚本载入磁盘布局
O # 把磁盘布局导出到脚本
# 保存与退出
w # 将分区表写入磁盘并退出
q # 退出不保存
# 创建标签
g
G
o
s
# 创建label
g # 创建GPT分区表
G # 创建SGI(IRIX)分区表
o # 创建DOS分区表
s # 创建Sun分区表
```

View File

@ -9,5 +9,6 @@ losetup [options] [loopdev] # 设置loop设备
-d, --detach <loopdevs> # 解除到loopdev的连接.
-f, --find [file] # 查找空闲的loop设备.如指定[file],则将[file]关联到那个空闲的loop设备.
-l, --list #
-P, --partscan # 在新创建的loop设备上强制内核扫描分区表
```

View File

@ -0,0 +1,11 @@
#### 简介
创建ext2/ext3/ext4文件系统
#### 选项
```bash
-F # 强制生成文件系统。
-j # 创建文件系统的时候使用ext3日志。
```

View File

@ -0,0 +1,10 @@
#### 简介
在Linux下创建MS-DOS文件系统
#### 选项
```bash
-F <FAT-SIZE> # 指定文件分配表的类型(12, 16或32位)。
```

View File

@ -0,0 +1,8 @@
#### 简介
基于进程的名字和属性来向进程发送信号
```bash
pkill [options] <pattern>
```

View File

@ -0,0 +1,8 @@
#### 简介
以树的形式显示进程之间的关系
```bash
pstree [options] [pid, user]
```