awk基础

https://github.com/wuzhouhui/awk/blob/master/The_AWK_Programming_Language_zh_CN.pdf 0. 实用一行手册 输入行的总行数 END { print NR } 打印第 10 行 NR == 10 打印每一个输入行的最后一个字段 { print $NF } 打印最后一行的最后一个字段 { field = $NF } END { print field } 打印字段数多于 4 个的输入行 NF > 4 打印最后一个字段值大于 4 的输入行 $NF > 4 打印所有输入行的字段数的总和 { nf = nf + NF } END { print nf } 打印包含 Beth 的行的数量 /Beth/ { nlines = nlines + 1 } END { print nlines } 打印具有最大值的第一个字段, 以及包含它的行 (假设 $1 总是 正的) 18 $1 > max { max = $1; maxline = $0 } END { print max, maxline } 打印至少包含一个字段的行 NF > 0 打印长度超过 80 个字符的行 length($0) > 80 在每一行的前面加上它的字段数 { print NF, $0 } 打印每一行的第 1 与第 2 个字段, 但顺序相反 { print $2, $1 } 交换每一行的第 1 与第 2 个字段, 并打印该行 { temp = $1; $1 = $2; $2 = temp; print } 将每一行的第一个字段用行号代替 { $1 = NR; print } 打印删除了第 2 个字段后的行 { $2 = ""; print } 将每一行的字段按逆序打印 printf("\n") }``` 18....

October 18, 2024 · 4 min · 李昌

Linux命令之nc

nc: 任意的TCP/UDP连接和监听 It can open TCP connections, send UDP packets, listen on arbitrary TCP and UDP ports, do port scanning, and deal with both IPv4 and IPv6. 使用case 快速创建client/server对 nc -l 1234 nc 127.0.0.1 1234 任何在client端的输出都将在server端显示 端口扫描 nc -zv 127.0.0.1 8885-8889 其他例子 nc -p 31337 -w 5 abc.com 42 nc -u abc.com 53 nc -s 10.1.2.3 abc.com 42 nc -lU /var/tmp/dsocket

November 26, 2023 · 1 min · 李昌

Install Docker on Arch

官方给出的教程是使用docker desktop, 但内存占用太大。 1. 安装docker二进制文件 从这里下载平台对应的二进制文件:https://download.docker.com/linux/static/stable/ 然后解压安装: $ tar xzvf /path/to/<FILE>.tar.gz $ sudo cp docker/* /usr/bin/ 这时可以手动执行sudo dockerd &以启动守护进程,但我们不这样做 配置守护进程 从https://github.com/moby/moby/tree/master/contrib/init/systemd拷贝docker.service, docker.socket两个文件到/etc/systemd/system/docker.service, /etc/systemd/system/docker.socket 然后运行: $ sudo systemctl daemon-reload # 重新加载配置 $ sudo systemctl start docker #启动dockerd $ sudo systemctl enable docker # 设置开机启动 其实也可以直接yay -S docker :-) docker-compose $ yay -S docker-compose References https://docs.docker.com/desktop/install/archlinux/ https://docs.docker.com/engine/install/binaries/#install-daemon-and-client-binaries-on-linux https://docs.docker.com/config/daemon/systemd/ https://wiki.archlinux.org/title/docker https://wiki.archlinux.org/title/Systemd#Drop-in_files

February 21, 2023 · 1 min · 李昌

Manjaro恢复grub

https://wiki.manjaro.org/index.php/GRUB/Restore_the_GRUB_Bootloader#EFI_System 启动笔记本时,突然发现gurb引导项故障了,记录一下修复过程: 首先用U盘制备一个manjaro引导盘。然后有两种方式 timeshift 进入系统BIOS设置U盘启动,然后直接从U盘启动一个manjaro。 如果你有timeshift备份,可以先尝试使用timeshift进行恢复,不行的话,就尝试方法二 grub恢复 进入系统BIOS设置U盘启动,在manjaro提示你选择如何启动系统时,选择Select a bootloader,然后选择grub,不出意外,你的原系统就启动了,但这时如果重启,还是找不到grub引导项。可做如下操作: 首先更新grub sudo pacman -Syu grub 然后: grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=manjaro --recheck grub-mkconfig -o /boot/grub/grub.cfg 如果第二个命令提示:/usr/bin/grub-probe:警告: 未知的设备类型 nvme0n1. 那么直接删除/etc/grub.d/60_memtest86+这个文件即可(无风险) 然后重试: grub-mkconfig -o /boot/grub/grub.cfg 提示完成后,拔掉U盘重启,应该就可以了。

February 13, 2023 · 1 min · 李昌

在AUR上发布包

如何在AUR上发布包 1. 准备PKGBUILD 文件 https://wiki.archlinux.org/title/PKGBUILD https://wiki.archlinux.org/title/Creating_packages 想要打包一个可以在AUR上发布的package, 需要使用makepkg工具,makepkg在运行时会寻找当前工作目录下的PKGBUILD文件。 找到之后,会从PKGBUILD配置的source去获取源码并根据PKGBUILD的配置去进行编译,最终产生二进制文件以及一些元信息文件。 如果你使用的是arch系的系统,可以在/usr/share/pacman/目录下找到一些PKGBUILD示例文件。例如: $ cat /usr/share/pacman/PKGBUILD.proto # This is an example PKGBUILD file. Use this as a start to creating your own, # and remove these comments. For more information, see 'man PKGBUILD'. # NOTE: Please fill out the license field for your package! If it is unknown, # then please put 'unknown'. # Maintainer: Your Name <youremail@domain.com> pkgname=NAME pkgver=VERSION pkgrel=1 epoch= pkgdesc="" arch=() url="" license=('GPL') groups=() depends=() makedepends=() checkdepends=() optdepends=() provides=() conflicts=() replaces=() backup=() options=() install= changelog= source=("$pkgname-$pkgver....

February 10, 2023 · 3 min · 李昌

stat系列性能分析工具

1. sysstat简介 sysstat是一个软件包,包含监测系统性能及效率的一组工具,这些工具对于我们收集系统性能数据,比如:CPU 使用率、硬盘和网络吞吐数据,这些数据的收集和分析,有利于我们判断系统是否正常运行,是提高系统运行效率、安全运行服务器的得力助手。 sysstat包含多个工具套件: 首先是stat系列 iostat 输出CPU的统计信息和所有I/O设备的输入输出(I/O)统计信息 mpstat 关于CPU的详细信息(单独输出或者分组输出) pidstat 关于运行中的进程/任务、CPU、内存等的统计信息 sysstat sysstat 工具包的 man 帮助页面。 nfsiostat NFS(Network File System)的I/O统计信息 cifsiostat CIFS(Common Internet File System)的统计信息 还有sa系列 7. sar 保存并输出不同系统资源(CPU、内存、IO、网络、内核等)的详细信息 8. sadc 系统活动数据收集器,用于收集sar工具的后端数据 9. sa1 系统收集并存储sadc数据文件的二进制数据,与sadc工具配合使用 10. sa2 配合sar工具使用,产生每日的摘要报告 11. sadf 用于以不同的数据格式(CVS或者XML)来格式化sar工具的输出 2. 简单使用 iostat iostat: 显示从系统启动至今的io历史数据 iostat -d 2: 每隔两秒显示一个连续的设备报告。 iostat -d 2 6: 为所有设备显示6个报告,每隔两秒显示一个 iostat -x sda sdb 2 6: 为sda和sdb两个设备显示6个报告,每隔2秒显示一个...

September 17, 2022 · 1 min · 李昌

top命令

在使用top命令查看系统状态时,会出现一堆参数,这些参数分别代表什么意思呢? 第一行 首先打印了当前时间21:11:55,然后是系统已经启动了多久up 4 days, 8:45,我已经4天8小时45分钟没关机了。。 然后当前有3个用户登录3 users,load average是1.47, 1.33, 1.14 load average load average后面有三个值,分别代表过去 1 分钟,5 分钟,15 分钟在这个节点上的 load average. Load Average 是一种 CPU 资源需求的度量。 举例来说,对于一个单个 CPU 的系统,如果在 1 分钟的时间里,处理器上始终有一个进程在运行,同时操作系统的进程可运行队列中始终都有 9 个进程在等待获取 CPU 资源。那么对于这 1 分钟的时间来说,系统的"load average"就是 1+9=10,这个定义对绝大部分的 Unix 系统都适用。 对于 Linux 来说,如果只考虑 CPU 的资源,Load Averag 等于单位时间内正在运行的进程加上可运行队列的进程,这个定义也是成立的。 对于load average的理解有以下三点: 不论计算机 CPU 是空闲还是满负载,Load Average 都是 Linux 进程调度器中可运行队列(Running Queue)里的一段时间的平均进程数目。 计算机上的 CPU 还有空闲的情况下,CPU Usage 可以直接反映到"load average"上,什么是 CPU 还有空闲呢?具体来说就是可运行队列中的进程数目小于 CPU 个数,这种情况下,单位时间进程 CPU Usage 相加的平均值应该就是"load average"的值。...

August 7, 2022 · 2 min · 李昌

inotify

1. 什么是inotify Inotify API提供了一种监视文件系统的机制事件。 Inotify可用于监视单个文件或监视目录。当监视目录时,Inotify将返回目录本身的事件,以及内部的文件目录。 简单的说,就是inotify可以为你监控文件系统的变化,在发生一些事件时通知你。 2. 实验 需要安装inotify-tools包 # arch系统 yay -S inotify-tools inotify-tools提供了两个命令:inotifywait和inotifywatch 2.1 inotifywait 先来看inotifywait,它被用来"Wait for a particular event on a file or set of files.", 也就是说等待在文件上的某些事件发生。使用inotifywait -h查看其支持的参数: -h show this help info --exclude <pattern> 排除匹配所给正则的所有事件 --excludei <pattern> 类似前一个命令但非敏感 --include <pattern> 排除除匹配正则之外的所有事件 --includei <pattern> 类似前一个命令但非敏感 -m|--monitor 在timeout之前保持监听,若不设置此标志,inotifywait将在一个事件后退出。 -d|--daemon 类似前一个命令但在后台运行,将日志输出到`--outfile`所指定的文件 -P|--no-dereference 不跟踪符号链接 -r|--recursive 递归的监听、 --fromfile <file> Read files to watch from <file> or `-' for stdin. -o|--outfile <file> 输出到<file>而不是标准输出 -s|--syslog 向syslog发送错误而不是Stderr -q|--quiet 只输出事件 -qq 啥也不输出 --format <fmt> 以特定格式输出 --no-newline 在格式化输出后不打印换行符 --timefmt <fmt> strftime-compatible format string for use with %T in --format string....

July 4, 2022 · 3 min · 李昌

Linux中的信号

1. Linux 中的信号 信号这个概念在很早期的 Unix 系统上就有。它一般会从 1 开始编号,通常来说,信号编号是 1 到 31,这个编号在所有的 Unix 系统上都是一样的。 取值 名称 解释 默认动作 1 SIGHUP 挂起 2 SIGINT 中断 3 SIGQUIT 退出 4 SIGILL 非法指令 5 SIGTRAP 断点或陷阱指令 6 SIGABRT abort发出的信号 7 SIGBUS 非法内存访问 8 SIGFPE 浮点异常 9 SIGKILL kill信号 不能被忽略、处理和阻塞 10 SIGUSR1 用户信号1 11 SIGSEGV 无效内存访问 12 SIGUSR2 用户信号2 13 SIGPIPE 管道破损,没有读端的管道写数据 14 SIGALRM alarm发出的信号 15 SIGTERM 终止信号 16 SIGSTKFLT 栈溢出 17 SIGCHLD 子进程退出 默认忽略 18 SIGCONT 进程继续 19 SIGSTOP 进程停止 不能被忽略、处理和阻塞 20 SIGTSTP 进程停止 21 SIGTTIN 进程停止,后台进程从终端读数据时 22 SIGTTOU 进程停止,后台进程想终端写数据时 23 SIGURG I/O有紧急数据到达当前进程 默认忽略 24 SIGXCPU 进程的CPU时间片到期 25 SIGXFSZ 文件大小的超出上限 26 SIGVTALRM 虚拟时钟超时 27 SIGPROF profile时钟超时 28 SIGWINCH 窗口大小改变 默认忽略 29 SIGIO I/O相关 30 SIGPWR 关机 默认忽略 31 SIGSYS 系统调用异常 用一句话来概括,信号(Signal)其实就是 Linux 进程收到的一个通知。这些通知产生的源头有很多种,通知的类型也有很多种。比如下面这几个典型的场景:...

May 18, 2022 · 1 min · 李昌

Linux下的用户和用户组管理

1.概述 Linux 是多用户多任务操作系统,换句话说,Linux 系统支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影响。 例如,某台 Linux 服务器上有 4 个用户,分别是 root、www、ftp 和 mysql,在同一时间内,root 用户可能在查看系统日志、管理维护系统;www 用户可能在修改自己的网页程序;ftp 用户可能在上传软件到服务器;mysql 用户可能在执行自己的 SQL 查询,每个用户互不干扰,有条不紊地进行着自己的工作。与此同时,每个用户之间不能越权访问,比如 www 用户不能执行 mysql 用户的 SQL 查询操作,ftp 用户也不能修改 www 用户的网页程序。 不同用户具有不问的权限,毎个用户在权限允许的范围内完成不间的任务,Linux 正是通过这种权限的划分与管理,实现了多用户多任务的运行机制。 因此,如果要使用 Linux 系统的资源,就必须向系统管理员申请一个账户,然后通过这个账户进入系统(账户和用户是一个概念)。通过建立不同属性的用户,一方面可以合理地利用和控制系统资源,另一方面也可以帮助用户组织文件,提供对用户文件的安全性保护。 每个用户都有唯一的用户名和密码。在登录系统时,只有正确输入用户名和密码,才能进入系统和自己的主目录。 用户组是具有相同特征用户的逻辑集合。简单的理解,有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权,如果有 10 个用户的话,就需要授权 10 次,那如果有 100、1000 甚至更多的用户呢? 显然,这种方法不太合理。最好的方式是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中。那么,所有用户就具有了和组一样的权限,这就是用户组。 将用户分组是 Linux 系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,很多程序上简化了对用户的管理工作。 2.用户和用户组的关系 用户和用户组的对应关系有以下 4 种: 一对一:一个用户可以存在一个组中,是组中的唯一成员; 一对多:一个用户可以存在多个用户组中,此用户具有这多个组的共同权限; 多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限; 多对多:多个用户可以存在多个组中,也就是以上 3 种关系的扩展。 用户和组之间的关系可用下图表示:图 1 Linux用户和用户组 3. UID和GID(用户ID和组ID) 登陆 Linux 系统时,虽然输入的是自己的用户名和密码,但其实 Linux 并不认识你的用户名称,它只认识用户名对应的 ID 号(也就是一串数字)。Linux 系统将所有用户的名称与 ID 的对应关系都存储在 /etc/passwd 文件中。...

March 26, 2022 · 10 min · 李昌