update docs

pull/11/head
Zhang Peng 2019-11-25 11:55:01 +08:00
parent 9c162aa61b
commit 52f0a889db
12 changed files with 171 additions and 443 deletions

View File

@ -1,34 +1,8 @@
---
title: Linux 文件内容查看编辑
date: 2018-02-27
categories:
- linux
tags:
- linux
- command
---
# Linux 文件内容查看编辑 # Linux 文件内容查看编辑
> 关键词:`cat`, `head`, `tail`, `more`, `less`, `sed`, `vi`, `grep` > 关键词:`cat`, `head`, `tail`, `more`, `less`, `sed`, `vi`, `grep`
<!-- TOC depthFrom:2 depthTo:3 --> ## 1. Linux 文件内容查看编辑要点
- [Linux 文件内容查看编辑要点](#linux-文件内容查看编辑要点)
- [命令常见用法](#命令常见用法)
- [cat](#cat)
- [head](#head)
- [tail](#tail)
- [more](#more)
- [less](#less)
- [sed](#sed)
- [vi](#vi)
- [grep](#grep)
- [参考资料](#参考资料)
<!-- /TOC -->
## Linux 文件内容查看编辑要点
- 连接文件并打印到标准输出设备 - 使用 [cat](#cat) - 连接文件并打印到标准输出设备 - 使用 [cat](#cat)
- 显示指定文件的开头若干行 - 使用 [head](#head) - 显示指定文件的开头若干行 - 使用 [head](#head)
@ -39,9 +13,9 @@ tags:
- 文本编辑器 - 使用 [vi](#vi) - 文本编辑器 - 使用 [vi](#vi)
- 使用正则表达式搜索文本,并把匹配的行打印出来 - 使用 [grep](#grep) - 使用正则表达式搜索文本,并把匹配的行打印出来 - 使用 [grep](#grep)
## 命令常见用法 ## 2. 命令常见用法
### cat ### 2.1. cat
> cat 命令用于连接文件并打印到标准输出设备上。 > cat 命令用于连接文件并打印到标准输出设备上。
> >
@ -55,13 +29,13 @@ cat m1 m2 # 同时显示文件 ml 和 m2 的内容
cat m1 m2 > file # 将文件 ml 和 m2 合并后放入文件 file 中 cat m1 m2 > file # 将文件 ml 和 m2 合并后放入文件 file 中
``` ```
### head ### 2.2. head
> head 命令用于显示文件的开头内容。在默认情况下head 命令显示文件的头部 10 行内容。 > head 命令用于显示文件的开头内容。在默认情况下head 命令显示文件的头部 10 行内容。
> >
> 参考http://man.linuxde.net/head > 参考http://man.linuxde.net/head
### tail ### 2.3. tail
> tail 命令用于显示文件的尾部内容。在默认情况下tail 命令显示文件的尾部 10 行内容。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名为“-”,则读取标准输入。 > tail 命令用于显示文件的尾部内容。在默认情况下tail 命令显示文件的尾部 10 行内容。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名为“-”,则读取标准输入。
> >
@ -75,7 +49,7 @@ tail -n +20 file # 显示文件file的内容从第20行至文件末尾
tail -c 10 file # 显示文件file的最后10个字符 tail -c 10 file # 显示文件file的最后10个字符
``` ```
### more ### 2.4. more
> more 命令是一个基于 vi 编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持 vi 中的关键字定位操作。more 名单中内置了若干快捷键,常用的有 H获得帮助信息Enter向下翻滚一行空格向下滚动一屏Q退出命令 > more 命令是一个基于 vi 编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持 vi 中的关键字定位操作。more 名单中内置了若干快捷键,常用的有 H获得帮助信息Enter向下翻滚一行空格向下滚动一屏Q退出命令
> >
@ -100,7 +74,7 @@ more -dc file
more -c -10 file more -c -10 file
``` ```
### less ### 2.5. less
less 命令的作用与 more 十分相似,都可以用来浏览文字档案的内容,不同的是 less 命令允许用户向前或向后浏览文件,而 more 命令只能向前浏览。用 less 命令显示文件时,用 PageUp 键向上翻页,用 PageDown 键向下翻页。要退出 less 程序,应按 Q 键。 less 命令的作用与 more 十分相似,都可以用来浏览文字档案的内容,不同的是 less 命令允许用户向前或向后浏览文件,而 more 命令只能向前浏览。用 less 命令显示文件时,用 PageUp 键向上翻页,用 PageDown 键向下翻页。要退出 less 程序,应按 Q 键。
@ -110,7 +84,7 @@ less 命令的作用与 more 十分相似,都可以用来浏览文字档案的
less /var/log/shadowsocks.log less /var/log/shadowsocks.log
``` ```
### sed ### 2.6. sed
> sed 是一种流编辑器它是文本处理工具能够完美的配合正则表达式使用功能不同凡响。处理时把当前处理的行存储在临时缓冲区中称为“模式空间”pattern space接着用 sed 命令处理缓冲区中的内容处理完成后把缓冲区的内容送往屏幕。接着处理下一行这样不断重复直到文件末尾。文件内容并没有改变除非你使用重定向存储输出。Sed 主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。 > sed 是一种流编辑器它是文本处理工具能够完美的配合正则表达式使用功能不同凡响。处理时把当前处理的行存储在临时缓冲区中称为“模式空间”pattern space接着用 sed 命令处理缓冲区中的内容处理完成后把缓冲区的内容送往屏幕。接着处理下一行这样不断重复直到文件末尾。文件内容并没有改变除非你使用重定向存储输出。Sed 主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
> >
@ -147,7 +121,7 @@ sed '$d' file
sed '/^test/'d file sed '/^test/'d file
``` ```
### vi ### 2.7. vi
> vi 命令是 UNIX 操作系统和类 UNIX 操作系统中最通用的全屏幕纯文本编辑器。Linux 中的 vi 编辑器叫 vim它是 vi 的增强版vi Improved与 vi 编辑器完全兼容,而且实现了很多增强功能。 > vi 命令是 UNIX 操作系统和类 UNIX 操作系统中最通用的全屏幕纯文本编辑器。Linux 中的 vi 编辑器叫 vim它是 vi 的增强版vi Improved与 vi 编辑器完全兼容,而且实现了很多增强功能。
> >
@ -155,7 +129,7 @@ sed '/^test/'d file
> >
> 引申阅读:[Vim 快速指南](https://github.com/dunwu/OS/blob/master/docs/vim.md) > 引申阅读:[Vim 快速指南](https://github.com/dunwu/OS/blob/master/docs/vim.md)
### grep ### 2.8. grep
> grepglobal search regular expression(RE) and print out the line全面搜索正则表达式并把行打印出来是一种强大的文本搜索工具它能使用正则表达式搜索文本并把匹配的行打印出来。 > grepglobal search regular expression(RE) and print out the line全面搜索正则表达式并把行打印出来是一种强大的文本搜索工具它能使用正则表达式搜索文本并把匹配的行打印出来。
> >
@ -183,6 +157,6 @@ $ grep "main()" . -r --exclude "README"
$ grep "main()" . -r --exclude-from filelist $ grep "main()" . -r --exclude-from filelist
``` ```
## 参考资料 ## 3. 参考资料
- [Linux 命令大全](http://man.linuxde.net/) - [Linux 命令大全](http://man.linuxde.net/)

View File

@ -1,37 +1,16 @@
---
title: Linux 文件压缩和解压
date: 2018-02-27
categories:
- linux
tags:
- linux
- command
---
# Linux 文件压缩和解压 # Linux 文件压缩和解压
> 关键词:`tar`, `gzip`, `zip`, `unzip` > 关键词:`tar`, `gzip`, `zip`, `unzip`
<!-- TOC depthFrom:2 depthTo:3 --> ## 1. Linux 文件压缩和解压要点
- [Linux 文件压缩和解压要点](#linux-文件压缩和解压要点)
- [命令常见用法](#命令常见用法)
- [tar](#tar)
- [gzip](#gzip)
- [zip](#zip)
- [unzip](#unzip)
<!-- /TOC -->
## Linux 文件压缩和解压要点
- 压缩和解压 tar 文件 - 使用 [tar](#tar) - 压缩和解压 tar 文件 - 使用 [tar](#tar)
- 压缩和解压 gz 文件 - 使用 [gzip](#gzip) - 压缩和解压 gz 文件 - 使用 [gzip](#gzip)
- 压缩和解压 zip 文件 - 分别使用 [zip](#zip)、[unzip](#unzip) - 压缩和解压 zip 文件 - 分别使用 [zip](#zip)、[unzip](#unzip)
## 命令常见用法 ## 2. 命令常见用法
### tar ### 2.1. tar
> tar 命令可以为 linux 的文件和目录创建档案。利用 tar可以为某一特定文件创建档案备份文件也可以在档案中改变文件或者向档案中加入新的文件。tar 最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用 tar 命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。 > tar 命令可以为 linux 的文件和目录创建档案。利用 tar可以为某一特定文件创建档案备份文件也可以在档案中改变文件或者向档案中加入新的文件。tar 最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用 tar 命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
> >
@ -49,7 +28,7 @@ tar -zxvf log.tar.gz # 将 tar 包解压缩
tar -zxvf log30.tar.gz log2013.log # 只将 tar 内的部分文件解压出来 tar -zxvf log30.tar.gz log2013.log # 只将 tar 内的部分文件解压出来
``` ```
### gzip ### 2.2. gzip
> gzip 命令用来压缩文件。gzip 是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多出“.gz”扩展名。 > gzip 命令用来压缩文件。gzip 是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多出“.gz”扩展名。
> >
@ -68,7 +47,7 @@ gzip -rv test/ # 递归的压缩目录
gzip -dr test/ # 递归地解压目录 gzip -dr test/ # 递归地解压目录
``` ```
### zip ### 2.3. zip
> zip 命令可以用来解压缩文件或者对文件进行打包操作。zip 是个使用广泛的压缩程序,文件经它压缩后会另外产生具有“.zip”扩展名的压缩文件。 > zip 命令可以用来解压缩文件或者对文件进行打包操作。zip 是个使用广泛的压缩程序,文件经它压缩后会另外产生具有“.zip”扩展名的压缩文件。
> >
@ -81,7 +60,7 @@ gzip -dr test/ # 递归地解压目录
zip -q -r html.zip /home/Blinux/html zip -q -r html.zip /home/Blinux/html
``` ```
### unzip ### 2.4. unzip
> unzip 命令用于解压缩由 zip 命令压缩的“.zip”压缩包。 > unzip 命令用于解压缩由 zip 命令压缩的“.zip”压缩包。
> >

View File

@ -1,58 +1,16 @@
---
title: Linux 文件目录管理命令
date: 2018-02-27
categories:
- linux
tags:
- linux
- command
---
# Linux 文件目录管理 # Linux 文件目录管理
> 关键词:`cd`, `ls`, `pwd`, `mkdir`, `rmdir`, `tree`, `touch`, `ln`, `rename`, `stat`, `file`, `chmod`, `chown`, `locate`, `find`, `cp`, `scp`, `mv`, `rm` > 关键词:`cd`, `ls`, `pwd`, `mkdir`, `rmdir`, `tree`, `touch`, `ln`, `rename`, `stat`, `file`, `chmod`, `chown`, `locate`, `find`, `cp`, `scp`, `mv`, `rm`
<!-- TOC depthFrom:2 depthTo:3 --> ## 1. Linux 文件目录工作机制
- [Linux 文件目录工作机制](#linux-文件目录工作机制) ### 1.1. Linux 目录结构
- [Linux 目录结构](#linux-目录结构)
- [Linux 文件属性](#linux-文件属性)
- [Linux 文件目录管理要点](#linux-文件目录管理要点)
- [目录管理](#目录管理)
- [文件管理](#文件管理)
- [文件和目录通用管理](#文件和目录通用管理)
- [命令常见用法](#命令常见用法)
- [cd](#cd)
- [ls](#ls)
- [pwd](#pwd)
- [mkdir](#mkdir)
- [rmdir](#rmdir)
- [tree](#tree)
- [touch](#touch)
- [ln](#ln)
- [rename](#rename)
- [stat](#stat)
- [file](#file)
- [chmod](#chmod)
- [chown](#chown)
- [locate](#locate)
- [find](#find)
- [cp](#cp)
- [scp](#scp)
- [mv](#mv)
- [rm](#rm)
<!-- /TOC -->
## Linux 文件目录工作机制
### Linux 目录结构
linux 目录结构是树形结构,其根目录是 `/` 。一张思维导图说明各个目录的作用: linux 目录结构是树形结构,其根目录是 `/` 。一张思维导图说明各个目录的作用:
<br><div align="center"><img src="http://dunwu.test.upcdn.net/cs/linux/linux-folders.png!zp"/></div><br> <br><div align="center"><img src="http://dunwu.test.upcdn.net/cs/linux/linux-folders.png!zp"/></div><br>
### Linux 文件属性 ### 1.2. Linux 文件属性
Linux 系统是一种典型的多用户系统不同的用户处于不同的地位拥有不同的权限。为了保护系统的安全性Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。 Linux 系统是一种典型的多用户系统不同的用户处于不同的地位拥有不同的权限。为了保护系统的安全性Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在 Linux 中我们可以使用 ll 或者 ls l 命令来显示一个文件的属性以及文件所属的用户和组,如: 在 Linux 中我们可以使用 ll 或者 ls l 命令来显示一个文件的属性以及文件所属的用户和组,如:
@ -89,7 +47,7 @@ dr-xr-xr-x 4 root root 4096 Apr 19 2012 boot
- 第 2、5、8 位表示写权限,如果用"w"字符表示,则有写权限,如果用"-"字符表示没有写权限。 - 第 2、5、8 位表示写权限,如果用"w"字符表示,则有写权限,如果用"-"字符表示没有写权限。
- 第 3、6、9 位表示可执行权限,如果用"x"字符表示,则有执行权限,如果用"-"字符表示,则没有执行权限。 - 第 3、6、9 位表示可执行权限,如果用"x"字符表示,则有执行权限,如果用"-"字符表示,则没有执行权限。
#### Linux 文件属主和属组 #### 1.2.1. Linux 文件属主和属组
```bash ```bash
$ ls -l $ ls -l
@ -104,9 +62,9 @@ dr-xr-xr-x 4 root root 4096 Apr 19 2012 boot
- 因此Linux 系统按文件拥有者、文件拥有者同组用户和其他用户来规定了不同的文件访问权限。 - 因此Linux 系统按文件拥有者、文件拥有者同组用户和其他用户来规定了不同的文件访问权限。
- 在以上实例中bin 文件是一个目录文件,属主和属组都为 root属主有可读、可写、可执行的权限与属主同组的其他用户有可读和可执行的权限其他用户也有可读和可执行的权限。 - 在以上实例中bin 文件是一个目录文件,属主和属组都为 root属主有可读、可写、可执行的权限与属主同组的其他用户有可读和可执行的权限其他用户也有可读和可执行的权限。
## Linux 文件目录管理要点 ## 2. Linux 文件目录管理要点
### 目录管理 ### 2.1. 目录管理
- 切换目录 - 使用 [cd](#cd) - 切换目录 - 使用 [cd](#cd)
- 查看目录信息 - 使用 [ls](#ls) - 查看目录信息 - 使用 [ls](#ls)
@ -115,7 +73,7 @@ dr-xr-xr-x 4 root root 4096 Apr 19 2012 boot
- 创建目录 - 使用 [mkdir](#mkdir) - 创建目录 - 使用 [mkdir](#mkdir)
- 删除目录 - 使用 [rmdir](#rmdir) - 删除目录 - 使用 [rmdir](#rmdir)
### 文件管理 ### 2.2. 文件管理
- 创建空文件 - 使用 [touch](#touch) - 创建空文件 - 使用 [touch](#touch)
- 为文件创建连接 - 使用 [ln](#ln) - 为文件创建连接 - 使用 [ln](#ln)
@ -129,16 +87,16 @@ dr-xr-xr-x 4 root root 4096 Apr 19 2012 boot
- 查找命令的绝对路径 - 使用 [which](#which) - 查找命令的绝对路径 - 使用 [which](#which)
- 查找命令的程序、源代码等相关文件 - 使用 [whereis](#whereis) - 查找命令的程序、源代码等相关文件 - 使用 [whereis](#whereis)
### 文件和目录通用管理 ### 2.3. 文件和目录通用管理
- 复制文件或目录 - 使用 [cp](#cp) - 复制文件或目录 - 使用 [cp](#cp)
- 复制文件或目录到远程服务器 - 使用 [scp](#scp) - 复制文件或目录到远程服务器 - 使用 [scp](#scp)
- 移动文件或目录 - 使用 [mv](#mv) - 移动文件或目录 - 使用 [mv](#mv)
- 删除文件或目录 - 使用 [rm](#rm) - 删除文件或目录 - 使用 [rm](#rm)
## 命令常见用法 ## 3. 命令常见用法
### cd ### 3.1. cd
> cd 命令用来切换工作目录。 > cd 命令用来切换工作目录。
> >
@ -154,7 +112,7 @@ cd .. # 切换到上级目录
cd ../.. # 切换到上两级目录 cd ../.. # 切换到上两级目录
``` ```
### ls ### 3.2. ls
> ls 命令用来显示目录信息。 > ls 命令用来显示目录信息。
> >
@ -172,13 +130,13 @@ ls -ltr # 按修改时间列出文件和文件夹详细信息
ls --color=auto # 列出文件并标记颜色分类 ls --color=auto # 列出文件并标记颜色分类
``` ```
### pwd ### 3.3. pwd
> pwd 命令用来显示当前目录的绝对路径。 > pwd 命令用来显示当前目录的绝对路径。
> >
> 参考http://man.linuxde.net/pwd > 参考http://man.linuxde.net/pwd
### mkdir ### 3.4. mkdir
> mkdir 命令用来创建目录。 > mkdir 命令用来创建目录。
> >
@ -194,7 +152,7 @@ mkdir -p zp/test
mkdir -p -m 750 zp/test mkdir -p -m 750 zp/test
``` ```
### rmdir ### 3.5. rmdir
> rmdir 命令用来删除空目录。 > rmdir 命令用来删除空目录。
> >
@ -207,7 +165,7 @@ mkdir -p -m 750 zp/test
rmdir -p zp/test rmdir -p zp/test
``` ```
### tree ### 3.6. tree
> tree 命令以树状显示目录的内。 > tree 命令以树状显示目录的内。
> >
@ -234,7 +192,7 @@ tree -L 2 > /home/www/tree.txt # 当前目录结果存到 tree.txt 文件中
tree -I 'node_modules|icon|font' -L 2 tree -I 'node_modules|icon|font' -L 2
``` ```
### touch ### 3.7. touch
> touch 命令有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;二是用来创建空文件。 > touch 命令有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;二是用来创建空文件。
> >
@ -246,7 +204,7 @@ tree -I 'node_modules|icon|font' -L 2
touch ex2 touch ex2
``` ```
### ln ### 3.8. ln
> ln 命令用来为文件创建连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用"-s"选项。 > ln 命令用来为文件创建连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用"-s"选项。
> >
@ -266,7 +224,7 @@ ln /mub1/m2.c /usr/liu/a2.c
ln -s /usr/mengqc/mub1 /usr/liu/abc ln -s /usr/mengqc/mub1 /usr/liu/abc
``` ```
### rename ### 3.9. rename
> rename 命令用字符串替换的方式批量重命名。 > rename 命令用字符串替换的方式批量重命名。
> >
@ -284,7 +242,7 @@ rename "s/$//.txt/" * # 把所有的文件名都以 txt 结尾
rename "s//.txt//" * # 把所有以 .txt 结尾的文件名的.txt 删掉 rename "s//.txt//" * # 把所有以 .txt 结尾的文件名的.txt 删掉
``` ```
### stat ### 3.10. stat
> stat 命令用于显示文件的状态信息。stat 命令的输出信息比 ls 命令的输出信息要更详细。 > stat 命令用于显示文件的状态信息。stat 命令的输出信息比 ls 命令的输出信息要更详细。
> >
@ -296,7 +254,7 @@ rename "s//.txt//" * # 把所有以 .txt 结尾的文件名的.txt
stat myfile stat myfile
``` ```
### file ### 3.11. file
> file 命令用来探测给定文件的类型。file 命令对文件的检查分为文件系统、魔法幻数检查和语言检查 3 个过程。 > file 命令用来探测给定文件的类型。file 命令对文件的检查分为文件系统、魔法幻数检查和语言检查 3 个过程。
> >
@ -311,7 +269,7 @@ file -i install.log # 显示 MIME 类型
file -L /var/spool/mail # 显示符号链接的文件类型 file -L /var/spool/mail # 显示符号链接的文件类型
``` ```
### chmod ### 3.12. chmod
> chmod 命令用来变更文件或目录的权限。在 UNIX 系统家族里,文件或目录权限的控制分别以读取、写入、执行 3 种一般权限来区分,另有 3 种特殊权限可供运用。用户可以使用 chmod 指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。 > chmod 命令用来变更文件或目录的权限。在 UNIX 系统家族里,文件或目录权限的控制分别以读取、写入、执行 3 种一般权限来区分,另有 3 种特殊权限可供运用。用户可以使用 chmod 指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。
> >
@ -350,7 +308,7 @@ chmod a+x f01   # 对文件f01的u,g,o都设置可执行属性
chmod -R 755 /home/wwwroot/* chmod -R 755 /home/wwwroot/*
``` ```
### chown ### 3.13. chown
> chown 命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户 D用户组可以是组名或组 id。文件名可以使由空格分开的文件列表在文件名中可以包含通配符。 > chown 命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户 D用户组可以是组名或组 id。文件名可以使由空格分开的文件列表在文件名中可以包含通配符。
> >
@ -365,7 +323,7 @@ chmod -R 755 /home/wwwroot/*
chown -R liu /usr/meng chown -R liu /usr/meng
``` ```
### locate ### 3.14. locate
> locate 命令和 slocate 命令都用来查找文件或目录。 > locate 命令和 slocate 命令都用来查找文件或目录。
> >
@ -380,7 +338,7 @@ locate pwd # 查找和 pwd 相关的所有文件
locate /etc/sh # 搜索 etc 目录下所有以 sh 开头的文件 locate /etc/sh # 搜索 etc 目录下所有以 sh 开头的文件
``` ```
### find ### 3.15. find
> find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。 > find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
> >
@ -413,7 +371,7 @@ find . -iregex ".*\(\.txt\|\.pdf\)$"
find /home ! -name "*.txt" find /home ! -name "*.txt"
``` ```
### cp ### 3.16. cp
> cp 命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp 命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。 > cp 命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp 命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
> >
@ -421,7 +379,7 @@ find /home ! -name "*.txt"
示例: 示例:
#### 参数 #### 3.16.1. 参数
- 源文件制定源文件列表。默认情况下cp 命令不能复制目录,如果要复制目录,则必须使用`-R`选项; - 源文件制定源文件列表。默认情况下cp 命令不能复制目录,如果要复制目录,则必须使用`-R`选项;
- 目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。 - 目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。
@ -442,7 +400,7 @@ cp -rf /usr/men/* /usr/zh
cp -i /usr/men m*.c /usr/zh cp -i /usr/men m*.c /usr/zh
``` ```
### scp ### 3.17. scp
> scp 命令用于在 Linux 下进行远程拷贝文件的命令,和它类似的命令有 cp不过 cp 只是在本机进行拷贝不能跨服务器,而且 scp 传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system 时,用 scp 可以帮你把文件移出来。另外scp 还非常不占资源不会提高多少系统负荷在这一点上rsync 就远远不及它了。虽然 rsync 比 scp 会快一点但当小文件众多的情况下rsync 会导致硬盘 I/O 非常高,而 scp 基本不影响系统正常使用。 > scp 命令用于在 Linux 下进行远程拷贝文件的命令,和它类似的命令有 cp不过 cp 只是在本机进行拷贝不能跨服务器,而且 scp 传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system 时,用 scp 可以帮你把文件移出来。另外scp 还非常不占资源不会提高多少系统负荷在这一点上rsync 就远远不及它了。虽然 rsync 比 scp 会快一点但当小文件众多的情况下rsync 会导致硬盘 I/O 非常高,而 scp 基本不影响系统正常使用。
@ -458,7 +416,7 @@ scp -r <folder> <user>@<ip>:<url>
scp -r test root@192.168.0.1:/opt scp -r test root@192.168.0.1:/opt
``` ```
#### 免密码传输 #### 3.17.1. 免密码传输
1生成 ssh 公私钥对 1生成 ssh 公私钥对
@ -477,7 +435,7 @@ cat ~/.ssh/id_rsa.pub.tmp >> ~/.ssh/authorized_keys
rm ~/.ssh/id_rsa.pub.tmp rm ~/.ssh/id_rsa.pub.tmp
``` ```
### mv ### 3.18. mv
> mv 命令用来对文件或目录重新命名或者将文件从一个目录移到另一个目录中。source 表示源文件或目录target 表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。 > mv 命令用来对文件或目录重新命名或者将文件从一个目录移到另一个目录中。source 表示源文件或目录target 表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。
> >
@ -503,7 +461,7 @@ mv -f *.txt /home/office # 无条件覆盖已经存在的文件
mv -bv *.txt /home/office # 复制时创建备份 mv -bv *.txt /home/office # 复制时创建备份
``` ```
### rm ### 3.19. rm
> rm 命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。 > rm 命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。
> >

View File

@ -1,34 +1,8 @@
---
title: Linux 用户管理
date: 2018-02-27
categories:
- linux
tags:
- linux
- command
---
# Linux 用户管理 # Linux 用户管理
> 关键词:`groupadd`, `groupdel`, `groupmod`, `useradd`, `userdel`, `usermod`, `passwd`, `su`, `sudo` > 关键词:`groupadd`, `groupdel`, `groupmod`, `useradd`, `userdel`, `usermod`, `passwd`, `su`, `sudo`
<!-- TOC depthFrom:2 depthTo:3 --> ## 1. Linux 用户管理要点
- [Linux 用户管理要点](#linux-用户管理要点)
- [命令常见用法](#命令常见用法)
- [groupadd](#groupadd)
- [groupdel](#groupdel)
- [groupmod](#groupmod)
- [useradd](#useradd)
- [userdel](#userdel)
- [usermod](#usermod)
- [passwd](#passwd)
- [su](#su)
- [sudo](#sudo)
<!-- /TOC -->
## Linux 用户管理要点
- 创建用户组 - 使用 [groupadd](#groupadd) - 创建用户组 - 使用 [groupadd](#groupadd)
- 删除用户组 - 使用 [groupdel](#groupdel) - 删除用户组 - 使用 [groupdel](#groupdel)
@ -40,9 +14,9 @@ tags:
- 切换用户 - 使用 [su](#su) - 切换用户 - 使用 [su](#su)
- 当前用户想执行没有权限执行的命令时,使用其他用户身份去执行 - 使用 [sudo](#sudo) - 当前用户想执行没有权限执行的命令时,使用其他用户身份去执行 - 使用 [sudo](#sudo)
## 命令常见用法 ## 2. 命令常见用法
### groupadd ### 2.1. groupadd
> groupadd 命令用于创建一个新的用户组,新用户组的信息将被添加到系统文件中。 > groupadd 命令用于创建一个新的用户组,新用户组的信息将被添加到系统文件中。
> >
@ -55,7 +29,7 @@ tags:
$ groupadd -g 344 jsdigname $ groupadd -g 344 jsdigname
``` ```
### groupdel ### 2.2. groupdel
> groupdel 命令用于删除指定的用户组,本命令要修改的系统文件包括 `/ect/group``/ect/gshadow`。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。 > groupdel 命令用于删除指定的用户组,本命令要修改的系统文件包括 `/ect/group``/ect/gshadow`。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。
> >
@ -68,13 +42,13 @@ $ groupadd damon # 创建damon用户组
$ groupdel damon # 删除这个用户组 $ groupdel damon # 删除这个用户组
``` ```
### groupmod ### 2.3. groupmod
> groupmod 命令更改群组识别码或名称。需要更改群组的识别码或名称时,可用 groupmod 指令来完成这项工作。 > groupmod 命令更改群组识别码或名称。需要更改群组的识别码或名称时,可用 groupmod 指令来完成这项工作。
> >
> 参考http://man.linuxde.net/groupmod > 参考http://man.linuxde.net/groupmod
### useradd ### 2.4. useradd
> useradd 命令用于 Linux 中创建的新的系统用户。useradd 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码.而可用 userdel 删除帐号。使用 useradd 指令所建立的帐号,实际上是保存在 `/etc/passwd` 文本文件中。 > useradd 命令用于 Linux 中创建的新的系统用户。useradd 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码.而可用 userdel 删除帐号。使用 useradd 指令所建立的帐号,实际上是保存在 `/etc/passwd` 文本文件中。
> >
@ -90,7 +64,7 @@ $ useradd g sales jack G company,employees # -g加入主要组、-G
$ useradd caojh -u 544 $ useradd caojh -u 544
``` ```
### userdel ### 2.5. userdel
> userdel 命令用于删除给定的用户,以及与用户相关的文件。若不加选项,则仅删除用户帐号,而不删除相关文件。 > userdel 命令用于删除给定的用户,以及与用户相关的文件。若不加选项,则仅删除用户帐号,而不删除相关文件。
> >
@ -105,7 +79,7 @@ $ userdel linuxde # 删除用户linuxde但不删除其家目录及文
$ userdel -r linuxde # 删除用户linuxde其 home 目录及文件一并删除; $ userdel -r linuxde # 删除用户linuxde其 home 目录及文件一并删除;
``` ```
### usermod ### 2.6. usermod
> usermod 命令用于修改用户的基本信息。usermod 命令不允许你改变正在线上的使用者帐号名称。当 usermod 命令用来改变 user id必须确认这名 user 没在电脑上执行任何程序。你需手动更改使用者的 crontab 档。也需手动更改使用者的 at 工作档。采用 NIS server 须在 server 上更动相关的 NIS 设定。 > usermod 命令用于修改用户的基本信息。usermod 命令不允许你改变正在线上的使用者帐号名称。当 usermod 命令用来改变 user id必须确认这名 user 没在电脑上执行任何程序。你需手动更改使用者的 crontab 档。也需手动更改使用者的 at 工作档。采用 NIS server 须在 server 上更动相关的 NIS 设定。
> >
@ -127,7 +101,7 @@ $ usermod -L newuser1
$ usermod -U newuser1 $ usermod -U newuser1
``` ```
### passwd ### 2.7. passwd
> passwd 命令用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。 > passwd 命令用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。
> >
@ -172,7 +146,7 @@ $ passwd -S linuxde # 查询linuxde用户密码状态
Empty password. # 空密码,也就是没有密码; Empty password. # 空密码,也就是没有密码;
``` ```
### su ### 2.8. su
> su 命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。 > su 命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。
> >
@ -191,7 +165,7 @@ $ su root -f
$ su -test $ su -test
``` ```
### sudo ### 2.9. sudo
> sudo 命令用来以其他身份来执行命令,预设的身份为 root。在 `/etc/sudoers` 中设置了可执行 sudo 指令的用户。若其未经授权的用户企图使用 sudo则会发出警告的邮件给管理员。用户使用 sudo 时,必须先输入密码,之后有 5 分钟的有效期限,超过期限则必须重新输入密码。 > sudo 命令用来以其他身份来执行命令,预设的身份为 root。在 `/etc/sudoers` 中设置了可执行 sudo 指令的用户。若其未经授权的用户企图使用 sudo则会发出警告的邮件给管理员。用户使用 sudo 时,必须先输入密码,之后有 5 分钟的有效期限,超过期限则必须重新输入密码。
> >
@ -208,14 +182,14 @@ $ sudo -l
$ sudo -L $ sudo -L
``` ```
#### 给普通用户授权 sudo #### 2.9.1. 给普通用户授权 sudo
假设要给普通用户 mary 配置 sudo 权限: 假设要给普通用户 mary 配置 sudo 权限:
1. `/etc/sudoers` 文件存放了 sudo 的相关用户,但是默认是没有写权限的,所以需要设为可写:`chmod u+w /etc/sudoers` 1. `/etc/sudoers` 文件存放了 sudo 的相关用户,但是默认是没有写权限的,所以需要设为可写:`chmod u+w /etc/sudoers`
2. 在该文件中添加 `mary ALL=(ALL) ALL` ,保存并退出,让 mary 具有 sudo 的所有权限 2. 在该文件中添加 `mary ALL=(ALL) ALL` ,保存并退出,让 mary 具有 sudo 的所有权限
3. 再将 `/etc/sudoers` 的权限恢复到默认状态:`chmod u-w /etc/sudoers` 3. 再将 `/etc/sudoers` 的权限恢复到默认状态:`chmod u-w /etc/sudoers`
#### 免密码授权 sudo #### 2.9.2. 免密码授权 sudo
与给普通用户授权 sudo 类似,区别仅在于第 2 步:`mary ALL=(ALL) NOPASSWD: ALL`。 与给普通用户授权 sudo 类似,区别仅在于第 2 步:`mary ALL=(ALL) NOPASSWD: ALL`。

View File

@ -1,30 +1,8 @@
---
title: Linux 硬件管理
date: 2018-02-27
categories:
- linux
tags:
- linux
- command
---
# Linux 硬件管理 # Linux 硬件管理
> 关键词:`df`, `du`, `top`, `free`, `iotop` > 关键词:`df`, `du`, `top`, `free`, `iotop`
<!-- TOC depthFrom:2 depthTo:3 --> ## 1. Linux 硬件管理要点
- [Linux 硬件管理要点](#linux-硬件管理要点)
- [命令常见用法](#命令常见用法)
- [df](#df)
- [du](#du)
- [top](#top)
- [free](#free)
- [iotop](#iotop)
<!-- /TOC -->
## Linux 硬件管理要点
- 查看磁盘空间 - 使用 [df](#df) - 查看磁盘空间 - 使用 [df](#df)
- 查看文件或目录的磁盘空间 - 使用 [du](#du) - 查看文件或目录的磁盘空间 - 使用 [du](#du)
@ -32,9 +10,9 @@ tags:
- 查看已使用和未使用的内存 - 使用 [free](#free) - 查看已使用和未使用的内存 - 使用 [free](#free)
- 查看磁盘 I/O 使用状况 - 使用 [iotop](#iotop) - 查看磁盘 I/O 使用状况 - 使用 [iotop](#iotop)
## 命令常见用法 ## 2. 命令常见用法
### df ### 2.1. df
> df 命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为 KB。可以利用该命令来获取硬盘被占用了多少空间目前还剩下多少空间等信息。 > df 命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为 KB。可以利用该命令来获取硬盘被占用了多少空间目前还剩下多少空间等信息。
> >
@ -72,7 +50,7 @@ tmpfs 1032204 0 1032204 0% /dev/shm
none 0 0 0 - /proc/sys/fs/binfmt_misc none 0 0 0 - /proc/sys/fs/binfmt_misc
``` ```
### du ### 2.2. du
> du 命令也是查看使用空间的,但是与 df 命令不同的是du 命令是对文件和目录磁盘使用的空间的查看,还是和 df 命令有一些区别的。 > du 命令也是查看使用空间的,但是与 df 命令不同的是du 命令是对文件和目录磁盘使用的空间的查看,还是和 df 命令有一些区别的。
> >
@ -124,13 +102,13 @@ root@localhost [test]# du
32 scf 32 scf
``` ```
### top ### 2.3. top
> top 命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过 top 命令所提供的互动式界面,用热键可以管理。 > top 命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过 top 命令所提供的互动式界面,用热键可以管理。
> >
> 参考http://man.linuxde.net/top > 参考http://man.linuxde.net/top
### free ### 2.4. free
> free 命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。 > free 命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。
> >
@ -151,7 +129,7 @@ Mem: 2016 1973 42 0 163 1497
Swap: 4094 0 4094 Swap: 4094 0 4094
``` ```
### iotop ### 2.5. iotop
> iotop 命令是一个用来监视磁盘 I/O 使用状况的 top 类工具。iotop 具有与 top 相似的 UI其中包括 PID、用户、I/O、进程等相关信息。Linux 下的 IO 统计工具如 iostatnmon 等大多数是只能统计到 per 设备的读写情况,如果你想知道每个进程是如何使用 IO 的就比较麻烦,使用 iotop 命令可以很方便的查看。 > iotop 命令是一个用来监视磁盘 I/O 使用状况的 top 类工具。iotop 具有与 top 相似的 UI其中包括 PID、用户、I/O、进程等相关信息。Linux 下的 IO 统计工具如 iostatnmon 等大多数是只能统计到 per 设备的读写情况,如果你想知道每个进程是如何使用 IO 的就比较麻烦,使用 iotop 命令可以很方便的查看。
> >

View File

@ -1,37 +1,8 @@
---
title: Linux 系统管理
date: 2018-02-27
categories:
- linux
tags:
- linux
- command
---
# Linux 系统管理 # Linux 系统管理
> 关键词:`lsb_release`, `reboot`, `exit`, `shutdown`, `date`, `mount`, `umount`, `ps`, `kill`, `systemctl`, `service`, `crontab` > 关键词:`lsb_release`, `reboot`, `exit`, `shutdown`, `date`, `mount`, `umount`, `ps`, `kill`, `systemctl`, `service`, `crontab`
<!-- TOC depthFrom:2 depthTo:3 --> ## 1. Linux 系统管理要点
- [Linux 系统管理要点](#linux-系统管理要点)
- [命令常见用法](#命令常见用法)
- [lsb_release](#lsb_release)
- [reboot](#reboot)
- [exit](#exit)
- [shutdown](#shutdown)
- [date](#date)
- [mount](#mount)
- [umount](#umount)
- [ps](#ps)
- [kill](#kill)
- [systemctl](#systemctl)
- [service](#service)
- [crontab](#crontab)
<!-- /TOC -->
## Linux 系统管理要点
- 查看 Linux 系统发行版本 - 查看 Linux 系统发行版本
- 使用 [lsb_release](#lsb_release)(此命令适用于所有的 Linux 发行版本) - 使用 [lsb_release](#lsb_release)(此命令适用于所有的 Linux 发行版本)
@ -49,9 +20,9 @@ tags:
- 启动、停止、重启、关闭、显示系统服务Centos7 以前),使用 [service](#service) - 启动、停止、重启、关闭、显示系统服务Centos7 以前),使用 [service](#service)
- 管理需要周期性执行的任务,使用 [crontab](#crontab) - 管理需要周期性执行的任务,使用 [crontab](#crontab)
## 命令常见用法 ## 2. 命令常见用法
### lsb_release ### 2.1. lsb_release
lsb_release 不是 bash 默认命令,如果要使用,需要先安装。 lsb_release 不是 bash 默认命令,如果要使用,需要先安装。
@ -60,7 +31,7 @@ lsb_release 不是 bash 默认命令,如果要使用,需要先安装。
1. 执行 `yum provides lsb_release`,查看支持 lsb_release 命令的包。 1. 执行 `yum provides lsb_release`,查看支持 lsb_release 命令的包。
2. 选择合适版本,执行类似这样的安装命令:`yum install -y redhat-lsb-core-4.1-27.el7.centos.1.x86_64` 2. 选择合适版本,执行类似这样的安装命令:`yum install -y redhat-lsb-core-4.1-27.el7.centos.1.x86_64`
### reboot ### 2.2. reboot
> reboot 命令用来重新启动正在运行的 Linux 操作系统。 > reboot 命令用来重新启动正在运行的 Linux 操作系统。
> >
@ -73,7 +44,7 @@ reboot # 重开机。
reboot -w # 做个重开机的模拟(只有纪录并不会真的重开机)。 reboot -w # 做个重开机的模拟(只有纪录并不会真的重开机)。
``` ```
### exit ### 2.3. exit
> exit 命令同于退出 shell并返回给定值。在 shell 脚本中可以终止当前脚本执行。执行 exit 可使 shell 以指定的状态值退出。若不设置状态值参数,则 shell 以预设值退出。状态值 0 代表执行成功,其他值代表执行失败。 > exit 命令同于退出 shell并返回给定值。在 shell 脚本中可以终止当前脚本执行。执行 exit 可使 shell 以指定的状态值退出。若不设置状态值参数,则 shell 以预设值退出。状态值 0 代表执行成功,其他值代表执行失败。
> >
@ -106,7 +77,7 @@ if [ "$EXCODE" == "0" ]; then
fi fi
``` ```
### shutdown ### 2.4. shutdown
> shutdown 命令用来系统关机命令。shutdown 指令可以关闭所有程序,并依用户的需要,进行重新开机或关机的动作。 > shutdown 命令用来系统关机命令。shutdown 指令可以关闭所有程序,并依用户的需要,进行重新开机或关机的动作。
> >
@ -122,7 +93,7 @@ shutdown -h now
shutdown +5 "System will shutdown after 5 minutes" shutdown +5 "System will shutdown after 5 minutes"
``` ```
### date ### 2.5. date
> date 命令是显示或设置系统时间与日期。 > date 命令是显示或设置系统时间与日期。
> >
@ -188,7 +159,7 @@ difference=$(( end - start ))
echo $difference seconds. echo $difference seconds.
``` ```
### mount ### 2.6. mount
> mount 命令用于挂载文件系统到指定的挂载点。此命令的最常用于挂载 cdrom使我们可以访问 cdrom 中的数据,因为你将光盘插入 cdrom 中Linux 并不会自动挂载,必须使用 Linux mount 命令来手动完成挂载。 > mount 命令用于挂载文件系统到指定的挂载点。此命令的最常用于挂载 cdrom使我们可以访问 cdrom 中的数据,因为你将光盘插入 cdrom 中Linux 并不会自动挂载,必须使用 Linux mount 命令来手动完成挂载。
> >
@ -208,7 +179,7 @@ mount -o ro /dev/hda1 /mnt
mount -o loop /tmp/image.iso /mnt/cdrom mount -o loop /tmp/image.iso /mnt/cdrom
``` ```
### umount ### 2.7. umount
> umount 命令用于卸载已经挂载的文件系统。利用设备名或挂载点都能 umount 文件系统,不过最好还是通过挂载点卸载,以免使用绑定挂载(一个设备,多个挂载点)时产生混乱。 > umount 命令用于卸载已经挂载的文件系统。利用设备名或挂载点都能 umount 文件系统,不过最好还是通过挂载点卸载,以免使用绑定挂载(一个设备,多个挂载点)时产生混乱。
> >
@ -226,7 +197,7 @@ umount -v /mnt/mymount/
/tmp/diskboot.img umounted /tmp/diskboot.img umounted
``` ```
### ps ### 2.8. ps
> ps 命令用于报告当前系统的进程状态。可以搭配 kill 指令随时中断、删除不必要的程序。ps 命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。 > ps 命令用于报告当前系统的进程状态。可以搭配 kill 指令随时中断、删除不必要的程序。ps 命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。
> >
@ -242,7 +213,7 @@ ps aux | sort -rnk 4
ps aux | sort -nk 3 ps aux | sort -nk 3
``` ```
### kill ### 2.9. kill
> kill 命令用来删除执行中的程序或工作。kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。程序或工作的编号可利用 ps 指令或 job 指令查看。 > kill 命令用来删除执行中的程序或工作。kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。程序或工作的编号可利用 ps 指令或 job 指令查看。
> >
@ -280,7 +251,7 @@ kill 3268
-bash: kill: (3268) - 没有那个进程 -bash: kill: (3268) - 没有那个进程
``` ```
### systemctl ### 2.10. systemctl
> systemctl 命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。 > systemctl 命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。
> >
@ -316,7 +287,7 @@ sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service sudo systemctl disable firewalld.service
``` ```
### service ### 2.11. service
> service 命令是 Redhat Linux 兼容的发行版中用来控制系统服务的实用工具,它以启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。 > service 命令是 Redhat Linux 兼容的发行版中用来控制系统服务的实用工具,它以启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。
> >
@ -339,7 +310,7 @@ service network restart
弹出界面 eth0 [ 确定 ] 弹出界面 eth0 [ 确定 ]
``` ```
### crontab ### 2.12. crontab
> crontab 命令被用来提交和管理用户的需要周期性执行的任务,与 windows 下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动 crond 进程crond 进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。 > crontab 命令被用来提交和管理用户的需要周期性执行的任务,与 windows 下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动 crond 进程crond 进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
> >

View File

@ -1,42 +1,8 @@
---
title: Linux 网络管理
date: 2018-02-27
categories:
- linux
tags:
- linux
- command
---
# Linux 网络管理 # Linux 网络管理
> 关键词:`curl`, `wget`, `telnet`, `ip`, `hostname`, `ifconfig`, `route`, `ssh`, `ssh-keygen`, `firewalld`, `iptables`, `host`, `nslookup`, `nc`/`netcat`, `ping`, `traceroute`, `netstat` > 关键词:`curl`, `wget`, `telnet`, `ip`, `hostname`, `ifconfig`, `route`, `ssh`, `ssh-keygen`, `firewalld`, `iptables`, `host`, `nslookup`, `nc`/`netcat`, `ping`, `traceroute`, `netstat`
<!-- TOC depthFrom:2 depthTo:3 --> ## 1. Linux 网络应用要点
- [Linux 网络应用要点](#linux-网络应用要点)
- [命令常见用法](#命令常见用法)
- [curl](#curl)
- [wget](#wget)
- [telnet](#telnet)
- [ip](#ip)
- [hostname](#hostname)
- [ifconfig](#ifconfig)
- [route](#route)
- [ssh](#ssh)
- [ssh-keygen](#ssh-keygen)
- [firewalld](#firewalld)
- [iptables](#iptables)
- [host](#host)
- [nslookup](#nslookup)
- [nc/netcat](#ncnetcat)
- [ping](#ping)
- [traceroute](#traceroute)
- [netstat](#netstat)
<!-- /TOC -->
## Linux 网络应用要点
- 下载文件 - 使用 [curl](#curl)、[wget](#wget) - 下载文件 - 使用 [curl](#curl)、[wget](#wget)
- telnet 方式登录远程主机,对远程主机进行管理 - 使用 [telnet](#telnet) - telnet 方式登录远程主机,对远程主机进行管理 - 使用 [telnet](#telnet)
@ -54,9 +20,9 @@ tags:
- 追踪数据在网络上的传输时的全部路径 - 使用 [traceroute](#traceroute) - 追踪数据在网络上的传输时的全部路径 - 使用 [traceroute](#traceroute)
- 查看当前工作的端口信息 - 使用 [netstat](#netstat) - 查看当前工作的端口信息 - 使用 [netstat](#netstat)
## 命令常见用法 ## 2. 命令常见用法
### curl ### 2.1. curl
> curl 命令是一个利用 URL 规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称 curl 为下载工具。作为一款强力工具curl 支持包括 HTTP、HTTPS、ftp 等众多协议,还支持 POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化curl 可以祝一臂之力。 > curl 命令是一个利用 URL 规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称 curl 为下载工具。作为一款强力工具curl 支持包括 HTTP、HTTPS、ftp 等众多协议,还支持 POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化curl 可以祝一臂之力。
> >
@ -73,7 +39,7 @@ $ curl http://man.linuxde.net/test.iso -o filename.iso --progress
########################################## 100.0% ########################################## 100.0%
``` ```
### wget ### 2.2. wget
> wget 命令用来从指定的 URL 下载文件。 > wget 命令用来从指定的 URL 下载文件。
> >
@ -86,7 +52,7 @@ $ curl http://man.linuxde.net/test.iso -o filename.iso --progress
$ wget http://www.linuxde.net/testfile.zip $ wget http://www.linuxde.net/testfile.zip
``` ```
### telnet ### 2.3. telnet
> telnet 命令用于登录远程主机,对远程主机进行管理。 > telnet 命令用于登录远程主机,对远程主机进行管理。
> >
@ -107,7 +73,7 @@ Password:
Login incorrect Login incorrect
``` ```
### ip ### 2.4. ip
> ip 命令用来查看或操纵 Linux 主机的路由、网络设备、策略路由和隧道,是 Linux 下较新的功能强大的网络配置工具。 > ip 命令用来查看或操纵 Linux 主机的路由、网络设备、策略路由和隧道,是 Linux 下较新的功能强大的网络配置工具。
> >
@ -137,7 +103,7 @@ $ ip route del default # 删除默认路由
$ ip route delete 192.168.1.0/24 dev eth0 # 删除路由 $ ip route delete 192.168.1.0/24 dev eth0 # 删除路由
``` ```
### hostname ### 2.5. hostname
> hostname 命令用于查看和设置系统的主机名称。环境变量 HOSTNAME 也保存了当前的主机名。在使用 hostname 命令设置主机名后,系统并不会永久保存新的主机名,重新启动机器之后还是原来的主机名。如果需要永久修改主机名,需要同时修改 `/etc/hosts``/etc/sysconfig/network` 的相关内容。 > hostname 命令用于查看和设置系统的主机名称。环境变量 HOSTNAME 也保存了当前的主机名。在使用 hostname 命令设置主机名后,系统并不会永久保存新的主机名,重新启动机器之后还是原来的主机名。如果需要永久修改主机名,需要同时修改 `/etc/hosts``/etc/sysconfig/network` 的相关内容。
> >
@ -150,7 +116,7 @@ $ hostname
AY1307311912260196fcZ AY1307311912260196fcZ
``` ```
### ifconfig ### 2.6. ifconfig
> ifconfig 命令被用于查看和配置 Linux 内核中网络接口的网络参数。用 ifconfig 命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。 > ifconfig 命令被用于查看和配置 Linux 内核中网络接口的网络参数。用 ifconfig 命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。
> >
@ -178,7 +144,7 @@ lo Link encap:Local Loopback
RX bytes:5079451 (4.8 MiB) TX bytes:5079451 (4.8 MiB) RX bytes:5079451 (4.8 MiB) TX bytes:5079451 (4.8 MiB)
``` ```
### route ### 2.7. route
> route 命令用来查看和设置 Linux 内核中的网络路由表route 命令设置的路由主要是静态路由。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。 > route 命令用来查看和设置 Linux 内核中的网络路由表route 命令设置的路由主要是静态路由。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。
> >
@ -205,7 +171,7 @@ route add default gw 192.168.120.240 # 添加默认网关
route del default gw 192.168.120.240 # 删除默认网关 route del default gw 192.168.120.240 # 删除默认网关
``` ```
### ssh ### 2.8. ssh
> ssh 命令是 openssh 套件中的客户端连接工具,可以给予 ssh 加密协议实现安全的远程登录服务器。 > ssh 命令是 openssh 套件中的客户端连接工具,可以给予 ssh 加密协议实现安全的远程登录服务器。
> >
@ -222,19 +188,19 @@ ssh -p 2211 root@140.206.185.170
引申阅读:[ssh 背后的故事](https://linux.cn/article-8476-1.html) 引申阅读:[ssh 背后的故事](https://linux.cn/article-8476-1.html)
### ssh-keygen ### 2.9. ssh-keygen
> ssh-keygen 命令用于为 ssh 生成、管理和转换认证密钥,它支持 RSA 和 DSA 两种认证密钥。 > ssh-keygen 命令用于为 ssh 生成、管理和转换认证密钥,它支持 RSA 和 DSA 两种认证密钥。
> >
> 参考http://man.linuxde.net/ssh-keygen > 参考http://man.linuxde.net/ssh-keygen
### firewalld ### 2.10. firewalld
> firewalld 命令是 Linux 上的防火墙软件Centos7 默认防火墙)。 > firewalld 命令是 Linux 上的防火墙软件Centos7 默认防火墙)。
> >
> 参考https://www.cnblogs.com/moxiaoan/p/5683743.html > 参考https://www.cnblogs.com/moxiaoan/p/5683743.html
#### firewalld 的基本使用 #### 2.10.1. firewalld 的基本使用
- 启动 - systemctl start firewalld - 启动 - systemctl start firewalld
- 关闭 - systemctl stop firewalld - 关闭 - systemctl stop firewalld
@ -242,7 +208,7 @@ ssh -p 2211 root@140.206.185.170
- 开机禁用 - systemctl disable firewalld - 开机禁用 - systemctl disable firewalld
- 开机启用 - systemctl enable firewalld - 开机启用 - systemctl enable firewalld
#### 使用 systemctl 管理 firewalld 服务 #### 2.10.2. 使用 systemctl 管理 firewalld 服务
systemctl 是 CentOS7 的服务管理工具中主要的工具,它融合之前 service 和 chkconfig 的功能于一体。 systemctl 是 CentOS7 的服务管理工具中主要的工具,它融合之前 service 和 chkconfig 的功能于一体。
@ -256,7 +222,7 @@ systemctl 是 CentOS7 的服务管理工具中主要的工具,它融合之前
- 查看已启动的服务列表 - systemctl list-unit-files|grep enabled - 查看已启动的服务列表 - systemctl list-unit-files|grep enabled
- 查看启动失败的服务列表 - systemctl --failed - 查看启动失败的服务列表 - systemctl --failed
#### 配置 firewalld-cmd #### 2.10.3. 配置 firewalld-cmd
- 查看版本 - firewall-cmd --version - 查看版本 - firewall-cmd --version
- 查看帮助 - firewall-cmd --help - 查看帮助 - firewall-cmd --help
@ -269,14 +235,14 @@ systemctl 是 CentOS7 的服务管理工具中主要的工具,它融合之前
- 取消拒绝状态 - firewall-cmd --panic-off - 取消拒绝状态 - firewall-cmd --panic-off
- 查看是否拒绝 - firewall-cmd --query-panic - 查看是否拒绝 - firewall-cmd --query-panic
#### 在防火墙中开放一个端口 #### 2.10.4. 在防火墙中开放一个端口
- 添加(--permanent 永久生效,没有此参数重启后失效) - firewall-cmd --zone=public --add-port=80/tcp --permanent - 添加(--permanent 永久生效,没有此参数重启后失效) - firewall-cmd --zone=public --add-port=80/tcp --permanent
- 重新载入 - firewall-cmd --reload - 重新载入 - firewall-cmd --reload
- 查看 - firewall-cmd --zone= public --query-port=80/tcp - 查看 - firewall-cmd --zone= public --query-port=80/tcp
- 删除 - firewall-cmd --zone= public --remove-port=80/tcp --permanent - 删除 - firewall-cmd --zone= public --remove-port=80/tcp --permanent
### iptables ### 2.11. iptables
> iptables 命令是 Linux 上常用的防火墙软件,是 netfilter 项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。 > iptables 命令是 Linux 上常用的防火墙软件,是 netfilter 项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。
> >
@ -320,7 +286,7 @@ Chain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes)
5075 589K ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0 5075 589K ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0
``` ```
### host ### 2.12. host
> host 命令是常用的分析域名查询工具,可以用来测试域名系统工作是否正常。 > host 命令是常用的分析域名查询工具,可以用来测试域名系统工作是否正常。
> >
@ -347,7 +313,7 @@ www.jsdig.com. 463 IN CNAME host.1.jsdig.com.
Received 54 bytes from 202.96.104.15#53 in 0 ms Received 54 bytes from 202.96.104.15#53 in 0 ms
``` ```
### nslookup ### 2.13. nslookup
> nslookup 命令是常用域名查询工具,就是查 DNS 信息用的命令。 > nslookup 命令是常用域名查询工具,就是查 DNS 信息用的命令。
> >
@ -366,7 +332,7 @@ Name: host.1.jsdig.com
Address: 100.42.212.8 Address: 100.42.212.8
``` ```
### nc/netcat ### 2.14. nc/netcat
> nc 命令是 netcat 命令的简称,都是用来设置路由器。 > nc 命令是 netcat 命令的简称,都是用来设置路由器。
> >
@ -386,7 +352,7 @@ Address: 100.42.212.8
[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.1 1-1000 # 扫描192.168.0.3 的端口 范围是 1-1000
``` ```
### ping ### 2.15. ping
> ping 命令用来测试主机之间网络的连通性。执行 ping 指令会使用 ICMP 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。 > ping 命令用来测试主机之间网络的连通性。执行 ping 指令会使用 ICMP 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
> >
@ -408,7 +374,7 @@ PING host.1.jsdig.com (100.42.212.8) 56(84) bytes of data.
rtt min/avg/max/mdev = 174.068/176.916/178.182/1.683 ms rtt min/avg/max/mdev = 174.068/176.916/178.182/1.683 ms
``` ```
### traceroute ### 2.16. traceroute
> traceroute 命令用于追踪数据包在网络上的传输时的全部路径,它默认发送的数据包大小是 40 字节。 > traceroute 命令用于追踪数据包在网络上的传输时的全部路径,它默认发送的数据包大小是 40 字节。
> >
@ -433,7 +399,7 @@ traceroute to www.58.com (211.151.111.30), 30 hops max, 40 byte packets
12 211.151.111.30 (211.151.111.30) 35.161 ms 35.938 ms 36.005 ms 12 211.151.111.30 (211.151.111.30) 35.161 ms 35.938 ms 36.005 ms
``` ```
### netstat ### 2.17. netstat
> netstat 命令用来打印 Linux 中网络系统的状态信息,可让你得知整个 Linux 系统的网络情况。 > netstat 命令用来打印 Linux 中网络系统的状态信息,可让你得知整个 Linux 系统的网络情况。
> >

View File

@ -1,27 +1,8 @@
---
title: Linux 软件管理
date: 2018-02-26
categories:
- linux
tags:
- linux
---
# Linux 软件管理 # Linux 软件管理
> 关键词:`rpm`, `yum`, `apt-get` > 关键词:`rpm`, `yum`, `apt-get`
<!-- TOC depthFrom:2 depthTo:3 --> ## 1. rpm
- [rpm](#rpm)
- [yum](#yum)
- [yum 源](#yum-源)
- [apt-get](#apt-get)
- [参考资料](#参考资料)
<!-- /TOC -->
## rpm
> rpm 命令是 RPM 软件包的管理工具。rpm 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便因而广受欢迎。逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。 > rpm 命令是 RPM 软件包的管理工具。rpm 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便因而广受欢迎。逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。
> >
@ -83,7 +64,7 @@ rpm -e proftpd-1
rpm -qa # 列出所有安装过的包 rpm -qa # 列出所有安装过的包
``` ```
## yum ## 2. yum
> yum 命令是在 Fedora 和 RedHat 以及 SUSE 中基于 rpm 的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理 RPM 软件包,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。 > yum 命令是在 Fedora 和 RedHat 以及 SUSE 中基于 rpm 的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理 RPM 软件包,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
> >
@ -141,7 +122,7 @@ yum clean headers #清除缓存目录下的 headers
yum clean oldheaders #清除缓存目录下旧的 headers yum clean oldheaders #清除缓存目录下旧的 headers
``` ```
### yum 源 ### 2.1. yum 源
yum 的默认源是国外的,下载速度比较慢,所以最好替换为一个国内的 yum 源。 yum 的默认源是国外的,下载速度比较慢,所以最好替换为一个国内的 yum 源。
@ -161,7 +142,7 @@ yum clean all
yum makecache yum makecache
``` ```
## apt-get ## 3. apt-get
> apt-get 命令是 Debian Linux 发行版中的 APT 软件包管理工具。所有基于 Debian 的发行都使用这个包管理系统。deb 包可以把一个应用的文件包在一起,大体就如同 Windows 上的安装文件。 > apt-get 命令是 Debian Linux 发行版中的 APT 软件包管理工具。所有基于 Debian 的发行都使用这个包管理系统。deb 包可以把一个应用的文件包在一起,大体就如同 Windows 上的安装文件。
> >
@ -202,7 +183,7 @@ apt-get upgrade
apt-get dist-upgrade apt-get dist-upgrade
``` ```
## 参考资料 ## 4. 参考资料
- http://man.linuxde.net/rpm - http://man.linuxde.net/rpm
- http://man.linuxde.net/yum - http://man.linuxde.net/yum

View File

@ -1,7 +1,6 @@
> 转载自 https://github.com/jlevy/the-art-of-command-line > 转载自 https://github.com/jlevy/the-art-of-command-line
*[Čeština](README-cs.md) ∙ [Deutsch](README-de.md) ∙ [Ελληνικά](README-el.md) ∙ [English](../README.md) ∙ [Español](README-es.md) ∙ [Français](README-fr.md) ∙ [Indonesia](README-id.md) ∙ [Italiano](README-it.md) ∙ [日本語](README-ja.md) ∙ [한국어](README-ko.md) ∙ [Português](README-pt.md) ∙ [Română](README-ro.md) ∙ [Русский](README-ru.md) ∙ [Slovenščina](README-sl.md) ∙ [Українська](README-uk.md) ∙ [简体中文](README-zh.md) ∙ [繁體中文](README-zh-Hant.md)*
_[Čeština](README-cs.md) ∙ [Deutsch](README-de.md) ∙ [Ελληνικά](README-el.md) ∙ [English](../README.md) ∙ [Español](README-es.md) ∙ [Français](README-fr.md) ∙ [Indonesia](README-id.md) ∙ [Italiano](README-it.md) ∙ [日本語](README-ja.md) ∙ [한국어](README-ko.md) ∙ [Português](README-pt.md) ∙ [Română](README-ro.md) ∙ [Русский](README-ru.md) ∙ [Slovenščina](README-sl.md) ∙ [Українська](README-uk.md) ∙ [简体中文](README-zh.md) ∙ [繁體中文](README-zh-Hant.md)_
# 命令行的艺术 # 命令行的艺术
@ -19,7 +18,6 @@
- [更多资源](#更多资源) - [更多资源](#更多资源)
- [免责声明](#免责声明) - [免责声明](#免责声明)
<br><div align="center"><img src="https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/cowsay.png"/></div><br> <br><div align="center"><img src="https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/cowsay.png"/></div><br>
熟练使用命令行是一种常常被忽视,或被认为难以掌握的技能,但实际上,它会提高你作为工程师的灵活性以及生产力。本文是一份我在 Linux 上工作时,发现的一些命令行使用技巧的摘要。有些技巧非常基础,而另一些则相当复杂,甚至晦涩难懂。这篇文章并不长,但当你能够熟练掌握这里列出的所有技巧时,你就学会了很多关于命令行的东西了。 熟练使用命令行是一种常常被忽视,或被认为难以掌握的技能,但实际上,它会提高你作为工程师的灵活性以及生产力。本文是一份我在 Linux 上工作时,发现的一些命令行使用技巧的摘要。有些技巧非常基础,而另一些则相当复杂,甚至晦涩难懂。这篇文章并不长,但当你能够熟练掌握这里列出的所有技巧时,你就学会了很多关于命令行的东西了。
@ -36,7 +34,7 @@
涵盖范围: 涵盖范围:
- 这篇文章不仅能帮助刚接触命令行的新手,而且对具有经验的人也大有裨益。本文致力于做到*覆盖面广*(涉及所有重要的内容),*具体*(给出具体的最常用的例子),以及*简洁*(避免冗余的内容,或是可以在其他地方轻松查到的细枝末节)。在特定应用场景下,本文的内容属于基本功或者能帮助您节约大量的时间。 - 这篇文章不仅能帮助刚接触命令行的新手,而且对具有经验的人也大有裨益。本文致力于做到*覆盖面广*(涉及所有重要的内容),_具体_(给出具体的最常用的例子),以及*简洁*(避免冗余的内容,或是可以在其他地方轻松查到的细枝末节)。在特定应用场景下,本文的内容属于基本功或者能帮助您节约大量的时间。
- 本文主要为 Linux 所写,但在[仅限 OS X 系统](#仅限-os-x-系统)章节和[仅限 Windows 系统](#仅限-windows-系统)章节中也包含有对应操作系统的内容。除去这两个章节外,其它的内容大部分均可在其他类 Unix 系统或 OS X甚至 Cygwin 中得到应用。 - 本文主要为 Linux 所写,但在[仅限 OS X 系统](#仅限-os-x-系统)章节和[仅限 Windows 系统](#仅限-windows-系统)章节中也包含有对应操作系统的内容。除去这两个章节外,其它的内容大部分均可在其他类 Unix 系统或 OS X甚至 Cygwin 中得到应用。
- 本文主要关注于交互式 Bash但也有很多技巧可以应用于其他 shell 和 Bash 脚本当中。 - 本文主要关注于交互式 Bash但也有很多技巧可以应用于其他 shell 和 Bash 脚本当中。
- 除去“标准的”Unix 命令,本文还包括了一些依赖于特定软件包的命令(前提是它们具有足够的价值)。 - 除去“标准的”Unix 命令,本文还包括了一些依赖于特定软件包的命令(前提是它们具有足够的价值)。
@ -47,7 +45,6 @@
`pip``brew`(以及其它合适的包管理器)来安装依赖的程序。 `pip``brew`(以及其它合适的包管理器)来安装依赖的程序。
- 遇到问题的话,请尝试使用 [Explainshell](http://explainshell.com/) 去获取相关命令、参数、管道等内容的解释。 - 遇到问题的话,请尝试使用 [Explainshell](http://explainshell.com/) 去获取相关命令、参数、管道等内容的解释。
## 基础 ## 基础
- 学习 Bash 的基础知识。具体地,在命令行中输入 `man bash` 并至少全文浏览一遍; 它理解起来很简单并且不冗长。其他的 shell 可能很好用,但 Bash 的功能已经足够强大并且到几乎总是可用的( 如果你*只*学习 zshfish 或其他的 shell 的话,在你自己的设备上会显得很方便,但过度依赖这些功能会给您带来不便,例如当你需要在服务器上工作时)。 - 学习 Bash 的基础知识。具体地,在命令行中输入 `man bash` 并至少全文浏览一遍; 它理解起来很简单并且不冗长。其他的 shell 可能很好用,但 Bash 的功能已经足够强大并且到几乎总是可用的( 如果你*只*学习 zshfish 或其他的 shell 的话,在你自己的设备上会显得很方便,但过度依赖这些功能会给您带来不便,例如当你需要在服务器上工作时)。
@ -74,33 +71,31 @@
- 学会使用 `apt-get``yum``dnf` 或 `pacman` (具体使用哪个取决于你使用的 Linux 发行版)来查找和安装软件包。并确保你的环境中有 `pip` 来安装基于 Python 的命令行工具 (接下来提到的部分程序使用 `pip` 来安装会很方便)。 - 学会使用 `apt-get``yum``dnf` 或 `pacman` (具体使用哪个取决于你使用的 Linux 发行版)来查找和安装软件包。并确保你的环境中有 `pip` 来安装基于 Python 的命令行工具 (接下来提到的部分程序使用 `pip` 来安装会很方便)。
## 日常使用 ## 日常使用
- 在 Bash 中,可以通过按 **Tab** 键实现自动补全参数,使用 **ctrl-r** 搜索命令行历史记录(按下按键之后,输入关键字便可以搜索,重复按下 **ctrl-r** 会向后查找匹配项,按下 **Enter** 键会执行当前匹配的命令,而按下右方向键会将匹配项放入当前行中,不会直接执行,以便做出修改)。 - 在 Bash 中,可以通过按 **Tab** 键实现自动补全参数,使用 **ctrl-r** 搜索命令行历史记录(按下按键之后,输入关键字便可以搜索,重复按下 **ctrl-r** 会向后查找匹配项,按下 **Enter** 键会执行当前匹配的命令,而按下右方向键会将匹配项放入当前行中,不会直接执行,以便做出修改)。
- 在 Bash 中,可以按下 **ctrl-w** 删除你键入的最后一个单词,**ctrl-u** 可以删除行内光标所在位置之前的内容,**alt-b** 和 **alt-f** 可以以单词为单位移动光标,**ctrl-a** 可以将光标移至行首,**ctrl-e** 可以将光标移至行尾,**ctrl-k** 可以删除光标至行尾的所有内容,**ctrl-l** 可以清屏。键入 `man readline` 可以查看 Bash 中的默认快捷键。内容有很多,例如 **alt-.** 循环地移向前一个参数,而 **alt-*** 可以展开通配符。 - 在 Bash 中,可以按下 **ctrl-w** 删除你键入的最后一个单词,**ctrl-u** 可以删除行内光标所在位置之前的内容,**alt-b** 和 **alt-f** 可以以单词为单位移动光标,**ctrl-a** 可以将光标移至行首,**ctrl-e** 可以将光标移至行尾,**ctrl-k** 可以删除光标至行尾的所有内容,**ctrl-l** 可以清屏。键入 `man readline` 可以查看 Bash 中的默认快捷键。内容有很多,例如 **alt-.** 循环地移向前一个参数,而 **alt-\*** 可以展开通配符。
* 你喜欢的话,可以执行 `set -o vi` 来使用 vi 风格的快捷键,而执行 `set -o emacs` 可以把它改回来。
- 你喜欢的话,可以执行 `set -o vi` 来使用 vi 风格的快捷键,而执行 `set -o emacs` 可以把它改回来 * 为了便于编辑长命令,在设置你的默认编辑器后(例如 `export EDITOR=vim`**ctrl-x** **ctrl-e** 会打开一个编辑器来编辑当前输入的命令。在 vi 风格下快捷键则是 **escape-v**
- 为了便于编辑长命令,在设置你的默认编辑器后(例如 `export EDITOR=vim`**ctrl-x** **ctrl-e** 会打开一个编辑器来编辑当前输入的命令。在 vi 风格下快捷键则是 **escape-v** * 键入 `history` 查看命令行历史记录,再用 `!n``n` 是命令编号)就可以再次执行。其中有许多缩写,最有用的大概就是 `!$` 它用于指代上次键入的参数,而 `!!` 可以指代上次键入的命令了(参考 man 页面中的“HISTORY EXPANSION”。不过这些功能你也可以通过快捷键 **ctrl-r****alt-.** 来实现
- 键入 `history` 查看命令行历史记录,再用 `!n``n` 是命令编号)就可以再次执行。其中有许多缩写,最有用的大概就是 `!$` 它用于指代上次键入的参数,而 `!!` 可以指代上次键入的命令了(参考 man 页面中的“HISTORY EXPANSION”。不过这些功能你也可以通过快捷键 **ctrl-r****alt-.** 来实现 * `cd` 命令可以切换工作路径,输入 `cd \~` 可以进入 home 目录。要访问你的 home 目录中的文件,可以使用前缀 `\~`(例如 `\~/.bashrc`)。在 `sh` 脚本里则用环境变量 `$HOME` 指代 home 目录的路径
- `cd` 命令可以切换工作路径,输入 `cd \~` 可以进入 home 目录。要访问你的 home 目录中的文件,可以使用前缀 `\~`(例如 `\~/.bashrc`)。在 `sh` 脚本里则用环境变量 `$HOME` 指代 home 目录的路径 * 回到前一个工作路径:`cd -`
- 回到前一个工作路径:`cd -` * 如果你输入命令的时候中途改了主意,按下 **alt-#** 在行首添加 `#` 把它当做注释再按下回车执行(或者依次按下 **ctrl-a** **#** **enter**)。这样做的话,之后借助命令行历史记录,你可以很方便恢复你刚才输入到一半的命令
- 如果你输入命令的时候中途改了主意,按下 **alt-#** 在行首添加 `#` 把它当做注释再按下回车执行(或者依次按下 **ctrl-a** **#** **enter**)。这样做的话,之后借助命令行历史记录,你可以很方便恢复你刚才输入到一半的命令。 * 使用 `xargs` `parallel`)。他们非常给力。注意到你可以控制每行参数个数(`-L`)和最大并行数(`-P`)。如果你不确定它们是否会按你想的那样工作,先使用 `xargs echo` 查看一下。此外,使用 `-I{}` 会很方便。例如:
- 使用 `xargs` `parallel`)。他们非常给力。注意到你可以控制每行参数个数(`-L`)和最大并行数(`-P`)。如果你不确定它们是否会按你想的那样工作,先使用 `xargs echo` 查看一下。此外,使用 `-I{}` 会很方便。例如:
```bash ```bash
find . -name '*.py' | xargs grep some_function find . -name '*.py' | xargs grep some_function
cat hosts | xargs -I{} ssh root@{} hostname cat hosts | xargs -I{} ssh root@{} hostname
``` ```
- `pstree -p` 以一种优雅的方式展示进程树。 - `pstree -p` 以一种优雅的方式展示进程树。
- 使用 `pgrep``pkill` 根据名字查找进程或发送信号(`-f` 参数通常有用)。 - 使用 `pgrep``pkill` 根据名字查找进程或发送信号(`-f` 参数通常有用)。
@ -126,28 +121,32 @@
- 当变量和文件名中包含空格的时候要格外小心。Bash 变量要用引号括起来,比如 `"$FOO"`。尽量使用 `-0``-print0` 选项以便用 NULL 来分隔文件名,例如 `locate -0 pattern | xargs -0 ls -al``find / -print0 -type d | xargs -0 ls -al`。如果 for 循环中循环访问的文件名含有空字符空格、tab 等字符),只需用 `IFS=$'\n'` 把内部字段分隔符设为换行符。 - 当变量和文件名中包含空格的时候要格外小心。Bash 变量要用引号括起来,比如 `"$FOO"`。尽量使用 `-0``-print0` 选项以便用 NULL 来分隔文件名,例如 `locate -0 pattern | xargs -0 ls -al``find / -print0 -type d | xargs -0 ls -al`。如果 for 循环中循环访问的文件名含有空字符空格、tab 等字符),只需用 `IFS=$'\n'` 把内部字段分隔符设为换行符。
- 在 Bash 脚本中,使用 `set -x` 去调试输出(或者使用它的变体 `set -v`,它会记录原始输入,包括多余的参数和注释)。尽可能地使用严格模式:使用 `set -e` 令脚本在发生错误时退出而不是继续运行;使用 `set -u` 来检查是否使用了未赋值的变量;试试 `set -o pipefail`,它可以监测管道中的错误。当牵扯到很多脚本时,使用 `trap` 来检测 ERR 和 EXIT。一个好的习惯是在脚本文件开头这样写这会使它能够检测一些错误并在错误发生时中断程序并输出信息 - 在 Bash 脚本中,使用 `set -x` 去调试输出(或者使用它的变体 `set -v`,它会记录原始输入,包括多余的参数和注释)。尽可能地使用严格模式:使用 `set -e` 令脚本在发生错误时退出而不是继续运行;使用 `set -u` 来检查是否使用了未赋值的变量;试试 `set -o pipefail`,它可以监测管道中的错误。当牵扯到很多脚本时,使用 `trap` 来检测 ERR 和 EXIT。一个好的习惯是在脚本文件开头这样写这会使它能够检测一些错误并在错误发生时中断程序并输出信息
```bash ```bash
set -euo pipefail set -euo pipefail
trap "echo 'error: Script failed: see failed command above'" ERR trap "echo 'error: Script failed: see failed command above'" ERR
``` ```
- 在 Bash 脚本中,子 shell使用括号 `(...)`)是一种组织参数的便捷方式。一个常见的例子是临时地移动工作路径,代码如下: - 在 Bash 脚本中,子 shell使用括号 `(...)`)是一种组织参数的便捷方式。一个常见的例子是临时地移动工作路径,代码如下:
```bash ```bash
# do something in current dir # do something in current dir
(cd /some/other/dir && other-command) (cd /some/other/dir && other-command)
# continue in original dir # continue in original dir
``` ```
- 在 Bash 中,变量有许多的扩展方式。`${name:?error message}` 用于检查变量是否存在。此外,当 Bash 脚本只需要一个参数时,可以使用这样的代码 `input_file=${1:?usage: $0 input_file}`。在变量为空时使用默认值:`${name:-default}`。如果你要在之前的例子中再加一个(可选的)参数,可以使用类似这样的代码 `output_file=${2:-logfile}`,如果省略了 $2它的值就为空于是 `output_file` 就会被设为 `logfile`。数学表达式:`i=$(( (i + 1) % 5 ))`。序列:`{1..10}`。截断字符串:`${var%suffix}` 和 `${var#prefix}`。例如,假设 `var=foo.pdf`,那么 `echo ${var%.pdf}.txt` 将输出 `foo.txt` - 在 Bash 中,变量有许多的扩展方式。`${name:?error message}` 用于检查变量是否存在。此外,当 Bash 脚本只需要一个参数时,可以使用这样的代码 `input_file=${1:?usage: $0 input_file}`。在变量为空时使用默认值:`${name:-default}`。如果你要在之前的例子中再加一个(可选的)参数,可以使用类似这样的代码 `output_file=${2:-logfile}`,如果省略了 \$2它的值就为空于是 `output_file` 就会被设为 `logfile`。数学表达式:`i=$(( (i + 1) % 5 ))`。序列:`{1..10}`。截断字符串:`${var%suffix}` 和 `${var#prefix}`。例如,假设 `var=foo.pdf`,那么 `echo ${var%.pdf}.txt` 将输出 `foo.txt`
- 使用括号扩展(`{`...`}`)来减少输入相似文本,并自动化文本组合。这在某些情况下会很有用,例如 `mv foo.{txt,pdf} some-dir`(同时移动两个文件),`cp somefile{,.bak}`(会被扩展成 `cp somefile somefile.bak`)或者 `mkdir -p test-{a,b,c}/subtest-{1,2,3}`(会被扩展成所有可能的组合,并创建一个目录树)。 - 使用括号扩展(`{`...`}`)来减少输入相似文本,并自动化文本组合。这在某些情况下会很有用,例如 `mv foo.{txt,pdf} some-dir`(同时移动两个文件),`cp somefile{,.bak}`(会被扩展成 `cp somefile somefile.bak`)或者 `mkdir -p test-{a,b,c}/subtest-{1,2,3}`(会被扩展成所有可能的组合,并创建一个目录树)。
- 通过使用 `<(some command)` 可以将输出视为文件。例如,对比本地文件 `/etc/hosts` 和一个远程文件: - 通过使用 `<(some command)` 可以将输出视为文件。例如,对比本地文件 `/etc/hosts` 和一个远程文件:
```bash ```bash
diff /etc/hosts <(ssh somehost cat /etc/hosts) diff /etc/hosts <(ssh somehost cat /etc/hosts)
``` ```
- 编写脚本时,你可能会想要把代码都放在大括号里。缺少右括号的话,代码就会因为语法错误而无法执行。如果你的脚本是要放在网上分享供他人使用的,这样的写法就体现出它的好处了,因为这样可以防止下载不完全代码被执行。 - 编写脚本时,你可能会想要把代码都放在大括号里。缺少右括号的话,代码就会因为语法错误而无法执行。如果你的脚本是要放在网上分享供他人使用的,这样的写法就体现出它的好处了,因为这样可以防止下载不完全代码被执行。
```bash ```bash
{ {
# 在这里写代码 # 在这里写代码
@ -158,13 +157,14 @@
- 在 Bash 中,同时重定向标准输出和标准错误:`some-command >logfile 2>&1` 或者 `some-command &>logfile`。通常,为了保证命令不会在标准输入里残留一个未关闭的文件句柄捆绑在你当前所在的终端上,在命令后添加 `</dev/null` 是一个好习惯。 - 在 Bash 中,同时重定向标准输出和标准错误:`some-command >logfile 2>&1` 或者 `some-command &>logfile`。通常,为了保证命令不会在标准输入里残留一个未关闭的文件句柄捆绑在你当前所在的终端上,在命令后添加 `</dev/null` 是一个好习惯。
- 使用 `man ascii` 查看具有十六进制和十进制值的ASCII表。`man unicode``man utf-8`,以及 `man latin1` 有助于你去了解通用的编码信息。 - 使用 `man ascii` 查看具有十六进制和十进制值的 ASCII 表。`man unicode``man utf-8`,以及 `man latin1` 有助于你去了解通用的编码信息。
- 使用 `screen` 或 [`tmux`](https://tmux.github.io/) 来使用多份屏幕,当你在使用 ssh 时(保存 session 信息)将尤为有用。而 `byobu` 可以为它们提供更多的信息和易用的管理工具。另一个轻量级的 session 持久化解决方案是 [`dtach`](https://github.com/bogner/dtach)。 - 使用 `screen` 或 [`tmux`](https://tmux.github.io/) 来使用多份屏幕,当你在使用 ssh 时(保存 session 信息)将尤为有用。而 `byobu` 可以为它们提供更多的信息和易用的管理工具。另一个轻量级的 session 持久化解决方案是 [`dtach`](https://github.com/bogner/dtach)。
- ssh 中,了解如何使用 `-L``-D`(偶尔需要用 `-R`)开启隧道是非常有用的,比如当你需要从一台远程服务器上访问 web 页面。 - ssh 中,了解如何使用 `-L``-D`(偶尔需要用 `-R`)开启隧道是非常有用的,比如当你需要从一台远程服务器上访问 web 页面。
- 对 ssh 设置做一些小优化可能是很有用的,例如这个 `\~/.ssh/config` 文件包含了防止特定网络环境下连接断开、压缩数据、多通道等选项: - 对 ssh 设置做一些小优化可能是很有用的,例如这个 `\~/.ssh/config` 文件包含了防止特定网络环境下连接断开、压缩数据、多通道等选项:
``` ```
TCPKeepAlive=yes TCPKeepAlive=yes
ServerAliveInterval=15 ServerAliveInterval=15
@ -180,6 +180,7 @@
- 考虑使用 [`mosh`](https://mosh.mit.edu/) 作为 ssh 的替代品,它使用 UDP 协议。它可以避免连接被中断并且对带宽需求更小,但它需要在服务端做相应的配置。 - 考虑使用 [`mosh`](https://mosh.mit.edu/) 作为 ssh 的替代品,它使用 UDP 协议。它可以避免连接被中断并且对带宽需求更小,但它需要在服务端做相应的配置。
- 获取八进制形式的文件访问权限(修改系统设置时通常需要,但 `ls` 的功能不那么好用并且通常会搞砸),可以使用类似如下的代码: - 获取八进制形式的文件访问权限(修改系统设置时通常需要,但 `ls` 的功能不那么好用并且通常会搞砸),可以使用类似如下的代码:
```bash ```bash
stat -c '%A %a %n' /etc/timezone stat -c '%A %a %n' /etc/timezone
``` ```
@ -191,19 +192,19 @@
- 将 web 服务器上当前目录下所有的文件(以及子目录)暴露给你所处网络的所有用户,使用: - 将 web 服务器上当前目录下所有的文件(以及子目录)暴露给你所处网络的所有用户,使用:
`python -m SimpleHTTPServer 7777` (使用端口 7777 和 Python 2或`python -m http.server 7777` (使用端口 7777 和 Python 3 `python -m SimpleHTTPServer 7777` (使用端口 7777 和 Python 2或`python -m http.server 7777` (使用端口 7777 和 Python 3
- 以其他用户的身份执行命令,使用 `sudo`。默认以 root 用户的身份执行;使用 `-u` 来指定其他用户。使用 `-i` 来以该用户登录(需要输入_你自己的_密码)。 - 以其他用户的身份执行命令,使用 `sudo`。默认以 root 用户的身份执行;使用 `-u` 来指定其他用户。使用 `-i` 来以该用户登录(需要输入*你自己的*密码)。
- 将 shell 切换为其他用户,使用 `su username` 或者 `sudo - username`。加入 `-` 会使得切换后的环境与使用该用户登录后的环境相同。省略用户名则默认为 root。切换到哪个用户就需要输入_哪个用户的_密码。 - 将 shell 切换为其他用户,使用 `su username` 或者 `sudo - username`。加入 `-` 会使得切换后的环境与使用该用户登录后的环境相同。省略用户名则默认为 root。切换到哪个用户就需要输入*哪个用户的*密码。
- 了解命令行的 [128K 限制](https://wiki.debian.org/CommonErrorMessages/ArgumentListTooLong)。使用通配符匹配大量文件名时常会遇到“Argument list too long”的错误信息。这种情况下换用 `find``xargs` 通常可以解决。) - 了解命令行的 [128K 限制](https://wiki.debian.org/CommonErrorMessages/ArgumentListTooLong)。使用通配符匹配大量文件名时常会遇到“Argument list too long”的错误信息。这种情况下换用 `find``xargs` 通常可以解决。)
- 当你需要一个基本的计算器时,可以使用 `python` 解释器(当然你要用 python 的时候也是这样)。例如: - 当你需要一个基本的计算器时,可以使用 `python` 解释器(当然你要用 python 的时候也是这样)。例如:
``` ```
>>> 2+3 >>> 2+3
5 5
``` ```
## 文件及数据处理 ## 文件及数据处理
- 在当前目录下通过文件名查找一个文件,使用类似于这样的命令:`find . -iname '*something*'`。在所有路径下通过文件名查找文件,使用 `locate something` (但注意到 `updatedb` 可能没有对最近新建的文件建立索引,所以你可能无法定位到这些未被索引的文件)。 - 在当前目录下通过文件名查找一个文件,使用类似于这样的命令:`find . -iname '*something*'`。在所有路径下通过文件名查找文件,使用 `locate something` (但注意到 `updatedb` 可能没有对最近新建的文件建立索引,所以你可能无法定位到这些未被索引的文件)。
@ -222,7 +223,7 @@
- 要处理 Excel 或 CSV 文件的话,[csvkit](https://github.com/onyxfish/csvkit) 提供了 `in2csv``csvcut``csvjoin``csvgrep` 等方便易用的工具。 - 要处理 Excel 或 CSV 文件的话,[csvkit](https://github.com/onyxfish/csvkit) 提供了 `in2csv``csvcut``csvjoin``csvgrep` 等方便易用的工具。
- 当你要处理 Amazon S3 相关的工作的时候,[`s3cmd`](https://github.com/s3tools/s3cmd) 是一个很方便的工具而 [`s4cmd`](https://github.com/bloomreach/s4cmd) 的效率更高。Amazon 官方提供的 [`aws`](https://github.com/aws/aws-cli) 以及 [`saws`](https://github.com/donnemartin/saws) 是其他 AWS 相关工作的基础,值得学习。 - 当你要处理 Amazon S3 相关的工作的时候,[`s3cmd`](https://github.com/s3tools/s3cmd) 是一个很方便的工具而 [`s4cmd`](https://github.com/bloomreach/s4cmd) 的效率更高。Amazon 官方提供的 [`aws`](https://github.com/aws/aws-cli) 以及 [`saws`](https://github.com/donnemartin/saws) 是其他 AWS 相关工作的基础,值得学习。
- 了解如何使用 `sort``uniq`,包括 uniq 的 `-u` 参数和 `-d` 参数,具体内容在后文单行脚本节中。另外可以了解一下 `comm` - 了解如何使用 `sort``uniq`,包括 uniq 的 `-u` 参数和 `-d` 参数,具体内容在后文单行脚本节中。另外可以了解一下 `comm`
@ -241,11 +242,13 @@
- 了解如何使用 `awk``sed` 来进行简单的数据处理。 参阅 [One-liners](#one-liners) 获取示例。 - 了解如何使用 `awk``sed` 来进行简单的数据处理。 参阅 [One-liners](#one-liners) 获取示例。
- 替换一个或多个文件中出现的字符串: - 替换一个或多个文件中出现的字符串:
```bash ```bash
perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt
``` ```
- 使用 [`repren`](https://github.com/jlevy/repren) 来批量重命名文件,或是在多个文件中搜索替换内容。(有些时候 `rename` 命令也可以批量重命名,但要注意,它在不同 Linux 发行版中的功能并不完全一样。) - 使用 [`repren`](https://github.com/jlevy/repren) 来批量重命名文件,或是在多个文件中搜索替换内容。(有些时候 `rename` 命令也可以批量重命名,但要注意,它在不同 Linux 发行版中的功能并不完全一样。)
```bash ```bash
# 将文件、目录和内容全部重命名 foo -> bar: # 将文件、目录和内容全部重命名 foo -> bar:
repren --full --preserve-case --from foo --to bar . repren --full --preserve-case --from foo --to bar .
@ -256,11 +259,12 @@
``` ```
- 根据 man 页面的描述,`rsync` 是一个快速且非常灵活的文件复制工具。它闻名于设备之间的文件同步,但其实它在本地情况下也同样有用。在安全设置允许下,用 `rsync` 代替 `scp` 可以实现文件续传,而不用重新从头开始。它同时也是删除大量文件的[最快方法](https://web.archive.org/web/20130929001850/http://linuxnote.net/jianingy/en/linux/a-fast-way-to-remove-huge-number-of-files.html)之一: - 根据 man 页面的描述,`rsync` 是一个快速且非常灵活的文件复制工具。它闻名于设备之间的文件同步,但其实它在本地情况下也同样有用。在安全设置允许下,用 `rsync` 代替 `scp` 可以实现文件续传,而不用重新从头开始。它同时也是删除大量文件的[最快方法](https://web.archive.org/web/20130929001850/http://linuxnote.net/jianingy/en/linux/a-fast-way-to-remove-huge-number-of-files.html)之一:
```bash ```bash
mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
``` ```
- 若要在复制文件时获取当前进度,可使用 `pv`[`pycp`](https://github.com/dmerejkowsky/pycp)[`progress`](https://github.com/Xfennec/progress)`rsync --progress`。若所执行的复制为block块拷贝可以使用 `dd status=progress` - 若要在复制文件时获取当前进度,可使用 `pv`[`pycp`](https://github.com/dmerejkowsky/pycp)[`progress`](https://github.com/Xfennec/progress)`rsync --progress`。若所执行的复制为 block 块拷贝,可以使用 `dd status=progress`
- 使用 `shuf` 可以以行为单位来打乱文件的内容或从一个文件中随机选取多行。 - 使用 `shuf` 可以以行为单位来打乱文件的内容或从一个文件中随机选取多行。
@ -277,6 +281,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- 制作二进制差分文件Delta 压缩),使用 `xdelta3` - 制作二进制差分文件Delta 压缩),使用 `xdelta3`
- 使用 `iconv` 更改文本编码。需要更高级的功能,可以使用 `uconv`,它支持一些高级的 Unicode 功能。例如,这条命令移除了所有重音符号: - 使用 `iconv` 更改文本编码。需要更高级的功能,可以使用 `uconv`,它支持一些高级的 Unicode 功能。例如,这条命令移除了所有重音符号:
```bash ```bash
uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt
``` ```
@ -290,6 +295,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- 文件属性可以通过 `chattr` 进行设置,它比文件权限更加底层。例如,为了保护文件不被意外删除,可以使用不可修改标记:`sudo chattr +i /critical/directory/or/file` - 文件属性可以通过 `chattr` 进行设置,它比文件权限更加底层。例如,为了保护文件不被意外删除,可以使用不可修改标记:`sudo chattr +i /critical/directory/or/file`
- 使用 `getfacl``setfacl` 以保存和恢复文件权限。例如: - 使用 `getfacl``setfacl` 以保存和恢复文件权限。例如:
```bash ```bash
getfacl -R /some/path > permissions.txt getfacl -R /some/path > permissions.txt
setfacl --restore=permissions.txt setfacl --restore=permissions.txt
@ -315,7 +321,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- 用 [`ncdu`](https://dev.yorhel.nl/ncdu) 来查看磁盘使用情况,它比寻常的命令,如 `du -sh *`,更节省时间。 - 用 [`ncdu`](https://dev.yorhel.nl/ncdu) 来查看磁盘使用情况,它比寻常的命令,如 `du -sh *`,更节省时间。
- 查找正在使用带宽的套接字连接或进程,使用 [`iftop`](http://www.ex-parrot.com/\~pdw/iftop/) 或 [`nethogs`](https://github.com/raboof/nethogs)。 - 查找正在使用带宽的套接字连接或进程,使用 [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) 或 [`nethogs`](https://github.com/raboof/nethogs)。
- `ab` 工具Apache 中自带)可以简单粗暴地检查 web 服务器的性能。对于更复杂的负载测试,使用 `siege` - `ab` 工具Apache 中自带)可以简单粗暴地检查 web 服务器的性能。对于更复杂的负载测试,使用 `siege`
@ -331,7 +337,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- 当调试一些之前出现的问题的时候,[`sar`](http://sebastien.godard.pagesperso-orange.fr/) 非常有用。它展示了 cpu、内存以及网络等的历史数据。 - 当调试一些之前出现的问题的时候,[`sar`](http://sebastien.godard.pagesperso-orange.fr/) 非常有用。它展示了 cpu、内存以及网络等的历史数据。
- 关于更深层次的系统分析以及性能分析,看看 `stap`[SystemTap](https://sourceware.org/systemtap/wiki)[`perf`](https://en.wikipedia.org/wiki/Perf_(Linux)),以及[`sysdig`](https://github.com/draios/sysdig)。 - 关于更深层次的系统分析以及性能分析,看看 `stap`[SystemTap](https://sourceware.org/systemtap/wiki)[`perf`](<https://en.wikipedia.org/wiki/Perf_(Linux)>),以及[`sysdig`](https://github.com/draios/sysdig)。
- 查看你当前使用的系统,使用 `uname``uname -a`Unixkernel 信息)或者 `lsb_release -a`Linux 发行版信息)。 - 查看你当前使用的系统,使用 `uname``uname -a`Unixkernel 信息)或者 `lsb_release -a`Linux 发行版信息)。
@ -340,12 +346,12 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- 如果你删除了一个文件,但通过 `du` 发现没有释放预期的磁盘空间,请检查文件是否被进程占用: - 如果你删除了一个文件,但通过 `du` 发现没有释放预期的磁盘空间,请检查文件是否被进程占用:
`lsof | grep deleted | grep "filename-of-my-big-file"` `lsof | grep deleted | grep "filename-of-my-big-file"`
## 单行脚本 ## 单行脚本
一些命令组合的例子: 一些命令组合的例子:
- 当你需要对文本文件做集合交、并、差运算时,`sort` 和 `uniq` 会是你的好帮手。具体例子请参照代码后面的,此处假设 `a``b` 是两内容不同的文件。这种方式效率很高,并且在小文件和上 G 的文件上都能运用(注意尽管在 `/tmp` 在一个小的根分区上时你可能需要 `-T` 参数,但是实际上 `sort` 并不被内存大小约束),参阅前文中关于 `LC_ALL``sort``-u` 参数的部分。 - 当你需要对文本文件做集合交、并、差运算时,`sort` 和 `uniq` 会是你的好帮手。具体例子请参照代码后面的,此处假设 `a``b` 是两内容不同的文件。这种方式效率很高,并且在小文件和上 G 的文件上都能运用(注意尽管在 `/tmp` 在一个小的根分区上时你可能需要 `-T` 参数,但是实际上 `sort` 并不被内存大小约束),参阅前文中关于 `LC_ALL``sort``-u` 参数的部分。
```bash ```bash
sort a b | uniq > c # c 是 a 并 b sort a b | uniq > c # c 是 a 并 b
sort a b | uniq -d > c # c 是 a 交 b sort a b | uniq -d > c # c 是 a 交 b
@ -354,18 +360,20 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- 使用 `grep . *`(每行都会附上文件名)或者 `head -100 *`(每个文件有一个标题)来阅读检查目录下所有文件的内容。这在检查一个充满配置文件的目录(如 `/sys`、`/proc`、`/etc`)时特别好用。 - 使用 `grep . *`(每行都会附上文件名)或者 `head -100 *`(每个文件有一个标题)来阅读检查目录下所有文件的内容。这在检查一个充满配置文件的目录(如 `/sys`、`/proc`、`/etc`)时特别好用。
* 计算文本文件第三列中所有数的和(可能比同等作用的 Python 代码快三倍且代码量少三倍):
- 计算文本文件第三列中所有数的和(可能比同等作用的 Python 代码快三倍且代码量少三倍):
```bash ```bash
awk '{ x += $3 } END { print x }' myfile awk '{ x += $3 } END { print x }' myfile
``` ```
- 如果你想在文件树上查看大小/日期,这可能看起来像递归版的 `ls -l` 但比 `ls -lR` 更易于理解: - 如果你想在文件树上查看大小/日期,这可能看起来像递归版的 `ls -l` 但比 `ls -lR` 更易于理解:
```bash ```bash
find . -type f -ls find . -type f -ls
``` ```
- 假设你有一个类似于 web 服务器日志文件的文本文件,并且一个确定的值只会出现在某些行上,假设一个 `acct_id` 参数在 URI 中。如果你想计算出每个 `acct_id` 值有多少次请求,使用如下代码: - 假设你有一个类似于 web 服务器日志文件的文本文件,并且一个确定的值只会出现在某些行上,假设一个 `acct_id` 参数在 URI 中。如果你想计算出每个 `acct_id` 值有多少次请求,使用如下代码:
```bash ```bash
egrep -o 'acct_id=[0-9]+' access.log | cut -d= -f2 | sort | uniq -c | sort -rn egrep -o 'acct_id=[0-9]+' access.log | cut -d= -f2 | sort | uniq -c | sort -rn
``` ```
@ -373,6 +381,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- 要持续监测文件改动,可以使用 `watch`,例如检查某个文件夹中文件的改变,可以用 `watch -d -n 2 'ls -rtlh | tail'`;或者在排查 WiFi 设置故障时要监测网络设置的更改,可以用 `watch -d -n 2 ifconfig` - 要持续监测文件改动,可以使用 `watch`,例如检查某个文件夹中文件的改变,可以用 `watch -d -n 2 'ls -rtlh | tail'`;或者在排查 WiFi 设置故障时要监测网络设置的更改,可以用 `watch -d -n 2 ifconfig`
- 运行这个函数从这篇文档中随机获取一条技巧(解析 Markdown 文件并抽取项目): - 运行这个函数从这篇文档中随机获取一条技巧(解析 Markdown 文件并抽取项目):
```bash ```bash
function taocl() { function taocl() {
curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README-zh.md| curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README-zh.md|
@ -514,7 +523,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- [`sar`](http://sebastien.godard.pagesperso-orange.fr/):系统历史数据 - [`sar`](http://sebastien.godard.pagesperso-orange.fr/):系统历史数据
- [`iftop`](http://www.ex-parrot.com/\~pdw/iftop/) 或 [`nethogs`](https://github.com/raboof/nethogs):套接字及进程的网络利用情况 - [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) 或 [`nethogs`](https://github.com/raboof/nethogs):套接字及进程的网络利用情况
- `ss`:套接字数据 - `ss`:套接字数据
@ -526,13 +535,12 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- `lsblk`:列出块设备信息:以树形展示你的磁盘以及磁盘分区信息 - `lsblk`:列出块设备信息:以树形展示你的磁盘以及磁盘分区信息
- `lshw``lscpu``lspci``lsusb` 和 `dmidecode`:查看硬件信息,包括 CPU、BIOS、RAID、显卡、USB设备等 - `lshw``lscpu``lspci``lsusb` 和 `dmidecode`:查看硬件信息,包括 CPU、BIOS、RAID、显卡、USB 设备等
- `lsmod``modinfo`:列出内核模块,并显示其细节 - `lsmod``modinfo`:列出内核模块,并显示其细节
- `fortune``ddate` 和 `sl`:额,这主要取决于你是否认为蒸汽火车和莫名其妙的名人名言是否“有用” - `fortune``ddate` 和 `sl`:额,这主要取决于你是否认为蒸汽火车和莫名其妙的名人名言是否“有用”
## 仅限 OS X 系统 ## 仅限 OS X 系统
以下是*仅限于* OS X 系统的技巧。 以下是*仅限于* OS X 系统的技巧。
@ -604,8 +612,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
## 免责声明 ## 免责声明
除去特别小的工作,你编写的代码应当方便他人阅读。能力往往伴随着责任,你 *有能力* 在 Bash 中玩一些奇技淫巧并不意味着你应该去做!;) 除去特别小的工作,你编写的代码应当方便他人阅读。能力往往伴随着责任,你 _有能力_ 在 Bash 中玩一些奇技淫巧并不意味着你应该去做!;)
## 授权条款 ## 授权条款

View File

@ -1,34 +1,11 @@
---
title: 查看 Linux 命令帮助信息
date: 2018-09-26
categories:
- linux
tags:
- linux
- command
---
# 查看 Linux 命令帮助信息 # 查看 Linux 命令帮助信息
> Linux 中有非常多的命令,想全部背下来是很困难的事。所以,我认为学习 Linux 的第一步,就是了解如何快速检索命令说明。 > Linux 中有非常多的命令,想全部背下来是很困难的事。所以,我认为学习 Linux 的第一步,就是了解如何快速检索命令说明。
> >
> 关键词:`help`, `whatis`, `info`, `which`, `whereis`, `man` > 关键词:`help`, `whatis`, `info`, `which`, `whereis`, `man`
<!-- TOC depthFrom:2 depthTo:3 -->
- [查看 Linux 命令帮助信息的要点](#查看-linux-命令帮助信息的要点) ## 1. 查看 Linux 命令帮助信息的要点
- [命令常见用法](#命令常见用法)
- [help](#help)
- [whatis](#whatis)
- [info](#info)
- [which](#which)
- [whereis](#whereis)
- [man](#man)
- [参考资料](#参考资料)
<!-- /TOC -->
## 查看 Linux 命令帮助信息的要点
- 查看 Shell 内部命令的帮助信息 - 使用 [help](#help) - 查看 Shell 内部命令的帮助信息 - 使用 [help](#help)
- 查看命令的简要说明 - 使用 [whatis](#whatis) - 查看命令的简要说明 - 使用 [whatis](#whatis)
@ -43,15 +20,15 @@ tags:
> - [Linux 命令大全](http://man.linuxde.net/) > - [Linux 命令大全](http://man.linuxde.net/)
> - [linux-command](https://github.com/jaywcjlove/linux-command) > - [linux-command](https://github.com/jaywcjlove/linux-command)
## 命令常见用法 ## 2. 命令常见用法
### help ### 2.1. help
> help 命令用于查看 Shell 内部命令的帮助信息。而对于外部命令的帮助信息只能使用 man 或者 info 命令查看。 > help 命令用于查看 Shell 内部命令的帮助信息。而对于外部命令的帮助信息只能使用 man 或者 info 命令查看。
> >
> 参考http://man.linuxde.net/help > 参考http://man.linuxde.net/help
### whatis ### 2.2. whatis
> whatis 用于查询一个命令执行什么功能。 > whatis 用于查询一个命令执行什么功能。
> >
@ -67,7 +44,7 @@ $ whatis man
$ whatis -w "loca*" $ whatis -w "loca*"
``` ```
### info ### 2.3. info
> info 是 Linux 下 info 格式的帮助指令。 > info 是 Linux 下 info 格式的帮助指令。
> >
@ -80,7 +57,7 @@ $ whatis -w "loca*"
$ info man $ info man
``` ```
### which ### 2.4. which
> which 命令用于查找并显示给定命令的绝对路径,环境变量 PATH 中保存了查找命令时需要遍历的目录。which 指令会在环境变量$PATH 设置的目录里查找符合条件的文件。也就是说,使用 which 命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。 > which 命令用于查找并显示给定命令的绝对路径,环境变量 PATH 中保存了查找命令时需要遍历的目录。which 指令会在环境变量$PATH 设置的目录里查找符合条件的文件。也就是说,使用 which 命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
> >
@ -101,7 +78,7 @@ cd: shell built-in command
cd 这个常用的命令竟然找不到啊!为什么呢?这是因为 cd 是 bash 内建的命令!但是 which 默认是找 PATH 内所规范的目录,所以当然一定找不到的! cd 这个常用的命令竟然找不到啊!为什么呢?这是因为 cd 是 bash 内建的命令!但是 which 默认是找 PATH 内所规范的目录,所以当然一定找不到的!
### whereis ### 2.5. whereis
> whereis 命令用来定位指令的二进制程序、源代码文件和 man 手册页等相关文件的路径。 > whereis 命令用来定位指令的二进制程序、源代码文件和 man 手册页等相关文件的路径。
> >
@ -115,7 +92,7 @@ cd 这个常用的命令竟然找不到啊!为什么呢?这是因为 cd 是
whereis git # 将相关的文件都查找出来 whereis git # 将相关的文件都查找出来
``` ```
### man ### 2.6. man
> man 命令是 Linux 下的帮助指令,通过 man 指令可以查看 Linux 中的指令帮助、配置文件帮助和编程帮助等信息。 > man 命令是 Linux 下的帮助指令,通过 man 指令可以查看 Linux 中的指令帮助、配置文件帮助和编程帮助等信息。
> >
@ -129,7 +106,7 @@ $ man 3 printf # 查看 printf 命令的帮助手册中的第 3 类
$ man -k keyword # 根据命令中部分关键字来查询命令 $ man -k keyword # 根据命令中部分关键字来查询命令
``` ```
#### man 要点 #### 2.6.1. man 要点
在 man 的帮助手册中,可以使用 page up 和 page down 来上下翻页。 在 man 的帮助手册中,可以使用 page up 和 page down 来上下翻页。
@ -164,6 +141,6 @@ printf [builtins](1) - bash built-in commands, see bash(1)
$ man 3 printf $ man 3 printf
``` ```
## 参考资料 ## 3. 参考资料
https://linuxtools-rst.readthedocs.io/zh_CN/latest/base/01_use_man.html https://linuxtools-rst.readthedocs.io/zh_CN/latest/base/01_use_man.html

View File

@ -1,15 +1,10 @@
---
title: Linux 典型运维应用
date: 2019-03-06
---
# Linux 典型运维应用 # Linux 典型运维应用
> 💡 如果没有特殊说明,本文的案例都是针对 Centos 发行版本。 > 💡 如果没有特殊说明,本文的案例都是针对 Centos 发行版本。
## 网络操作 ## 1. 网络操作
### 无法访问外网域名 ### 1.1. 无法访问外网域名
1在 hosts 中添加本机实际 IP 和本机实际域名的映射 1在 hosts 中添加本机实际 IP 和本机实际域名的映射
@ -36,7 +31,7 @@ nameserver 8.8.8.8
3测试一下能否 ping 通 www.baidu.com 3测试一下能否 ping 通 www.baidu.com
### 开启、关闭防火墙 ### 1.2. 开启、关闭防火墙
firewalld 的基本使用 firewalld 的基本使用
@ -88,9 +83,9 @@ systemctl 是 CentOS7 的服务管理工具中主要的工具,它融合之前
> :point_right: 参考:[CentOS7 使用 firewalld 打开关闭防火墙与端口](https://www.cnblogs.com/moxiaoan/p/5683743.html) > :point_right: 参考:[CentOS7 使用 firewalld 打开关闭防火墙与端口](https://www.cnblogs.com/moxiaoan/p/5683743.html)
## 系统维护 ## 2. 系统维护
### 使用 NTP 进行时间同步 ### 2.1. 使用 NTP 进行时间同步
1先安装时钟同步工具 ntp 1先安装时钟同步工具 ntp
@ -133,9 +128,9 @@ systemctl restart crond.service
> :point_right: 参考https://www.cnblogs.com/quchunhui/p/7658853.html > :point_right: 参考https://www.cnblogs.com/quchunhui/p/7658853.html
## 自动化脚本 ## 3. 自动化脚本
### Linux 开机自启动脚本 ### 3.1. Linux 开机自启动脚本
1`/etc/rc.local` 文件中添加命令 1`/etc/rc.local` 文件中添加命令
@ -221,7 +216,7 @@ $ update-rc.d mysql start 98 2 .
> - https://blog.csdn.net/linuxshine/article/details/50717272 > - https://blog.csdn.net/linuxshine/article/details/50717272
> - https://www.cnblogs.com/ssooking/p/6094740.html > - https://www.cnblogs.com/ssooking/p/6094740.html
### 定时执行脚本 ### 3.2. 定时执行脚本
1安装 crontab 1安装 crontab
@ -278,9 +273,9 @@ MAILTO=root
> :point_right: 参考:[linux 定时执行脚本](https://blog.csdn.net/z_yong_cool/article/details/79288397) > :point_right: 参考:[linux 定时执行脚本](https://blog.csdn.net/z_yong_cool/article/details/79288397)
## 配置 ## 4. 配置
### 设置 Linux 启动模式 ### 4.1. 设置 Linux 启动模式
1. 停机(记得不要把 initdefault 配置为 0因为这样会使 Linux 不能启动) 1. 停机(记得不要把 initdefault 配置为 0因为这样会使 Linux 不能启动)
2. 单用户模式,就像 Win9X 下的安全模式 2. 单用户模式,就像 Win9X 下的安全模式
@ -296,7 +291,7 @@ MAILTO=root
$ sed -i 's/id:5:initdefault:/id:3:initdefault:/' /etc/inittab $ sed -i 's/id:5:initdefault:/id:3:initdefault:/' /etc/inittab
``` ```
## 参考资料 ## 5. 参考资料
- [CentOS7 使用 firewalld 打开关闭防火墙与端口](https://www.cnblogs.com/moxiaoan/p/5683743.html) - [CentOS7 使用 firewalld 打开关闭防火墙与端口](https://www.cnblogs.com/moxiaoan/p/5683743.html)

View File

@ -1,13 +1,3 @@
---
title: samba 使用详解
date: 2018-09-28
categories:
- linux
tags:
- linux
- windows
---
# samba 使用详解 # samba 使用详解
> samba 是在 Linux 和 UNIX 系统上实现 SMB 协议的一个免费软件。 > samba 是在 Linux 和 UNIX 系统上实现 SMB 协议的一个免费软件。
@ -16,28 +6,6 @@ tags:
> >
> 关键词:`samba`, `selinux` > 关键词:`samba`, `selinux`
<!-- TOC depthFrom:2 depthTo:3 -->
- [1. 安装配置 samba](#1-安装配置-samba)
- [1.1. 查看是否已经安装 samba](#11-查看是否已经安装-samba)
- [1.2. 安装 samba 工具](#12-安装-samba-工具)
- [1.3. 配置 samba](#13-配置-samba)
- [1.4. 创建 samba 用户](#14-创建-samba-用户)
- [1.5. 启动 samba 服务](#15-启动-samba-服务)
- [1.6. 为 samba 添加防火墙规则](#16-为-samba-添加防火墙规则)
- [1.7. 测试 samba 服务](#17-测试-samba-服务)
- [1.8. 访问 samba 服务共享的目录](#18-访问-samba-服务共享的目录)
- [2. 配置详解](#2-配置详解)
- [2.1. samba 默认配置](#21-samba-默认配置)
- [2.2. 全局参数 [global]](#22-全局参数-global)
- [2.3. 共享参数 [共享名]](#23-共享参数-共享名)
- [3. 常见问题](#3-常见问题)
- [3.1. 你可能没有权限访问网络资源](#31-你可能没有权限访问网络资源)
- [3.2. window 下对 samba 的清理操作](#32-window-下对-samba-的清理操作)
- [4. 参考资料](#4-参考资料)
<!-- /TOC -->
## 1. 安装配置 samba ## 1. 安装配置 samba
本文将以一个完整的示例来展示如何配置 samba 来实现 Linux 和 Windows 的文件共享。 本文将以一个完整的示例来展示如何配置 samba 来实现 Linux 和 Windows 的文件共享。