Linux shell: /bin/sh^M: bad interpreter: No such file or directory

运行 shell 脚本时提示如下错误: /bin/sh^M: bad interpreter: No such file or directory 错误通常是因为文件在 Windows 系统上被创建或编辑,然后在 Linux 或 Unix 系统上执行时出现的问题。这里的 ^M 实际上是 Windows 下的换行符(Carriage Return,CR,\r)在 Linux/Unix 下的显示。 Linux/Unix 系统使用 Line Feed(LF,\n)作为换行符,而 Windows 系统使用 Carriage Return Line Feed(CRLF,\r\n)作为换行符。当你在 Windows 系统上编辑脚本文件,并将其转移到 Linux/Unix 系统上执行时,可能会出现这个问题。 要解决这个问题,你可以使用以下几种方法之一: 在 Linux/Unix 系统上使用 dos2unix 命令转换文件: 如果你的 Linux/Unix 系统上安装了 dos2unix 工具,你可以使用这个命令将文件的换行符从 CRLF 转换为 LF: dos2unix filename 使用 sed 命令删除 \r: 如果你的系统上没有 dos2unix,你也可以使用 sed 命令来删除 \r: sed -i 's/\r$//' filename 在文本编辑器中设置正确的换行符: 如果你在 Windows 系统上编辑文件,确保你的文本编辑器设置为使用 Unix 风格的换行符(LF),而不是 Windows 风格的换行符(CRLF)。许多现代文本编辑器,如 Notepad++、VS Code、Sublime Text 等,都支持这一设置。 在 Linux 上可使用 Vi/Vim 转换: #查看文件格式: :set ff 或 :set fileformat #可以看到如下信息: fileformat=dos #转换为 Unix 格式: :set ff=unix 或 :set fileformat=unix #保存并退出 :wq 使用 Git 进行自动转换: 如果你是通过 Git 在不同系统之间传输文件,你可以在 Git 配置中设置 core.autocrlf 选项,让 Git 在检出和提交时自动转换换行符: git config --global core.autocrlf true 注意:在修改文件之前,最好先备份原始文件,以防万...

Linux 系统 MySQL 数据库自动备份

备份 MySQL 要用到 mysqldump。mysqldump 是 MySQL 自带的逻辑备份工具,它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的 insert 语句,当我们需要还原这些数据时,只要执行这些 insert 语句,即可将对应的数据还原。 mysqldump 的基本用法 mysqldump [OPTIONS] database [tables] 如果你不给定任何表,整个数据库将被导出。 通过执行 mysqldump --help,你能得到你 mysqldump 的版本支持的选项表。 此外,mysqldump 还支持很多其他选项,例如: --all-databases, -A:备份所有数据库。 --databases, -B:用于备份多个数据库。如果没有该选项,mysqldump 把第一个名字参数作为数据库名,后面的作为表名。使用该选项,mysqldump 把每个名字都当作为数据库名。 --force, -f:即使发现 sql 错误,也忽略错误继续备份。 --host=host_name, -h host_name:备份指定主机上的数据库。 --no-data, -d:只导出表结构,不导出数据。 --password[=password], -p[password]:连接数据库使用的密码。 --port=port_num, -P port_num:指定连接数据库的端口号。 在使用 mysqldump 时,你需要根据你的需求选择合适的选项。同时,你也需要确保你有足够的权限来访问和备份数据库。 请注意,mysqldump 生成的备份文件是 SQL 脚本,你可以使用任何文本编辑器打开和查看。当你需要恢复数据时,你可以使用 mysql 命令来执行这个 SQL 脚本,将数据恢复到数据库中。 在使用 mysqldump 进行备份和恢复时,请务必小心操作,避免数据丢失或损坏。建议在正式操作前,先在一个测试环境中进行验证,确保操作的正确性和安全性。 手动备份 $ mysqldump -u root -p 数据库名 > 数据库名.sql Enter password: 直接生成压缩文件: $ mysqldump -u root -p 数据库名 | gzip > 数据库名.sql.gz Enter password: 如何才能做到不输入密码?毕竟要做到定时自动备份总不能到备份时间后人工敲密码吧。 使用 ~/.my.cnf 配置文件: 在 MySQL 用户的家目录下创建一个名为 .my.cnf 的配置文件。例如,如果 MySQL 用户是 root,则文件路径为 /root/.my.cnf。 在该文件中添加以下内容: [mysqldump] user=your_mysql_username password=your_mysql_password 将 your_mysql_username 和 your_mysql_password 替换为您的 MySQL 用户名和密码。 设置文件的权限,确保只有文件所有者可以读取它: chmod 600 ~/.my.cnf 现在,当您以该用户身份运行 mysqldump 命令时(不要带 -p 参数),它将自动从 .my.cnf 文件中读取用户名和密码,而无需手动输入。 定时自动播放 创建备份脚本: #!/bin/sh dbname='数据库名' mysqldump -u root $dbname | gzip > /data/backup/db/$dbname-`date +"%Y%m%d"`.sql.gz 设置文件的执行权限: chmod 755 db_backup.sh 配置定时任务: $ crontab -e 0 1 * * * "/绝对路径/db_backup.sh" 这样就可以每天在凌晨 1 点钟执行备份任务...

卫星追踪软件 Orbitron 简介

Orbitron 是一款专为业余无线电爱好者和希望目测观察卫星的追星爱好者设计的卫星追踪软件。这款软件功能强大且易于使用,已经被气象专家、卫星通讯、UFO 研究玩家和天文爱好者广泛采用。 Orbitron 可以以实时或模拟方式显示任意时刻卫星与地球的相对位置,让用户能够方便地追踪和观察卫星。 Orbitron软件具有以下主要特点和功能: 可同时追踪众多卫星:Orbitron 支持同时追踪多达两千颗卫星,满足用户对于多卫星追踪的需求。 高清世界地图:软件自带高清世界地图,方便用户在全球范围内进行卫星追踪。 卫星信息丰富:用户可以查看卫星的起点位置、轨道信息、方位角、仰角等详细数据,有助于更好地了解卫星的运行状态。 时钟校正与星历更新:Orbitron 可以通过 NTP 服务器校正电脑内部时钟,确保时间准确;同时,软件支持通过互联网更新星历数据,保持数据的最新性。 控制无线电台及卫星天线跟踪器:Orbitron 可以与无线电台及卫星天线跟踪器进行连接和控制,实现自动化追踪和观测。 多种显示模式:软件支持全屏显示及简报模式显示,满足用户在不同场景下的使用需求。 过顶时间预测及铱星光迹搜寻:Orbitron 具备功能先进的过顶时间预测及铱星光迹搜寻功能,帮助用户更好地安排观测时间和位置。 此外,Orbitron 还具有一些贴心的附加功能,如内置屏幕保护程序等。用户可以根据自己的需求进行设置和调整...

Linux time 不是用来看时间的

time 命令不是用来看时间的,主要是用来统计程序执行的时间消耗(CPU 占用),但也可以统计内存、IO 等资源的使用情况。 查看 sleep 命令的用时情况: time sleep 1 real 0m1.002s user 0m0.002s sys 0m0.000s 通常 time 只显示耗时信息,real 是实际用时(从开始执行到结束,包括了自己的 CPU 用时、被阻塞挂起耗时),user 是用户 CPU 用时(执行用户态程序),sys 是系统 CPU 用时(执行内核程序)。CPU 时间 = 用户CPU 时间 + 系统 CPU 时间,real 大于 CPU 时间是因为在执行过程中进程本身休眠、挂起,这些 CPU 时间其他进程在用。 想显示其他资源消耗使用参数 -v (--verbose),但可能提示不存在。原因是 time 可能不止一个。 type -a time time is a shell keyword time is /usr/bin/time time is /bin/time 默认使用的是 shell 关键字(内建命令),不提供 -v。 可以: /usr/bin/time -v sleep 1 Command being timed: "sleep 1" User time (seconds): 0.00 System time (seconds): 0.00 Percent of CPU this job got: 0% Elapsed (wall clock) time (h:mm:ss or m:ss): 0:01.00 Average shared text size (kbytes): 0 Average unshared data size (kbytes): 0 Average stack size (kbytes): 0 Average total size (kbytes): 0 Maximum resident set size (kbytes): 2096 Average resident set size (kbytes): 0 Major (requiring I/O) page faults: 0 Minor (reclaiming a frame) page faults: 75 Voluntary context switches: 2 Involuntary context switches: 0 Swaps: 0 File system inputs: 0 File system outputs: 0 Socket messages sent: 0 Socket messages received: 0 Signals delivered: 0 Page size (bytes): 4096 Exit status: 0 或者: \time 或 "time" 或 'time' 或 command time 这样就不使用内建命令...

Hugo 使用笔记

什么是 Hugo Hugo 是一个用 Go 语言编写的静态网站生成器。它具有简单、易用、高效、易扩展和快速部署等特点。与其他动态网站生成系统(如 WordPress、Ghost 和 Drupal)不同,Hugo 在创建内容时就已经生成了静态页面,这大大优化了网站的访问速度,并提供了出色的写作体验。 Hugo 适用于构建各种高性能的静态网站,特别是博客、文档和个人网站等。它使用简单的 Markdown 和 HTML 等标记语言来创建内容,并使用 Go 语言的模板引擎来自定义主题和布局。这使得用户能够轻松地创建和定制自己的网站。 Hugo 还具有跨平台性,可以在不同的操作系统上运行,包括 Windows、Linux 和 macOS 等。它对于资源消耗较低,不依赖昂贵的运行环境,如 Ruby、Python 或 PHP,也不依赖任何数据库。这使得 Hugo 成为一个轻量级且易于维护的网站生成器。 另外,Hugo 还支持多种部署方式,可以将生成的静态网站部署到各种托管服务上,如 Heroku、GoDaddy、DreamHost、GitHub Pages、Google Cloud Storage、Amazon S3 和 CloudFront 等。这使得用户能够灵活地选择适合自己的托管方案。 在使用 Hugo 时,用户可以通过简单的命令行操作来创建和管理自己的网站项目。Hugo 提供了丰富的命令和选项,使得用户能够轻松地生成、预览和部署网站。 总的来说,Hugo 是一个功能强大、易用和高效的静态网站生成器,适用于个人和小型团队搭建高性能的网站。它提供了优秀的写作体验、快速的网站访问速度和灵活的部署选项,使得用户能够轻松地创建和管理自己的静态网站。 配置环境 Linux Linux 用户可以直接使用包管理器安装 apt, yum, dnf, zypper, pacman 等等, 包名就是 hugo Windows Windows 用户可以在 GitHub 的 release 下载对应的安装包。 在下载安装包时,有 hugo 和 hugo_extended 两种可运行文件下载,其中 hugo 仅支持 js,hugo_extended 是 hugo 的扩展版本,在支持 js 的基础上还支持 ts。 解压后将 hugo.exe 的路径添加到系统环境变量 Path 中。 创建站点 使用命令 hugo new site blog 即可创建一个名称为 blog 的 hugo 站点项目,存放目录就是 blog。如果想在当前目录下创建需要加上--force参数,也就是hugo new site . --force。创建的项目默认使用的是 toml 配置文件,我比较喜欢用 yaml,所以呢,加一个参数:hugo new site blog --format yaml 目录结构: $ tree . -A . ├── archetypes │ └── default.md ├── assets ├── content ├── data ├── hugo.yaml ├── i18n ├── layouts ├── static └── themes 8 directories, 2 files 然后可以从主题站 https://themes.gohugo.io/ 选择一款主题。 下载到的主题解压到 themes 目录(带着主题根文件夹),然后就可以使用了。 配置站点 通常获取到的主题都会提供示例,里边会有配置文件 config.toml 或 hugo.toml,扩展名也可能是 yaml 等。按照这个文件修改我们站点根目录下的配置文件即可。 发布内容 使用以下命令创建一篇内容: hugo new posts/article.md posts:自定义的一个文件夹,当然也可以是别的,或者不指定文件夹都可以。 article.md:文章文件名,运行 hugo 时将会被渲染成一个页面。 生成的文件会被存放到 content 目录中。 自动生成的内容文件: +++ title = 'Article' date = 2024-01-10T00:53:04+08:00 draft = true +++ 这个自动生成的内容是 markdown 的 front-matter,这里是 toml 格式的,也可以手工改成 yaml 格式的。 实际上没必要使用 hugo new 命令创建内容,直接在相应目录手工创建 markdown 文件就行了。这里只是为让大家了解一下标准做法。 需要注意一下这里的 draft 参数,它是草稿的意思。如果发布时没有用 --buildDrafts,那么这个内容是不不会被渲染的。发布时改成 false 即可。 调试站点 如何在本地查看运行效果呢?在站点根目录运行 Windows 命令行 或 git bash 都可以,执行命令: hugo server --buildDrafts ... | EN -------------------+----- Pages | 3 Paginator pages | 0 Non-page files | 0 Static files | 0 Processed images | 0 Aliases | 0 Sitemaps | 1 Cleaned | 0 Built in 4 ms Environment: "development" Serving pages from memory Running in Fast Render Mode. For full rebuilds on change: hugo server --disableFastRender Web Server is available at http://localhost:1313/ (bind address 127.0.0.1) Press Ctrl+C to stop --buildDrafts:构建时包含标记为 draft(草稿) 的内容 默认使用了 --watch 参数,可以在修改文章内容时让浏览器自动刷新 根据提示,在浏览器中打开网址 http://localhost:1313/ 即可查看网页结果。上边创建的那篇内容的 URL 则是:http://localhost:1313/posts/article/ 发布站点 本地调试完后就可以生成静态页面,然后传到服务器了。 生成静态页面的指令 : hugo --gc --minify --cleanDestinationDir --gc:开启在构建之后运行某些清理任务(例如删除无用的缓存文件) --minify:对任何能够支持的输出格式(HTML、XML 等)进行压缩 --cleanDestinationDir: 先删除目标文件夹中的文件,不然改为 draft 的生成文件不会被自动删除 将 public 文件夹中生成的所有文件上传服务...

在 Git Bash 中使用 tree 命令

关于 tree 命令 tree 命令可以以 ASCII 树状图的方式列出目录的结构。 $ tree ./tree-1.5.2.2-bin -A ./tree-1.5.2.2-bin ├── bin │ └── tree.exe ├── contrib │ └── tree │ └── 1.5.2.2 │ ├── tree-1.5.2.2 │ ├── tree-1.5.2.2-GnuWin32.README │ └── tree-1.5.2.2-src │ ├── CHANGES │ ├── INSTALL │ ├── LICENSE │ └── README ├── man │ └── cat1 │ └── tree.1.txt └── manifest ├── tree-1.5.2.2-bin.mft └── tree-1.5.2.2-bin.ver 9 directories, 9 files 注:-A 参数在绘制线条时使用 ASCII 扩展字符,这会更好看一些。 这对我们在命令行中查看目录的组织方式还是很有作用的。但 git bash 默认并没有集成该命令。我们可以自行安装一下。 安装 tree 命令 下载: 到 https://gnuwin32.sourceforge.net/packages/tree.htm 下载 Windows 版预编译二进制文件: 从下载到的压缩包中解压出可执行程序 tree.exe (单独一个文件即可),放置于 git 的安装目录 /usr/bin/(默认安装情况下绝对路径通常是 C:\Program Files\Git\usr\bin)。 这时打开 Git Bash 就可以用 tree 命令了。 $ tree --help usage: tree [-adfghilnpqrstuvxACDFNS] [-H baseHREF] [-T title ] [-L level [-R]] [-P pattern] [-I pattern] [-o filename] [--version] [--help] [--inodes] [--device] [--noreport] [--nolinks] [--dirsfirst] [--charset charset] [--filelimit #] [<directory list>] -a All files are listed. -d List directories only. -l Follow symbolic links like directories. -f Print the full path prefix for each file. -i Don't print indentation lines. -q Print non-printable characters as '?'. -N Print non-printable characters as is. -p Print the protections for each file. -u Displays file owner or UID number. -g Displays file group owner or GID number. -s Print the size in bytes of each file. -h Print the size in a more human readable way. -D Print the date of last modification. -F Appends '/', '=', '*', or '|' as per ls -F. -v Sort files alphanumerically by version. -r Sort files in reverse alphanumeric order. -t Sort files by last modification time. -x Stay on current filesystem only. -L level Descend only level directories deep. -A Print ANSI lines graphic indentation lines. -S Print with ASCII graphics indentation lines. -n Turn colorization off always (-C overrides). -C Turn colorization on always. -P pattern List only those files that match the pattern given. -I pattern Do not list files that match the given pattern. -H baseHREF Prints out HTML format with baseHREF as top directory. -T string Replace the default HTML title and H1 header with string. -R Rerun tree when max dir level reached. -o file Output to file instead of stdout. --inodes Print inode number of each file. --device Print device ID number to which each file belongs. --noreport Turn off file/directory count at end of tree listing. --nolinks Turn off hyperlinks in HTML output. --dirsfirst List directories before files. --charset X Use charset X for HTML and indentation line output. --filelimit # Do not descend dirs with more than # files in them. 通常命令跟文件夹即可,文件夹可以是相对路径也可以是绝对路径,并且可以指定多个文件夹。 使用 Windows 自带的 tree 命令 我们要知道 Windows 的命令行工具自带了 tree 命令,展示细节上差点意思,将就一下也还行。 PS D:\root> tree tree-1.5.2.2-bin /F 卷 Data 的文件夹 PATH 列表 卷序列号为 6EDF-788C D:\ROOT\TREE-1.5.2.2-BIN ├─bin │ tree.exe │ ├─contrib │ └─tree │ └─1.5.2.2 │ │ tree-1.5.2.2-GnuWin32.README │ │ │ ├─tree-1.5.2.2 │ └─tree-1.5.2.2-src │ CHANGES │ INSTALL │ LICENSE │ README │ ├─man │ └─cat1 │ tree.1.txt │ └─manifest tree-1.5.2.2-bin.mft tree-1.5.2.2-bin.ver 不过由于该命令是集成在命令行程序的,所以不能被 git bash 调用。不过我想了一个注意,在 git bash 中先执行 cmd,进入 Windows 命令行环境后再执行 tree 命令,怎么样,这招是不是很高明 ...

回忆矿石收音机(译)

作者:David Goodsell from:https://www.nutsvolts.com/magazine/article/remembering-the-crystal-radio 在 1952 年,我 12 岁的时候,制作了一台矿石收音机。那是一个来自芝加哥联合广播公司的套件,售价 2.5 美元。我花了很多时间待在地下室里,头戴耳机,小心翼翼地调整可变电容器,以接收附近和远处的电台。有些电台信号非常微弱,以至于我年幼的想象力让我觉得自己可能在收听秘密信息。 如今,你只需要让 Alexa 调到任何一个电台,就可以收听他们的节目。再也不用忍受不舒服的酚醛塑料耳机了。在这篇文章中,我想分享 20 世纪 50 年代和 60 年代那些原始的矿石收音机的工作原理,希望能唤起你们中那些也制作过这些神秘收听设备的人的遥远记忆。顺便说一句,Etsy 网站上出售许多复古风格的矿石收音机套件,它们是由真正的木头制成的,而不是塑料!无需电池。 记忆恢复 图1展示了我在 eBay 上找到的一台非常熟悉的矿石收音机的修复过程。 图1. 这台来自芝加哥联合广播公司的修复后的矿石收音机套件在 20 世纪 50 到 60 年代售价 2.5 美元。 事实上,它和我几十年前最初制作的那个模型完全一样。我不记得我的旧收音机发生了什么;也许是我把它留在阁楼里,然后我妈妈把它扔掉了。图 2 展示了我收到的未经修复的收音机。它显然需要一些温柔和关爱。 图 2. 这台未经修复的矿石收音机是在 eBay 上找到的,附带一个耳机。它需要一些爱护。 关于制作第一台收音机,我记忆犹新的一件事是,我烧坏了 1N34A 锗二极管。那时,我们家只有一个巨大的 100 瓦 Weller 烙铁,而我严重过热了那个可怜的小二极管。更换一个要花费 0.43 美元。幸运的是,这些年来,我的焊接设备和技术都有所提高。小时候,我在绕大线圈时也遇到了麻烦。每当我绕线时,它就会松开,所以我爸爸耐心地帮我把它绕紧。 简单的原理图,长长的天线 晶体收音机通过使用简单的解调方案来接收调幅(AM)电台。原理图如图 3 所示。 图 3. 早期的晶体收音机使用天然方铅矿矿石而不是锗二极管来检测音频调制。 直径为 1.5 英寸的线圈和可变电容器形成一个谐振电路来选择频率,二极管对调制后的射频载波进行整流(解调)。如果没有二极管,调制会同时产生相等且相反的交变电压,这在耳机中会平均为零。没有声音。 二极管剥离了一个极性,耳机对产生的脉动直流电作出响应。波形图包含在图3的原理图中。更深入的解释,请参阅维基百科上关于矿石收音机和矿石检测器的精彩条目。 联合广播公司的手册中有一个建议的 50 英尺倒 L 型天线配置的图表。我决定完全按照手册和图 3 中的描述重新创建它。图 4 展示了我在我最喜欢的网站上找到的复古绝缘子和避雷器。请注意避雷器包装盒的“不完美”状态。 图 4. 室外天线使用避雷器进行保护,并使用玻璃绝缘子将接收线与地面隔离。 提高效率就是诀窍 矿石收音机的隐藏魔力在于,它们能够捕获来自遥远发射台的几乎无穷小(纳瓦到微瓦)的功率,并有效地将其转换为我们的耳朵能听到的声音。无需电池。无需放大器。 联合广播公司的设计通过使用感应耦合变压器和 20 匝初级绕组来更好地匹配天线的阻抗,从而最大限度地提高了效率。 次级在检测二极管处接点,这样可以减少对调谐电路的负载,并改善与检测器的阻抗匹配。 最后,高阻抗耳机将解调后的音频信号转换为声音。 让我们用 LCR 表检查元件 为了好玩,我想测量一下调到 960 千赫电台时谐振电路元件的大致值。我使用了互联网上广告的那种小型 LCR 元件测试仪。它们的售价仅为 19 美元或更低,而且相当准确。 图 5 展示了测量的次级线圈。 图 5. 当调到 960 千赫时,直径为 1.5 英寸的线圈和调谐电容器的测量值为 0.18 mH 和 154 pfd。 它显示为 0.18 mH,这与在线电感计算器的结果非常接近。在线计算器显示,对于那么大尺寸的线圈,电感应该是 0.176 mH。非常准确。 最后,我测量了调到 960 千赫电台时的可变电容器:154 pfd。 谐振频率: $$ \frac{1}{2\pi\sqrt{LC}} $$ 因此,0.18 mH(L)和154 pfd(C)= 956 kHz(相对于 960 kHz 的广播频率)。非常接近! 探索方铅矿矿石 有些早期的矿石收音机使用一种特殊的检波器,称为方铅矿矿石。方铅矿是结晶矿物硫化铅(PbS)的另一种名称。图 6 显示了一小块方铅矿矿石,它埋在一个小的低温焊锡制成的圆锭中,上面有一根触须与表面接触。 图 6:方铅矿矿石需要用一根微小的“触须”在其表面周围来回移动,以找到接收效果好的区域。 它不像 1N34A 那样是一个密封的单元。事实上,你必须在方铅矿的不规则表面上用细小的触须轻轻地来回移动,才能使其工作。只有某些区域才能作为整流结并表现出二极管特性。 图 7 显示了我从方铅矿矿石、1N34A、1N914B 和 1N4007 获得的二极管曲线轨迹。 图 7:各种二极管的曲线轨迹表明,方铅矿和锗二极管在此应用中的性能优越。 硅二极管不能很好地作为检波器,因为它们的拐点发生在电压过高的情况下,无法检测到矿石收音机中的微弱信号。一个视频显示我在方铅矿矿石周围来回移动以寻找最佳的收音机接收效果,可以在 https://youtu.be/auz64mtoVLY 找到。 收听电台的乐趣 还有最后一件事。我碰巧有一个小型电池供电的 RadioShack 音频放大器,所以我把它接在耳机的位置。哇!其中一个电台轰鸣声大作。非常大声! 我在谷歌上查了一下,发现广播天线距离我的位置只有四英里,白天它的功率达到了 5000 瓦!难怪这么大声!幸运的是,该电台每晚将其功率降低到 20 瓦,我能够调到其他几个电台。 即使在这么多年之后,调谐波段并看看我能接收到多少电台仍然令人兴奋。也许我会架起一个更长的 T 型天线,做一些真正的远程通信。 总的来说,我很享受重温我年轻时的激动时刻,并希望你们能考虑向你们的孩子和/或孙子介绍矿石收音机的世界。请随时通过 dsgoodsell@verizon.net与我联系,提出任何意见或分享你们的经历。 附言:如果你仍然有一个老式的矿石收音机藏在壁橱里,你会得到一颗金星。请告诉我。...

Linux 目录结构

/usr - 用于存放用户安装的软件和文件的地方。它包含了许多子目录,每个子目录有自己的特定用途。也许有人会认为它是 user 的缩写,但实际上是 Unix System Resources 的缩写,也就是 Unix 操作系统软件资源。所有系统默认的软件都会放置到 /usr 底下,因此这个目录有点类似 Windows 系统的 “C:\Windows\ + C:\Program Files\” 这两个目录的综合体,系统刚安装完毕时,这个目录会占用最多的硬盘容量。 值得注意的是,虽然在一些 Unix 系统上,仍然把 /usr/someone 当做用户家目录,如 Minix,但现代的 /usr 只专门存放各种程序和数据,用户目录已经转移到了 /home。 /usr/bin 中包含用户程序的二进制文件。如果你在 /bin 中找不到用户二进制文件,到 /usr/bin 目录看看。例如:at、awk、cc、less、scp。 /usr/sbin 中包含系统管理员的二进制文件。如果你在 /sbin 中找不到系统二进制文件,到 /usr/sbin 目录看看。例如:atd、cron、sshd、useradd、userdel。 /usr/bin 和 /bin 在 Linux 系统中都用于存放可执行文件,但它们之间存在一些重要的区别。 首先,/bin 目录是所有用户都可以访问并执行的可执行程序,包括超级用户及一般用户。它主要存放一些系统的必备执行档,例如 cat、cp、chmod、df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar 等。 而 /usr/bin 目录则存放一些用户安装的软件的运行脚本,如 c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome*、gzip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp 等。这些命令在 Linux 系统里的配置文件脚本里经常用到。 从用户权限的角度来看,/bin 目录下的命令管理员和一般的用户都可以使用,而 /sbin 目录下的命令通常只有管理员才可以运行。 此外,/bin 和 /sbin 目录是在系统启动后挂载到根文件系统中的,所以它们必须和根文件系统在同一分区。而 /usr/bin 和 /usr/sbin 可以和根文件系统不在一个分区。 /usr/lib 中包含了 /usr/bin 和 /usr/sbin 用到的库。 /lib 则是存放 /bin/ 和 /sbin/ 中二进制文件必要的库文件的目录。 /usr/local 中包含了从源安装的用户程序。例如,当你从源安装 Apache,它会在 /usr/local/apache2 中。 /opt - 可选的附加应用程序。 opt 代表可选的。包含从个别厂商的附加应用程序,附加应用程序应该安装在 /opt/ 或者 /opt/ 的子目录下。 /boot - 引导程序文件目录 例如:kernel、initrd。通常是一个单独的分区。 /etc - 配置文件目录 特定主机系统范围内的配置文件。 /dev - 设备目录 设备文件分为两种:块设备文件(b)和字符设备文件(c) 设备文件一般存放在 /dev 目录下,对常见设备文件作如下说明: 目录 描述 /dev/hd[a-t] IDE设备 /dev/sd[a-z] SCSI设备 /dev/fd[0-7] 标准软驱 /dev/md[0-31] 软raid设备 /dev/loop[0-7] 本地回环设备 /dev/ram[0-15] 内存 /dev/null 无限数据接收设备,相当于黑洞 /dev/zero 无限零资源 /dev/tty[0-63] 虚拟终端 /dev/ttyS[0-3] 串口 /dev/lp[0-3] 并口 /dev/console 控制台 /dev/fb[0-31] framebuffer /dev/cdrom => /dev/hdc /dev/modem => /dev/ttyS[0-9] /dev/pilot => /dev/ttyS[0-9] /dev/random 随机数设备 /dev/urandom 随机数设备 /proc - 处理信息虚拟文件系统 Linux 系统上的 /proc 目录是一种文件系统,即 proc 文件系统。与其它常见的文件系统不同的是,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。 基于 /proc 文件系统如上所述的特殊性,其内的文件也常被称作虚拟文件,并具有一些独特的特点。例如,其中有些文件虽然使用查看命令查看时会返回大量信息,但文件本身的大小却会显示为 0 字节。此外,这些特殊文件中大多数文件的时间及日期属性通常为当前系统时间和日期,这跟它们随时会被刷新(存储于 RAM 中)有关。 为了查看及使用上的方便,这些文件通常会按照相关性进行分类存储于不同的目录甚至子目录中,如 /proc/scsi 目录中存储的就是当前系统上所有 SCSI 设备的相关信息,/proc/N 中存储的则是系统当前正在运行的进程的相关信息,其中 N 为正在运行的进程(可以想象得到,在某进程结束后其相关目录则会消失)。 大多数虚拟文件可以使用文件查看命令如 cat、more 或者 less 进行查看,有些文件信息表述的内容可以一目了然,但也有文件的信息却不怎么具有可读性。不过,这些可读性较差的文件在使用一些命令如 apm、free、lspci 或 top 查看时却可以有着不错的表现。 /proc/apm 高级电源管理(APM)版本信息及电池相关状态信息,通常由 apm 命令使用; /proc/buddyinfo 用于诊断内存碎片问题的相关信息文件; /proc/cmdline 在启动时传递至内核的相关参数信息,这些信息通常由 lilo 或 grub 等启动管理工具进行传递; # more /proc/cmdline ro root=/dev/VolGroup00/LogVol00 rhgb quiet /proc/cpuinfo 处理器的相关信息的文件; /proc/crypto 系统上已安装的内核使用的密码算法及每个算法的详细信息列表; # more /proc/crypto name : crc32c driver : crc32c-generic module : kernel priority : 0 type : digest blocksize : 32 digestsize : 4 ………… /proc/devices 系统已经加载的所有块设备和字符设备的信息,包含主设备号和设备组(与主设备号对应的设备类型)名; /proc/diskstats 每块磁盘设备的磁盘 I/O 统计信息列表;(内核 2.5.69 以后的版本支持此功能) /proc/dma 每个正在使用且注册的 ISA DMA 通道的信息列表; /proc/execdomains 内核当前支持的执行域(每种操作系统独特“个性”)信息列表; /proc/fb 帧缓冲设备列表文件,包含帧缓冲设备的设备号和相关驱动信息; /proc/filesystems 当前被内核支持的文件系统类型列表文件,被标示为 nodev 的文件系统表示不需要块设备的支持;通常 mount 一个设备时,如果没有指定文件系统类型将通过此文件来决定其所需文件系统的类型; /proc/interrupts X86 或 X86_64 体系架构系统上每个 IRQ 相关的中断号列表;多路处理器平台上每个 CPU 对于每个 I/O 设备均有自己的中断号; /proc/iomem 每个物理设备上的记忆体(RAM 或者 ROM)在系统内存中的映射信息; /proc/ioports 当前正在使用且已经注册过的与物理设备进行通讯的输入-输出端口范围信息列表;如下面所示,第一列表示注册的 I/O 端口范围,其后表示相关的设备; /proc/kallsyms 模块管理工具用来动态链接或绑定可装载模块的符号定义,由内核输出;(内核 2.5.71 以后的版本支持此功能);通常这个文件中的信息量相当大; /proc/kcore 系统使用的物理内存,以 ELF 核心文件(core file)格式存储,其文件大小为已使用的物理内存(RAM)加上 4KB;这个文件用来检查内核数据结构的当前状态,因此,通常由 GBD 通常调试工具使用,但不能使用文件查看命令打开此文件; /proc/kmsg 此文件用来保存由内核输出的信息,通常由 /sbin/klogd 或 /bin/dmsg 等程序使用,不要试图使用查看命令打开此文件; /proc/loadavg 保存关于 CPU 和磁盘 I/O 的负载平均值,其前三列分别表示每 1 秒钟、每 5 秒钟及每 15 秒的负载平均值,类似于 uptime 命令输出的相关信息;第四列是由斜线隔开的两个数值,前者表示当前正由内核调度的实体(进程和线程)的数目,后者表示系统当前存活的内核调度实体的数目;第五列表示此文件被查看前最近一个由内核创建的进程的 PID; /proc/locks 保存当前由内核锁定的文件的相关信息,包含内核内部的调试数据;每个锁定占据一行,且具有一个惟一的编号;如下输出信息中每行的第二列表示当前锁定使用的锁定类别,POSIX 表示目前较新类型的文件锁,由 lockf 系统调用产生,FLOCK 是传统的 UNIX 文件锁,由 flock 系统调用产生;第三列也通常由两种类型,ADVISORY 表示不允许其他用户锁定此文件,但允许读取,MANDATORY 表示此文件锁定期间不允许其他用户任何形式的访问; /proc/mdstat 保存 RAID 相关的多块磁盘的当前状态信息,在没有使用 RAID 机器上,其显示为如下状态: /proc/meminfo 系统中关于当前内存的利用状况等的信息,常由 free 命令使用;可以使用文件查看命令直接读取此文件,其内容显示为两列,前者为统计属性,后者为对应的值; /proc/mounts 在内核 2.4.29 版本以前,此文件的内容为系统当前挂载的所有文件系统,在 2.4.19 以后的内核中引进了每个进程使用独立挂载名称空间的方式,此文件则随之变成了指向 /proc/self/mounts(每个进程自身挂载名称空间中的所有挂载点列表)文件的符号链接; /proc/modules 当前装入内核的所有模块名称列表,可以由 lsmod 命令使用,也可以直接查看;如下所示,其中第一列表示模块名,第二列表示此模块占用内存空间大小,第三列表示此模块有多少实例被装入,第四列表示此模块依赖于其它哪些模块,第五列表示此模块的装载状态(Live:已经装入;Loading:正在装入;Unloading:正在卸载),第六列表示此模块在内核内存(kernel memory)中的偏移量; /proc/partitions 块设备每个分区的主设备号(major)和次设备号(minor)等信息,同时包括每个分区所包含的块(block)数目(如下面输出中第三列所示); /proc/pci 内核初始化时发现的所有 PCI 设备及其配置信息列表,其配置信息多为某 PCI 设备相关 IRQ 信息,可读性不高,可以用 “/sbin/lspci –vb” 命令获得较易理解的相关信息;在 2.6 内核以后,此文件已为 /proc/bus/pci 目录及其下的文件代替; /proc/slabinfo 在内核中频繁使用的对象(如 inode、dentry 等)都有自己的 cache,即 slab pool,而 /proc/slabinfo 文件列出了这些对象相关 slap 的信息;详情可以参见内核文档中 slapinfo 的手册页; /proc/stat 实时追踪自系统上次启动以来的多种统计信息;如下所示,其中, “cpu” 行后的八个值分别表示以 1/100(jiffies)秒为单位的统计值(包括系统运行于用户模式、低优先级用户模式,运系统模式、空闲模式、I/O 等待模式的时间等); “intr” 行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数; “ctxt” 给出了自系统启动以来 CPU 发生的上下文交换的次数。 “btime” 给出了从系统启动到现在为止的时间,单位为秒; “processes (total_forks) 自系统启动以来所创建的任务的个数目; “procs_running”:当前运行队列的任务的数目; “procs_blocked”:当前被阻塞的任务的数目; # more /proc/stat cpu 2751 26 5771 266413 2555 99 411 0 cpu0 2751 26 5771 266413 2555 99 411 0 intr 2810179 2780489 67 0 3 3 0 5 0 1 0 0 0 1707 0 0 9620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5504 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12781 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ctxt 427300 btime 1234084100 processes 3491 procs_running 1 procs_blocked 0 /proc/swaps 当前系统上的交换分区及其空间利用信息,如果有多个交换分区的话,则会每个交换分区的信息分别存储于 /proc/swap 目录中的单独文件中,而其优先级数字越低,被使用到的可能性越大;下面是作者系统中只有一个交换分区时的输出信息; # more /proc/swaps Filename Type Size Used Priority /dev/sda8 partition 642560 0 -1 /proc/uptime 系统上次启动以来的运行时间,如下所示,其第一个数字表示系统运行时间,第二个数字表示系统空闲时间,单位是秒; # more /proc/uptime 3809.86 3714.13 /proc/version 当前系统运行的内核版本号,在作者的 RHEL5.3 上还会显示系统安装的 gcc 版本,如下所示; # more /proc/version Linux version 2.6.18-128.el5 ([email]mockbuild@hs20-bc1-5.build.redhat.com[/email]) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-44)) #1 SMP Wed Dec 17 11:42:39 EST 2008 /proc/vmstat 当前系统虚拟内存的多种统计数据,信息量可能会比较大,这因系统而有所不同,可读性较好; # more /proc/vmstat nr_anon_pages 22270 nr_mapped 8542 nr_file_pages 47706 nr_slab 4720 nr_page_table_pages 897 nr_dirty 21 nr_writeback 0 ………… /proc/zoneinfo 内存区域(zone)的详细信息列表,信息量较大,下面列出的是一个输出片段: # more /proc/zoneinfo Node 0, zone DMA pages free 1208 min 28 low 35 high 42 active 439 inactive 1139 scanned 0 (a: 7 i: 30) spanned 4096 present 4096 nr_anon_pages 192 nr_mapped 141 nr_file_pages 1385 nr_slab 253 nr_page_table_pages 2 nr_dirty 523 nr_writeback 0 nr_unstable 0 nr_bounce 0 protection: (0, 0, 296, 296) pagesets all_unreclaimable: 0 prev_priority: 12 start_pfn: 0 ………… /root - root 用户的家目录 其他用户的家目录通常在 /home/ 下。 /mnt - 挂载目录 临时安装目录,系统管理员可以挂载文件系统。 /media - 可移动媒体设备 用于挂载可移动设备的临时目录。 举例来说,挂载 CD-ROM 的 /media/cdrom,挂载软盘驱动器的 /media/floppy。 /srv - 服务数据 srv 代表服务。 包含服务器特定服务相关的数据。 例如,/srv/cvs 包含 cvs 相关的数据。 /var - 变量文件 这个目录下可以找到内容可能增长的文件。 这包括:系统日志文件(/var/log)、包和数据库文件(/var/lib)、电子邮件(/var/mail)、打印队列(/var/spool)、锁文件(/var/lock)、多次重新启动需要的临时文件(/var/tmp)等 /tmp - 临时文件 包含系统和用户创建的临时文件。当系统重新启动时,这个目录下的文件都将被删除。 /tmp 目录在 Linux 系统中通常使用 tmpfs 文件系统,也就是内存文件系统。tmpfs 允许将一部分内存用作文件系统,可以大大提高文件访问速度,尤其适合存储临时文件。 tmpfs 的优点包括: 速度快:由于 tmpfs 直接使用内存,所以读写速度非常快,特别适合存储临时文件。 节省磁盘空间:由于 tmpfs 直接使用内存,所以不会在磁盘上留下任何数据,可以节省磁盘空间。 安全性高:由于 tmpfs 存储的是临时文件,所以即使系统崩溃或者重启,也不会丢失数据,可以提高系统的安全性。 /lost+found - 文件碎片存储目录 它的主要作用是帮助用户在文件系统发生错误或崩溃时恢复丢失的文件。 当系统意外崩溃或意外关机时,可能会导致一些文件碎片出现在 /lost+found 目录中。这些文件碎片通常是未链接的文件,可能还有一些进程正在使用它们(数据尚未被删除)。在系统启动的过程中,fsck 工具会检查这个目录,并尝试修复已损坏的文件系统。 每个 Linux 文件系统都有一个 /lost+found 目录,当文件系统崩溃时,任何在崩溃过程中损坏的文件都将被放入这个目录中。用户可以尝试在这个目录下查找并恢复这些文件。 值得注意的是,/lost+found 目录通常只有 root 用户可以访问,而且这个目录中的文件通常是未链接的文件,因此恢复过程可能会比较复杂。此外,为了防止数据丢失,建议定期备份重要数据,并保持系统更新和运行状态良...

C 语言运算符优先级

C 语言中运算符的优先级分为 15 级,从高到低依次为: 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 () 圆括号 (表达式) / 函数名(形参表) . 成员选择(对象) 对象.成员名 -> 成员选择(指针) 对象指针->成员名 2 - 负号运算符 -表达式 右到左 单目运算符 ~ 按位取反运算符 ~表达式 ++ 自增运算符 ++变量名 / 变量名++ -- 自减运算符 --变量名 / 变量名-- * 取值运算符 *指针变量 & 取地址运算符 &变量名 ! 逻辑非运算符 !表达式 (类型) 强制类型转换 (数据类型)表达式 sizeof 长度运算符 sizeof(表达式) 3 / 除 表达式/表达式 左到右 双目运算符 * 乘 表达式*表达式 % 余数(取模) 整型表达式%整型表达式 4 + 加 表达式+表达式 左到右 双目运算符 - 减 表达式-表达式 5 <<  左移 变量<<表达式 左到右 双目运算符 >>  右移 变量>>表达式 6 >  大于 表达式>表达式 左到右 双目运算符 >=大于等于 表达式>=表达式 <  小于 表达式<表达式 <=小于等于 表达式<=表达式 7 ==等于 表达式==表达式 左到右 双目运算符 !=不等于 表达式!=表达式 8 & 按位与 表达式&表达式 左到右 双目运算符 9 ^ 按位异或 表达式^表达式 左到右 双目运算符 10 | 按位或 表达式|表达式 左到右 双目运算符 11 && 逻辑与 表达式&&表达式 左到右 双目运算符 12 || 逻辑或 表达式||表达式 左到右 双目运算符 13 ?: 条件运算符 表达式1? 表达式2: 表达式3 右到左 三目运算符 14 =赋值运算符 变量=表达式 右到左 /=除后赋值 变量/=表达式 *=乘后赋值 变量*=表达式 %=取模后赋值 变量%=表达式 +=加后赋值 变量+=表达式 -=减后赋值 变量-=表达式 <<=左移后赋值 变量<<=表达式 >>=右移后赋值 变量>>=表达式 &=按位与后赋值 变量&=表达式 ^=按位异或后赋值 变量^=表达式 |=按位或后赋值 变量|=表达式 15 , 逗号运算符 表达式,表达式,… 左到右 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。 C 语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式 x-y+z,则y应先与 - 号结合,执行 x-y 运算,然后再执行 +z 的运算。这种自左至右的结合方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。如 x=y=z,由于 = 的右结合性,应先执行 y=z,再执行 x=(y=z) 运算。所有的优先级中,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。其他的都是从左至右结...

Linux 命令学习之路:man

我认为学习 Linux 命令,第一个要学的就是 man 命令。 man 命令是 Linux 系统中用于查看系统文档的重要命令,可以用来查看命令的说明、系统调用、库函数等帮助信息。man 命令的全称是 "manual",它是单词 "manual" 的缩写,意思是使用手册。也许有人一开始的时候认为它是“人”的意思,我认为也说得过去,服务于人,人性化,不都是说一个好的系统首先应该是以人为本的吗。 man 命令格式: man [OPTION...] [SECTION] PAGE... man 命令常用参数: -h 显示帮助信息,我认为这是学习每一个命令时首先要会用的参数 -a 显示所有匹配项 -d 输出调试信息,包括查找时的搜索路径等,例如: $ man -d ls ruid=1000, euid=1000 rgid=1000, egid=1000 ++priv_drop_count = 1 From the config file /etc/manpath.config: Mandatory mandir `/usr/man'. Mandatory mandir `/usr/share/man'. Mandatory mandir `/usr/local/share/man'. Path `/bin' mapped to mandir `/usr/share/man'. Path `/usr/bin' mapped to mandir `/usr/share/man'. Path `/sbin' mapped to mandir `/usr/share/man'. Path `/usr/sbin' mapped to mandir `/usr/share/man'. Path `/usr/local/bin' mapped to mandir `/usr/local/man'. Path `/usr/local/bin' mapped to mandir `/usr/local/share/man'. Path `/usr/local/sbin' mapped to mandir `/usr/local/man'. Path `/usr/local/sbin' mapped to mandir `/usr/local/share/man'. Path `/usr/X11R6/bin' mapped to mandir `/usr/X11R6/man'. Path `/usr/bin/X11' mapped to mandir `/usr/X11R6/man'. Path `/usr/games' mapped to mandir `/usr/share/man'. Path `/opt/bin' mapped to mandir `/opt/man'. Path `/opt/sbin' mapped to mandir `/opt/man'. Global mandir `/usr/man', catdir `/var/cache/man/fsstnd'. Global mandir `/usr/share/man', catdir `/var/cache/man'. Global mandir `/usr/local/man', catdir `/var/cache/man/oldlocal'. Global mandir `/usr/local/share/man', catdir `/var/cache/man/local'. Global mandir `/usr/X11R6/man', catdir `/var/cache/man/X11R6'. Global mandir `/opt/man', catdir `/var/cache/man/opt'. Global mandir `/snap/man', catdir `/var/cache/man/snap'. Added sections: `1', `n', `l', `8', `3', `0', `2', `3posix', `3pm', `3perl', `3am', `5', `4', `9', `6', `7'. is a tty using pager as pager path directory /usr/local/sbin is in the config file adding /usr/local/man to manpath adding /usr/local/share/man to manpath path directory /usr/local/bin is in the config file ... -f 等价于 whatis 命令,用于显示给定关键字的简短描述信息。使用 -f 参数时,man 命令会在关键字数据库中搜索与给定关键字相关的命令,并显示该命令的简短描述。 $ man -f ls ls (1) - list directory contents $ whatis ls ls (1) - list directory contents -k 与 apropos 命令等价,用于执行关键字搜索。该参数允许用户在手册页中搜索与给定关键字相关的条目。需要注意的是,由于这是一个模糊搜索,它可能会返回一些并不是你直接想要的结果。在这种情况下,你可以尝试使用更具体的关键字,或者结合其他 man 命令的参数和特性来进一步筛选结果。 $ man -k ls add-shell (8) - add shells to the list of valid login shells arm-linux-gnueabi-c++filt (1) - demangle C++ and Java symbols arm-linux-gnueabi-nm (1) - list symbols from object files arm-linux-gnueabi-strip (1) - discard symbols and other data from object files arm-linux-gnueabihf-c++filt (1) - demangle C++ and Java symbols arm-linux-gnueabihf-nm (1) - list symbols from object files arm-linux-gnueabihf-strip (1) - discard symbols and other data from object files blockdev (8) - call block device ioctls from the command line c++filt (1) - demangle C++ and Java symbols credentials (7) - process identifiers dircolors (1) - color setup for ls eatmydata (1) - transparently disable fsync() and other data-to-disk synchronization calls EVP_KDF-TLS13_KDF (7ssl) - The TLS 1.3 EVP_KDF implementation EVP_KDF-TLS1_PRF (7ssl) - The TLS1 PRF EVP_KDF implementation false (1) - do nothing, unsuccessfully git-credential (1) - Retrieve and store user credentials git-credential-cache--daemon (1) - Temporarily store user credentials in memory git-credential-store (1) - Helper to store credentials on disk git-difftool (1) - Show changes using common diff tools git-ls-files (1) - Show information about files in the index and the working t -s/-S 用于指定要查看的手册页的章节,也就是命令格式中的 [SECTION]。通过指定章节,您可以限制 man 命令只搜索和显示特定章节的手册页。Linux 的手册页分为多个章节,每个章节包含不同类型的信息: 第1章(1)包含了用户命令和程序,例如 ls、cp 等。 第2章(2)包含了系统调用,例如 open、read 等。 第3章(3)包含了库函数,例如 C 语言的标准库函数。 第4章(4)包含了设备文件和特殊文件。 第5章(5)包含了文件格式和约定,例如 /etc/passwd。 第6章(6)包含了游戏。 第7章(7)包含了惯例和约定。 第8章(8)包含了系统管理命令和守护进程。 第9章(9)包含了内核的函数和宏。 括号中的数字可以帮助用户快速识别手册页的类型和内容。 例如,如果您只想模糊搜索用户命令和程序相关的手册页,可以输入以下命令: $ man -s 1 -k ls(关键字) arm-linux-gnueabi-c++filt (1) - demangle C++ and Java symbols arm-linux-gnueabi-nm (1) - list symbols from object files arm-linux-gnueabi-strip (1) - discard symbols and other data from object files arm-linux-gnueabihf-c++filt (1) - demangle C++ and Java symbols arm-linux-gnueabihf-nm (1) - list symbols from object files arm-linux-gnueabihf-strip (1) - discard symbols and other data from object files c++filt (1) - demangle C++ and Java symbols dircolors (1) - color setup for ls eatmydata (1) - transparently disable fsync() and other data-to-disk synchronization calls false (1) - do nothing, unsuccessfully git-credential (1) - Retrieve and store user credentials git-credential-cache--daemon (1) - Temporarily store user credentials in memory git-credential-store (1) - Helper to store credentials on disk git-difftool (1) - Show changes using common diff tools 与上边的实例相比,只输出了第一章节的条目。 -t 用于将手册页内容输出到终端,并使用 troff 命令格式化格式进行显示(默认用的是 groff 输出格式页)。这通常用于在终端中以美观的格式查看手册页,特别是当手册页包含复杂的格式化文本或表格时。可以提供更好的可读性和视觉效果。不过,有可能你使用的终端不支持相应的格式化功能,那就看不到预期的结果了。此外也可以使用其他格式化手段,例如简单地格式化和着色:man ls |col |more -w 显示命令或函数的手册页文件路径 $ man -w ls /usr/share/man/man1/ls.1.gz man 命令的使用非常方便,用户可以通过简单的输入命令和参数来获取需要的帮助信息。在 man 页面中,用户可以使用各种快捷键来快速浏览和查找信息,例如 q 键用于退出,Enter 键按行下翻,Space 键按页下翻,b 键上翻一页等。 man 命令还可以按照默认的搜索路径和顺序去搜索文档,也可以指定 section 来只显示制定 section 的文档页内容。例如,man 5 passwd 和 man passwd 会显示不同的帮助页。 man 命令的文档页文件存放在 /usr/share/man 目录...