From a7fb595f4ac7b68ebe9daca482af256da444cf18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=9C=89=E5=8D=AB?= <3411348686@qq.com> Date: Sun, 23 Jun 2024 23:14:02 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...73\345\212\241\347\256\241\347\220\206.md" | 41 ++ ...03\351\231\220\347\256\241\347\220\206.md" | 57 +++ ...33\347\250\213\347\256\241\347\220\206.md" | 63 +++ ...15\345\212\241\347\256\241\347\220\206.md" | 57 +++ .../1Linux\345\210\235\350\257\206.md" | 0 ...56\345\275\225\347\273\223\346\236\204.md" | 19 + ...07\344\273\266\347\256\241\347\220\206.md" | 40 ++ ...35\345\257\271\350\267\257\345\276\204.md" | 22 + ...07\344\273\266\345\206\205\345\256\271.md" | 59 +++ ...70\347\224\250\345\221\275\344\273\244.md" | 381 ++++++++++++++++++ ...07\344\273\266\347\274\226\350\276\221.md" | 61 +++ ...04\347\220\206\345\267\245\345\205\267.md" | 58 +++ ...im\347\274\226\350\276\221\345\231\250.md" | 65 +++ 13 files changed, 923 insertions(+) create mode 100644 "\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/10\345\221\250\346\234\237\344\273\273\345\212\241\347\256\241\347\220\206.md" create mode 100644 "\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/11 \347\224\250\346\210\267\345\222\214\346\235\203\351\231\220\347\256\241\347\220\206.md" create mode 100644 "\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/12 linux \350\277\233\347\250\213\347\256\241\347\220\206.md" create mode 100644 "\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/13\346\234\215\345\212\241\347\256\241\347\220\206.md" rename "\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/20240517-1Linux\345\210\235\350\257\206.md" => "\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/1Linux\345\210\235\350\257\206.md" (100%) create mode 100644 "\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/2 linux\347\233\256\345\275\225\347\273\223\346\236\204.md" create mode 100644 "\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/3 linux \346\226\207\344\273\266\347\256\241\347\220\206.md" create mode 100644 "\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/4 linux\347\233\270\345\257\271\350\267\257\345\276\204\345\222\214\347\273\235\345\257\271\350\267\257\345\276\204.md" create mode 100644 "\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/5 \346\237\245\347\234\213\346\226\207\344\273\266\345\206\205\345\256\271.md" create mode 100644 "\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/6 \345\270\270\347\224\250\345\221\275\344\273\244.md" create mode 100644 "\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/7 sed\346\226\207\344\273\266\347\274\226\350\276\221.md" create mode 100644 "\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/8 awk\346\226\207\346\234\254\345\244\204\347\220\206\345\267\245\345\205\267.md" create mode 100644 "\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/9vim\347\274\226\350\276\221\345\231\250.md" diff --git "a/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/10\345\221\250\346\234\237\344\273\273\345\212\241\347\256\241\347\220\206.md" "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/10\345\221\250\346\234\237\344\273\273\345\212\241\347\256\241\347\220\206.md" new file mode 100644 index 0000000..1441048 --- /dev/null +++ "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/10\345\221\250\346\234\237\344\273\273\345\212\241\347\256\241\347\220\206.md" @@ -0,0 +1,41 @@ + +1. Linux周期任务管理的关键步骤 +创建任务 +- 编写要自动执行的命令或脚本。 +- 确保脚本具有可执行权限(使用`chmod +x script.sh`)。 +编辑cron表 +- 使用`crontab -e`命令编辑当前用户的cron表。 +- 如果是系统级别的任务,可能需要编辑`/etc/crontab`或`/etc/cron.d/`目录下的文件。 +设置任务时间 +- 在cron表中,每一行代表一个任务,格式为`分钟 小时 日 月 周 命令`。 +- 使用特定的符号来表示时间范围,如`*`表示所有,`1-5`表示1到5,`*/2`表示每隔2个单位。 +保存并退出 +- 编辑完成后,保存文件并退出编辑器。 +测试任务 +- 手动运行脚本或命令,确保它能正确执行。 +查看任务列表 +- 使用`crontab -l`命令查看当前用户的cron任务列表。 +移除任务 +- 使用`crontab -r`命令删除当前用户的全部cron任务。 +2. 详细示例 +示例1:每日备份 +- **任务**: 每天凌晨3点备份网站文件。 +- **cron表**: `0 3 * * * /usr/bin/tar -czvf /backups/website_$(date +\%Y\%m\%d).tar.gz /var/www/html` +- **说明**: 每天3点整执行备份命令,将网站文件夹压缩成tar.gz格式,并以当前日期命名备份文件。 +示例2:清理日志文件 +- **任务**: 每周日凌晨4点清理一周前的日志文件。 +- **cron表**: `0 4 * * 0 /usr/bin/find /var/log -name "*.log" -mtime +7 -exec rm {} \;` +- **说明**: 每周日4点整执行清理命令,查找一周前修改过的日志文件并删除。 +示例3:每小时检查系统状态 +- **任务**: 每小时的第15分钟运行系统状态检查脚本。 +- **cron表**: `15 * * * * /home/user/check_system_status.sh` +- **说明**: 每小时的第15分钟执行系统状态检查脚本。 +示例4:每分钟发送心跳信号 +- **任务**: 每分钟向监控服务器发送心跳信号。 +- **cron表**: `* * * * * /usr/local/bin/send_heartbeat.sh` +- **说明**: 每分钟执行一次心跳信号发送脚本。 +3. 注意事项 +- 在cron任务中,路径可能是相对的,因此最好使用绝对路径来执行命令或脚本。 +- 注意环境变量可能与登录shell不同,如果脚本依赖特定的环境变量,需要在cron任务中显式设置或使用完整路径。 +- 使用`>/dev/null 2>&1`可以将任务的标准输出和错误输出重定向到空设备,避免邮件通知。 +- 定期检查cron任务的输出,确保没有意外的错误发生。 diff --git "a/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/11 \347\224\250\346\210\267\345\222\214\346\235\203\351\231\220\347\256\241\347\220\206.md" "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/11 \347\224\250\346\210\267\345\222\214\346\235\203\351\231\220\347\256\241\347\220\206.md" new file mode 100644 index 0000000..4f9f544 --- /dev/null +++ "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/11 \347\224\250\346\210\267\345\222\214\346\235\203\351\231\220\347\256\241\347\220\206.md" @@ -0,0 +1,57 @@ + +1. Linux用户管理 +用户类型 +- **超级用户(root)**:拥有系统上的最高权限,可以执行任何操作。 +- **普通用户**:受限的用户账户,只能访问其有权限的资源。 +用户组 +- 用户可以属于一个或多个用户组,组内用户共享一组权限。 +用户管理命令 +- `adduser username`:添加新用户。 +- `passwd username`:设置或更改用户密码。 +- `usermod -a -G groupname username`:将用户添加到附加组。 +- `deluser username`:删除用户。 +- `groupadd groupname`:添加新用户组。 +- `groupdel groupname`:删除用户组。 +2. Linux文件权限 +权限类型 +- **读(r)**:允许查看文件内容或目录列表。 +- **写(w)**:允许修改文件内容或目录中的文件。 +- **执行(x)**:对于文件,允许作为程序执行;对于目录,允许进入该目录。 +权限表示 +- 每个文件或目录都有三组权限,分别对应**所有者**、**所属组**和其他用户。 +- 权限通常显示为`rwxrwxrwx`的形式,其中`rwx`表示读、写、执行权限。 +权限管理命令 +- `ls -l`:列出文件和目录的详细信息,包括权限。 +- `chmod mode file`:改变文件或目录的权限。 +- `chown owner:group file`:改变文件的所有者和所属组。 +- `umask`:设置新建文件和目录的默认权限掩码。 +3. 详细示例 +示例1:添加用户并设置密码 +```bash +sudo adduser newuser +sudo passwd newuser +``` +示例2:将用户添加到附加组 +```bash +sudo usermod -a -G developers newuser +``` +示例3:更改文件权限 +```bash +chmod u+rwx,g+rw,o-rwx file.txt +``` +这将为文件所有者添加读、写、执行权限,为所属组添加读、写权限,并移除其他用户的所有权限。 +示例4:更改文件所有者和所属组 +```bash +sudo chown newuser:developers file.txt +``` +这将把文件的所有者更改为`newuser`,所属组更改为`developers`。 +示例5:设置默认权限掩码 +```bash +umask 002 +``` +这将设置默认的权限掩码,使得新建的文件和目录对同组用户具有相同的权限。 +4. 注意事项 +- 不要轻易将文件权限设置为过于宽松,尤其是全局可写的文件或目录。 +- 避免在公共服务器上使用root用户进行日常操作,以减少潜在的安全风险。 +- 定期审查用户账户和文件权限,确保它们符合安全策略。 +- 使用`visudo`命令编辑sudoers文件,以安全地授予用户sudo权限。 diff --git "a/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/12 linux \350\277\233\347\250\213\347\256\241\347\220\206.md" "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/12 linux \350\277\233\347\250\213\347\256\241\347\220\206.md" new file mode 100644 index 0000000..5e25de5 --- /dev/null +++ "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/12 linux \350\277\233\347\250\213\347\256\241\347\220\206.md" @@ -0,0 +1,63 @@ + +1. 查看进程 +`ps`命令 +- `ps aux`:显示所有用户的所有进程。 +- `ps -ef`:显示完整的进程信息。 +- `ps -efH`:显示进程树,展示进程间的父子关系。 +`top`命令 +- `top`:动态显示系统中各个进程的资源占用情况,如CPU和内存使用率。 +`htop`命令 +- `htop`:交互式进程查看器,比`top`更直观,支持颜色显示和进程管理功能。 +`pgrep`命令 +- `pgrep process_name`:根据名称查找进程ID。 +`pidof`命令 +- `pidof process_name`:查找指定名称的进程ID。 +2. 管理进程 +`kill`命令 +- `kill PID`:发送信号给指定的进程ID。 +- `kill -9 PID`:发送SIGKILL信号强制终止进程。 +`killall`命令 +- `killall process_name`:终止所有名为`process_name`的进程。 +`pkill`命令 +- `pkill -f process_name`:根据名称和命令行参数终止进程。 +`nice`和`renice`命令 +- `nice -n value command`:以指定的`nice`值启动新进程。 +- `renice value PID`:改变现有进程的`nice`值。 +`bg`和`fg`命令 +- `bg %job_number`:将挂起的作业放到后台继续运行。 +- `fg %job_number`:将后台作业带到前台运行。 +`nohup`命令 +- `nohup command &`:使进程忽略挂起信号(SIGHUP),并在后台运行。 +3. 详细示例 +示例1:查看所有进程 +```bash +ps aux +``` +这将显示所有用户的所有进程的详细信息。 +示例2:动态查看进程状态 +```bash +top +``` +这将实时显示系统中各个进程的资源使用情况。 +示例3:查找并终止特定进程 +```bash +pgrep httpd +假设返回的PID是1234 +kill 1234 +``` +这将查找名为`httpd`的进程的PID,并将其终止。 +示例4:以较低优先级运行命令 +```bash +nice -n 10 ./myprogram +``` +这将以`nice`值10启动`myprogram`,降低其CPU使用优先级。 +示例5:改变现有进程的优先级 +```bash +renice +10 -p 1234 +``` +这将增加PID为1234的进程的`nice`值,降低其优先级。 +4. 进程注意事项 +- 在终止进程之前,确保你知道进程的作用以及终止它可能带来的后果。 +- 使用`kill`命令时,通常先尝试发送SIGTERM(默认信号)而不是SIGKILL,以便进程有机会优雅地关闭。 +- 调整进程优先级可能会影响系统的整体性能,应谨慎操作。 +- \ No newline at end of file diff --git "a/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/13\346\234\215\345\212\241\347\256\241\347\220\206.md" "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/13\346\234\215\345\212\241\347\256\241\347\220\206.md" new file mode 100644 index 0000000..5055e92 --- /dev/null +++ "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/13\346\234\215\345\212\241\347\256\241\347\220\206.md" @@ -0,0 +1,57 @@ + +1. 服务管理工具 +System V Init(SysV) +- **service命令**:用于管理系统V风格的服务。 +- **insserv**:用于管理服务的启动顺序。 +Systemd +- **systemctl命令**:用于管理系统d风格的服务。 +- **systemd-analyze**:用于分析系统启动性能。 +2. System V Init服务管理 +启动服务 +- `service service_name start` +停止服务 +- `service service_name stop` +重启服务 +- `service service_name restart` +查看服务状态 +- `service service_name status` +3. Systemd服务管理 +启动服务 +- `systemctl start service_name.service` +停止服务 +- `systemctl stop service_name.service` +重启服务 +- `systemctl restart service_name.service` +查看服务状态 +- `systemctl status service_name.service` +启用服务开机自启 +- `systemctl enable service_name.service` +禁用服务开机自启 +- `systemctl disable service_name.service` +4. 详细示例 +示例1:启动Apache Web服务器(System V) +```bash +service apache2 start +``` +示例2:停止SSH服务(Systemd) +```bash +systemctl stop sshd.service +``` +示例3:重启Nginx Web服务器(Systemd) +```bash +systemctl restart nginx.service +``` +示例4:查看防火墙服务状态(System V) +```bash +service iptables status +``` +示例5:启用NetworkManager服务开机自启(Systemd) +```bash +systemctl enable NetworkManager.service +``` +5. 进程注意事项 +- 在执行服务管理操作时,确保你有足够的权限。 +- 在重启或停止服务之前,考虑可能对系统或其他服务造成的影响。 +- 使用`journalctl`命令结合服务名可以查看特定服务的日志,有助于故障排查。 +- 对于重要的系统服务,建议先阅读相关文档,了解服务的功能和最佳实践。 +- 确保服务配置文件的正确性,错误的配置可能导致服务无法启动或运行异常。 diff --git "a/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/20240517-1Linux\345\210\235\350\257\206.md" "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/1Linux\345\210\235\350\257\206.md" similarity index 100% rename from "\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/20240517-1Linux\345\210\235\350\257\206.md" rename to "\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/1Linux\345\210\235\350\257\206.md" diff --git "a/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/2 linux\347\233\256\345\275\225\347\273\223\346\236\204.md" "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/2 linux\347\233\256\345\275\225\347\273\223\346\236\204.md" new file mode 100644 index 0000000..5b658f9 --- /dev/null +++ "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/2 linux\347\233\256\345\275\225\347\273\223\346\236\204.md" @@ -0,0 +1,19 @@ +当然可以。Debian Linux 的目录结构是基于文件系统的层次标准(Filesystem Hierarchy Standard, FHS)设计的,它定义了Linux系统中大部分目录的用途。下面我将用通俗易懂的方式介绍Debian Linux中的主要目录及其用途: +1. **/bin** - 存放二进制可执行文件,这些是系统启动时或者单个用户模式下需要的必备命令。比如`ls`, `cp`, `mv`等。 +2. **/boot** - 这个目录包含了启动Linux时使用的一些核心文件,如内核文件和引导加载程序(GRUB)的配置文件。 +3. **/dev** - 设备文件目录。在Linux中,所有的硬件设备都被视为文件,存放在这里。例如,硬盘是`/dev/sda`,光驱是`/dev/cdrom`等。 +4. **/etc** - 存放系统的配置文件。大多数配置文件都是文本形式,可以通过编辑它们来改变系统的行为。例如,网络配置文件`/etc/network/interfaces`。 +5. **/home** - 普通用户的主目录。每个用户在这个目录下都有自己的子目录,通常是用户名,用于存放用户的个人数据和配置文件。 +6. **/lib** - 包含系统和运行其他程序所必需的共享库文件。这些库文件类似于Windows系统中的DLL文件。 +7. **/media** - 可移动媒体设备的挂载点,如USB驱动器、CD-ROMs等。当插入这些设备时,系统会自动将其挂载到这个目录下。 +8. **/mnt** - 临时挂载文件系统的挂载点。管理员可以将额外的文件系统挂载到这里。 +9. **/opt** - 第三方软件的安装目录。一些大型软件包可能会选择安装在这里。 +10. **/proc** - 这是一个虚拟文件系统,包含有关系统资源的信息,如进程状态、硬件配置等。 +11. **/root** - root用户的主目录。与普通用户不同,超级用户的个人文件不放在`/home`下。 +12. **/sbin** - 系统二进制文件,这些是系统管理员使用的系统管理命令,如`fdisk`, `mkfs`等。 +13. **/srv** - 存放服务器特定服务的数据,例如web服务器的数据可能存放在`/srv/www`。 +14. **/sys** - 另一个虚拟文件系统,主要用于收集内核和设备结构的相关信息。 +15. **/tmp** - 临时文件目录。所有用户都可以在这个目录下创建文件,但重启后这些文件会被清空。 +16. **/usr** - 包含大部分用户的应用程序和文件。这个目录下有很多子目录,如`/usr/bin`(用户命令),`/usr/lib`(库文件),`/usr/share`(共享数据)等。 +17. **/var** - 变量文件目录。这个目录下的文件通常是可变的,如日志文件、数据库、缓存文件等。 +理解这些目录的作用有助于更好地管理和维护Debian Linux系统。记住,虽然这些目录的用途有所不同,但在实际使用中,它们的界限有时并不那么严格,特别是在非标准的定制系统中。 \ No newline at end of file diff --git "a/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/3 linux \346\226\207\344\273\266\347\256\241\347\220\206.md" "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/3 linux \346\226\207\344\273\266\347\256\241\347\220\206.md" new file mode 100644 index 0000000..9a6dc96 --- /dev/null +++ "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/3 linux \346\226\207\344\273\266\347\256\241\347\220\206.md" @@ -0,0 +1,40 @@ +1. 文件系统基础 +根目录(/) +Linux文件系统的起点,所有文件和目录都从根目录开始。 +目录结构 +类似于树状结构,根目录下有许多子目录,每个子目录又可以包含更多的子目录或文件。 +2. 常见目录及其用途 +/bin:存放基本的系统命令。 +/boot:包含启动Linux所需的文件。 +/dev:设备文件所在的位置。 +/etc:存放系统配置文件。 +/home:用户的主目录。 +/lib:存放系统库文件。 +/media:可移动设备的挂载点。 +/mnt:临时挂载文件系统的目录。 +/opt:第三方软件安装位置。 +/proc:虚拟文件系统,显示系统运行时的信息。 +/root:超级用户的主目录。 +/sbin:存放系统管理员使用的系统命令。 +/tmp:临时文件存储位置。 +/usr:包含大部分用户的应用程序和文件。 +/var:变量文件,如日志文件。 +3. 文件操作命令 +查看文件列表 +ls:列出目录内容。 +ls -l:以长格式列出文件详细信息。 +ls -a:显示隐藏文件。 +创建和删除文件 +touch filename:创建一个新文件。 +rm filename:删除一个文件。 +mkdir directoryname:创建一个新目录。 +rm -r directoryname:删除一个目录及其内容。 +复制和移动文件 +cp source destination:复制文件或目录。 +mv source destination:移动文件或目录,也可用于重命名。 +查看文件内容 +cat filename:显示文件内容。 +more filename:分页显示文件内容。 +less filename:更强大的分页显示,支持向上翻页。 +head filename:显示文件开头部分。 +tail filename:显示文件结尾部分。 \ No newline at end of file diff --git "a/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/4 linux\347\233\270\345\257\271\350\267\257\345\276\204\345\222\214\347\273\235\345\257\271\350\267\257\345\276\204.md" "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/4 linux\347\233\270\345\257\271\350\267\257\345\276\204\345\222\214\347\273\235\345\257\271\350\267\257\345\276\204.md" new file mode 100644 index 0000000..f750bc4 --- /dev/null +++ "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/4 linux\347\233\270\345\257\271\350\267\257\345\276\204\345\222\214\347\273\235\345\257\271\350\267\257\345\276\204.md" @@ -0,0 +1,22 @@ + + + +1. 绝对路径 +绝对路径是从文件系统的根目录(/)开始的完整路径,它提供了文件或目录的确切位置,不依赖于当前工作目录。 + +/home/user/documents/file.txt:这是文件file.txt的绝对路径,无论你当前在哪里,这个路径总是指向同一个文件。 +2. 相对路径 +定义 +相对路径是相对于当前工作目录的路径。如果你不在根目录,那么相对路径不会以斜杠(/)开头。 +示例 +documents/file.txt:假设你当前在/home/user目录下,这个相对路径指向/home/user/documents/file.txt。 +../documents/file.txt:如果你在/home/user/pictures目录下,..表示上一级目录,所以这个路径指向/home/user/documents/file.txt。 +3. 区别 +起点不同:绝对路径从根目录开始,而相对路径从当前工作目录开始。 +使用场景:绝对路径适用于需要明确指定文件位置的情况,而相对路径适用于在脚本或程序中引用当前工作目录附近文件的情况。 +独立性:绝对路径是独立的,不受当前工作目录影响;相对路径则依赖于当前工作目录。 +4. 实用提示 +当你知道文件的确切位置时,使用绝对路径更为可靠。 +在编写脚本或程序时,如果文件位置固定,可以使用绝对路径避免因工作目录变化导致的路径错误。 +如果文件位置不固定或者希望脚本具有更好的灵活性,可以使用相对路径。 +在命令行中,可以使用pwd(print working directory)命令查看当前工作目录。 \ No newline at end of file diff --git "a/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/5 \346\237\245\347\234\213\346\226\207\344\273\266\345\206\205\345\256\271.md" "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/5 \346\237\245\347\234\213\346\226\207\344\273\266\345\206\205\345\256\271.md" new file mode 100644 index 0000000..55b0788 --- /dev/null +++ "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/5 \346\237\245\347\234\213\346\226\207\344\273\266\345\206\205\345\256\271.md" @@ -0,0 +1,59 @@ + +1. `cat`命令 +功能 +- `cat`命令用于连接文件并打印到标准输出设备上,通常用来查看小型文件的内容。 +用法 +- `cat filename`:显示文件内容。 +- `cat file1 file2 > outputfile`:合并两个文件的内容到一个新的文件中。 +注意事项 +- `cat`命令会一次性显示整个文件内容,对于大型文件,这可能会导致屏幕快速滚动,难以阅读。 +2. `more`命令 +功能 +- `more`命令允许一页一页地查看文件内容,适合较长的文件。 +用法 +- `more filename`:打开文件并按空格键翻页,按`q`退出。 +提示 +- `more`命令不支持向上翻页,只能向下查看。 +3. `less`命令 +功能 +- `less`命令类似于`more`,但它提供了更多的功能,如向上翻页、搜索文本等。 +用法 +- `less filename`:打开文件,使用箭头键或PgUp/PgDn翻页,输入`/search_term`进行搜索,按`q`退出。 +优点 +- `less`比`more`更强大,支持更多的交互式操作。 +4. `head`命令 +功能 +- `head`命令用于显示文件的开头部分,默认显示前10行。 +用法 +- `head filename`:显示文件的前10行。 +- `head -n 20 filename`:显示文件的前20行。 +应用场景 +- 当你只需要查看文件的开头几行时,`head`非常方便。 +5. `tail`命令 +功能 +- `tail`命令用于显示文件的末尾部分,默认显示最后10行。 +用法 +- `tail filename`:显示文件的最后10行。 +- `tail -n 20 filename`:显示文件的最后20行。 +- `tail -f filename`:实时追踪文件的增长现象,常用于查看不断增长的计算日志。 +应用场景 +- 当你需要监控正在写入的日志文件时,`tail -f`非常有用。 +6. `nl`命令 +功能 +- `nl`命令用于显示文件内容并添加行号。 +用法 +- `nl filename`:显示文件内容并在每行前面添加行号。 +特点 +- `nl`可以让你更容易地引用文件中的特定行。 +7. `od`命令 +功能 +- `od`命令用于查看非文本文件的内容,如二进制文件。 +用法 +- `od -t x1 filename`:以十六进制的形式显示文件内容。 +适用情况 +- 当你需要检查或分析二进制文件时,`od`命令很有帮助。 +8 +- 使用`man`命令可以查看任何命令的手册页,例如`man cat`、`man less`等。 +- 尝试不同的命令和选项可以帮助你找到最适合你需求的工具。 +- 对于大型文件,使用`more`、`less`或`tail`通常比`cat`更好,因为它们提供了更好的控制。 +通过掌握这些基本的文件查看命令,你可以在Linux系统中有效地检查和分析各种类型的文件内容。 \ No newline at end of file diff --git "a/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/6 \345\270\270\347\224\250\345\221\275\344\273\244.md" "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/6 \345\270\270\347\224\250\345\221\275\344\273\244.md" new file mode 100644 index 0000000..9fc3c6b --- /dev/null +++ "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/6 \345\270\270\347\224\250\345\221\275\344\273\244.md" @@ -0,0 +1,381 @@ +常用Linux命令说明 + +#### 1. 文件和目录操作 + +- **ls**: + - 常用选项:`-l`(以长格式显示)、`-a`(显示隐藏文件和目录)、`-h`(人类可读格式显示文件大小)等。 + - 使用语法:`ls [选项] [目录名]` + - 使用场景:用于列出指定目录中的所有文件和子目录。 + - 使用示例: + - 列出当前目录下的所有文件和子目录:`ls` + - 以长格式显示当前目录下的所有文件和子目录:`ls -l` + - 列出上级目录下的所有文件和子目录:`ls ..` +- **cd**: + - 使用��法:`cd [目录名]` + - 使用场景:用于更改当前工作目录。 + - 使用示例: + - 进入当前用户的主目录:`cd ~` + - 进入 /var/log 目录:`cd /var/log` +- **pwd**: + - 使用语法:`pwd` + - 使用场景:用于显示当前工作目录的路径。 + - 使用示例: + - 显示当前工作目录的路径:`pwd` +- **mkdir**: + - 常用选项:`-p`(创建多级目录,如果不存在则创建父目录)等。 + - 使用语法:`mkdir [选项] 目录名` + - 使用场景:用于创建新的目录。 + - 使用示例: + - 在当前目录下创建一个名为 "docs" 的目录:`mkdir docs` + - 创建一个名为 "dir1/dir2" 的多级目录(如果不存在则创建父目录):`mkdir -p dir1/dir2` +- **rm**: + - 常用选项:`-r`(递归删除目录及其内容)、`-f`(强制删除文件或目录,不提示确认)等。 + - 使用语法:`rm [选项] 文件或目录名` + - 使用场景:用于删除文件或目录。 + - 使用示例: + - 删除一个名为 "file.txt" 的文件:`rm file.txt` + - 删除一个名为 "dir" 的空目录:`rm dir` + - 递归删除一个名为 "dir" 的目录及其内容:`rm -r dir` + - 强制删除一个名为 "file.txt" 的文件,不提示确认:`rm -f file.txt` +- **cp**: + - 常用选项:`-r`(递归复制目录���其内容)、`-i`(提示在覆盖已存在的文件之前进行确认)等。 + - 使用语法:`cp [选项] 源文件或目录 目标文件或目录` + - 使用场景:用于复制文件或目录。 + - 使用示例: + - 将一个名为 "file.txt" 的文件复制到当前目录下:`cp file.txt .` + - 将一个名为 "file.txt" 的文件复制到 "/tmp" 目录下:`cp file.txt /tmp` + - 递归复制一个名为 "dir" 的目录及其内容到当前目录下:`cp -r dir .` + - 复制一个名为 "file.txt" 的文件到当前目录下,并提示在覆盖已存在的文件之前进行确认:`cp -i file.txt .` +- **mv**: + - 常用选项:`-i`(提示在覆盖已存在的文件之前进行确认)、`-n`(不要覆盖已存在的文件)等。 + - 使用语法:`mv [选项] 源文件或目录 目标文件或目录` + - 使用场景:用于移动或重命名文件或目录。 + - 使用示例: + - 将一个名为 "file.txt" 的文件重命名为 "newfile.txt":`mv file.txt newfile.txt` + - 将一个名为 "file.txt" 的文件移动到 "/tmp" 目录下:`mv file.txt /tmp` + - 将一个名为 "dir" 的目录移动到上级目录下:`mv dir ..` + - 将一个名为 "file.txt" 的文件移动到当前目录下,并提示在覆盖已存在的文件之前进行确认:`mv -i file.txt .` +- **touch**: + - 使用语法:`touch 文件名` + - 使用场景:用于创建一个空文件或更新文件访问和修改时间。 + - 使用示例: + - 在当前目录下创建一个名为 "file.txt" 的空文件:`touch file.txt` + - 更新一个名为 "file.txt" 的文件的访问和修改时间:`touch file.txt` +- **ln**: + - 常用选项:`-s`(创建符号链接)等。 + - 使用语法:`ln [选项] 源文件或目录 目标文件或目录` + - 使用场景:用于创建硬链接或符号链接。 + - 使用示例: + - 在当前目录下创建一个名为 "link" 的硬链接,指向一个名为 "file.txt" 的文件:`ln file.txt link` + - 在当前目录下创建一个名为 "symlink" 的符号链接,指向一个名为 "file.txt" 的文件:`ln -s file.txt symlink` + - **硬链接**: + - **区别**:硬链接是文件系统中一个文件指向另一个文件的链接,它们共享相同的 inode 号。因此,原文件和硬链接之间没有“主”和“副”之分,它们是同等的关系。 + - **用法**:使用 `ln` 命令创建硬链接,如 `ln 源文件 目标硬链接`。 + - 场景: + - 在文件系统中,删除原文件并不会影响硬链接,只有当所有硬链接都被删除后,文件才会真正被删除。 + - 可以用于在不同目录中创建相同文件的别名,节省存储空间。 + - 硬链接不可以链接目录。 + - **符号链接**(也称为软链接或软连接): + - **区别**:符号链接是一个文件指向另一个文件的路径的链接。它类似于 Windows 中的快捷方式。符号链接有自己的 inode 号,而指向的文件有它自己的 inode 号。 + - **用法**:使用 `ln -s` 命令创建符号链接,如 `ln -s 源文件 目标符号链接`。 + - 场景: + - 用于创建指向文件或目录的快捷方式,便于在文件系统中引用或访问其他位置的文件或目录。 + - 符号链接可以链接目录。 + - 当原文件被删除或移动时,符号链接仍然存在,但它指向的目标文件会失效,称为“悬挂链接”。 + +#### 2. 文本操作 + +- **cat**: + - 常用选项:无 + - 使用语法:`cat [文件名]` + - 使用场景:用于查看文件的内容,或者连接多个文件并将它们输出到标准输出设备上。 + - 使用示例: + - 查看文件 `example.txt` 的内容:`cat example.txt` + - 连接文件 `file1.txt` 和 `file2.txt` 并输出到屏幕:`cat file1.txt file2.txt` + +- **tac**: + - 常用选项:无 + - 使用语法:`tac [文件名]` + - 使用场景:反向显示文件的内容,从最后一行开始。 + - 使用示例: + - 反向显示文件 `example.txt` 的内容:`tac example.txt` + +- **more** 或 **less**: + - 常用选项:无 + - 使用语法:`more [文件名]` 或 `less [文件名]` + - 使用场景:分页显示文本文件的内容,允许用户逐页浏览。 + - 使用示例: + - 逐页显示文件 `example.txt` 的内容:`more example.txt` + - 逐页显示文件 `example.txt` 的内容(使用 less):`less example.txt` + +- **head** 或 **tail**: + - 常用选项:`-n`(指定要显示的行数)、`-f`(实时显示文件的尾部内容)等。 + - 使用语法:`head [选项] 文件名` 或 `tail [选项] 文件名` + - 使用场景:查看文件的开头或结尾部分。 + - 使用示例: + - 显示文件 `example.txt` 的前10行:`head -n 10 example.txt` + - 实时显示文件 `example.log` 的最新内容:`tail -f example.log` + +- **grep**: + - 常用选项:`-i`(忽略大小写)、`-v`(只显示不匹配的行)、`-r`(递归搜索目录中的文件)等。 + - 使用语法:`grep [选项] 模式 [文件名]` + - 使用场景:在文件中搜索特定的字符串或正则表达式模式。 + - 使用示例: + - 在文件 `example.txt` 中搜索字符串 "hello":`grep "hello" example.txt` + - 递归搜索目录 `dir` 中的所有文件,查找包含字符串 "error" 的行:`grep -r "error" dir` + +- **sed**: + + - 常用选项:`-e`(指定要执行的sed命令)、`-i`(直接修改文件内容)等。 + - 使用语法:`sed [选项] 命令 [文件名]` + - 使用场景:流编辑器,用于对输入流(文件或管道)进行基本的文本转换。 + - 使用示例: + - 将文件 `example.txt` 中的每行开头的 "Hello" 替换为 "Hi":`sed 's/^Hello/Hi/' example.txt` + - 直接修改文件 `example.txt`,将每行开头的 "Hello" 替换为 "Hi":`sed -i 's/^Hello/Hi/' example.txt` + +- **awk**: + + - 常用选项:无 + - 使用语法:`awk '模式 { 命令 }' [文件名]` + - 使用场景:强大的文本分析工具,用于模式扫描和文本/数据提取。 + - 使用示例: + - 提取文件 `example.txt` 中第一列的数据:`awk '{ print $1 }' example.txt` + - 根据条件筛选文件 `example.txt` 中的行:`awk '$3 > 50 { print }' example.txt` + +- **cut**: + + - 常用选项:`-f`(指定要提取的字段)、`-d`(指定字段分隔符)等。 + - 使用语法:`cut [选项] [文件名]` + - 使用场景:从每行中删除部分字段,并输出剩余部分。 + - 使用示例: + - 提取文件 `example.txt` 中的第2和第3列数据:`cut -f 2,3 example.txt` + - 使用逗号作为字段分隔符,提取文件 `example.csv` 中的第1列数据:`cut -d ',' -f 1 example.csv` + +- **join**:根据不同文件中相同的字段值进行行拼接 + + - 常用选项:`-t`(指定字段分隔符)、`-1`(指定第一个文件的连接字段)、`-2`(指定第二个文件的连接字段)等。 + + ``` + join -t ':' -1 1 -2 1 文件1 文件2 + ``` + + + + - 使用语法:`join [选项] 文件1 文件2` + + - 使用场景:基于指定字段合并两个文件的行。 + + - 使用示例: + - 根据文件 `file1.txt` 和 `file2.txt` 中的共同字段进行连接:`join file1.txt file2.txt` + - 使用制表符作为字段分隔符,连接文件 `file1.txt` 和 `file2.txt`:`join -t $'\t' file1.txt file2.txt` + +- **paste**: + + - 常用选项:`-d`(指定行之间的分隔符)等。 + - 使用语法:`paste [选项] 文件1 文件2` + - 使用场景:合并文件的行,每行由指定的分隔符分隔。 + - 使用示例: + - 合并文件 `file1.txt` 和 `file2.txt` 的每行:`paste file1.txt file2.txt` + - 使用逗号作为行分隔符,合并文件 `file1.txt` 和 `file2.txt` 的每行:`paste -d ',' file1.txt file2.txt` + +- **fmt**: + + - 常用选项:`-w`(指定行宽度)等。 + - 使用语法:`fmt [选项] [文件名]` + - 使用场景:简化文本格式,将文本文件格式化为更易于阅读的宽度。 + - 使用示例: + - 将文件 `example.txt` 的内容重新格式化为80个字符宽度的行:`fmt -w 80 example.txt` + +- **column**: + - 常用选项:`-t`(使用表格格式输出)等。 + - 使用语法:`column [选项] [文件名]` + - 使用场景:将输入文本格式化为多列输出。 + - 使用示例: + - 将文件 `example.txt` 的内容按照表格格式输出:`column -t example.txt` + +- **sort** 和 **uniq**: + + - 请参考之前给出的解释和示例。 + +- **tr**: + + - 常用选项:`-d`(删除字符)、`-s`(压缩连续重复字符)等。 + - 使用语法:`tr [选项] 字符集1 字符集2` + - 使用场景:转换或删除字符,通常用于字符集转换。 + - 使用示例: + - 将文件 `example.txt` 中的所有小写字母转换为大写字母:`tr 'a-z' 'A-Z' < example.txt` + - 删除文件 `example.txt` 中的所有空格字符:`tr -d ' ' < example.txt` + +- **expand** 和 **unexpand**: + - 常用选项:无 + - 使用语法:`expand [文件名]` 或 `unexpand [文件名]` + - 使用场景:将制表符转换为空格或将空格转换回制表符。 + - 使用示例: + - 将文件 `example.txt` 中的所有制表符转换为空格:`expand example.txt` + - 将文件 `example.txt` 中的所有空格转换回制表符:`unexpand example.txt` + +- **split**: + + - 常用选项:`-l`(指定每个输出文件的行数)、`-b`(指定每个输出文件的字节数)等。 + - 使用语法:`split [选项] 输入文件 [输出文件前缀]` + - 使用场景:将大文件分割成多个小文件。 + - 使用示例: + - 将文件 `largefile.txt` 每1000行分割成多个小文件:`split -l 1000 largefile.txt` + - 将文件 `largefile.txt` 每10MB分割成多个小文件:`split -b 10M largefile.txt` + +- **wc**: + + - 常用选项:`-c`(计算字节数)、`-w`(计算字数)、`-l`(计算行数)等。 + - 使用语法:`wc [选项] [文件名]` + - 使用场景:计算文件中的字节数、字数和行数。 + - 使用示例: + - 统计文件 `example.txt` 的字节数、字数和行数:`wc example.txt` + - 仅统计文件 `example.txt` 的行数:`wc -l example.txt` + +#### 3. 排序与去重 + +- **sort**: + - 常用选项:`-r`(反向排序)、`-n`(按数值大小排序)、`-k`(按指定字段排序)等。 + - 使用语法:`sort [选项] 文件名` + - 使用场景:用于对文本文件的行进行排序,默认情况下按照字典序升序排列。 + - 使用示例: + - 对文件 `example.txt` 中的内容按字典序排序:`sort example.txt` + - 对文件 `numbers.txt` 中的数字按数值大小降序排序:`sort -nr numbers.txt` +- **uniq**: + - 常用选项:`-c`(显示每行重复次数)、`-d`(仅显示重复行)、`-u`(仅显示不重复行)等。 + - 使用语法:`uniq [选项] 文件名` + - 使用场景:用于去除文件中的连续重复行,或者显示文件中的唯一行。 + - 使用示例: + - 去除文件 `example.txt` 中的重复行:`uniq example.txt` + - 显示文件 `numbers.txt` 中的不重复行及其出现次数:`uniq -c numbers.txt` + +#### 4. 进程管理 + +- **ps**: + - 常用选项:`aux` (显示所有进程的详细信息)、`-e` (显示所有进程)、`-f` (显示完整格式) + - 使用语法:`ps [选项]` + - 使用场景:查看系统中运行的进程以及它们的状态和资源占用情况。 + - 使用示例:`ps aux` +- **pidof**: + - 常用选项:无 + - 使用语法:`pidof 进程名` + - 使用场景:根据进程名查找对应的进程ID。 + - 使用示例:`pidof firefox` +- **kill**: + - 常用选项:无 + - 使用语法:`kill 进程ID` + - 使用场景:向指定的进程发送信号,常用于终止进程。 + - 使用示例:`kill 1234` +- **killall**: + - 常用选项:无 + - 使用语法:`killall 进程名` + - 使用场景:向所有匹配进程名的进程发送信号,常用于终止进程。 + - 使用示例:`killall firefox` +- **top**: + - 常用选项:无 + - 使用语法:`top` + - 使用场景:实时显示系统中各个进程的资源占用情况,用于监控系统性能。 + - 使用示例:直接运行 `top` 命令。 + +#### 5. 系统状态查看 + +- **df**: + - 常用选项:`-h`(以人类可读的格式显示)、`-T`(显示文件系统类型)等。 + - 使用语法:`df [选项] [目录]` + - 使用场景:显示文件系统的磁盘空间使用情况,包括已使用、可用和总共的空间。 + - 使用示例: + - 显示所有挂载点的磁盘空间使用情况:`df -h` + - 显示指定目录的磁盘空间使用情况:`df -h /path/to/directory` +- **du**: + - 常用选项:`-h`(以人类可读的格式显示)、`-s`(仅显示总和)等。 + - 使用语法:`du [选项] [目录或文件]` + - 使用场景:显示指定目录或文件的磁盘使用情况,包括子目录和文件。 + - 使用示例: + - 显示目录 `example_dir` 的磁盘使用情况:`du -h example_dir` + - 显示文件 `example_file.txt` 的磁盘使用情况:`du -h example_file.txt` +- **free**: + - 常用选项:`-h`(以人类可读的格式显示)、`-b`(以字节为单位显示)等。 + - 使用语法:`free [选项]` + - 使用场景:显示系统内存的使用情况,包括物理内存和交换空间。 + - 使用示例: + - 显示系统内存使用情况:`free -h` +- **uptime**: + - 常用选项:无 + - 使用语法:`uptime` + - 使用场景:显示系统的运行时间、平均负载以及当前登录用户数量。 + - 使用示例: + - 显示系统运行时间、用户数量和平均负载:`uptime` + +#### 6. 差异比较 + +- diff: + - 常用选项:`-u`(以统一格式显示差异)、`-r`(递归比较目录)等。 + - 使用语法:`diff [选项] 文件1 文件2` + - 使用场景:比较两个文件的内容并显示差异之处。 + - 使用示例: + - 比较文件 `file1.txt` 和 `file2.txt` 的不同:`diff file1.txt file2.txt` + - 以统一格式显示文件 `file1.txt` 和 `file2.txt` 的差异:`diff -u file1.txt file2.txt` + +#### 7. 压缩与解压 + +- **tar**: + - 常用选项:`-c`(创建归档文件)、`-x`(解压归档文件)、`-f`(指定归档文件名)等。 + - 使用语法:`tar [选项] [文件/目录]` + - 使用场景:用于创建和提取归档文件,也就是将多个文件和目录打包成一个文件,或者将归档文件解压缩到文件系统中。 + - 使用示例: + - 创建一个归档文件 `archive.tar` 包含目录 `directory` 中的所有文件:`tar -cf archive.tar directory` + - 提取归档文件 `archive.tar` 到当前目录:`tar -xf archive.tar` +- **gzip** 和 **gunzip**: + - 常用选项:无 + - 使用语法:`gzip [选项] 文件` / `gunzip [选项] 文件.gz` + - 使用场景:用于压缩和解压缩文件,通常配合 `tar` 使用,将归档文件压缩成 `.gz` 格式。 + - 使用示例: + - 压缩文件 `file.txt`,生成 `file.txt.gz`:`gzip file.txt` + - 解压缩文件 `file.txt.gz`,还原为 `file.txt`:`gunzip file.txt.gz` +- **bzip2** 和 **bunzip2**: + - 常用选项:无 + - 使用语法:`bzip2 [选项] 文件` / `bunzip2 [选项] 文件.bz2` + - 使用场景:用于压缩和解压缩文件,通常配合 `tar` 使用,将归档文件压缩成 `.bz2` 格式。 + - 使用示例: + - 压缩文件 `file.txt`,生成 `file.txt.bz2`:`bzip2 file.txt` + - 解压缩文件 `file.txt.bz2`,还原为 `file.txt`:`bunzip2 file.txt.bz2` + +#### 8. 用户和会话管理 + +- **who**: + - 常用选项:`-a`(显示全部信息)、`-b`(显示系统启动时间)、`-H`(显示表头)、`-q`(仅显示登录用户数)、`-u`(显示详细信息)等。 + - 使用语法:`who [选项]` + - 使用场景:用于显示当前登录到系统的用户信息。 + - 使用示例: + - 显示全部信息,包括终端名和登录时间:`who -a` + - 仅显示登录用户数:`who -q` + - 显示详细信息,包括空闲时间和进程信息:`who -u` +- **last**: + - 常用选项:`-n`(显示最近的登录记录条数)、`-i`(显示 IP 地址)、`-t`(按时间排序)、`-u`(仅显示指定用户的登录记录)等。 + - 使用语法:`last [选项] [用户名]` + - 使用场景:用于显示最近登录到系统的用户列表。 + - 使用示例: + - 显示最近的5条登录记录:`last -n 5` + - 仅显示指定用户的登录记录:`last -u username` +- **w**: + - 常用选项:`-h`(不显示标题信息)、`-u`(显示登录用户和他们的终端号)、`-s`(仅显示系统运行时间和每个用户的负载)等。 + - 使用语法:`w [选项] [用户名]` + - 使用场景:用于显示已登录系统的用户列表,并显示用户正在执行的命令。 + - 使用示例: + - 显示登录用户和他们的终端号:`w -u` + - 仅显示系统运行时间和每个用户的负载:`w -s` + +#### 9. 帮助与手册 + +- **man**: + - 使用语法:`man [命令]` + - 使用场景:用于显示指定命令的手册页,包括命令的详细说明、选项、示例等。 + - 使用示例: + - 显示 "who" 命令的手册页:`man who` + - 显示 "last" 命令的手册页:`man last` +- **--help**: + - 使用语法:`命令 --help` + - 使用场景:大多数命令都支持此选项,用于显示该命令的简短帮助信息,通常包括命令的基本用法和可用选项。 + - 使用示例: + - 显示 "who" 命令的简短帮助信息:`who --help` + - 显示 "last" 命令的简短帮助信息:`last --help` diff --git "a/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/7 sed\346\226\207\344\273\266\347\274\226\350\276\221.md" "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/7 sed\346\226\207\344\273\266\347\274\226\350\276\221.md" new file mode 100644 index 0000000..63d1177 --- /dev/null +++ "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/7 sed\346\226\207\344\273\266\347\274\226\350\276\221.md" @@ -0,0 +1,61 @@ + +1. sed命令简介 +功能 +- `sed`是一种流编辑器,用于对文本进行转换和处理。它特别适合于批量编辑,可以从一个或多个文件中读取数据,对其进行修改,然后将结果打印到标准输出。 +基本语法 +- `sed [选项] '命令' 文件` +2. 基本命令 +a\ 追加 +- 在指定的行后面添加文本。 +i\ 插入 +- 在指定的行前面插入文本。 +c\ 替换 +- 将指定的行替换为文本。 +d 删除 +- 删除指定的行。 +s 替换 +- 在行中搜索并替换字符串。 +3. 常用选项 +-n +- 取消默认的输出,只打印由`p`命令指定的行。 +-e +- 允许多个脚本命令。 +-i +- 直接修改文件内容(原位编辑)。 +4. 示例 +示例1:删除第3行 +```bash +sed '3d' filename +``` +示例2:将文件中的"foo"替换为"bar" +```bash +sed 's/foo/bar/g' filename +``` +示例3:在第2行后面添加一行"added line" +```bash +sed '2a\added line' filename +``` +示例4:替换第5行为"replaced line" +```bash +sed '5c\replaced line' filename +``` +示例5:插入一行"inserted line"在第3行之前 +```bash +sed '3i\inserted line' filename +``` +示例6:使用正则表达式匹配并替换 +```bash +sed -n 's/^\([0-9]\+\).*/\1/p' filename +``` +这个命令会匹配以数字开头的行,并提取第一个数字。 +示例7:原位编辑,直接修改文件内容 +```bash +sed -i 's/old/new/g' filename +``` +这个命令会将文件中所有的"old"替换为"new",并直接保存更改到文件中。 +5. 注意事项 +- `sed`命令中的命令和地址通常用单引号括起来,以防止shell解释其中的特殊字符。 +- 替换命令`s`中的`g`表示全局替换,没有`g`的话只替换每行的第一个匹配。 +- 在使用`-i`选项进行原位编辑时,建议先备份文件,以防不慎破坏文件内容。 +- `sed`命令非常强大,支持多种复杂的正则表达式和命令组合,可以完成几乎所有文本处理的任务。 +通过学习和实践这些`sed`命令的用法,你将能够在Linux系统中高效地处理文本数据。 \ No newline at end of file diff --git "a/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/8 awk\346\226\207\346\234\254\345\244\204\347\220\206\345\267\245\345\205\267.md" "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/8 awk\346\226\207\346\234\254\345\244\204\347\220\206\345\267\245\345\205\267.md" new file mode 100644 index 0000000..7e376c9 --- /dev/null +++ "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/8 awk\346\226\207\346\234\254\345\244\204\347\220\206\345\267\245\345\205\267.md" @@ -0,0 +1,58 @@ + +1. awk命令简介 +功能 +- `awk`是一种强大的文本处理工具,它支持复杂的文本、记录和字段操作。`awk`命令特别适合于处理结构化的文本数据,如表格数据。 +基本语法 +- `awk [选项] '模式 {动作}' 文件` +2. 基本概念 +记录(Record) +- 在`awk`中,记录通常是指文本中的一行。 +字段(Field) +- 字段是记录中的一个部分,通常用空格或制表符分隔。默认情况下,`$0`表示整条记录,`$1`、`$2`等分别表示第一、第二等字段。 +3. 常用选项 +-F fs +- 指定输入字段的分隔符(fs)。 +-v var=value +- 定义一个变量并赋值。 +4. 模式与动作 +模式 +- 模式可以是正则表达式、比较表达式或逻辑表达式,用于决定哪些记录将被处理。 +动作 +- 动作是一系列的命令,用于处理匹配模式的记录。 +5. 示例 +示例1:打印文件中的所有行 +```bash +awk '{ print }' filename +``` +示例2:打印文件的第一列 +```bash +awk '{ print $1 }' filename +``` +示例3:打印文件的最后一列 +```bash +awk -F ',' '{ print $NF }' filename +``` +这里假设最后一列是通过逗号分隔的,`NF`是`awk`的内置变量,表示字段的数目。 +示例4:打印包含特定字符串的行 +```bash +awk '/string/ { print }' filename +``` +示例5:计算文件中每一行的字段数 +```bash +awk '{ print NF }' filename +``` +示例6:计算文件中所有数字的总和 +```bash +awk '{ sum += $1 } END { print sum }' filename +``` +这里的`END`是一个特殊的模式,它在所有记录都被处理完毕后执行。 +示例7:根据第三列的值排序输出 +```bash +awk '{ print $3, $0 }' filename | sort -n +``` +这个命令首先按照第三列的值打印,然后通过管道传递给`sort -n`进行数值排序。 +6. 注意事项 +- `awk`命令中的模式和动作通常用单引号括起来,以防止shell解释其中的特殊字符。 +- `awk`支持多种内置变量和函数,可以完成复杂的文本处理任务。 +- `awk`的语法类似于C语言,熟悉C语言的开发者会感到亲切。 +- `awk`命令非常强大,可以处理复杂的文本处理和数据分析任务。 diff --git "a/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/9vim\347\274\226\350\276\221\345\231\250.md" "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/9vim\347\274\226\350\276\221\345\231\250.md" new file mode 100644 index 0000000..11241ad --- /dev/null +++ "b/\351\273\204\346\234\211\345\215\253/\347\254\224\350\256\260/9vim\347\274\226\350\276\221\345\231\250.md" @@ -0,0 +1,65 @@ + +1. Vim编辑器简介 +功能 +- Vim(Vi Improved)是一个高度可配置的文本编辑器,用于创建和修改任何类型的文本。它是Unix系统上原始vi编辑器的增强版。 +2. Vim的基本概念 +模式 +- Vim有多种模式,但最主要的两种是普通模式(Normal Mode)和插入模式(Insert Mode)。 +3. Vim的模式 +普通模式 +- 启动Vim时默认的模式,用于导航、执行命令和切换到其他模式。 +插入模式 +- 用于输入文本。在普通模式下按`i`进入插入模式。 +命令行模式 +- 用于执行命令,如保存文件、搜索文本等。在普通模式下按`:`进入命令行模式。 +4. Vim的基本操作 +打开文件 +- `vim filename`:打开或创建一个文件。 +保存和退出 +- `:w`:保存文件但不退出。 +- `:q`:退出Vim。 +- `:wq`或`:x`:保存并退出。 +- `:q!`:强制退出,不保存更改。 +插入文本 +- `i`:在光标前插入。 +- `I`:在行首插入。 +- `a`:在光标后插入。 +- `A`:在行尾插入。 +- `o`:在当前行下方打开新行。 +- `O`:在当前行上方打开新行。 +删除文本 +- `x`:删除光标下的字符。 +- `dd`:删除当前行。 +- `d$`:从光标删除到行尾。 +- `dw`:删除单词。 +复制和粘贴 +- `yy`:复制当前行。 +- `p`:在光标后粘贴。 +- `P`:在光标前粘贴。 +撤销和重做 +- `u`:撤销上一次操作。 +- `Ctrl + r`:重做被撤销的操作。 +搜索和替换 +- `/pattern`:向前搜索模式。 +- `?pattern`:向后搜索模式。 +- `:%s/old/new/g`:全文替换old为new。 +5. 示例 +示例1:编辑文件并保存 +```bash +vim myfile.txt +进入插入模式输入文本 +按Esc回到普通模式 +:wq +``` +示例2:复制并粘贴行 +```bash +在普通模式下 +yy 复制当前行 +5G 跳转到第五行 +p 在第五行后粘贴 +``` +示例3:搜索并替换文本 +```bash +/search_term 搜索一个词 +:1,$s/old/new/g 替换全文中的old为new +``` -- Gitee