完善自己平时积累的命令和使用示例

This commit is contained in:
daydaygo 2018-06-08 15:13:21 +08:00 committed by 小弟调调™
parent 4af9bdd324
commit bd1d58c152
40 changed files with 930 additions and 394 deletions

14
command/ack.md Normal file
View File

@ -0,0 +1,14 @@
ack
===
比grep好用的文本搜索工具
## 示例
```
# install
apk install ack
# use
ack
```

100
command/apk.md Normal file
View File

@ -0,0 +1,100 @@
apk
===
Alpine Linux 下的包管理工具
## quick start
```
apk install xxx
apk search xxx # 支持正则
apk info xxx # 查看包的详细信息
apk show # list local package
```
## 笔记
还是蛮喜欢 alpine 的,简单纯粹
```
apk add iproute2 # ss vs netstat
ss -ptl
apk add drill # drill vs nslookup&dig
crond # 开启 cron 服务
crontab -l -e
apk add xxx
apk search -v xxx
apk info -a xxx
apk info
echo -e "http://mirrors.aliyun.com/alpine/v3.6/main\nhttp://mirrors.aliyun.com/alpine/v3.6/community" > /etc/apk/repositories
apk update
# storage
ibu # alpine local backup
# network
echo "shortname" > /etc/hostname
hostname -F /etc/hostname
/etc/hosts
/etc/resolv.conf # conig DNS
modprobe ipv6 # enable ipv6
echo "ipv6" >> /etc/modules
iface # config interface
apk add iptables ip6tables iptables-doc
/etc/init.d/networking restart # activate change
apke add iputils # IPv6 traceroute
traceroute6 ipv6.google.com
awall # alpine wall
# setup a openvpn server
# post-install
/etc/apk/repositories
apk add cherokee --update-cache --repository http://dl-3.alpinelinux.org/alpine/edge/testing/ --allow-untrusted
apk search -v --description 'NTP' # show description and search from description
apk info -a zlib
apk info -vv|sort
apk info -r -R # require / depency
apk version -v -l '<' # show available updates
apk upgrade -U -a
apk add -u xxx # update xxx
/etc/runlevels # runlevel
apk add openrc # use openrc for init system
rc-update add xxx # set to start on
rc-service xxx start # equal -> /etc/init.d/xxx start
rc-status
adduser xxx
passwd xxx
apk add ansible # server
ssh-keygen
/etc/ansible/hosts
apk add python # node
ssh-copy-id
apk add man man-pages mdocml-apropos less less-doc
export PAGER=less
/etc/rc.conf # /etc/rc.conf -> funny character
apk add bash bash-doc bash-completion # bash
apk add util-linux pciutils usbutils coreutils binutils findutils grep # grep / awk
apk add build-base gcc abuild binutils binutils-doc gcc-doc # compile
apk add cmake cmake-doc extra-cmake-modules extra-cmake-modules-doc
apk add ccache ccache-doc
apk add docker # docker
rc-update add docker boot
rc-service docker start
apk add py-pip
pip install docker-compose
ln -s /usr/bin/docker-compose /usr/bin/doc
# application
apk add openssh # ssh
rc-update add sshd
/etc/init.d/sshd start
/etc/sshd_config
apk add dropbear # another openssh implementation
```

12
command/cloc.md Normal file
View File

@ -0,0 +1,12 @@
cloc
===
代码行数统计
## quick start
```
apk add cloc
cloc dir --exclude-dir # 代码行数统计
```

View File

@ -7,13 +7,13 @@ curl
**curl命令** 是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载所以是综合传输工具但按传统习惯称curl为下载工具。作为一款强力工具curl支持包括HTTP、HTTPS、ftp等众多协议还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化curl可以祝一臂之力。
### 语法
### 语法
```
curl(选项)(参数)
```
### 选项
### 选项
<table border="0" cellpadding="0" cellspacing="0">
@ -119,9 +119,9 @@ curl(选项)(参数)
</table>
### 实例
### 实例
**文件下载**
**文件下载**
curl命令可以用来执行下载、发送各种HTTP请求指定HTTP头部等操作。如果系统没有curl可以使用`yum install curl`安装也可以下载安装。curl是将下载文件输出到stdout将进度信息输出到stderr不显示进度信息使用`--silent`选项。
@ -144,7 +144,7 @@ curl http://man.linuxde.net/test.iso -o filename.iso --progress
######################################### 100.0%
```
**断点续传**
**断点续传**
curl能够从特定的文件偏移处继续下载它可以通过指定一个便宜量来下载部分文件
@ -155,7 +155,7 @@ curl URL/File -C 偏移量
curl -C -URL
```
**使用curl设置参照页字符串**
**使用curl设置参照页字符串**
参照页是位于HTTP头部中的一个字符串用来表示用户是从哪个页面到达当前页面的如果用户点击网页A中的某个连接那么用户就会跳转到B网页网页B头部的参照页字符串就包含网页A的URL。
@ -165,7 +165,7 @@ curl -C -URL
curl --referer http://www.google.com http://man.linuxde.net
```
**用curl设置cookies**
**用curl设置cookies**
使用`--cookie "COKKIES"`选项来指定cookie多个cookie使用分号分隔
@ -179,7 +179,7 @@ curl http://man.linuxde.net --cookie "user=root;pass=123456"
curl URL --cookie-jar cookie_file
```
**用curl设置用户代理字符串**
**用curl设置用户代理字符串**
有些网站访问会提示只能使用IE浏览器来访问这是因为这些网站设置了检查用户代理可以使用curl把用户代理设置为IE这样就可以访问了。使用`--user-agent`或者`-A`选项:
@ -194,7 +194,7 @@ curl URL -A "Mozilla/5.0"
curl -H "Host:man.linuxde.net" -H "accept-language:zh-cn" URL
```
**curl的带宽控制和下载配额**
**curl的带宽控制和下载配额**
使用`--limit-rate`限制curl的下载速度
@ -212,7 +212,7 @@ curl URL --max-filesize bytes
如果文件大小超出限制命令则返回一个非0退出码如果命令正常则返回0。
**用curl进行认证**
**用curl进行认证**
使用curl选项 -u 可以完成HTTP或者FTP的认证可以指定密码也可以不指定密码在后续操作中输入密码
@ -221,7 +221,7 @@ curl -u user:pwd http://man.linuxde.net
curl -u user http://man.linuxde.net
```
**只打印响应头部信息**
**只打印响应头部信息**
通过`-I`或者`-head`可以只打印出HTTP头部信息
@ -257,4 +257,10 @@ curl -d "param1=value1&param2=value2" "http://www.wangchujiang.com"
curl -l -H "Content-type: application/json" -X POST -d '{"phone":"13521389587","password":"test"}' http://wangchujiang.com/apis/users.json
```
**获取本机外网ip**
```bash
curl ipecho.net/plain
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

View File

@ -1,19 +1,19 @@
dos2unix
===
将DOS格式文本文件转换成Unix格式
## 补充说明
**dos2unix命令** 用来将DOS格式的文本文件转换成UNIX格式的DOS/MAC to UNIX text file format converter。DOS下的文本文件是以`\r\n`作为断行标志的表示成十六进制就是0D 0A。而Unix下的文本文件是以\n作为断行标志的表示成十六进制就是0A。DOS格式的文本文件在Linux底下用较低版本的vi打开时行尾会显示`^M`而且很多命令都无法很好的处理这种格式的文件如果是个shell脚本。而Unix格式的文本文件在Windows下用Notepad打开时会拼在一起显示。因此产生了两种格式文件相互转换的需求对应的将UNIX格式文本文件转成成DOS格式的是unix2dos命令。
### 语法
### 语法
```
dos2unix [-hkqV] [-c convmode] [-o file ...] [-n infile outfile ...]
```
### 选项
### 选项
```
-k保持输出文件的日期不变
@ -24,11 +24,11 @@ dos2unix [-hkqV] [-c convmode] [-o file ...] [-n infile outfile ...]
-n写入到新文件
```
### 参数
### 参数
参数:需要转换到文件。
### 实例
### 实例
最简单的用法就是dos2unix直接跟上文件名
@ -58,5 +58,10 @@ dos2unix -k -o file1 file2 file3
dos2unix -k -n oldfile newfile
```
转换当前目录下所有文件
```
find -type f | xargs dos2unix
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

View File

@ -1,19 +1,19 @@
du
===
显示每个文件和目录的磁盘使用空间
## 补充说明
**du命令** 也是查看使用空间的但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看还是和df命令有一些区别的。
### 语法
### 语法
```
du [选项][文件]
```
### 选项
### 选项
```
-a或-all 显示目录中个别文件的大小。
@ -33,7 +33,7 @@ du [选项][文件]
-l或--count-links 重复计算硬件链接的文件。
```
### 实例
### 实例
显示目录或者文件所占空间:
@ -98,5 +98,10 @@ root@localhost [test]# du
1288 test
```
显示总和的大小且易读:
```
du -sh $dir
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

View File

@ -7,13 +7,13 @@ find
**find命令** 用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时不设置任何参数则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
### 语法
### 语法
```
find(选项)(参数)
```
### 选项
### 选项
```
-amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;
@ -73,7 +73,7 @@ find(选项)(参数)
-xtype<文件类型>:此参数的效果和指定“-type”参数类似差别在于它针对符号连接检查。
```
### 参数
### 参数
起始目录:查找文件的起始目录。
@ -84,7 +84,7 @@ find(选项)(参数)
find . -type f -name "*" | xargs grep "140.206.111.111"
```
#### 根据文件或者正则表达式进行匹配
#### 根据文件或者正则表达式进行匹配
列出当前目录及子目录下所有文件和文件夹
@ -111,7 +111,7 @@ find . \( -name "*.txt" -o -name "*.pdf" \)
find . -name "*.txt" -o -name "*.pdf"
find . -name "*.txt" -o -name "*.pdf"
```
匹配文件路径或者文件
@ -132,7 +132,7 @@ find . -regex ".*\(\.txt\|\.pdf\)$"
find . -iregex ".*\(\.txt\|\.pdf\)$"
```
#### 否定参数
#### 否定参数
找出/home下不是以.txt结尾的文件
@ -140,7 +140,7 @@ find . -iregex ".*\(\.txt\|\.pdf\)$"
find /home ! -name "*.txt"
```
#### 根据文件类型进行搜索
#### 根据文件类型进行搜索
```
find . -type 类型参数
@ -156,7 +156,7 @@ find . -type 类型参数
* **s** 套接字
* **p** Fifo
#### 基于目录深度搜索
#### 基于目录深度搜索
向下最大深度限制为3
@ -170,7 +170,7 @@ find . -maxdepth 3 -type f
find . -mindepth 2 -type f
```
#### 根据文件时间戳进行搜索
#### 根据文件时间戳进行搜索
```
find . -type f 时间戳
@ -212,7 +212,7 @@ find . -type f -amin +10
find . -type f -newer file.log
```
#### 根据文件大小进行匹配
#### 根据文件大小进行匹配
```
find . -type f -size 文件大小单元
@ -245,7 +245,7 @@ find . -type f -size -10k
find . -type f -size 10k
```
#### 删除匹配文件
#### 删除匹配文件
删除当前目录下所有.txt文件
@ -253,7 +253,7 @@ find . -type f -size 10k
find . -type f -name "*.txt" -delete
```
#### 根据文件权限/所有权进行匹配
#### 根据文件权限/所有权进行匹配
当前目录下搜索出权限为777的文件
@ -279,7 +279,7 @@ find . -type f -user tom
find . -type f -group sunk
```
#### 借助`-exec`选项与其他命令结合使用
#### 借助`-exec`选项与其他命令结合使用
找出当前目录下所有root的文件并把所有权更改为用户tom
@ -321,7 +321,7 @@ find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;
-exec ./text.sh {} \;
```
#### 搜索但跳出指定的目录
#### 搜索但跳出指定的目录
查找当前目录或者子目录下所有.txt文件但是跳过子目录sk
@ -329,7 +329,7 @@ find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;
find . -path "./sk" -prune -o -name "*.txt" -print
```
#### find其他技巧收集
#### find其他技巧收集
要列出所有长度为零的文件
@ -373,5 +373,17 @@ find /data -owner bcotton
find ~ -perm -o=r
```
删除 mac 下自动生成的文件
```
find ./ -name '__MACOSX' -depth -exec rm -rf {} \;
```
统计代码行数
```
find . -name "*.java"|xargs cat|grep -v ^$|wc -l # 代码行数统计, 排除空行
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

42
command/fishshell.md Normal file
View File

@ -0,0 +1,42 @@
# fishshell
比 bash 更好用的 shell
## quick start
> [fish-shell](http://fishshell.com):强烈推荐
配置文件: `fish_config`
Running Commands: 兼容 bash 等shell的命令执行方式
Getting Help: `help/man cmd -> browser/terminal`
Syntax Highlighting: 实时检查命令是否正确
Wildcards: 支持缩写 `*` 递归 匹配
Pipes and Redirections: 使用 `^` 代表 stderr
Autosuggestions: 自动建议, 可以使用 `Ctrl-f / ->` 来补全
Tab Completions: 更强大的 tab 补全
Variables: 使用 set 设置
Exit Status: 使用 `echo $status` 替代 `$?`
Exports (Shell Variables)
Lists: all variables in fish are really lists
Command Substitutions: 使用 `(cmd)` 来执行命令, 而不是 反引号、`$()`
Combiners (And, Or, Not): 不支持使用符合来表示逻辑运算
Functions使用 `$argv` 替代 `$1`
Conditionals (If, Else, Switch) / Functions / Loops: 更人性化的写法(参考 py)
Prompt: `function fish_prompt` 实现
Startup (Where's .bashrc?): `~/.config/fish/config.fish`,更好的方式是 autoloading-function、universal-variables
Autoloading Functions: ` ~/.config/fish/functions/.`
Universal Variablesa variable whose value is shared across all instances of fish
```
set name 'czl' # 设置变量,替代 name=czl
echo $name
echo $status # exit status替代 $?
env # 环境变量
set -x MyVariable SomeValue # 替代 export
set -e MyVariable
set PATH $PATH /usr/local/bin # 使用 lists 记录 PATH
set -U fish_user_paths /usr/local/bin $fish_user_paths # 永久生效
touch "testing_"(date +%s)".txt" # command subtitution替代 `date +%s`
cp file.txt file.txt.bak; and echo 'back success'; or echo 'back fail' # combiner
functions # 列出 fish 下定义的函数
```

View File

@ -1,6 +1,6 @@
gdb
===
功能强大的程序调试器
## 补充说明
@ -25,7 +25,7 @@ gdb
<td>file <文件名></td>
<td>加载被调试的可执行程序文件。
<td>加载被调试的可执行程序文件。
因为一般都在被调试程序所在目录下执行GDB因而文本名不需要带路径。</td>
<td>(gdb) file gdb-sample</td>
@ -36,7 +36,7 @@ gdb
<td>r</td>
<td>Run的简写运行被调试的程序。
<td>Run的简写运行被调试的程序。
如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。</td>
<td>(gdb) r</td>
@ -55,17 +55,17 @@ gdb
<tr>
<td>b <行号>
b <函数名称>
b *<函数名称>
<td>b <行号>
b <函数名称>
b *<函数名称>
b *<代码地址> d [编号]</td>
<td>b: Breakpoint的简写设置断点。两可以使用“行号”“函数名称”“执行地址”等方式指定断点位置。
<td>b: Breakpoint的简写设置断点。两可以使用“行号”“函数名称”“执行地址”等方式指定断点位置。
其中在函数名称前面加“*”符号表示将断点设置在“由编译器生成的prolog代码处”。如果不了解汇编可以不予理会此用法。 d: Delete breakpoint的简写删除指定编号的某个断点或删除所有断点。断点编号从1开始递增。</td>
<td>(gdb) b 8
(gdb) b main
(gdb) b *main
<td>(gdb) b 8
(gdb) b main
(gdb) b *main
(gdb) b *0x804835c (gdb) d</td>
</tr>
@ -74,11 +74,11 @@ b *<代码地址> d [编号]</td>
<td>s, n</td>
<td>s: 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数;
n: 执行一行源程序代码,此行代码中的函数调用也一并执行。 s 相当于其它调试器中的“Step Into (单步跟踪进入)”;
<td>s: 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数;
n: 执行一行源程序代码,此行代码中的函数调用也一并执行。 s 相当于其它调试器中的“Step Into (单步跟踪进入)”;
n 相当于其它调试器中的“Step Over (单步跟踪)”。 这两个命令必须在有源代码调试信息的情况下才可以使用GCC编译时使用“-g”参数</td>
<td>(gdb) s
<td>(gdb) s
(gdb) n</td>
</tr>
@ -89,7 +89,7 @@ n 相当于其它调试器中的“Step Over (单步跟踪)”。 这两个命
<td>si命令类似于s命令ni命令类似于n命令。所不同的是这两个命令si/ni所针对的是汇编指令而s/n针对的是源代码。</td>
<td>(gdb) si
<td>(gdb) si
(gdb) ni</td>
</tr>
@ -100,7 +100,7 @@ n 相当于其它调试器中的“Step Over (单步跟踪)”。 这两个命
<td>Print的简写显示指定变量临时变量或全局变量的值。</td>
<td>(gdb) p i
<td>(gdb) p i
(gdb) p nGlobalVar</td>
</tr>
@ -109,9 +109,9 @@ n 相当于其它调试器中的“Step Over (单步跟踪)”。 这两个命
<td>display ... undisplay <编号></td>
<td>display设置程序中断后欲显示的数据及其格式。
例如,如果希望每次程序中断后可以看到即将被执行的下一条汇编指令,可以使用命令
“display /i $pc”
<td>display设置程序中断后欲显示的数据及其格式。
例如,如果希望每次程序中断后可以看到即将被执行的下一条汇编指令,可以使用命令
“display /i $pc”
其中 $pc 代表当前汇编指令,/i 表示以十六进行显示。当需要关心汇编代码时,此命令相当有用。 undispaly取消先前的display设置编号从1开始递增。</td>
<td>(gdb) display /i $pc (gdb) undisplay 1</td>
@ -142,7 +142,7 @@ n 相当于其它调试器中的“Step Over (单步跟踪)”。 这两个命
<td>help [命令名称]</td>
<td>GDB帮助命令提供对GDB名种命令的解释说明。
<td>GDB帮助命令提供对GDB名种命令的解释说明。
如果指定了“命令名称”参数则显示该命令的详细说明如果没有指定参数则分类显示所有GDB命令供用户进一步浏览和查询。</td>
<td>(gdb) help</td>
@ -153,13 +153,13 @@ n 相当于其它调试器中的“Step Over (单步跟踪)”。 这两个命
</table>
### 语法
### 语法
```
gdb(选项)(参数)
```
### 选项
### 选项
```
-cd设置工作目录
@ -169,11 +169,11 @@ gdb(选项)(参数)
-s设置读取的符号表文件。
```
### 参数
### 参数
文件:二进制可执行程序。
### 实例
### 实例
以下是linux下dgb调试的一个实例先给出一个示例用的小程序C语言代码
@ -457,5 +457,50 @@ eax 0xbffff6a4 -1073744220
The program is running. exit anyway? (y or n)
```
## 补充内容
> gdb 教程:[慕课网-Linux C语言指针与内存-第三章](http://www.imooc.com/learn/394)
如果删除源代码, 就无法显示行号等辅助信息了
```
gcc -g gdb.c -o gdb.out # -g 支持gdb调试; -o 输出, 默认为 a.out
gdb gdb.out # 进入 gdb 调试环境
enter # 继续执行上条命令
l # 列出源代码, 默认 10 行, 按 l 继续
start # 开始单步调试, 默认 main() 第一行
p a # 查看 a 变量的值
n # 继续到下一行
s # 进入子函数
bt # 查看函数栈
f 1 # 切换函数栈
q 退出调试
```
```c
# 测试用代码
#include <stdio.h>
void change(int a, int b){
int tmp=a;
a=b; b=tmp;
}
void change2(int *a, int *b){
int tmp=*a;
*a=*b; *b=tmp;
}
int main(){
int a=5,b=3;
change(a,b);
printf("change:\na=%d\nb=%d\n", a,b);
change2(&a,&b);
printf("change2:\na=%d\nb=%d\n", a,b);
}
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

View File

@ -9,13 +9,13 @@ gzip
gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令既方便又好用。gzip不仅可以用来压缩大的、较少使用的文件以节省磁盘空间还可以和tar命令一起构成Linux操作系统中比较流行的压缩文件格式。据统计gzip命令对文本文件有60%70%的压缩率。减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。
### 语法
### 语法
```
gzip(选项)(参数)
```
### 选项
### 选项
```
-a或——ascii使用ASCII文字模式
@ -35,14 +35,14 @@ gzip(选项)(参数)
-<压缩效率>压缩效率是一个介于1~9的数值预设值为“6”指定愈大的数值压缩效率就会愈高
--best此参数的效果和指定“-9”参数相同
--fast此参数的效果和指定“-1”参数相同。
-num 用指定的数字num调整压缩的速度-1或--fast表示最快压缩方法低压缩比-9或--best表示最慢压缩方法高压缩比。系统缺省值为6。
-num 用指定的数字num调整压缩的速度-1或--fast表示最快压缩方法低压缩比-9或--best表示最慢压缩方法高压缩比。系统缺省值为6。
```
### 参数
### 参数
文件列表:指定要压缩的文件列表。
### 实例
### 实例
把test6目录下的每个文件压缩成.gz文件

View File

@ -11,13 +11,13 @@ history
历史命令是被保存在内存中的当退出或者登录shell时会自动保存或读取。在内存中历史命令仅能够存储1000条历史命令该数量是由环境变量`HISTSIZE`进行控制。
### 语法
### 语法
```
history(选项)(参数)
```
### 选项
### 选项
```
-c清空当前历史命令
@ -26,11 +26,11 @@ history(选项)(参数)
-w将当前历史命令缓冲区命令写入历史命令文件中。
```
### 参数
### 参数
n打印最近的n条历史命令。
### 实例
### 实例
使用history命令显示最近使用的10条历史命令输入如下命令
@ -63,4 +63,15 @@ n打印最近的n条历史命令。
[root@localhost ~]# history -c
```
更多实例:
```
history -cw
`~/.bash_history`: 保存历史命令
`/etc/profile` -> HISSIZE: 历史命令保存数量
推荐添加 h -> history, hsi -> history|grep 别名
`!n`: 执行第 n 条历史命令
`!xxx`: 执行最后一条 xxx 开头的命令
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

View File

@ -1,19 +1,19 @@
hostname
===
显示和设置系统的主机名
## 补充说明
**hostname命令** 用于显示和设置系统的主机名称。环境变量HOSTNAME也保存了当前的主机名。在使用hostname命令设置主机名后系统并不会永久保存新的主机名重新启动机器之后还是原来的主机名。如果需要永久修改主机名需要同时修改`/etc/hosts`和`/etc/sysconfig/network`的相关内容。
### 语法
### 语法
```
hostname(选项)(参数)
```
### 选项
### 选项
```
-v详细信息模式
@ -25,15 +25,20 @@ hostname(选项)(参数)
-y显示NIS域名。
```
### 参数
### 参数
主机名:指定要设置的主机名。
### 实例
### 实例
```
[root@AY1307311912260196fcZ ~]# hostname
AY1307311912260196fcZ
# change hostname
hostname newname # for now
vi /etc/hosts # forever
reboot
```

View File

@ -40,13 +40,13 @@ Linux上常用的防火墙软件
<!-- /TOC -->
### 语法
### 语法
```
iptables(选项)(参数)
```
### 选项
### 选项
```bash
-t, --table table 对指定的表 table 进行操作, table 必须是 raw natfiltermangle 中的一个。如果不指定此选项,默认的是 filter 表。
@ -124,14 +124,14 @@ iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协
3. mangle功能:修改报文原数据是5个链都可以做PREROUTINGINPUTFORWARDOUTPUTPOSTROUTING
我们修改报文原数据就是来修改TTL的。能够实现将数据包的元数据拆开在里面做标记/修改内容的。而防火墙标记其实就是靠mangle来实现的。
小扩展:
- 对于filter来讲一般只能做在3个链上INPUT FORWARD OUTPUT
- 对于nat来讲一般也只能做在3个链上PREROUTING OUTPUT POSTROUTING
- 而mangle则是5个链都可以做PREROUTINGINPUTFORWARDOUTPUTPOSTROUTING
iptables/netfilter这款软件是工作在用户空间的它可以让规则进行生效的本身不是一种服务而且规则是立即生效的。而我们iptables现在被做成了一个服务可以进行启动停止的。启动则将规则直接生效停止则将规则撤销。
iptables/netfilter这款软件是工作在用户空间的它可以让规则进行生效的本身不是一种服务而且规则是立即生效的。而我们iptables现在被做成了一个服务可以进行启动停止的。启动则将规则直接生效停止则将规则撤销。
iptables还支持自己定义链。但是自己定义的链必须是跟某种特定的链关联起来的。在一个关卡设定指定当有数据的时候专门去找某个特定的链来处理当那个链处理完之后再返回。接着在特定的链中继续检查。
@ -159,40 +159,40 @@ iptables还支持自己定义链。但是自己定义的链必须是跟某种
- **LOG** :日志记录。
```bash
┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓
┌───────────────┐ ┃ Network ┃
│ table: filter │ ┗━━━━━━━┳━━━━━━━┛
│ chain: INPUT │◀────┐ │
└───────┬───────┘ │ ▼
│ │ ┌───────────────────┐
┌ ▼ ┐ │ │ table: nat │
│local process│ │ │ chain: PREROUTING │
└ ┘ │ └─────────┬─────────┘
│ │ │
┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓
┌───────────────┐ ┃ Network ┃
│ table: filter │ ┗━━━━━━━┳━━━━━━━┛
│ chain: INPUT │◀────┐ │
└───────┬───────┘ │ ▼
│ │ ┌───────────────────┐
┌ ▼ ┐ │ │ table: nat │
│local process│ │ │ chain: PREROUTING │
└ ┘ │ └─────────┬─────────┘
│ │ │
▼ │ ▼ ┌─────────────────┐
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │table: nat │
Routing decision └───── outing decision ─────▶│chain: PREROUTING│
┅┅┅┅┅┅┅┅┅┳┅┅┅┅┅┅┅┅┅ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ └────────┬────────┘
│ │
▼ │
┌───────────────┐ │
│ table: nat │ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │
│ chain: OUTPUT │ ┌─────▶ outing decision ◀──────────────┘
└───────┬───────┘ │ ┅┅┅┅┅┅┅┅┳┅┅┅┅┅┅┅┅
│ │ │
▼ │ ▼
┌───────────────┐ │ ┌────────────────────┐
│ table: filter │ │ │ chain: POSTROUTING │
│ chain: OUTPUT ├────┘ └──────────┬─────────┘
└───────────────┘ │
┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓
┃ Network ┃
┗━━━━━━━━━━━━━━━┛
│ │
▼ │
┌───────────────┐ │
│ table: nat │ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │
│ chain: OUTPUT │ ┌─────▶ outing decision ◀──────────────┘
└───────┬───────┘ │ ┅┅┅┅┅┅┅┅┳┅┅┅┅┅┅┅┅
│ │ │
▼ │ ▼
┌───────────────┐ │ ┌────────────────────┐
│ table: filter │ │ │ chain: POSTROUTING │
│ chain: OUTPUT ├────┘ └──────────┬─────────┘
└───────────────┘ │
┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓
┃ Network ┃
┗━━━━━━━━━━━━━━━┛
```
### 实例
### 实例
#### 空当前的所有规则和计数
@ -205,14 +205,14 @@ iptables -Z # 清空计数
#### 配置允许ssh端口连接
```bash
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
# 22为你的ssh端口 -s 192.168.1.0/24表示允许这个网段的机器来连接其它网段的ip地址是登陆不了你的机器的。 -j ACCEPT表示接受这样的请求
```
#### 允许本地回环地址可以正常使用
```bash
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
#本地圆环地址就是那个127.0.0.1,是本机上使用的,它进与出都设置为允许
iptables -A OUTPUT -o lo -j ACCEPT
```
@ -245,7 +245,7 @@ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 已经建立
```bash
cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak # 任何改动之前先备份,请保持这一优秀的习惯
iptables-save > /etc/sysconfig/iptables
iptables-save > /etc/sysconfig/iptables
cat /etc/sysconfig/iptables
```
@ -331,19 +331,19 @@ iptables -A FORWARD -o eth0
```
iptables -L -n -v
Chain INPUT (policy DROP 48106 packets, 2690K bytes)
pkts bytes target prot opt in out source destination
5075 589K ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
pkts bytes target prot opt in out source destination
5075 589K ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
191K 90M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
1499K 133M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
4364K 6351M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
6256 327K ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
6256 327K ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes)
pkts bytes target prot opt in out source destination
5075 589K ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0
pkts bytes target prot opt in out source destination
5075 589K ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0
```
#### 启动网络转发规则
@ -371,14 +371,14 @@ iptables -A INPUT -p tcp -m string --algo kmp --string "test" -j REJECT --reject
iptables -L
# Chain INPUT (policy ACCEPT)
# target prot opt source destination
# target prot opt source destination
# REJECT tcp -- anywhere anywhere STRING match "test" ALGO name kmp TO 65535 reject-with tcp-reset
#
#
# Chain FORWARD (policy ACCEPT)
# target prot opt source destination
#
# target prot opt source destination
#
# Chain OUTPUT (policy ACCEPT)
# target prot opt source destination
# target prot opt source destination
```
#### 阻止Windows蠕虫的攻击
@ -393,5 +393,126 @@ 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
```
## 更多实例
> 用iptables搭建一套强大的安全防护盾 http://www.imooc.com/learn/389
iptables: linux 下应用层防火墙工具
iptables 5链: 对应 Hook point
netfilter: linux 操作系统核心层内部的一个数据包处理模块
Hook point: 数据包在 netfilter 中的挂载点; `PRE_ROUTING / INPUT / OUTPUT / FORWARD / POST_ROUTING`
iptables & netfilter
![](http://7xq89b.com1.z0.glb.clouddn.com/netfilter&iptables.jpg)
iptables 4表5链
![](http://7xq89b.com1.z0.glb.clouddn.com/iptables-data-stream.jpg)
iptables rules
![](http://7xq89b.com1.z0.glb.clouddn.com/iptables-rules.jpg)
- 4表
**filter**: 访问控制 / 规则匹配
**nat**: 地址转发
mangle / raw
- 规则
数据访问控制: ACCEPT / DROP / REJECT
数据包改写(nat -> 地址转换): snat / dnat
信息记录: log
## 使用场景实例
- 场景一
开放 tcp 10-22/80 端口
开放 icmp
其他未被允许的端口禁止访问
存在的问题: 本机无法访问本机; 本机无法访问其他主机
- 场景二
ftp: 默认被动模式(服务器产生随机端口告诉客户端, 客户端主动连接这个端口拉取数据)
vsftpd: 使 ftp 支持主动模式(客户端产生随机端口通知服务器, 服务器主动连接这个端口发送数据)
- 场景三
允许外网访问:
web
http -> 80/tcp; https -> 443/tcp
mail
smtp -> 25/tcp; smtps -> 465/tcp
pop3 -> 110/tcp; pop3s -> 995/tcp
imap -> 143/tcp
内部使用:
file
nfs -> 123/udp
samba -> 137/138/139/445/tcp
ftp -> 20/21/tcp
remote
ssh -> 22/tcp
sql
mysql -> 3306/tcp
oracle -> 1521/tcp
- 场景四
nat 转发
- 场景五
防CC攻击
```
iptables -L -F -A -D # list flush append delete
# 场景一
iptables -I INPUT -p tcp --dport 80 -j ACCEPT # 允许 tcp 80 端口
iptables -I INPUT -p tcp --dport 10:22 -j ACCEPT # 允许 tcp 10-22 端口
iptables -I INPUT -p icmp -j ACCEPT # 允许 icmp
iptables -A INPUT -j REJECT # 添加一条规则, 不允许所有
# 优化场景一
iptables -I INPUT -i lo -j ACCEPT # 允许本机访问
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许访问外网
iptables -I INPUT -p tcp --dport 80 -s 10.10.188.233 -j ACCEPT # 只允许固定ip访问80
# 场景二
vi /etc/vsftpd/vsftpd.conf # 使用 vsftpd 开启 ftp 主动模式
port_enable=yes
connect_from_port_20=YES
iptables -I INPUT -p tcp --dport 21 -j ACCEPT
vi /etc/vsftpd/vsftpd.conf # 建议使用 ftp 被动模式
pasv_min_port=50000
pasv_max_port=60000
iptables -I INPUT -p tcp --dport 21 -j ACCEPT
iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT
# 还可以使用 iptables 模块追踪来自动开发对应的端口
# 场景三
iptables -I INPUT -i lo -j ACCEPT # 允许本机访问
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许访问外网
iptables -I INPUT -s 10.10.155.0/24 -j ACCEPT # 允许内网访问
iptables -I INPUT -p tcp -m multiport --dports 80,1723 -j ACCEPT # 允许端口, 80 -> http, 1723 -> vpn
iptables -A INPUT -j REJECT # 添加一条规则, 不允许所有
iptables-save # 保存设置到配置文件
# 场景四
iptables -t nat -L # 查看 nat 配置
iptables -t nat -A POST_ROUTING -s 10.10.177.0/24 -j SNAT --to 10.10.188.232 # SNAT
vi /etc/sysconfig/network # 配置网关
iptables -t nat -A POST_ROUTING -d 10.10.188.232 -p tcp --dport 80 -j DNAT --to 10.10.177.232:80 # DNAT
#场景五
iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT # 限制并发连接访问数
iptables -I INPUT -m limit --limit 3/hour --limit-burst 10 -j ACCEPT # limit模块; --limit-burst 默认为5
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

View File

@ -1,19 +1,20 @@
kill
===
删除执行中的程序或工作
## 补充说明
**kill命令** 用来删除执行中的程序或工作。kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或job指令查看。
### 语法
### 语法
```
kill(选项)(参数)
xkill # 图形化关闭程序
```
### 选项
### 选项
```
-a当处理当前进程时不限制命令名和进程号的对应关系
@ -23,11 +24,11 @@ kill(选项)(参数)
-u指定用户。
```
### 参数
### 参数
进程或作业识别号:指定要删除的进程或作业。
### 实例
### 实例
列出所有信号名称:
@ -51,7 +52,7 @@ kill(选项)(参数)
63) SIGRTMAX-1 64) SIGRTMAX
```
只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略, **下面是常用的信号:**
只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略, **下面是常用的信号:**
```
HUP 1 终端断线

View File

@ -1,7 +1,7 @@
locate
===
Apache服务器的性能测试工具
比 find 好用的文件查找工具
## 补充说明
@ -13,14 +13,13 @@ locate指定用在搜寻符合条件的档案它会去储存档案与目录
locate指令和find找寻档案的功能类似但locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库在 执行loacte时直接找该索引查询速度会较快索引数据库一般是由操作系统管理但也可以直接下达update强迫系统立即修改索引数据库。
### 语法
### 语法
```
locate [选择参数] [样式]
```
### 选项
### 选项
```
-e 将排除在寻找的范围之外。
@ -35,7 +34,7 @@ locate [选择参数] [样式]
-V 显示程式的版本讯息
```
### 实例
### 实例
实例1查找和pwd相关的所有文件
@ -58,7 +57,7 @@ root ~ # locate pwd
/usr/share/help/el/empathy/irc-join-pwd.page
```
实例2 搜索etc目录下所有以sh开头的文件
实例2 搜索etc目录下所有以sh开头的文件
```
root ~ # locate /etc/sh

View File

@ -1,7 +1,7 @@
lsof
===
显示Linux系统当前已打开的所有文件列表
显示Linux系统当前已打开的所有文件列表 `lsof -p pid`
## 补充说明
@ -9,13 +9,13 @@ lsof
在linux环境下任何事物都以文件的形式存在通过文件不仅仅可以访问常规数据还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等系统在后台都为该应用程序分配了一个文件描述符无论这个文件的本质如何该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。
### 语法
### 语法
```
lsof(选项)
```
### 选项
### 选项
```
-a列出打开文件存在的进程
@ -32,7 +32,7 @@ lsof(选项)
-v显示版本信息。
```
### 实例
### 实例
```
lsof
@ -64,7 +64,7 @@ events/0 6 root txt unknown /proc
events/1 7 root cwd DIR 8,2 4096 2 /
```
**lsof输出各列信息的意义如下**
**lsof输出各列信息的意义如下**
* COMMAND进程的名称
* PID进程标识符
@ -127,5 +127,10 @@ events/1 7 root cwd DIR 8,2 4096 2 /
9. NODE索引节点文件在磁盘上的标识
10. NAME打开文件的确切名称
列出指定进程号所打开的文件:
```
lsof -p $pid
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

12
command/mtr.md Normal file
View File

@ -0,0 +1,12 @@
mtr
===
比 traceroute 好用
## 实例
```
apk add mtr # 安装
mtr -r www.baidu.com # 使用
```

View File

@ -13,19 +13,19 @@ OpenSSL有两种运行模式交互模式和批处理模式。
OpenSSL整个软件包大概可以分成三个主要的功能部分密码算法库、SSL协议库以及应用程序。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。 
**对称加密算法**
**对称加密算法**
OpenSSL一共提供了8种对称加密算法其中7种是分组加密算法仅有的一种流加密算法是RC4。这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5都支持电子密码本模式ECB、加密分组链接模式CBC、加密反馈模式CFB和输出反馈模式OFB四种常用的分组密码加密模式。其中AES使用的加密反馈模式CFB和输出反馈模式OFB分组长度是128位其它算法使用的则是64位。事实上DES算法里面不仅仅是常用的DES算法还支持三个密钥和两个密钥3DES算法。 
**非对称加密算法**
**非对称加密算法**
OpenSSL一共实现了4种非对称加密算法包括DH算法、RSA算法、DSA算法和椭圆曲线算法EC。DH算法一般用户密钥交换。RSA算法既可以用于密钥交换也可以用于数字签名当然如果你能够忍受其缓慢的速度那么也可以用于数据加密。DSA算法则一般只用于数字签名。 
**信息摘要算法**
**信息摘要算法**
OpenSSL实现了5种信息摘要算法分别是MD2、MD5、MDC2、SHASHA1和RIPEMD。SHA算法事实上包括了SHA和SHA1两种信息摘要算法此外OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSS和DSS1。 
**密钥和证书管理**
**密钥和证书管理**
密钥和证书管理是PKI的一个重要组成部分OpenSSL为之提供了丰富的功能支持多种标准。 
@ -48,7 +48,7 @@ openssl rand -base64 10
nU9LlHO5nsuUvw==
**2、消息摘要算法应用例子**
**2、消息摘要算法应用例子**
用SHA1算法计算文件file.txt的哈西值输出到stdout
@ -86,7 +86,7 @@ nU9LlHO5nsuUvw==
# openssl sha1 -verify rsapublic.pem -signature rsasign.bin file.txt
```
**3、对称加密应用例子**
**3、对称加密应用例子**
对称加密应用例子用DES3算法的CBC模式加密文件plaintext.doc加密结果输出到文件ciphertext.bin。
@ -118,7 +118,7 @@ nU9LlHO5nsuUvw==
# openssl rc5 -in plaintext.doc -out ciphertext.bin -S C62CB1D49F158ADC -iv E9EDACA1BD7090C6 -K 89D4B1678D604FAA3DBFFD030A314B29
```
**4、Diffie-Hellman应用例子**
**4、Diffie-Hellman应用例子**
使用生成因子2和随机的1024-bit的素数产生D0ffie-Hellman参数输出保存到文件dhparam.pem
@ -132,7 +132,7 @@ nU9LlHO5nsuUvw==
# openssl dhparam -in dhparam.pem -noout -C
```
**5、DSA应用例子应用例子**
**5、DSA应用例子应用例子**
生成1024位DSA参数集并输出到文件dsaparam.pem。
@ -158,7 +158,7 @@ nU9LlHO5nsuUvw==
# openssl dsa -in dsaprivatekey.pem -out dsaprivatekey.pem -des3 -passin
```
**6、RSA应用例子**
**6、RSA应用例子**
产生1024位RSA私匙用3DES加密它口令为trousers输出到文件rsaprivatekey.pem
@ -220,5 +220,13 @@ cert.pem为X.509证书文件用私匙key,pem为mail.txt签名证书被包
# openssl smime -verify -in mail.sgn -out mail.txt
```
更多实例:
```
openssl version -a
openssl help
openssl genrsa -aes128 -out fd.key 2048 # pem format
openssl rsa -text -in fd.key
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

View File

@ -7,13 +7,13 @@ ps
**ps命令** 用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等总之大部分信息都是可以通过执行该命令得到的。
### 语法
### 语法
```
ps(选项)
```
### 选项
### 选项
```
-a显示所有终端机下执行的程序除了阶段作业领导者之外。

View File

@ -9,13 +9,13 @@ rm
注意使用rm命令要格外小心。因为一旦删除了一个文件就无法再恢复它。所以在删除文件之前最好再看一下文件的内容确定是否真要删除。rm命令可以用-i选项这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项系统会要求你逐一确定是否要删除。这时必须输入y并按Enter键才能删除文件。如果仅按Enter键或其他字符文件不会被删除。
### 语法
### 语法
```
rm (选项)(参数)
```
### 选项
### 选项
```
-d直接把欲删除的目录的硬连接数据删除成0删除该目录
@ -26,11 +26,11 @@ rm (选项)(参数)
-v显示指令的详细执行过程。
```
### 参数
### 参数
文件:指定被删除的文件列表,如果参数中含有目录,则必须加上`-r`或者`-R`选项。
### 实例
### 实例
交互式删除当前目录下的文件test和example
@ -51,14 +51,14 @@ Remove example ?y删除文件example)
**rm 命令删除文件**
```bash
# rm 文件1 文件2 ...
# rm 文件1 文件2 ...
rm testfile.txt
```
**rm 命令删除目录**
> rm -r [目录名称]
> -r 表示递归地删除目录下的所有文件和目录。
> rm -r [目录名称]
> -r 表示递归地删除目录下的所有文件和目录。
> -f 表示强制删除
```
@ -68,7 +68,7 @@ rm -r testdir
**删除操作前有确认提示**
> rm -i [文件/目录]
> rm -i [文件/目录]
```
rm -r -i testdir
@ -76,7 +76,7 @@ rm -r -i testdir
**rm 忽略不存在的文件或目录**
> -f 选项LCTT 译注:即 “force”让此次操作强制执行忽略错误提示
> -f 选项LCTT 译注:即 “force”让此次操作强制执行忽略错误提示
```
rm -f [文件...]
@ -93,7 +93,7 @@ rm -I file1 file2 file3
**删除根目录**
> 当然,删除根目录(/)是 Linux 用户最不想要的操作,这也就是为什么默认 rm 命令不支持在根目录上执行递归删除操作。
> 当然,删除根目录(/)是 Linux 用户最不想要的操作,这也就是为什么默认 rm 命令不支持在根目录上执行递归删除操作。
> 然而,如果你非得完成这个操作,你需要使用 --no-preserve-root 选项。当提供此选项rm 就不会特殊处理根目录(/)了。
```
@ -106,5 +106,4 @@ rm -I file1 file2 file3
rm -v [文件/目录]
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

View File

@ -1,19 +1,19 @@
rpm
===
RPM软件包的管理工具
## 补充说明
**rpm命令** 是RPM软件包的管理工具。rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序由于它遵循GPL规则且功能强大方便因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现让Linux易于安装升级间接提升了Linux的适用度。
### 语法
### 语法
```
rpm(选项)(参数)
```
### 选项
### 选项
```
-a查询所有套件
@ -35,13 +35,13 @@ rpm(选项)(参数)
-vv详细显示指令执行过程便于排错。
```
### 参数
### 参数
软件包指定要操纵的rpm软件包。
### 实例
### 实例
**如何安装rpm软件包**
**如何安装rpm软件包**
rpm软件包的安装可以使用程序rpm来完成。执行下面的命令
@ -66,7 +66,7 @@ rpm -ivh your-package.rpm
此包需要的一些软件你没有安装可以用`rpm --nodeps -i`来忽略此信息,也就是说`rpm -i --force --nodeps`可以忽略所有依赖关系和文件问题,什么包都能安装上,但这种强制安装的软件包不能保证完全发挥功能。
**如何安装.src.rpm软件包**
**如何安装.src.rpm软件包**
有些软件包是以.src.rpm结尾的这类软件包是包含了源代码的rpm包在安装时需要进行编译。这类软件包有两种安装方法
@ -99,7 +99,7 @@ rpmbuild -bb your-package.specs #一个和你的软件包同名的specs文
执行`rpm -i new-package.rpm`即可安装完成。
**如何卸载rpm软件包**
**如何卸载rpm软件包**
使用命令`rpm -e`包名,包名可以包含版本号等信息,但是不可以有后缀.rpm比如卸载软件包proftpd-1.2.8-1可以使用下列格式
@ -127,7 +127,7 @@ rpm -e proftpd-1
这说明这个软件被其他软件需要不能随便卸载可以用rpm -e --nodeps强制卸载
**如何不安装但是获取rpm包中的文件**
**如何不安装但是获取rpm包中的文件**
使用工具rpm2cpio和cpio
@ -139,7 +139,7 @@ rpm2cpio xxx.rpm | cpio --extract --make-directories
参数i和extract相同表示提取文件。v表示指示执行进程d和make-directory相同表示根据包中文件原来的路径建立目录m表示保持文件的更新时间。
**如何查看与rpm包相关的文件和其他信息**
**如何查看与rpm包相关的文件和其他信息**
下面所有的例子都假设使用软件包mysql-3.23.54a-11
@ -210,5 +210,33 @@ rpm -qf /usr/share/doc/proftpd-1.2.8/rfc/rfc0959.txt
proftpd-1.2.8-1
```
## 更多实例
> 库依赖: http://rpmfind.net/
源码包 -> 编译 -> 二进制包(rpm 包 / 系统默认包)
rpm 命名规则: 软件(软件名, 软件版本) + 系统(os 版本, os 位数)
rpm 校验: SM5DLUGT -> size modified(类型/权限) md5 device L(文件路径) user group time(modified time)
yum: 解决 rpm 依赖的问题
```
# rpm
mysql57-community-release-el6-8.noarch.rpm # 一个 rpm 包的例子
/var/lib/rpm/ # 包全名 -> 包名 的数据库
rpm -Uivh --dodeps xxx # upgrade install verbose hash
rpm -qilpfa|grep xxx # query info list(rpm包安装后的文件位置) package(rpm 包) file(文件属于哪个rpm文件) all
rpm -e # erase
rpm -V # verify
rpm2cpio | cpio -idv
# rpm 默认安装位置
/etc/ 配置文件
/usr/bin/ 可执行文件
/urs/lib/ 程序使用的函数库
/usr/share/doc/ 使用手册
/usr/share/man/ manual
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

View File

@ -1,13 +1,13 @@
rsync
===
远程数据同步工具
## 补充说明
**rsync命令** 是一个远程数据同步工具可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步这个算法只传送两个文件的不同部分而不是每次都整份传送因此速度相当快。 rsync是一个功能非常强大的工具其命令也有很多功能特色选项我们下面就对它的选项一一进行分析说明。
### 语法
### 语法
```
rsync [OPTION]... SRC DEST
@ -27,7 +27,7 @@ rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:`rsync -av /databack root@192.168.78.192::www`
6. 列远程机的文件列表。这类似于rsync传输不过只要在命令中省略掉本地机信息即可。如`rsync -v rsync://192.168.78.192/www`
### 选项
### 选项
```
-v, --verbose 详细模式输出。
@ -93,9 +93,9 @@ rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
-h, --help 显示帮助信息。
```
### 实例
### 实例
**SSH方式**
**SSH方式**
首先在服务端启动ssh服务
@ -104,7 +104,7 @@ service sshd start
启动 sshd [确定]
```
**使用rsync进行同步**
**使用rsync进行同步**
接下来就可以在客户端使用rsync命令来备份服务端上的数据了SSH方式是通过系统用户来进行备份的如下
@ -128,7 +128,7 @@ total size is 100663363 speedup is 1024.19
上面的信息描述了整个的备份过程,以及总共备份数据的大小。
**后台服务方式**
**后台服务方式**
启动rsync服务编辑`/etc/xinetd.d/rsync`文件,将其中的`disable=yes`改为`disable=no`并重启xinetd服务如下
@ -222,5 +222,4 @@ sent 258 bytes received 76 bytes 95.43 bytes/sec
total size is 150995011 speedup is 452080.87
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

11
command/rz.md Normal file
View File

@ -0,0 +1,11 @@
# rz
文件上传
## quick start
```
apk add lrzsz
rz
```

View File

@ -1,7 +1,7 @@
ss
===
获取socket统计信息iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息。
比 netstat 好用的socket统计信息iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息。
## 补充说明
@ -11,14 +11,14 @@ ss
天下武功唯快不破。ss快的秘诀在于它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块可以获得Linux 内核中第一手的信息这就确保了ss的快捷高效。当然如果你的系统中没有tcp_diagss也可以正常运行只是效率会变得稍慢。
### 语法
### 语法
```
ss [参数]
ss [参数] [过滤]
```
### 选项
### 选项
```
-h, --help 帮助信息
@ -49,7 +49,7 @@ ss [参数] [过滤]
FILTER := [ state TCP-STATE ] [ EXPRESSION ]
```
### 实例
### 实例
```bash
ss -t -a # 显示TCP连接
@ -69,8 +69,8 @@ time ss
# 匹配远程地址和端口号
# ss dst ADDRESS_PATTERN
ss dst 192.168.1.5
ss dst 192.168.119.113:http
ss dst 192.168.119.113:smtp
ss dst 192.168.119.113:http
ss dst 192.168.119.113:smtp
ss dst 192.168.119.113:443
# 匹配本地地址和端口号
@ -87,22 +87,22 @@ ss src 192.168.119.103:25
```bash
# ss dport OP PORT 远程端口和一个数比较;
# ss sport OP PORT 本地端口和一个数比较
# OP 可以代表以下任意一个:
# OP 可以代表以下任意一个:
# <= or le : 小于或等于端口号
# >= or ge : 大于或等于端口号
# == or eq : 等于端口号
# != or ne : 不等于端口号
# < or gt : 小于端口号
# > or lt : 大于端口号
ss sport = :http
ss dport = :http
ss dport \> :1024
ss sport \> :1024
ss sport \< :32000
ss sport eq :22
ss dport != :22
ss state connected sport = :http
ss \( sport = :http or sport = :https \)
ss sport = :http
ss dport = :http
ss dport \> :1024
ss sport \> :1024
ss sport \< :32000
ss sport eq :22
ss dport != :22
ss state connected sport = :http
ss \( sport = :http or sport = :https \)
ss -o state fin-wait-1 \( sport = :http or sport = :https \) dst 192.168.1/24
```
@ -110,8 +110,8 @@ ss -o state fin-wait-1 \( sport = :http or sport = :https \) dst 192.168.1/24
```bash
ss -4 state closing
# ss -4 state FILTER-NAME-HERE
# ss -6 state FILTER-NAME-HERE
# ss -4 state FILTER-NAME-HERE
# ss -6 state FILTER-NAME-HERE
# FILTER-NAME-HERE 可以代表以下任何一个:
# established、 syn-sent、 syn-recv、 fin-wait-1、 fin-wait-2、 time-wait、 closed、 close-wait、 last-ack、 listen、 closing、
# all : 所有以上状态
@ -121,20 +121,20 @@ ss -4 state closing
# big : 和bucket相反.
```
**显示ICP连接**
**显示ICP连接**
```
[root@localhost ~]# ss -t -a
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 0 *:3306 *:*
LISTEN 0 0 *:http *:*
LISTEN 0 0 *:ssh *:*
LISTEN 0 0 127.0.0.1:smtp *:*
ESTAB 0 0 112.124.15.130:42071 42.156.166.25:http
ESTAB 0 0 112.124.15.130:ssh 121.229.196.235:33398
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 0 *:3306 *:*
LISTEN 0 0 *:http *:*
LISTEN 0 0 *:ssh *:*
LISTEN 0 0 127.0.0.1:smtp *:*
ESTAB 0 0 112.124.15.130:42071 42.156.166.25:http
ESTAB 0 0 112.124.15.130:ssh 121.229.196.235:33398
```
**显示 Sockets 摘要**
**显示 Sockets 摘要**
```
[root@localhost ~]# ss -s
@ -142,54 +142,54 @@ Total: 172 (kernel 189)
TCP: 10 (estab 2, closed 4, orphaned 0, synrecv 0, timewait 0/0), ports 5
Transport Total ip IPv6
* 189 - -
RAW 0 0 0
UDP 5 5 0
TCP 6 6 0
INET 11 11 0
FRAG 0 0 0
* 189 - -
RAW 0 0 0
UDP 5 5 0
TCP 6 6 0
INET 11 11 0
FRAG 0 0 0
```
列出当前的established, closed, orphaned and waiting TCP sockets
**列出所有打开的网络连接端口**
**列出所有打开的网络连接端口**
```
[root@localhost ~]# ss -l
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 0 *:3306 *:*
0 0 *:http *:*
0 0 *:ssh *:*
0 0 127.0.0.1:smtp *:*
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 0 *:3306 *:*
0 0 *:http *:*
0 0 *:ssh *:*
0 0 127.0.0.1:smtp *:*
```
**查看进程使用的socket**
**查看进程使用的socket**
```
[root@localhost ~]# ss -pl
Recv-Q Send-Q Local Address:Port Peer Address:Port
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 0 *:3306 *:* users:(("mysqld",1718,10))
0 0 *:http *:* users:(("nginx",13312,5),("nginx",13333,5))
0 0 *:ssh *:* users:(("sshd",1379,3))
0 0 127.0.0.1:smtp *:* us
```
**找出打开套接字/端口应用程序**
**找出打开套接字/端口应用程序**
```
[root@localhost ~]# ss -pl | grep 3306
0 0 *:3306 *:* users:(("mysqld",1718,10))
```
**显示所有UDP Sockets**
**显示所有UDP Sockets**
```
[root@localhost ~]# ss -u -a
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 *:syslog *:*
UNCONN 0 0 112.124.15.130:ntp *:*
UNCONN 0 0 10.160.7.81:ntp *:*
UNCONN 0 0 127.0.0.1:ntp *:*
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 *:syslog *:*
UNCONN 0 0 112.124.15.130:ntp *:*
UNCONN 0 0 10.160.7.81:ntp *:*
UNCONN 0 0 127.0.0.1:ntp *:*
UNCONN 0 0 *:ntp *:*
```

View File

@ -7,13 +7,13 @@ openssh套件中的客户端连接工具
**ssh命令** 是openssh套件中的客户端连接工具可以给予ssh加密协议实现安全的远程登录服务器。
### 语法
### 语法
```
ssh(选项)(参数)
```
### 选项
### 选项
```
-1强制使用ssh协议版本1
@ -38,7 +38,7 @@ ssh(选项)(参数)
-y开启信任X11转发功能。
```
### 参数
### 参数
* 远程主机指定要连接的远程ssh服务器
* 指令要在远程ssh服务器上执行的指令。
@ -50,12 +50,18 @@ ssh(选项)(参数)
ssh user1@172.24.210.101
# 指定端口
ssh -p 2211 root@140.206.185.170
# ssh 大家族
ssh user@ip -p22 # 默认用户名为当前用户名,默认端口为 22
ssh-keygen # 为当前用户生成 ssh 公钥 + 私钥
ssh-keygen -f keyfile -i -m key_format -e -m key_format # key_format: RFC4716/SSH2(default) PKCS8 PEM
ssh-copy-id user@ip:port # 将当前用户的公钥复制到需要 ssh 的服务器的 ~/.ssh/authorized_keys之后可以免密登录
```
### 背后故事
> 英文Tatu Ylonen
> 编译Linux中国/kenxx
> 编译Linux中国/kenxx
> 来源https://linux.cn/article-8476-1.html
为什么 SSH安全终端的端口号是 22 呢这不是一个巧合这其中有个我Tatu YlonenSSH 协议的设计者)未曾诉说的故事。
@ -73,37 +79,37 @@ ssh -p 2211 root@140.206.185.170
1995 年 7 月,就在我发布 ssh-1.0 前,我发送了一封邮件给 IANA
> From ylo Mon Jul 10 11:45:48 +0300 1995
> From: Tatu Ylonen
> To: Internet Assigned Numbers Authority
> Subject: 请求取得一个端口号
> Organization: 芬兰赫尔辛基理工大学
>
> 亲爱的机构成员:
>
> 我写了个可以在不安全的网络环境中安全地从一台机器登录到另一台机器的程序。它主要是对现有的 telnet 协议以及 rlogin 协议的功能性提升和安全性改进。说的具体些,就是可以防御 IP、DNS > 或路由等欺骗行为。我打算将我的软件免费地发布在因特网上,以得到广泛地使用。
>
> 我希望为该软件注册一个特权端口号,要是这个端口号在 1 到 255 > 之间就更好了,这样它就可以用在名字服务器的 WKS 字段中了。
>
> 我在附件中附上了协议标准的草案。这个软件已经在本地运行了几个月了,我已准备在获得端口号后就发布。如果端口号分配一事安排的及时,我希望这周就将要发布的软件准备好。我目前在 beta 版测试时使用的端口号是 > 22如果要是能够分配到这个端口我就不用做什么更改了目前这个端口在列表中还是空闲的
>
> 软件中服务的名称叫 ssh系 Secure Shell 的缩写)。
>
> 您最真诚的,
> Tatu Ylonen
> From ylo Mon Jul 10 11:45:48 +0300 1995
> From: Tatu Ylonen
> To: Internet Assigned Numbers Authority
> Subject: 请求取得一个端口号
> Organization: 芬兰赫尔辛基理工大学
>
> 亲爱的机构成员:
>
> 我写了个可以在不安全的网络环境中安全地从一台机器登录到另一台机器的程序。它主要是对现有的 telnet 协议以及 rlogin 协议的功能性提升和安全性改进。说的具体些,就是可以防御 IP、DNS > 或路由等欺骗行为。我打算将我的软件免费地发布在因特网上,以得到广泛地使用。
>
> 我希望为该软件注册一个特权端口号,要是这个端口号在 1 到 255 > 之间就更好了,这样它就可以用在名字服务器的 WKS 字段中了。
>
> 我在附件中附上了协议标准的草案。这个软件已经在本地运行了几个月了,我已准备在获得端口号后就发布。如果端口号分配一事安排的及时,我希望这周就将要发布的软件准备好。我目前在 beta 版测试时使用的端口号是 > 22如果要是能够分配到这个端口我就不用做什么更改了目前这个端口在列表中还是空闲的
>
> 软件中服务的名称叫 ssh系 Secure Shell 的缩写)。
>
> 您最真诚的,
> Tatu Ylonen
LCTT 译注DNS 协议中的 WKS 记录类型意即“众所周知的业务描述”,是类似于 A、MX 这样的 DNS 记录类型,用于描述某个 IP 所提供的服务,目前鲜见使用。参见: https://docs.oracle.com/cd/E19683-01/806-4077/dnsintro-154/index.html 。)
第二天,我就收到了 Joyce 发来的邮件:
> Date: Mon, 10 Jul 1995 15:35:33 -0700
> From: jkrey@ISI.EDU
> To: ylo@cs.hut.fi
> Subject: 回复:请求取得一个端口号
> Cc: iana@ISI.EDU
> Tatu,
> 我们将端口号 22 分配给 ssh 服务了,你目前是该服务的主要联系人。
> Joyce
> Date: Mon, 10 Jul 1995 15:35:33 -0700
> From: jkrey@ISI.EDU
> To: ylo@cs.hut.fi
> Subject: 回复:请求取得一个端口号
> Cc: iana@ISI.EDU
> Tatu,
> 我们将端口号 22 分配给 ssh 服务了,你目前是该服务的主要联系人。
> Joyce
这就搞定了SSH 的端口正式使用 22

20
command/supervisord.md Normal file
View File

@ -0,0 +1,20 @@
supervisord
===
配置后台服务/常驻进程的工具
## 实例
```
# supervisord
apt-get install supervisor
[program:app]
command=/usr/bin/gunicorn -w 1 wsgiapp:application
directory=/srv/www
user=www-data
supervisord: 启动 supervisor 服务
supervisorctl start app
supervisorctl stop app
supervisorctl reload # 修改/添加配置文件需要执行这个
```

12
command/sz.md Normal file
View File

@ -0,0 +1,12 @@
sz
===
对话框式文件下载工具
## 实例
```
apk add lrzsz # 安装
sz $file # 下载
```

View File

@ -9,13 +9,13 @@ tail
注意如果表示字节或行数的N值之前有一个”+”号则从文件开头的第N项开始显示而不是显示文件的最后N项。N值后面可以有后缀b表示512k表示1024m表示1 048576(1M)。
### 语法
### 语法
```
tail(选项)(参数)
```
### 选项
### 选项
```
--retry即是在tail命令启动时文件不可访问或者文件稍后变得不可访问都始终尝试打开文件。使用此选项时需要与选项“——follow=name”连用
@ -31,11 +31,11 @@ tail(选项)(参数)
--version显示指令的版本信息。
```
### 参数
### 参数
文件列表:指定要显示尾部内容的文件列表。
### 实例
### 实例
```
tail file 显示文件file的最后10行

View File

@ -11,13 +11,13 @@ Linux下的归档使用工具用来打包和备份。
为什么要区分这两个概念呢这源于Linux中很多压缩程序只能针对一个文件进行压缩这样当你想要压缩一大堆文件时你得先将这一大堆文件先打成一个包tar命令然后再用压缩程序进行压缩gzip bzip2命令
### 语法
### 语法
```
tar(选项)(参数)
```
### 选项
### 选项
```
-A或--catenate新增文件到以存在的备份文件
@ -45,11 +45,11 @@ tar(选项)(参数)
--exclude=<范本样式>:排除符合范本样式的文件。
```
### 参数
### 参数
文件或目录:指定要打包的文件或目录列表。
### 实例
### 实例
```bash
- z有gzip属性的
@ -85,84 +85,84 @@ tar -xf archive.tar # 从archive.tar提取所有文件。
#### zip格式
压缩: zip -r [目标文件名].zip [原文件/目录名]
解压: unzip [原文件名].zip
注:-r参数代表递归
压缩: zip -r [目标文件名].zip [原文件/目录名]
解压: unzip [原文件名].zip
注:-r参数代表递归
#### tar格式该格式仅仅打包不压缩
打包tar -cvf [目标文件名].tar [原文件名/目录名]
解包tar -xvf [原文件名].tar
c参数代表create创建x参数代表extract解包v参数代表verbose详细信息f参数代表filename文件名所以f后必须接文件名。
打包tar -cvf [目标文件名].tar [原文件名/目录名]
解包tar -xvf [原文件名].tar
c参数代表create创建x参数代表extract解包v参数代表verbose详细信息f参数代表filename文件名所以f后必须接文件名。
#### tar.gz格式
方式一利用前面已经打包好的tar文件直接用压缩命令。
压缩gzip [原文件名].tar
解压gunzip [原文件名].tar.gz
压缩gzip [原文件名].tar
解压gunzip [原文件名].tar.gz
方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -zcvf [目标文件名].tar.gz [原文件名/目录名]
解压并解包: tar -zxvf [原文件名].tar.gz
z代表用gzip算法来压缩/解压。
打包并压缩: tar -zcvf [目标文件名].tar.gz [原文件名/目录名]
解压并解包: tar -zxvf [原文件名].tar.gz
z代表用gzip算法来压缩/解压。
#### tar.bz2格式
方式一利用已经打包好的tar文件直接执行压缩命令
压缩bzip2 [原文件名].tar
解压bunzip2 [原文件名].tar.bz2
方式二:一次性打包并压缩、解压并解包
压缩bzip2 [原文件名].tar
解压bunzip2 [原文件名].tar.bz2
方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -jcvf [目标文件名].tar.bz2 [原文件名/目录名]
解压并解包: tar -jxvf [原文件名].tar.bz2
小写j代表用bzip2算法来压缩/解压。
打包并压缩: tar -jcvf [目标文件名].tar.bz2 [原文件名/目录名]
解压并解包: tar -jxvf [原文件名].tar.bz2
小写j代表用bzip2算法来压缩/解压。
#### tar.xz格式
方式一利用已经打包好的tar文件直接用压缩命令
压缩xz [原文件名].tar
解压unxz [原文件名].tar.xz
方式二:一次性打包并压缩、解压并解包
压缩xz [原文件名].tar
解压unxz [原文件名].tar.xz
方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -Jcvf [目标文件名].tar.xz [原文件名/目录名]
解压并解包: tar -Jxvf [原文件名].tar.xz
大写J代表用xz算法来压缩/解压。
打包并压缩: tar -Jcvf [目标文件名].tar.xz [原文件名/目录名]
解压并解包: tar -Jxvf [原文件名].tar.xz
大写J代表用xz算法来压缩/解压。
#### tar.Z格式已过时
方式一利用已经打包好的tar文件直接用压缩命令
压缩compress [原文件名].tar
解压uncompress [原文件名].tar.Z
方式二:一次性打包并压缩、解压并解包
压缩compress [原文件名].tar
解压uncompress [原文件名].tar.Z
方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -Zcvf [目标文件名].tar.Z [原文件名/目录名]
解压并解包: tar -Zxvf [原文件名].tar.Z
大写Z代表用ncompress算法来压缩/解压。另ncompress是早期Unix系统的压缩格式但由于ncompress的压缩率太低现已过时。
打包并压缩: tar -Zcvf [目标文件名].tar.Z [原文件名/目录名]
解压并解包: tar -Zxvf [原文件名].tar.Z
大写Z代表用ncompress算法来压缩/解压。另ncompress是早期Unix系统的压缩格式但由于ncompress的压缩率太低现已过时。
#### jar格式
压缩jar -cvf [目标文件名].jar [原文件名/目录名]
解压jar -xvf [原文件名].jar
如果是打包的是Java类库并且该类库中存在主类那么需要写一个META-INF/MANIFEST.MF配置文件内容如下
压缩jar -cvf [目标文件名].jar [原文件名/目录名]
解压jar -xvf [原文件名].jar
如果是打包的是Java类库并且该类库中存在主类那么需要写一个META-INF/MANIFEST.MF配置文件内容如下
Manifest-Version: 1.0
Created-By: 1.6.0_27 (Sun Microsystems Inc.)
Main-class: the_name_of_the_main_class_should_be_put_here
然后用如下命令打包:
Manifest-Version: 1.0
Created-By: 1.6.0_27 (Sun Microsystems Inc.)
Main-class: the_name_of_the_main_class_should_be_put_here
然后用如下命令打包:
jar -cvfm [目标文件名].jar META-INF/MANIFEST.MF [原文件名/目录名]
这样以后就能用“java -jar [文件名].jar”命令直接运行主类中的public static void main方法了。
#### 7z格式
压缩7z a [目标文件名].7z [原文件名/目录名]
解压7z x [原文件名].7z
这个7z解压命令支持rar格式
压缩7z a [目标文件名].7z [原文件名/目录名]
解压7z x [原文件名].7z
这个7z解压命令支持rar格式
7z x [原文件名].rar
@ -171,9 +171,9 @@ jar -cvfm [目标文件名].jar META-INF/MANIFEST.MF [原文件名/目录名]
**将文件全部打包成tar包**
```
tar -cvf log.tar log2012.log 仅打包,不压缩!
tar -zcvf log.tar.gz log2012.log 打包后,以 gzip 压缩
tar -jcvf log.tar.bz2 log2012.log 打包后,以 bzip2 压缩
tar -cvf log.tar log2012.log 仅打包,不压缩!
tar -zcvf log.tar.gz log2012.log 打包后,以 gzip 压缩
tar -jcvf log.tar.bz2 log2012.log 打包后,以 bzip2 压缩
```
在选项`f`之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。 如果加`z`选项,则以.tar.gz或.tgz来代表gzip压缩过的tar包如果加`j`选项,则以.tar.bz2来作为tar包名。
@ -216,13 +216,13 @@ tar -zcvpf log31.tar.gz log2014.log log2015.log log2016.log
tar -N "2012/11/13" -zcvf log17.tar.gz test
```
**备份文件夹内容是排除部分文件:**
**备份文件夹内容是排除部分文件:**
```
tar --exclude scf/service -zcvf scf.tar.gz scf/*
```
**其实最简单的使用 tar 就只要记忆底下的方式即可:**
**其实最简单的使用 tar 就只要记忆底下的方式即可:**
```
 tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称

View File

@ -1,19 +1,19 @@
telnet
===
登录远程主机和管理
登录远程主机和管理(测试ip端口是否连通)
## 补充说明
**telnet命令** 用于登录远程主机对远程主机进行管理。telnet因为采用明文传送报文安全性不好很多Linux服务器都不开放telnet服务而改用更安全的ssh方式了。但仍然有很多别的系统可能采用了telnet方式来提供远程登录因此弄清楚telnet客户端的使用方式仍是很有必要的。
### 语法
### 语法
```
telnet(选项)(参数)
```
### 选项
### 选项
```
-8允许使用8位字符资料包括输入与输出
@ -36,12 +36,12 @@ telnet(选项)(参数)
-X<认证形态>:关闭指定的认证形态。
```
### 参数
### 参数
* 远程主机:指定要登录进行管理的远程主机;
* 端口指定TELNET协议使用的端口号。
### 实例
### 实例
```
$ telnet 192.168.2.10
@ -52,7 +52,7 @@ Escape character is '^]'.
localhost (Linux release 2.6.18-274.18.1.el5 #1 SMP Thu Feb 9 12:45:44 EST 2012) (1)
login: root
Password:
Password:
Login incorrect
```
@ -79,59 +79,59 @@ telnet: Unable to connect to remote host
service xinetd restart
```
配置参数,通常的配置如下:
配置参数,通常的配置如下:
```
service telnet
{
disable = no #启用
flags = REUSE #socket可重用
socket_type = stream #连接方式为TCP
wait = no #为每个请求启动一个进程
user = root #启动服务的用户为root
server = /usr/sbin/in.telnetd #要激活的进程
log_on_failure += USERID #登录失败时记录登录用户名
}
service telnet
{
disable = no #启用
flags = REUSE #socket可重用
socket_type = stream #连接方式为TCP
wait = no #为每个请求启动一个进程
user = root #启动服务的用户为root
server = /usr/sbin/in.telnetd #要激活的进程
log_on_failure += USERID #登录失败时记录登录用户名
}
```
如果要配置允许登录的客户端列表,加入
如果要配置允许登录的客户端列表,加入
```
only_from = 192.168.0.2 #只允许192.168.0.2登录
only_from = 192.168.0.2 #只允许192.168.0.2登录
```
如果要配置禁止登录的客户端列表,加入
如果要配置禁止登录的客户端列表,加入
```
no_access = 192.168.0.{2,3,4} #禁止192.168.0.2、192.168.0.3、192.168.0.4登录
no_access = 192.168.0.{2,3,4} #禁止192.168.0.2、192.168.0.3、192.168.0.4登录
```
如果要设置开放时段,加入
如果要设置开放时段,加入
```
access_times = 9:00-12:00 13:00-17:00 # 每天只有这两个时段开放服务我们的上班时间P
access_times = 9:00-12:00 13:00-17:00 # 每天只有这两个时段开放服务我们的上班时间P
```
如果你有两个IP地址一个是私网的IP地址如192.168.0.2一个是公网的IP地址如218.75.74.83如果你希望用户只能从私网来登录telnet服务那么加入
如果你有两个IP地址一个是私网的IP地址如192.168.0.2一个是公网的IP地址如218.75.74.83如果你希望用户只能从私网来登录telnet服务那么加入
```
bind = 192.168.0.2
bind = 192.168.0.2
```
各配置项具体的含义和语法可参考xined配置文件属性说明man xinetd.conf
各配置项具体的含义和语法可参考xined配置文件属性说明man xinetd.conf
配置端口修改services文件
```
# vi /etc/services
# vi /etc/services
```
找到以下两句
找到以下两句
```
telnet 23/tcp
telnet 23/udp
telnet 23/tcp
telnet 23/udp
```
如果前面有#字符就去掉它。telnet的默认端口是23这个端口也是黑客端口扫描的主要对象因此最好将这个端口修改掉修改的方法很简单就是将23这个数字修改掉改成大一点的数字比如61123。注意1024以下的端口号是internet保留的端口号因此最好不要用还应该注意不要与其它服务的端口冲突。
如果前面有#字符就去掉它。telnet的默认端口是23这个端口也是黑客端口扫描的主要对象因此最好将这个端口修改掉修改的方法很简单就是将23这个数字修改掉改成大一点的数字比如61123。注意1024以下的端口号是internet保留的端口号因此最好不要用还应该注意不要与其它服务的端口冲突。
启动服务:
```
service xinetd restart
service xinetd restart
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

22
command/tmux.md Normal file
View File

@ -0,0 +1,22 @@
tmux
===
比 screen 好用的 ssh 窗口管理工具
## 实例
```
apk add tmux # 安装
# tmux
tmux # new session
tmux a # attach session
C-b-d # detach session
C-b-c # new window
C-b-num # ch window
exit # exit window
C-b "/% # split window
C-b 方向键
C-b ? # keymap
no rz/sz
```

View File

@ -7,13 +7,13 @@ tree
**tree命令** 以树状图列出目录的内容。
### 语法
### 语法
```
tree(选项)(参数)
```
### 选项
### 选项
```bash
------- 列表选项 -------
@ -73,7 +73,7 @@ tree(选项)(参数)
-- # Options processing terminator.
```
### 参数
### 参数
目录执行tree指令它会列出指定目录下的所有文件包括子目录里的文件。
@ -101,7 +101,7 @@ tree -L 2 > /home/www/tree.txt # 当前目录结果存到 tree.txt 文件中
```
忽略多个文件夹
```bash
tree -I 'node_modules|icon|font' -L 2
```

View File

@ -1,6 +1,6 @@
ulimit
===
控制shell程序的资源
## 补充说明
@ -15,13 +15,13 @@ ulimit 用于限制 shell 启动进程所占用的资源,支持以下各种类
作为临时限制ulimit 可以作用于通过使用其命令登录的 shell 会话,在会话终止时便结束限制,并不影响于其他 shell 会话。而对于长期的固定限制ulimit 命令语句又可以被添加到由登录 shell 读取的文件中,作用于特定的 shell 用户。
### 语法
### 语法
```
ulimit(选项)
```
### 选项
### 选项
```
-a显示目前资源限制的设定
@ -39,7 +39,7 @@ ulimit(选项)
-v <虚拟内存大小>指定可使用的虚拟内存上限单位为KB。
```
### 实例
### 实例
```
[root@localhost ~]# ulimit -a

View File

@ -1,19 +1,19 @@
uname
===
显示Linux系统信息
## 补充说明
**uname命令** 用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)。
### 语法
### 语法
```
uname(选项)
```
### 选项
### 选项
```
-a或--all显示全部的信息
@ -29,7 +29,7 @@ uname(选项)
--version显示版本信息。
```
### 实例
### 实例
使用uname命令查看全部信息

View File

@ -1,19 +1,19 @@
unzip
===
用于解压缩由zip命令压缩的压缩包
## 补充说明
**unzip命令** 用于解压缩由zip命令压缩的“.zip”压缩包。
### 语法
### 语法
```
unzip(选项)(参数)
```
### 选项
### 选项
```
-c将解压缩的结果显示到屏幕上并对字符做适当的转换
@ -42,11 +42,11 @@ unzip(选项)(参数)
-Zunzip-Z等于执行zipinfo指令。
```
### 参数
### 参数
压缩包:指定要解压的“.zip”压缩包。
### 实例
### 实例
将压缩文件text.zip在当前目录下解压缩。

View File

@ -1,19 +1,19 @@
usermod
===
用于修改用户的基本信息
## 补充说明
**usermod命令** 用于修改用户的基本信息。usermod命令不允许你改变正在线上的使用者帐号名称。当usermod命令用来改变user id必须确认这名user没在电脑上执行任何程序。你需手动更改使用者的crontab档。也需手动更改使用者的at工作档。采用NIS server须在server上更动相关的NIS设定。
### 语法
### 语法
```
usermod(选项)(参数)
```
### 选项
### 选项
```
-c<备注>:修改用户帐号的备注文字;
@ -29,11 +29,11 @@ usermod(选项)(参数)
-U:解除密码锁定。
```
### 参数
### 参数
登录名:指定要修改信息的用户登录名。
### 实例
### 实例
将newuser2添加到组staff中
@ -59,5 +59,12 @@ usermod -L newuser1
usermod -U newuser1
```
增加用户到用户组中:
```
apk add shadow # 安装 shadow 包, usermod 命令包含在 usermod 中
usermod -aG group user # 添加用户到用户组中
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

View File

@ -7,13 +7,13 @@ watch
**watch命令** 以周期性的方式执行给定的指令指令输出以全屏方式显示。watch是一个非常实用的命令基本所有的Linux发行版都带有这个小工具如同名字一样watch可以帮你监测一个命令的运行结果省得你一遍遍的手动运行。
### 语法
### 语法
```
watch(选项)(参数)
```
### 选项
### 选项
```bash
-n # 或--interval watch缺省每2秒运行一下程序可以用-n或-interval来指定间隔的时间。
@ -22,11 +22,11 @@ watch(选项)(参数)
-h, --help # 查看帮助文档
```
### 参数
### 参数
指令:需要周期性执行的指令。
### 实例
### 实例
```bash
watch -n 1 -d netstat -ant       # 命令:每隔一秒高亮显示网络链接数的变化情况

View File

@ -7,14 +7,14 @@ POSIX 平台开发具有高压缩率的工具。
**xz命令** XZ Utils 是为 POSIX 平台开发具有高压缩率的工具。它使用 LZMA2 压缩算法,生成的压缩文件比 POSIX 平台传统使用的 gzip、bzip2 生成的压缩文件更小,而且解压缩速度也很快。最初 XZ Utils 的是基于 LZMA-SDK 开发,但是 LZMA-SDK 包含了一些 WINDOWS 平台的特性,所以 XZ Utils 为以适应 POSIX 平台作了大幅的修改。XZ Utils 的出现也是为了取代 POSIX 系统中旧的 LZMA Utils。
### 语法
### 语法
```
xz(选项)(参数)
xz [OPTION]... [FILE]...
```
### 选项
### 选项
```bash
-z, --compress 强制压缩
@ -39,55 +39,55 @@ xz [OPTION]... [FILE]...
-V, --version 显示版本号并退出
```
### 参数
### 参数
* 源文件:指定连接的源文件。
* 目标文件:指定源文件的目标连接文件。
### 实例
### 实例
压缩一个文件 test.txt压缩成功后生成 test.txt.xz, 原文件会被删除。
```bash
$ xz test.txt
$ ls test.txt*
$ xz test.txt
$ ls test.txt*
test.txt.xz
test.txt.xz
```
解压 test.txt.xz 文件,并使用参数 -k 保持原文件不被删除
```bash
$ xz -d -k test.txt.xz
$ ls test.txt*
$ xz -d -k test.txt.xz
$ ls test.txt*
test.txt.xz test.txt
test.txt.xz test.txt
```
使用参数 -l 显示 .xz 文件的基本信息。基本信息包括压缩率、数据完整性验证方式等。也可以和参数 -v 或 -vv 配合显示更详尽的信息。
```bash
xz -l index.txt.xz
# Strms Blocks Compressed Uncompressed Ratio Check Filename
xz -l index.txt.xz
# Strms Blocks Compressed Uncompressed Ratio Check Filename
# 1 1 768 B 1,240 B 0.619 CRC64 index.txt.
```
使用参数 -0, -1, -2, … -6, … -9 或参数 --fast, --best 设定压缩率。xz 命令的默认为 -6 ,对于大多数系统来说,甚至是一些较旧的系统,-4 … -6 压缩率预设值都不错的表现。
```
$ xz -k7 xz_pipe_decomp_mini.c
$ xz -k --fast xz_pipe_decomp_mini.c
$ xz -k7 xz_pipe_decomp_mini.c
$ xz -k --fast xz_pipe_decomp_mini.c
```
使用参数 -H 显示 xz 命令所有 options. 参数 -H 比使用参数 --help 显示的内容更详细。
```
$ xz -H | more
$ xz -H | more
```
借助 xargs 命令并行压缩多文件。下面的命令行可以将 /var/log 目录下所有的扩展名为 .log 的文件压缩。通过 xargs 命令同时运行多个 xz 进行压缩。
```bash
# 运行此命令须有 root 权限。
find /var/log -type f -iname "*.log" -print0 | xargs -P4 -n16 xz -T1
find /var/log -type f -iname "*.log" -print0 | xargs -P4 -n16 xz -T1
```

View File

@ -9,13 +9,13 @@ yum
yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令而且命令简洁而又好记。
### 语法
### 语法
```
yum(选项)(参数)
```
### 选项
### 选项
```
-h显示帮助信息
@ -29,7 +29,7 @@ yum(选项)(参数)
-C完全从缓存中运行而不去下载或者更新任何头文件。
```
### 参数
### 参数
```
install安装rpm软件包
@ -47,7 +47,7 @@ localupdate显示本地rpm软件包进行更新
deplist显示rpm软件包的所有依赖关系。
```
### 实例
### 实例
部分常用的命令包括:
@ -55,7 +55,7 @@ deplist显示rpm软件包的所有依赖关系。
* 安装yum图形窗口插件`yum install yumex`
* 查看可能批量安装的列表:`yum grouplist`
**安装**
**安装**
```bash
yum install #全部安装
@ -63,7 +63,7 @@ yum install package1 #安装指定的安装包package1
yum groupinsall group1 #安装程序组group1
```
**更新和升级**
**更新和升级**
```bash
yum update #全部更新
@ -73,7 +73,7 @@ yum upgrade package1 #升级指定程序包package1
yum groupupdate group1 #升级程序组group1
```
**查找和显示**
**查找和显示**
```bash
# 检查 MySQL 是否已安装
@ -86,7 +86,7 @@ yum list package1 #显示指定程序包安装情况package1
yum groupinfo group1 #显示程序组group1信息yum search string 根据关键字string查找安装包
```
**删除程序**
**删除程序**
```bash
yum remove &#124; erase package1 #删除程序包package1
@ -94,7 +94,7 @@ yum groupremove group1 #删除程序组group1
yum deplist package1 #查看程序package1依赖情况
```
**清除缓存**
**清除缓存**
```bash
yum clean packages #清除缓存目录下的软件包
@ -102,5 +102,28 @@ yum clean headers #清除缓存目录下的 headers
yum clean oldheaders #清除缓存目录下旧的 headers
```
**更多实例**
```
# yum
/etc/yum.repos.d/ yum 源配置文件
vi /etc/yum.repos.d/nginx.repo # 举个栗子: nginx yum源
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1
# yum mirror
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget https://mirror.tuna.tsinghua.edu.cn/help/centos/
yum makecache
# 添加中文语言支持
LANG=C # 原始语言
LANG=zh_CN.utf8 # 切换到中文
yum groupinstall "Chinese Support" # 添加中文语言支持
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

View File

@ -7,13 +7,13 @@ zip
**zip命令** 可以用来解压缩文件或者对文件进行打包操作。zip是个使用广泛的压缩程序文件经它压缩后会另外产生具有“.zip”扩展名的压缩文件。
### 语法
### 语法
```
zip(选项)(参数)
```
### 选项
### 选项
```
-A调整可执行的自动解压缩文件
@ -52,12 +52,12 @@ zip(选项)(参数)
-<压缩效率>压缩效率是一个介于1~9的数值。
```
### 参数
### 参数
* zip压缩包指定要创建的zip压缩包
* 文件列表:指定要压缩的文件列表。
### 实例
### 实例
将`/home/Blinux/html/`这个目录下所有文件和文件夹打包为当前目录下的html.zip
@ -77,6 +77,12 @@ zip -q -r html.zip html
zip -q -r html.zip *
```
压缩效率选择:
```
zip -9 # 1-9 faster->better
```
### 问题解决
CentOS7中命令找不到
@ -86,7 +92,7 @@ CentOS7中命令找不到
```
解决方法
```bash
yum install -y unzip zip
```