From abccc267240d53c7f335a424e58786beb8996227 Mon Sep 17 00:00:00 2001 From: shzhxh Date: Fri, 28 May 2021 17:13:55 +0800 Subject: [PATCH] add some linux cmds --- OS/Linux/系统调用接口.md | 271 ++++++++++++++++++ Software/Linux分发版/Distr_Alpine.md | 13 + .../{ => Linux分发版}/Distr_Celadon.md | 0 Software/{ => Linux分发版}/Distr_Debian.md | 0 Software/{ => Linux分发版}/Distr_Deepin.md | 0 Software/{ => Linux分发版}/Distr_LFS.md | 0 .../{ => Linux分发版}/Distr_OpenWrt.md | 0 .../{ => Linux分发版}/Distr_Openthos.md | 0 .../{ => Linux分发版}/Distr_Raspbian.md | 0 Software/{ => Linux分发版}/Distr_Ubuntu.md | 0 Software/{ => Linux分发版}/Distr_Win10.md | 0 .../{ => Linux分发版}/Distr_archLinux.md | 0 .../{ => Linux分发版}/Distr_manjaro.md | 0 Software/builtin命令/read.md | 6 + Software/busybox.md | 11 + Software/git命令/git-clone.md | 5 +- Software/grep.md | 7 +- Software/gunzip.md | 3 + Software/strace.md | 80 ++++++ Software/vim.md | 1 + Software/wps.md | 20 +- Software/包管理/apk.md | 63 ++++ Software/文本转换/uniq.md | 2 +- Software/网络管理/netstat.md | 23 ++ Software/设备管理/fdisk.md | 20 +- Software/设备管理/losetup.md | 1 + Software/设备管理/mke2fs.md | 11 + Software/设备管理/mkfs.fat.md | 10 + Software/进程管理/pkill.md | 8 + Software/进程管理/pstree.md | 8 + 30 files changed, 542 insertions(+), 21 deletions(-) create mode 100644 Software/Linux分发版/Distr_Alpine.md rename Software/{ => Linux分发版}/Distr_Celadon.md (100%) rename Software/{ => Linux分发版}/Distr_Debian.md (100%) rename Software/{ => Linux分发版}/Distr_Deepin.md (100%) rename Software/{ => Linux分发版}/Distr_LFS.md (100%) rename Software/{ => Linux分发版}/Distr_OpenWrt.md (100%) rename Software/{ => Linux分发版}/Distr_Openthos.md (100%) rename Software/{ => Linux分发版}/Distr_Raspbian.md (100%) rename Software/{ => Linux分发版}/Distr_Ubuntu.md (100%) rename Software/{ => Linux分发版}/Distr_Win10.md (100%) rename Software/{ => Linux分发版}/Distr_archLinux.md (100%) rename Software/{ => Linux分发版}/Distr_manjaro.md (100%) create mode 100644 Software/包管理/apk.md create mode 100644 Software/设备管理/mke2fs.md create mode 100644 Software/设备管理/mkfs.fat.md create mode 100644 Software/进程管理/pkill.md create mode 100644 Software/进程管理/pstree.md diff --git a/OS/Linux/系统调用接口.md b/OS/Linux/系统调用接口.md index 121c6fc..ecbd438 100644 --- a/OS/Linux/系统调用接口.md +++ b/OS/Linux/系统调用接口.md @@ -1,3 +1,175 @@ +### 文件/外设 + +#### access, faccessat + +检查用户对一个文件的权限 + +#### close + +关闭文件描述符 + +#### dup, dup2, dup3 + +复制文件描述符 + +#### fcntl + +管理文件描述符 + +#### getcwd, getwd, get_current_dir_name + +获取当前工作目录 + +#### ioctl + +控制设备 + +```c +/* + * 通过控制设备文件来控制设备。特别是字符设备,如终端(teminals)。 + * fd : 设备文件的文件描述符,要求设备文件必须是打开的。 + * request : 依赖于设备的请求码。关于此参数的宏和定义在。 + * 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 + +获取内核信息 diff --git a/Software/Linux分发版/Distr_Alpine.md b/Software/Linux分发版/Distr_Alpine.md new file mode 100644 index 0000000..8cc9e21 --- /dev/null +++ b/Software/Linux分发版/Distr_Alpine.md @@ -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 +``` + diff --git a/Software/Distr_Celadon.md b/Software/Linux分发版/Distr_Celadon.md similarity index 100% rename from Software/Distr_Celadon.md rename to Software/Linux分发版/Distr_Celadon.md diff --git a/Software/Distr_Debian.md b/Software/Linux分发版/Distr_Debian.md similarity index 100% rename from Software/Distr_Debian.md rename to Software/Linux分发版/Distr_Debian.md diff --git a/Software/Distr_Deepin.md b/Software/Linux分发版/Distr_Deepin.md similarity index 100% rename from Software/Distr_Deepin.md rename to Software/Linux分发版/Distr_Deepin.md diff --git a/Software/Distr_LFS.md b/Software/Linux分发版/Distr_LFS.md similarity index 100% rename from Software/Distr_LFS.md rename to Software/Linux分发版/Distr_LFS.md diff --git a/Software/Distr_OpenWrt.md b/Software/Linux分发版/Distr_OpenWrt.md similarity index 100% rename from Software/Distr_OpenWrt.md rename to Software/Linux分发版/Distr_OpenWrt.md diff --git a/Software/Distr_Openthos.md b/Software/Linux分发版/Distr_Openthos.md similarity index 100% rename from Software/Distr_Openthos.md rename to Software/Linux分发版/Distr_Openthos.md diff --git a/Software/Distr_Raspbian.md b/Software/Linux分发版/Distr_Raspbian.md similarity index 100% rename from Software/Distr_Raspbian.md rename to Software/Linux分发版/Distr_Raspbian.md diff --git a/Software/Distr_Ubuntu.md b/Software/Linux分发版/Distr_Ubuntu.md similarity index 100% rename from Software/Distr_Ubuntu.md rename to Software/Linux分发版/Distr_Ubuntu.md diff --git a/Software/Distr_Win10.md b/Software/Linux分发版/Distr_Win10.md similarity index 100% rename from Software/Distr_Win10.md rename to Software/Linux分发版/Distr_Win10.md diff --git a/Software/Distr_archLinux.md b/Software/Linux分发版/Distr_archLinux.md similarity index 100% rename from Software/Distr_archLinux.md rename to Software/Linux分发版/Distr_archLinux.md diff --git a/Software/Distr_manjaro.md b/Software/Linux分发版/Distr_manjaro.md similarity index 100% rename from Software/Distr_manjaro.md rename to Software/Linux分发版/Distr_manjaro.md diff --git a/Software/builtin命令/read.md b/Software/builtin命令/read.md index 992ff92..0340ea5 100644 --- a/Software/builtin命令/read.md +++ b/Software/builtin命令/read.md @@ -8,3 +8,9 @@ read [options] [name ...] # 读取一行,把它分成多个字段,这些字 -p # 在读取之前,先输出不带换行符的字符串 ``` +#### 示例 + +```bash +cat file1 | while read line # 从文件file1中依次读出每行的内容到变量line +``` + diff --git a/Software/busybox.md b/Software/busybox.md index e69de29..68c9bc7 100644 --- a/Software/busybox.md +++ b/Software/busybox.md @@ -0,0 +1,11 @@ +#### 简介 + +把很多实用程序放到一个文件里。 + +```bash +busybox [args] # 执行busybox里的程序 + [args] # 当把busybox符号链接为,可直接执行它 +busybox --install [-s] [DIR] # 把busybox安装进DIR目录,其实就是把busybox复制进DIR再换个名字。如果使用-s参数则创建的是符号链接。 +busybox --list[-full] # 列出程序名,如加上-full则列出完整的路径。 +``` + diff --git a/Software/git命令/git-clone.md b/Software/git命令/git-clone.md index e8db0bf..8b2878d 100644 --- a/Software/git命令/git-clone.md +++ b/Software/git命令/git-clone.md @@ -4,8 +4,9 @@ git clone [options] [directory] #### 选项 -``` +```bash -b, --branch # 指向name所代表的分支 ---origin , -o # 不用origin,而用追踪远程仓库 +--origin , -o # 用追踪远程仓库,默认是origin +--depth # 使用浅层克隆,其深度为 ``` diff --git a/Software/grep.md b/Software/grep.md index 66f262c..c9530d3 100644 --- a/Software/grep.md +++ b/Software/grep.md @@ -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$ //行尾匹配 - diff --git a/Software/gunzip.md b/Software/gunzip.md index e69de29..b40dc4f 100644 --- a/Software/gunzip.md +++ b/Software/gunzip.md @@ -0,0 +1,3 @@ +#### 简介 + +解压工具 \ No newline at end of file diff --git a/Software/strace.md b/Software/strace.md index 6df2cc7..8b2ff9b 100644 --- a/Software/strace.md +++ b/Software/strace.md @@ -1,2 +1,82 @@ +#### 简介 + 追踪系统调用和信号(signals) +```bash +strace [options] [args] +# 在最简单的情况下,strace运行指定的命令直到它退出。它会记录进程使用的系统调用和接收的信号。结果默认输出到标准错误,也可用-o选项输出到文件中。 +# 输出的格式: +# 系统调用名 + 传递的参数 + “=” + 返回值 +# 如果返回-1(发生了错误),还会附加错误符号和错误信息 +# 如果是信号,则会打印出信号符号和siginfo结构体 +# 如果是未知的系统调用,则显示为16进制的形式。 +# 系统调用的参数里如果有字符指针,则会解引用为字符串。字符串太长则用省略号表示 。 +# 系统调用的参数里,简单的指针(如数组)用方括号标注,复杂的指针(如结构体)用花括号标注。 +# 系统调用里的简单指针,数组用逗号分隔元素,位集(bit-sets)用空格分隔元素。 +# ~[]表示位集里的元素全都设置了,这样比较省空间。 +``` + +#### 选项 + +##### 输出格式 + +```bash +-i # 打印出系统调用的指针。 +-o # 把输出写入文件filename,而不是写到stderr. +-t # 打印出系统调用的时间,精确到秒。 +-tt # 打印出系统调用的时间,精确到毫秒。 +-ttt # 打印出epoch以来的秒数+系统调用的时间(精确到毫秒)。 +-T # 打印系统调用所花费的时间。 +``` + + + +##### 统计 + +```bash +-c # 统计每个系统调用的时间、调用次数和错误次数。 +-S # 对输出的结果排序。可选参数有time,calls,name,nothing,默认time. +``` + + + +##### 过滤 + +```bash +-e # 用expr来定义要追踪的事件及追踪它的方式。 + # expr的格式:[qualifier=][!][?][,[?]value2...] +-e trace= # 指定要追踪的系统调用。默认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附加到进程。 +``` + + + +##### 其它 + +```bash +-d # 显示一些调试信息。 +-V # 打印版本号。 +``` + diff --git a/Software/vim.md b/Software/vim.md index 1d32f1b..788db9f 100644 --- a/Software/vim.md +++ b/Software/vim.md @@ -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 ``` diff --git a/Software/wps.md b/Software/wps.md index cad0842..ff6bbb5 100644 --- a/Software/wps.md +++ b/Software/wps.md @@ -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 # 直接把字体文件夹复制到对应目录下即可 ``` diff --git a/Software/包管理/apk.md b/Software/包管理/apk.md new file mode 100644 index 0000000..f635d7a --- /dev/null +++ b/Software/包管理/apk.md @@ -0,0 +1,63 @@ +#### 简介 + +Alpine的包管理器 + +``` +apk [options] [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 # 缓存中的索引最长可以存在分钟 +--no-cache # 不使用本地缓存 +``` + + + +#### 提交选项 \ No newline at end of file diff --git a/Software/文本转换/uniq.md b/Software/文本转换/uniq.md index 94278c7..f93c2a4 100644 --- a/Software/文本转换/uniq.md +++ b/Software/文本转换/uniq.md @@ -1,5 +1,5 @@ ``` -uniq [options] [input [output]] # 过滤input中的重复行,输出的output +uniq [options] [input [output]] # 过滤input中的重复行,输出到output # 注:一般与sort命令连用,选排序,再过滤 ``` diff --git a/Software/网络管理/netstat.md b/Software/网络管理/netstat.md index 6316246..da89c47 100644 --- a/Software/网络管理/netstat.md +++ b/Software/网络管理/netstat.md @@ -2,6 +2,29 @@ 打印网络连接、路由表、接口统计数据、伪装连接和组播成员。 +```bash +netstat [-vWeenNcCF] [Af] -r # 显示内核路由表 +# Af : 默认inet +# -6|-4 +# -A +# -- +# 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]} # 显示网络接口,或伪装连接,或统计数据。 +``` + + + #### 选项 ``` diff --git a/Software/设备管理/fdisk.md b/Software/设备管理/fdisk.md index 4523840..9843c9f 100644 --- a/Software/设备管理/fdisk.md +++ b/Software/设备管理/fdisk.md @@ -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分区表 ``` diff --git a/Software/设备管理/losetup.md b/Software/设备管理/losetup.md index be77f1c..b24c278 100644 --- a/Software/设备管理/losetup.md +++ b/Software/设备管理/losetup.md @@ -9,5 +9,6 @@ losetup [options] [loopdev] # 设置loop设备 -d, --detach # 解除到loopdev的连接. -f, --find [file] # 查找空闲的loop设备.如指定[file],则将[file]关联到那个空闲的loop设备. -l, --list # +-P, --partscan # 在新创建的loop设备上,强制内核扫描分区表 ``` diff --git a/Software/设备管理/mke2fs.md b/Software/设备管理/mke2fs.md new file mode 100644 index 0000000..7baf0d0 --- /dev/null +++ b/Software/设备管理/mke2fs.md @@ -0,0 +1,11 @@ +#### 简介 + +创建ext2/ext3/ext4文件系统 + +#### 选项 + +```bash +-F # 强制生成文件系统。 +-j # 创建文件系统的时候使用ext3日志。 +``` + diff --git a/Software/设备管理/mkfs.fat.md b/Software/设备管理/mkfs.fat.md new file mode 100644 index 0000000..b7b6695 --- /dev/null +++ b/Software/设备管理/mkfs.fat.md @@ -0,0 +1,10 @@ +#### 简介 + +在Linux下创建MS-DOS文件系统 + +#### 选项 + +```bash +-F # 指定文件分配表的类型(12, 16或32位)。 +``` + diff --git a/Software/进程管理/pkill.md b/Software/进程管理/pkill.md new file mode 100644 index 0000000..cb970b1 --- /dev/null +++ b/Software/进程管理/pkill.md @@ -0,0 +1,8 @@ +#### 简介 + +基于进程的名字和属性来向进程发送信号 + +```bash +pkill [options] +``` + diff --git a/Software/进程管理/pstree.md b/Software/进程管理/pstree.md new file mode 100644 index 0000000..3a123f7 --- /dev/null +++ b/Software/进程管理/pstree.md @@ -0,0 +1,8 @@ +#### 简介 + +以树的形式显示进程之间的关系 + +```bash +pstree [options] [pid, user] +``` +