更改 code block
parent
90910209fe
commit
0e20618e23
|
@ -24,7 +24,7 @@ docker image pull hello-world
|
||||||
|
|
||||||
(2)查看镜像
|
(2)查看镜像
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
~ docker image ls
|
~ docker image ls
|
||||||
REPOSITORY TAG IMAGE ID CREATED SIZE
|
REPOSITORY TAG IMAGE ID CREATED SIZE
|
||||||
hello-world latest 4ab4c602aa5e 3 months ago 1.84kB
|
hello-world latest 4ab4c602aa5e 3 months ago 1.84kB
|
||||||
|
|
|
@ -62,7 +62,7 @@ Kubernetes 包含若干抽象用来表示系统状态,包括:已部署的容
|
||||||
|
|
||||||
### 客户端配置
|
### 客户端配置
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# Setup autocomplete in bash; bash-completion package should be installed first
|
# Setup autocomplete in bash; bash-completion package should be installed first
|
||||||
source <(kubectl completion bash)
|
source <(kubectl completion bash)
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser -
|
||||||
|
|
||||||
### 查找资源
|
### 查找资源
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# List all services in the namespace
|
# List all services in the namespace
|
||||||
kubectl get services
|
kubectl get services
|
||||||
|
|
||||||
|
@ -112,7 +112,7 @@ for i in 0 1; do kubectl exec foo-$i -- sh -c 'echo $(hostname) > /usr/share/ngi
|
||||||
|
|
||||||
### 资源管理
|
### 资源管理
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# Get documentation for pod or service
|
# Get documentation for pod or service
|
||||||
kubectl explain pods,svc
|
kubectl explain pods,svc
|
||||||
|
|
||||||
|
@ -143,7 +143,7 @@ kubectl delete -f ./my-manifest.yaml
|
||||||
|
|
||||||
### 监控和日志
|
### 监控和日志
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# Deploy Heapster from Github repository
|
# Deploy Heapster from Github repository
|
||||||
kubectl create -f deploy/kube-config/standalone/
|
kubectl create -f deploy/kube-config/standalone/
|
||||||
|
|
||||||
|
|
|
@ -107,7 +107,7 @@ Shell 的解释器种类众多,常见的有:
|
||||||
|
|
||||||
- 指定 sh 解释器
|
- 指定 sh 解释器
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,7 @@ tags:
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 查看 man 命令的简要说明
|
# 查看 man 命令的简要说明
|
||||||
$ whatis man
|
$ whatis man
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ $ whatis -w "loca*"
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 查看 man 命令的详细说明
|
# 查看 man 命令的详细说明
|
||||||
$ info man
|
$ info man
|
||||||
```
|
```
|
||||||
|
@ -88,13 +88,13 @@ $ info man
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
which pwd # 查找命令的路径
|
which pwd # 查找命令的路径
|
||||||
```
|
```
|
||||||
|
|
||||||
说明:which 是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的!所以,不同的 PATH 配置内容所找到的命令当然不一样的!
|
说明:which 是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的!所以,不同的 PATH 配置内容所找到的命令当然不一样的!
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
[root@localhost ~]# which cd
|
[root@localhost ~]# which cd
|
||||||
cd: shell built-in command
|
cd: shell built-in command
|
||||||
```
|
```
|
||||||
|
@ -111,7 +111,7 @@ cd 这个常用的命令竟然找不到啊!为什么呢?这是因为 cd 是
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
whereis git # 将相关的文件都查找出来
|
whereis git # 将相关的文件都查找出来
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -123,7 +123,7 @@ whereis git # 将相关的文件都查找出来
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ man date # 查看 date 命令的帮助手册
|
$ man date # 查看 date 命令的帮助手册
|
||||||
$ man 3 printf # 查看 printf 命令的帮助手册中的第 3 类
|
$ man 3 printf # 查看 printf 命令的帮助手册中的第 3 类
|
||||||
$ man -k keyword # 根据命令中部分关键字来查询命令
|
$ man -k keyword # 根据命令中部分关键字来查询命令
|
||||||
|
@ -149,7 +149,7 @@ man 页面的分类(常用的是分类 1 和分类 3):
|
||||||
|
|
||||||
前面说到使用 whatis 会显示命令所在的具体的文档类别,我们学习如何使用它
|
前面说到使用 whatis 会显示命令所在的具体的文档类别,我们学习如何使用它
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ whatis printf
|
$ whatis printf
|
||||||
printf (1) - format and print data
|
printf (1) - format and print data
|
||||||
printf (1p) - write formatted output
|
printf (1p) - write formatted output
|
||||||
|
@ -160,7 +160,7 @@ printf [builtins](1) - bash built-in commands, see bash(1)
|
||||||
|
|
||||||
我们看到 printf 在分类 1 和分类 3 中都有;分类 1 中的页面是命令操作及可执行文件的帮助;而 3 是常用函数库说明;如果我们想看的是 C 语言中 printf 的用法,可以指定查看分类 3 的帮助:
|
我们看到 printf 在分类 1 和分类 3 中都有;分类 1 中的页面是命令操作及可执行文件的帮助;而 3 是常用函数库说明;如果我们想看的是 C 语言中 printf 的用法,可以指定查看分类 3 的帮助:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ man 3 printf
|
$ man 3 printf
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,7 @@ linux 目录结构是树形结构,其根目录是 `/` 。一张思维导图说
|
||||||
Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
|
Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
|
||||||
在 Linux 中我们可以使用 ll 或者 ls –l 命令来显示一个文件的属性以及文件所属的用户和组,如:
|
在 Linux 中我们可以使用 ll 或者 ls –l 命令来显示一个文件的属性以及文件所属的用户和组,如:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ ls -l
|
$ ls -l
|
||||||
total 64
|
total 64
|
||||||
dr-xr-xr-x 2 root root 4096 Dec 14 2012 bin
|
dr-xr-xr-x 2 root root 4096 Dec 14 2012 bin
|
||||||
|
@ -91,7 +91,7 @@ dr-xr-xr-x 4 root root 4096 Apr 19 2012 boot
|
||||||
|
|
||||||
#### Linux 文件属主和属组
|
#### Linux 文件属主和属组
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ ls -l
|
$ ls -l
|
||||||
total 64
|
total 64
|
||||||
dr-xr-xr-x 2 root root 4096 Dec 14 2012 bin
|
dr-xr-xr-x 2 root root 4096 Dec 14 2012 bin
|
||||||
|
@ -146,7 +146,7 @@ dr-xr-xr-x 4 root root 4096 Apr 19 2012 boot
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
cd # 切换到用户主目录
|
cd # 切换到用户主目录
|
||||||
cd ~ # 切换到用户主目录
|
cd ~ # 切换到用户主目录
|
||||||
cd - # 切换到上一个工作目录
|
cd - # 切换到上一个工作目录
|
||||||
|
@ -162,7 +162,7 @@ cd ../.. # 切换到上两级目录
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
ls # 列出当前目录可见文件
|
ls # 列出当前目录可见文件
|
||||||
ls -l # 列出当前目录可见文件详细信息
|
ls -l # 列出当前目录可见文件详细信息
|
||||||
ls -la # 列出所有文件(包括隐藏)的详细信息
|
ls -la # 列出所有文件(包括隐藏)的详细信息
|
||||||
|
@ -186,7 +186,7 @@ ls --color=auto # 列出文件并标记颜色分类
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 在当前目录中创建 zp 和 zp 的子目录 test
|
# 在当前目录中创建 zp 和 zp 的子目录 test
|
||||||
mkdir -p zp/test
|
mkdir -p zp/test
|
||||||
|
|
||||||
|
@ -202,7 +202,7 @@ mkdir -p -m 750 zp/test
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 删除子目录 test 和其父目录 zp
|
# 删除子目录 test 和其父目录 zp
|
||||||
rmdir -p zp/test
|
rmdir -p zp/test
|
||||||
```
|
```
|
||||||
|
@ -215,7 +215,7 @@ rmdir -p zp/test
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 列出目录 /private 第一级文件名
|
# 列出目录 /private 第一级文件名
|
||||||
tree /private -L 1
|
tree /private -L 1
|
||||||
/private/
|
/private/
|
||||||
|
@ -256,7 +256,7 @@ touch ex2
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 将目录 /usr/mengqc/mub1 下的文件 m2.c 链接到目录 /usr/liu 下的文件 a2.c
|
# 将目录 /usr/mengqc/mub1 下的文件 m2.c 链接到目录 /usr/liu 下的文件 a2.c
|
||||||
cd /usr/mengqc
|
cd /usr/mengqc
|
||||||
ln /mub1/m2.c /usr/liu/a2.c
|
ln /mub1/m2.c /usr/liu/a2.c
|
||||||
|
@ -274,7 +274,7 @@ ln -s /usr/mengqc/mub1 /usr/liu/abc
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 将 main1.c 重命名为 main.c
|
# 将 main1.c 重命名为 main.c
|
||||||
rename main1.c main.c main1.c
|
rename main1.c main.c main1.c
|
||||||
|
|
||||||
|
@ -292,7 +292,7 @@ rename "s//.txt//" * # 把所有以 .txt 结尾的文件名的.txt
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
stat myfile
|
stat myfile
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -304,7 +304,7 @@ stat myfile
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
file install.log # 显示文件类型
|
file install.log # 显示文件类型
|
||||||
file -b install.log # 不显示文件名称
|
file -b install.log # 不显示文件名称
|
||||||
file -i install.log # 显示 MIME 类型
|
file -i install.log # 显示 MIME 类型
|
||||||
|
@ -340,7 +340,7 @@ x=执行属性 //值= 1
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
chmod u+x,g+w f01 # 为文件f01设置自己可以执行,组员可以写入的权限
|
chmod u+x,g+w f01 # 为文件f01设置自己可以执行,组员可以写入的权限
|
||||||
chmod u=rwx,g=rw,o=r f01
|
chmod u=rwx,g=rw,o=r f01
|
||||||
chmod 764 f01
|
chmod 764 f01
|
||||||
|
@ -360,7 +360,7 @@ chmod -R 755 /home/wwwroot/*
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 将目录/usr/meng及其下面的所有文件、子目录的文件主改成 liu
|
# 将目录/usr/meng及其下面的所有文件、子目录的文件主改成 liu
|
||||||
chown -R liu /usr/meng
|
chown -R liu /usr/meng
|
||||||
```
|
```
|
||||||
|
@ -375,7 +375,7 @@ chown -R liu /usr/meng
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
locate pwd # 查找和 pwd 相关的所有文件
|
locate pwd # 查找和 pwd 相关的所有文件
|
||||||
locate /etc/sh # 搜索 etc 目录下所有以 sh 开头的文件
|
locate /etc/sh # 搜索 etc 目录下所有以 sh 开头的文件
|
||||||
```
|
```
|
||||||
|
@ -386,7 +386,7 @@ locate /etc/sh # 搜索 etc 目录下所有以 sh 开头的文件
|
||||||
>
|
>
|
||||||
> 参考:http://man.linuxde.net/find
|
> 参考:http://man.linuxde.net/find
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 当前目录搜索所有文件,文件内容 包含 “140.206.111.111” 的内容
|
# 当前目录搜索所有文件,文件内容 包含 “140.206.111.111” 的内容
|
||||||
find . -type f -name "*" | xargs grep "140.206.111.111"
|
find . -type f -name "*" | xargs grep "140.206.111.111"
|
||||||
|
|
||||||
|
@ -428,7 +428,7 @@ find /home ! -name "*.txt"
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 将文件 file 复制到目录 /usr/men/tmp 下,并改名为 file1
|
# 将文件 file 复制到目录 /usr/men/tmp 下,并改名为 file1
|
||||||
cp file /usr/men/tmp/file1
|
cp file /usr/men/tmp/file1
|
||||||
|
|
||||||
|
@ -485,7 +485,7 @@ rm ~/.ssh/id_rsa.pub.tmp
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
mv file1.txt /home/office/ # 移动单个文件
|
mv file1.txt /home/office/ # 移动单个文件
|
||||||
mv file2.txt file3.txt file4.txt /home/office/ # 移动多个文件
|
mv file2.txt file3.txt file4.txt /home/office/ # 移动多个文件
|
||||||
mv *.txt /home/office/ # 移动所有 txt 文件
|
mv *.txt /home/office/ # 移动所有 txt 文件
|
||||||
|
@ -509,7 +509,7 @@ mv -bv *.txt /home/office # 复制时创建备份
|
||||||
>
|
>
|
||||||
> 参考:http://man.linuxde.net/rm
|
> 参考:http://man.linuxde.net/rm
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
rm test.txt # 删除文件
|
rm test.txt # 删除文件
|
||||||
rm -i test.txt test2.txt # 交互式删除文件
|
rm -i test.txt test2.txt # 交互式删除文件
|
||||||
rm -r * # 删除当前目录下的所有文件和目录
|
rm -r * # 删除当前目录下的所有文件和目录
|
||||||
|
|
|
@ -49,7 +49,7 @@ tags:
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
cat m1 # 在屏幕上显示文件 ml 的内容
|
cat m1 # 在屏幕上显示文件 ml 的内容
|
||||||
cat m1 m2 # 同时显示文件 ml 和 m2 的内容
|
cat m1 m2 # 同时显示文件 ml 和 m2 的内容
|
||||||
cat m1 m2 > file # 将文件 ml 和 m2 合并后放入文件 file 中
|
cat m1 m2 > file # 将文件 ml 和 m2 合并后放入文件 file 中
|
||||||
|
@ -69,7 +69,7 @@ cat m1 m2 > file # 将文件 ml 和 m2 合并后放入文件 file 中
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
tail file # 显示文件file的最后10行
|
tail file # 显示文件file的最后10行
|
||||||
tail -n +20 file # 显示文件file的内容,从第20行至文件末尾
|
tail -n +20 file # 显示文件file的内容,从第20行至文件末尾
|
||||||
tail -c 10 file # 显示文件file的最后10个字符
|
tail -c 10 file # 显示文件file的最后10个字符
|
||||||
|
@ -92,7 +92,7 @@ tail -c 10 file # 显示文件file的最后10个字符
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 显示文件 file 的内容,但在显示之前先清屏,并且在屏幕的最下方显示完核的百分比。
|
# 显示文件 file 的内容,但在显示之前先清屏,并且在屏幕的最下方显示完核的百分比。
|
||||||
more -dc file
|
more -dc file
|
||||||
|
|
||||||
|
@ -106,7 +106,7 @@ less 命令的作用与 more 十分相似,都可以用来浏览文字档案的
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
less /var/log/shadowsocks.log
|
less /var/log/shadowsocks.log
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ less /var/log/shadowsocks.log
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 替换文本中的字符串
|
# 替换文本中的字符串
|
||||||
sed 's/book/books/' file
|
sed 's/book/books/' file
|
||||||
|
|
||||||
|
@ -163,7 +163,7 @@ sed '/^test/'d file
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 在多级目录中对文本递归搜索(程序员搜代码的最爱):
|
# 在多级目录中对文本递归搜索(程序员搜代码的最爱):
|
||||||
$ grep "class" . -R -n
|
$ grep "class" . -R -n
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ tags:
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
tar -cvf log.tar log2012.log # 仅打包,不压缩
|
tar -cvf log.tar log2012.log # 仅打包,不压缩
|
||||||
tar -zcvf log.tar.gz log2012.log # 打包后,以 gzip 压缩
|
tar -zcvf log.tar.gz log2012.log # 打包后,以 gzip 压缩
|
||||||
tar -jcvf log.tar.bz2 log2012.log # 打包后,以 bzip2 压缩
|
tar -jcvf log.tar.bz2 log2012.log # 打包后,以 bzip2 压缩
|
||||||
|
@ -59,7 +59,7 @@ tar -zxvf log30.tar.gz log2013.log # 只将 tar 内的部分文件解压出
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
gzip * # 将所有文件压缩成 .gz 文件
|
gzip * # 将所有文件压缩成 .gz 文件
|
||||||
gzip -l * # 详细显示压缩文件的信息,并不解压
|
gzip -l * # 详细显示压缩文件的信息,并不解压
|
||||||
gzip -dv * # 解压上例中的所有压缩文件,并列出详细的信息
|
gzip -dv * # 解压上例中的所有压缩文件,并列出详细的信息
|
||||||
|
@ -76,7 +76,7 @@ gzip -dr test/ # 递归地解压目录
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 将 /home/Blinux/html/ 这个目录下所有文件和文件夹打包为当前目录下的 html.zip
|
# 将 /home/Blinux/html/ 这个目录下所有文件和文件夹打包为当前目录下的 html.zip
|
||||||
zip -q -r html.zip /home/Blinux/html
|
zip -q -r html.zip /home/Blinux/html
|
||||||
```
|
```
|
||||||
|
@ -89,7 +89,7 @@ zip -q -r html.zip /home/Blinux/html
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
unzip test.zip # 解压 zip 文件
|
unzip test.zip # 解压 zip 文件
|
||||||
unzip -n test.zip -d /tmp/ # 在指定目录下解压缩
|
unzip -n test.zip -d /tmp/ # 在指定目录下解压缩
|
||||||
unzip -o test.zip -d /tmp/ # 在指定目录下解压缩,如果有相同文件存在则覆盖
|
unzip -o test.zip -d /tmp/ # 在指定目录下解压缩,如果有相同文件存在则覆盖
|
||||||
|
|
|
@ -50,7 +50,7 @@ tags:
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 建立一个新组,并设置组 ID 加入系统
|
# 建立一个新组,并设置组 ID 加入系统
|
||||||
$ groupadd -g 344 jsdigname
|
$ groupadd -g 344 jsdigname
|
||||||
```
|
```
|
||||||
|
@ -63,7 +63,7 @@ $ groupadd -g 344 jsdigname
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ groupadd damon # 创建damon用户组
|
$ groupadd damon # 创建damon用户组
|
||||||
$ groupdel damon # 删除这个用户组
|
$ groupdel damon # 删除这个用户组
|
||||||
```
|
```
|
||||||
|
@ -82,7 +82,7 @@ $ groupdel damon # 删除这个用户组
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 新建用户加入组
|
# 新建用户加入组
|
||||||
$ useradd –g sales jack –G company,employees # -g:加入主要组、-G:加入次要组
|
$ useradd –g sales jack –G company,employees # -g:加入主要组、-G:加入次要组
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ $ useradd caojh -u 544
|
||||||
|
|
||||||
userdel 命令很简单,比如我们现在有个用户 linuxde,其 home 目录位于`/var`目录中,现在我们来删除这个用户:
|
userdel 命令很简单,比如我们现在有个用户 linuxde,其 home 目录位于`/var`目录中,现在我们来删除这个用户:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ userdel linuxde # 删除用户linuxde,但不删除其家目录及文件;
|
$ userdel linuxde # 删除用户linuxde,但不删除其家目录及文件;
|
||||||
$ userdel -r linuxde # 删除用户linuxde,其 home 目录及文件一并删除;
|
$ userdel -r linuxde # 删除用户linuxde,其 home 目录及文件一并删除;
|
||||||
```
|
```
|
||||||
|
@ -113,7 +113,7 @@ $ userdel -r linuxde # 删除用户linuxde,其 home 目录及文件一并
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 将 newuser2 添加到组 staff 中
|
# 将 newuser2 添加到组 staff 中
|
||||||
$ usermod -G staff newuser2
|
$ usermod -G staff newuser2
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ $ usermod -U newuser1
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 如果是普通用户执行 passwd 只能修改自己的密码。
|
# 如果是普通用户执行 passwd 只能修改自己的密码。
|
||||||
# 如果新建用户后,要为新用户创建密码,则用 passwd 用户名,注意要以 root 用户的权限来创建。
|
# 如果新建用户后,要为新用户创建密码,则用 passwd 用户名,注意要以 root 用户的权限来创建。
|
||||||
$ passwd linuxde # 更改或创建linuxde用户的密码;
|
$ passwd linuxde # 更改或创建linuxde用户的密码;
|
||||||
|
@ -180,7 +180,7 @@ Empty password. # 空密码,也就是没有密码;
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 变更帐号为 root 并在执行 ls 指令后退出变回原使用者:
|
# 变更帐号为 root 并在执行 ls 指令后退出变回原使用者:
|
||||||
$ su -c ls root
|
$ su -c ls root
|
||||||
|
|
||||||
|
@ -199,7 +199,7 @@ $ su -test
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 指定用户执行命令
|
# 指定用户执行命令
|
||||||
$ sudo -u userb ls -l
|
$ sudo -u userb ls -l
|
||||||
# 列出目前的权限
|
# 列出目前的权限
|
||||||
|
|
|
@ -68,7 +68,7 @@ lsb_release 不是 bash 默认命令,如果要使用,需要先安装。
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
reboot # 重开机。
|
reboot # 重开机。
|
||||||
reboot -w # 做个重开机的模拟(只有纪录并不会真的重开机)。
|
reboot -w # 做个重开机的模拟(只有纪录并不会真的重开机)。
|
||||||
```
|
```
|
||||||
|
@ -81,7 +81,7 @@ reboot -w # 做个重开机的模拟(只有纪录并不会真的重开机
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 退出当前 shell
|
# 退出当前 shell
|
||||||
[root@localhost ~]# exit
|
[root@localhost ~]# exit
|
||||||
logout
|
logout
|
||||||
|
@ -114,7 +114,7 @@ fi
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 指定现在立即关机
|
# 指定现在立即关机
|
||||||
shutdown -h now
|
shutdown -h now
|
||||||
|
|
||||||
|
@ -130,7 +130,7 @@ shutdown +5 "System will shutdown after 5 minutes"
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 格式化输出
|
# 格式化输出
|
||||||
date +"%Y-%m-%d"
|
date +"%Y-%m-%d"
|
||||||
2009-12-07
|
2009-12-07
|
||||||
|
@ -196,7 +196,7 @@ echo $difference seconds.
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 将 /dev/hda1 挂在 /mnt 之下
|
# 将 /dev/hda1 挂在 /mnt 之下
|
||||||
mount /dev/hda1 /mnt
|
mount /dev/hda1 /mnt
|
||||||
|
|
||||||
|
@ -216,7 +216,7 @@ mount -o loop /tmp/image.iso /mnt/cdrom
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 通过设备名卸载
|
# 通过设备名卸载
|
||||||
umount -v /dev/sda1
|
umount -v /dev/sda1
|
||||||
/dev/sda1 umounted
|
/dev/sda1 umounted
|
||||||
|
@ -234,7 +234,7 @@ umount -v /mnt/mymount/
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 按内存资源的使用量对进程进行排序
|
# 按内存资源的使用量对进程进行排序
|
||||||
ps aux | sort -rnk 4
|
ps aux | sort -rnk 4
|
||||||
|
|
||||||
|
@ -250,7 +250,7 @@ ps aux | sort -nk 3
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 列出所有信号名称
|
# 列出所有信号名称
|
||||||
kill -l
|
kill -l
|
||||||
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
|
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
|
||||||
|
@ -288,7 +288,7 @@ kill 3268
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 1.启动 nfs 服务
|
# 1.启动 nfs 服务
|
||||||
systemctl start nfs-server.service
|
systemctl start nfs-server.service
|
||||||
|
|
||||||
|
@ -324,7 +324,7 @@ sudo systemctl disable firewalld.service
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
service network status
|
service network status
|
||||||
配置设备:
|
配置设备:
|
||||||
lo eth0
|
lo eth0
|
||||||
|
@ -347,7 +347,7 @@ service network restart
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 每 1 分钟执行一次 command
|
# 每 1 分钟执行一次 command
|
||||||
* * * * * command
|
* * * * * command
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@ tags:
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 下载文件
|
# 下载文件
|
||||||
$ curl http://man.linuxde.net/text.iso --silent
|
$ curl http://man.linuxde.net/text.iso --silent
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ $ curl http://man.linuxde.net/test.iso -o filename.iso --progress
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 使用 wget 下载单个文件
|
# 使用 wget 下载单个文件
|
||||||
$ wget http://www.linuxde.net/testfile.zip
|
$ wget http://www.linuxde.net/testfile.zip
|
||||||
```
|
```
|
||||||
|
@ -94,7 +94,7 @@ $ wget http://www.linuxde.net/testfile.zip
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
telnet 192.168.2.10
|
telnet 192.168.2.10
|
||||||
Trying 192.168.2.10...
|
Trying 192.168.2.10...
|
||||||
Connected to 192.168.2.10 (192.168.2.10).
|
Connected to 192.168.2.10 (192.168.2.10).
|
||||||
|
@ -115,7 +115,7 @@ Login incorrect
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ ip link show # 查看网络接口信息
|
$ ip link show # 查看网络接口信息
|
||||||
$ ip link set eth0 upi # 开启网卡
|
$ ip link set eth0 upi # 开启网卡
|
||||||
$ ip link set eth0 down # 关闭网卡
|
$ ip link set eth0 down # 关闭网卡
|
||||||
|
@ -145,7 +145,7 @@ $ ip route delete 192.168.1.0/24 dev eth0 # 删除路由
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ hostname
|
$ hostname
|
||||||
AY1307311912260196fcZ
|
AY1307311912260196fcZ
|
||||||
```
|
```
|
||||||
|
@ -158,7 +158,7 @@ AY1307311912260196fcZ
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 查看网络设备信息(激活状态的)
|
# 查看网络设备信息(激活状态的)
|
||||||
[root@localhost ~]# ifconfig
|
[root@localhost ~]# ifconfig
|
||||||
eth0 Link encap:Ethernet HWaddr 00:16:3E:00:1E:51
|
eth0 Link encap:Ethernet HWaddr 00:16:3E:00:1E:51
|
||||||
|
@ -186,7 +186,7 @@ lo Link encap:Local Loopback
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 查看当前路由
|
# 查看当前路由
|
||||||
route
|
route
|
||||||
Kernel IP routing table
|
Kernel IP routing table
|
||||||
|
@ -284,7 +284,7 @@ systemctl 是 CentOS7 的服务管理工具中主要的工具,它融合之前
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 开放指定的端口
|
# 开放指定的端口
|
||||||
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #允许本地回环接口(即运行本机访问本机)
|
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #允许本地回环接口(即运行本机访问本机)
|
||||||
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许已建立的或相关连的通行
|
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许已建立的或相关连的通行
|
||||||
|
@ -328,7 +328,7 @@ Chain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes)
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
[root@localhost ~]# host www.jsdig.com
|
[root@localhost ~]# host www.jsdig.com
|
||||||
www.jsdig.com is an alias for host.1.jsdig.com.
|
www.jsdig.com is an alias for host.1.jsdig.com.
|
||||||
host.1.jsdig.com has address 100.42.212.8
|
host.1.jsdig.com has address 100.42.212.8
|
||||||
|
@ -355,7 +355,7 @@ Received 54 bytes from 202.96.104.15#53 in 0 ms
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
[root@localhost ~]# nslookup www.jsdig.com
|
[root@localhost ~]# nslookup www.jsdig.com
|
||||||
Server: 202.96.104.15
|
Server: 202.96.104.15
|
||||||
Address: 202.96.104.15#53
|
Address: 202.96.104.15#53
|
||||||
|
@ -374,7 +374,7 @@ Address: 100.42.212.8
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# TCP 端口扫描
|
# TCP 端口扫描
|
||||||
[root@localhost ~]# nc -v -z -w2 192.168.0.3 1-100
|
[root@localhost ~]# nc -v -z -w2 192.168.0.3 1-100
|
||||||
192.168.0.3: inverse host lookup failed: Unknown host
|
192.168.0.3: inverse host lookup failed: Unknown host
|
||||||
|
@ -394,7 +394,7 @@ Address: 100.42.212.8
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
[root@AY1307311912260196fcZ ~]# ping www.jsdig.com
|
[root@AY1307311912260196fcZ ~]# ping www.jsdig.com
|
||||||
PING host.1.jsdig.com (100.42.212.8) 56(84) bytes of data.
|
PING host.1.jsdig.com (100.42.212.8) 56(84) bytes of data.
|
||||||
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=1 ttl=50 time=177 ms
|
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=1 ttl=50 time=177 ms
|
||||||
|
@ -416,7 +416,7 @@ rtt min/avg/max/mdev = 174.068/176.916/178.182/1.683 ms
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
traceroute www.58.com
|
traceroute www.58.com
|
||||||
traceroute to www.58.com (211.151.111.30), 30 hops max, 40 byte packets
|
traceroute to www.58.com (211.151.111.30), 30 hops max, 40 byte packets
|
||||||
1 unknown (192.168.2.1) 3.453 ms 3.801 ms 3.937 ms
|
1 unknown (192.168.2.1) 3.453 ms 3.801 ms 3.937 ms
|
||||||
|
@ -441,7 +441,7 @@ traceroute to www.58.com (211.151.111.30), 30 hops max, 40 byte packets
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 列出所有端口 (包括监听和未监听的)
|
# 列出所有端口 (包括监听和未监听的)
|
||||||
netstat -a #列出所有端口
|
netstat -a #列出所有端口
|
||||||
netstat -at #列出所有tcp端口
|
netstat -at #列出所有tcp端口
|
||||||
|
|
|
@ -42,7 +42,7 @@ tags:
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 查看系统磁盘设备,默认是 KB 为单位
|
# 查看系统磁盘设备,默认是 KB 为单位
|
||||||
[root@LinServ-1 ~]# df
|
[root@LinServ-1 ~]# df
|
||||||
文件系统 1K-块 已用 可用 已用% 挂载点
|
文件系统 1K-块 已用 可用 已用% 挂载点
|
||||||
|
@ -80,7 +80,7 @@ none 0 0 0 - /proc/sys/fs/binfmt_misc
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 显示目录或者文件所占空间
|
# 显示目录或者文件所占空间
|
||||||
root@localhost [test]# du
|
root@localhost [test]# du
|
||||||
608 ./test6
|
608 ./test6
|
||||||
|
@ -138,7 +138,7 @@ root@localhost [test]# du
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
free -t # 以总和的形式显示内存的使用信息
|
free -t # 以总和的形式显示内存的使用信息
|
||||||
free -s 10 # 周期性的查询内存使用信息,每10s 执行一次命令
|
free -s 10 # 周期性的查询内存使用信息,每10s 执行一次命令
|
||||||
|
|
||||||
|
@ -159,7 +159,7 @@ Swap: 4094 0 4094
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
Total DISK read: 0.00 B/s | Total DISK write: 0.00 B/s
|
Total DISK read: 0.00 B/s | Total DISK write: 0.00 B/s
|
||||||
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> command
|
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> command
|
||||||
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init [3]
|
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init [3]
|
||||||
|
|
|
@ -39,7 +39,7 @@ rpm -ivh xxx.rpm
|
||||||
|
|
||||||
这类软件包是包含了源代码的 rpm 包,在安装时需要进行编译
|
这类软件包是包含了源代码的 rpm 包,在安装时需要进行编译
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
rpm -i xxx.src.rpm
|
rpm -i xxx.src.rpm
|
||||||
cd /usr/src/redhat/SPECS
|
cd /usr/src/redhat/SPECS
|
||||||
rpmbuild -bp xxx.specs #一个和你的软件包同名的specs文件
|
rpmbuild -bp xxx.specs #一个和你的软件包同名的specs文件
|
||||||
|
@ -53,7 +53,7 @@ make install
|
||||||
|
|
||||||
使用命令 `rpm -e 包名`,包名可以包含版本号等信息,但是不可以有后缀.rpm,比如卸载软件包 proftpd-1.2.8-1,可以使用下列格式:
|
使用命令 `rpm -e 包名`,包名可以包含版本号等信息,但是不可以有后缀.rpm,比如卸载软件包 proftpd-1.2.8-1,可以使用下列格式:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
rpm -e proftpd-1.2.8-1
|
rpm -e proftpd-1.2.8-1
|
||||||
rpm -e proftpd-1.2.8
|
rpm -e proftpd-1.2.8
|
||||||
rpm -e proftpd-
|
rpm -e proftpd-
|
||||||
|
@ -62,7 +62,7 @@ rpm -e proftpd
|
||||||
|
|
||||||
不可以是下列格式:
|
不可以是下列格式:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
rpm -e proftpd-1.2.8-1.i386.rpm
|
rpm -e proftpd-1.2.8-1.i386.rpm
|
||||||
rpm -e proftpd-1.2.8-1.i386
|
rpm -e proftpd-1.2.8-1.i386
|
||||||
rpm -e proftpd-1.2
|
rpm -e proftpd-1.2
|
||||||
|
@ -79,7 +79,7 @@ rpm -e proftpd-1
|
||||||
|
|
||||||
(4)查看与 rpm 包相关的文件和其他信息
|
(4)查看与 rpm 包相关的文件和其他信息
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
rpm -qa # 列出所有安装过的包
|
rpm -qa # 列出所有安装过的包
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -176,7 +176,7 @@ deb [web 或 ftp 地址][发行版名字] [main/contrib/non-free]
|
||||||
|
|
||||||
在修改 /etc/apt/sources.list 或者 /etc/apt/preferences 之后运行该命令。
|
在修改 /etc/apt/sources.list 或者 /etc/apt/preferences 之后运行该命令。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 更新 apt-get
|
# 更新 apt-get
|
||||||
apt-get update
|
apt-get update
|
||||||
|
|
||||||
|
|
|
@ -143,7 +143,7 @@
|
||||||
- 使用括号扩展(`{`...`}`)来减少输入相似文本,并自动化文本组合。这在某些情况下会很有用,例如 `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` 和一个远程文件:
|
||||||
```sh
|
```bash
|
||||||
diff /etc/hosts <(ssh somehost cat /etc/hosts)
|
diff /etc/hosts <(ssh somehost cat /etc/hosts)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -180,7 +180,7 @@
|
||||||
- 考虑使用 [`mosh`](https://mosh.mit.edu/) 作为 ssh 的替代品,它使用 UDP 协议。它可以避免连接被中断并且对带宽需求更小,但它需要在服务端做相应的配置。
|
- 考虑使用 [`mosh`](https://mosh.mit.edu/) 作为 ssh 的替代品,它使用 UDP 协议。它可以避免连接被中断并且对带宽需求更小,但它需要在服务端做相应的配置。
|
||||||
|
|
||||||
- 获取八进制形式的文件访问权限(修改系统设置时通常需要,但 `ls` 的功能不那么好用并且通常会搞砸),可以使用类似如下的代码:
|
- 获取八进制形式的文件访问权限(修改系统设置时通常需要,但 `ls` 的功能不那么好用并且通常会搞砸),可以使用类似如下的代码:
|
||||||
```sh
|
```bash
|
||||||
stat -c '%A %a %n' /etc/timezone
|
stat -c '%A %a %n' /etc/timezone
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -241,12 +241,12 @@
|
||||||
- 了解如何使用 `awk` 和 `sed` 来进行简单的数据处理。 参阅 [One-liners](#one-liners) 获取示例。
|
- 了解如何使用 `awk` 和 `sed` 来进行简单的数据处理。 参阅 [One-liners](#one-liners) 获取示例。
|
||||||
|
|
||||||
- 替换一个或多个文件中出现的字符串:
|
- 替换一个或多个文件中出现的字符串:
|
||||||
```sh
|
```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 发行版中的功能并不完全一样。)
|
||||||
```sh
|
```bash
|
||||||
# 将文件、目录和内容全部重命名 foo -> bar:
|
# 将文件、目录和内容全部重命名 foo -> bar:
|
||||||
repren --full --preserve-case --from foo --to bar .
|
repren --full --preserve-case --from foo --to bar .
|
||||||
# 还原所有备份文件 whatever.bak -> whatever:
|
# 还原所有备份文件 whatever.bak -> whatever:
|
||||||
|
@ -256,7 +256,7 @@
|
||||||
```
|
```
|
||||||
|
|
||||||
- 根据 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)之一:
|
||||||
```sh
|
```bash
|
||||||
mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
|
mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -277,7 +277,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
|
||||||
- 制作二进制差分文件(Delta 压缩),使用 `xdelta3`。
|
- 制作二进制差分文件(Delta 压缩),使用 `xdelta3`。
|
||||||
|
|
||||||
- 使用 `iconv` 更改文本编码。需要更高级的功能,可以使用 `uconv`,它支持一些高级的 Unicode 功能。例如,这条命令移除了所有重音符号:
|
- 使用 `iconv` 更改文本编码。需要更高级的功能,可以使用 `uconv`,它支持一些高级的 Unicode 功能。例如,这条命令移除了所有重音符号:
|
||||||
```sh
|
```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,7 +290,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` 以保存和恢复文件权限。例如:
|
||||||
```sh
|
```bash
|
||||||
getfacl -R /some/path > permissions.txt
|
getfacl -R /some/path > permissions.txt
|
||||||
setfacl --restore=permissions.txt
|
setfacl --restore=permissions.txt
|
||||||
```
|
```
|
||||||
|
@ -346,7 +346,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
|
||||||
一些命令组合的例子:
|
一些命令组合的例子:
|
||||||
|
|
||||||
- 当你需要对文本文件做集合交、并、差运算时,`sort` 和 `uniq` 会是你的好帮手。具体例子请参照代码后面的,此处假设 `a` 与 `b` 是两内容不同的文件。这种方式效率很高,并且在小文件和上 G 的文件上都能运用(注意尽管在 `/tmp` 在一个小的根分区上时你可能需要 `-T` 参数,但是实际上 `sort` 并不被内存大小约束),参阅前文中关于 `LC_ALL` 和 `sort` 的 `-u` 参数的部分。
|
- 当你需要对文本文件做集合交、并、差运算时,`sort` 和 `uniq` 会是你的好帮手。具体例子请参照代码后面的,此处假设 `a` 与 `b` 是两内容不同的文件。这种方式效率很高,并且在小文件和上 G 的文件上都能运用(注意尽管在 `/tmp` 在一个小的根分区上时你可能需要 `-T` 参数,但是实际上 `sort` 并不被内存大小约束),参阅前文中关于 `LC_ALL` 和 `sort` 的 `-u` 参数的部分。
|
||||||
```sh
|
```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
|
||||||
sort a b b | uniq -u > c # c 是 a - b
|
sort a b b | uniq -u > c # c 是 a - b
|
||||||
|
@ -356,24 +356,24 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
|
||||||
|
|
||||||
|
|
||||||
- 计算文本文件第三列中所有数的和(可能比同等作用的 Python 代码快三倍且代码量少三倍):
|
- 计算文本文件第三列中所有数的和(可能比同等作用的 Python 代码快三倍且代码量少三倍):
|
||||||
```sh
|
```bash
|
||||||
awk '{ x += $3 } END { print x }' myfile
|
awk '{ x += $3 } END { print x }' myfile
|
||||||
```
|
```
|
||||||
|
|
||||||
- 如果你想在文件树上查看大小/日期,这可能看起来像递归版的 `ls -l` 但比 `ls -lR` 更易于理解:
|
- 如果你想在文件树上查看大小/日期,这可能看起来像递归版的 `ls -l` 但比 `ls -lR` 更易于理解:
|
||||||
```sh
|
```bash
|
||||||
find . -type f -ls
|
find . -type f -ls
|
||||||
```
|
```
|
||||||
|
|
||||||
- 假设你有一个类似于 web 服务器日志文件的文本文件,并且一个确定的值只会出现在某些行上,假设一个 `acct_id` 参数在 URI 中。如果你想计算出每个 `acct_id` 值有多少次请求,使用如下代码:
|
- 假设你有一个类似于 web 服务器日志文件的文本文件,并且一个确定的值只会出现在某些行上,假设一个 `acct_id` 参数在 URI 中。如果你想计算出每个 `acct_id` 值有多少次请求,使用如下代码:
|
||||||
```sh
|
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
- 要持续监测文件改动,可以使用 `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 文件并抽取项目):
|
||||||
```sh
|
```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|
|
||||||
pandoc -f markdown -t html |
|
pandoc -f markdown -t html |
|
||||||
|
|
|
@ -40,7 +40,7 @@ nameserver 8.8.8.8
|
||||||
|
|
||||||
firewalld 的基本使用
|
firewalld 的基本使用
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
启动:systemctl start firewalld
|
启动:systemctl start firewalld
|
||||||
关闭:systemctl stop firewalld
|
关闭:systemctl stop firewalld
|
||||||
查看状态:systemctl status firewalld
|
查看状态:systemctl status firewalld
|
||||||
|
@ -148,7 +148,7 @@ systemctl restart crond.service
|
||||||
|
|
||||||
执行 `vim /etc/rc.local` 命令,输入以下内容:
|
执行 `vim /etc/rc.local` 命令,输入以下内容:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
#
|
#
|
||||||
# This script will be executed *after* all the other init scripts.
|
# This script will be executed *after* all the other init scripts.
|
||||||
|
@ -190,7 +190,7 @@ Linux 开机的时候,会加载运行 `/etc/rc.d/init.d` 目录下的程序,
|
||||||
|
|
||||||
(2)查看当前系统的启动级别
|
(2)查看当前系统的启动级别
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ runlevel
|
$ runlevel
|
||||||
N 3
|
N 3
|
||||||
```
|
```
|
||||||
|
@ -292,7 +292,7 @@ MAILTO=root
|
||||||
|
|
||||||
设置方法:
|
设置方法:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sed -i 's/id:5:initdefault:/id:3:initdefault:/' /etc/inittab
|
$ sed -i 's/id:5:initdefault:/id:3:initdefault:/' /etc/inittab
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,7 @@ samba 服务的配置文件是 `/etc/samba/smb.conf`,如果没有则 samba 无
|
||||||
|
|
||||||
执行以下命令,编辑配置文件:
|
执行以下命令,编辑配置文件:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
vim /etc/samba/smb.conf
|
vim /etc/samba/smb.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -124,7 +124,7 @@ vim /etc/samba/smb.conf
|
||||||
|
|
||||||
创建的 samba 用户必须是 Linux 机器上实际存在的用户。
|
创建的 samba 用户必须是 Linux 机器上实际存在的用户。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo smbpasswd -a root
|
$ sudo smbpasswd -a root
|
||||||
New SMB password:
|
New SMB password:
|
||||||
Retype new SMB password:
|
Retype new SMB password:
|
||||||
|
@ -140,14 +140,14 @@ Added user root.
|
||||||
|
|
||||||
CentOS 6
|
CentOS 6
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo service samba restart # 重启 samba
|
$ sudo service samba restart # 重启 samba
|
||||||
$ sudo service smb restart # 重启 samba
|
$ sudo service smb restart # 重启 samba
|
||||||
```
|
```
|
||||||
|
|
||||||
CentOS 7
|
CentOS 7
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo systemctl start smb.service # 启动 samba
|
$ sudo systemctl start smb.service # 启动 samba
|
||||||
$ sudo systemctl restart smb.service # 重启 samba
|
$ sudo systemctl restart smb.service # 重启 samba
|
||||||
$ sudo systemctl enable smb.service # 设置开机自动启动
|
$ sudo systemctl enable smb.service # 设置开机自动启动
|
||||||
|
@ -441,7 +441,7 @@ guest ok = yes
|
||||||
|
|
||||||
1. 检查是否配置了防火墙规则
|
1. 检查是否配置了防火墙规则
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 一种方法是强行关闭防火墙
|
# 一种方法是强行关闭防火墙
|
||||||
$ sudo service iptables stop
|
$ sudo service iptables stop
|
||||||
|
|
||||||
|
@ -452,7 +452,7 @@ $ sudo firewall-cmd --reload
|
||||||
|
|
||||||
2. 关闭 selinux
|
2. 关闭 selinux
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 将 /etc/selinux/config 文件中的 SELINUX 设为 disabled
|
# 将 /etc/selinux/config 文件中的 SELINUX 设为 disabled
|
||||||
$ sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
|
$ sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
|
||||||
|
|
||||||
|
|
|
@ -208,7 +208,7 @@ filebeat 提供了一系列命令来完成各种功能。
|
||||||
|
|
||||||
执行命令方式:
|
执行命令方式:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
./filebeat COMMAND
|
./filebeat COMMAND
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -224,7 +224,7 @@ filebeat 提供了一系列命令来完成各种功能。
|
||||||
>
|
>
|
||||||
> **示例** 指定配置文件启动
|
> **示例** 指定配置文件启动
|
||||||
>
|
>
|
||||||
> ```sh
|
> ```bash
|
||||||
> ./filebeat run -e -c filebeat.yml -d "publish"
|
> ./filebeat run -e -c filebeat.yml -d "publish"
|
||||||
> ./filebeat -e -c filebeat.yml -d "publish" # run 可以省略
|
> ./filebeat -e -c filebeat.yml -d "publish" # run 可以省略
|
||||||
> ```
|
> ```
|
||||||
|
|
|
@ -52,7 +52,7 @@ ELK 是 elastic 公司旗下三款产品 [ElasticSearch](https://www.elastic.co/
|
||||||
|
|
||||||
ELK 要求本地环境中安装了 JDK 。如果不确定是否已安装,可使用下面的命令检查:
|
ELK 要求本地环境中安装了 JDK 。如果不确定是否已安装,可使用下面的命令检查:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
java -version
|
java -version
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -127,7 +127,7 @@ can not run elasticsearch as root
|
||||||
|
|
||||||
**解决方法:**使用非 root 权限账号运行 elasticsearch
|
**解决方法:**使用非 root 权限账号运行 elasticsearch
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 创建用户组
|
# 创建用户组
|
||||||
groupadd elk
|
groupadd elk
|
||||||
# 创建新用户,-g elk 设置其用户组为 elk,-p elk 设置其密码为 elk
|
# 创建新用户,-g elk 设置其用户组为 elk,-p elk 设置其密码为 elk
|
||||||
|
|
|
@ -91,7 +91,7 @@ b. 键入命令: **java -version**、**java**、**javac** 几个命令,出现
|
||||||
|
|
||||||
(2)解压压缩包到本地
|
(2)解压压缩包到本地
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ tar -zxf jdk-8u162-linux-x64.tar.gz
|
$ tar -zxf jdk-8u162-linux-x64.tar.gz
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ $ tar -zxf jdk-8u162-linux-x64.tar.gz
|
||||||
|
|
||||||
执行 `/etc/profile` 命令,添加以下内容:
|
执行 `/etc/profile` 命令,添加以下内容:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# JDK 的根路径
|
# JDK 的根路径
|
||||||
export JAVA_HOME=/opt/java/jdk1.8.0_162
|
export JAVA_HOME=/opt/java/jdk1.8.0_162
|
||||||
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
|
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
|
||||||
|
@ -120,7 +120,7 @@ export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
|
||||||
|
|
||||||
(2)选择一个合适的版本安装
|
(2)选择一个合适的版本安装
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ rpm -ivh jdk-8u181-linux-x64.rpm
|
$ rpm -ivh jdk-8u181-linux-x64.rpm
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -101,7 +101,7 @@ nohup java -jar jenkins.war --httpPort=8080 >> nohup.out 2>&1 &
|
||||||
|
|
||||||
或者直接执行命令:
|
或者直接执行命令:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
sed -i 's/www.google.com/www.baidu.com/g' /root/.jenkins/updates/default.json
|
sed -i 's/www.google.com/www.baidu.com/g' /root/.jenkins/updates/default.json
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -115,7 +115,7 @@ sed -i 's/www.google.com/www.baidu.com/g' /root/.jenkins/updates/default.json
|
||||||
|
|
||||||
或者直接执行命令:
|
或者直接执行命令:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
sed -i '/^<url>/s/.*/<url>http:\/\/mirror.xmission.com\/jenkins\/updates\/update-center.json<\/url>/g' /root/.jenkins/hudson.model.UpdateCenter.xml
|
sed -i '/^<url>/s/.*/<url>http:\/\/mirror.xmission.com\/jenkins\/updates\/update-center.json<\/url>/g' /root/.jenkins/hudson.model.UpdateCenter.xml
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -29,14 +29,14 @@
|
||||||
|
|
||||||
解压到本地:
|
解压到本地:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
> unzip rocketmq-all-4.2.0-source-release.zip
|
> unzip rocketmq-all-4.2.0-source-release.zip
|
||||||
> cd rocketmq-all-4.2.0/
|
> cd rocketmq-all-4.2.0/
|
||||||
```
|
```
|
||||||
|
|
||||||
## 启动 Name Server
|
## 启动 Name Server
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
> nohup sh bin/mqnamesrv &
|
> nohup sh bin/mqnamesrv &
|
||||||
> tail -f ~/logs/rocketmqlogs/namesrv.log
|
> tail -f ~/logs/rocketmqlogs/namesrv.log
|
||||||
The Name Server boot success...
|
The Name Server boot success...
|
||||||
|
@ -44,7 +44,7 @@ The Name Server boot success...
|
||||||
|
|
||||||
## 启动 Broker
|
## 启动 Broker
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
> nohup sh bin/mqbroker -n localhost:9876 -c conf/broker.conf &
|
> nohup sh bin/mqbroker -n localhost:9876 -c conf/broker.conf &
|
||||||
> tail -f ~/logs/rocketmqlogs/broker.log
|
> tail -f ~/logs/rocketmqlogs/broker.log
|
||||||
The broker[%s, 172.30.30.233:10911] boot success...
|
The broker[%s, 172.30.30.233:10911] boot success...
|
||||||
|
@ -54,7 +54,7 @@ The broker[%s, 172.30.30.233:10911] boot success...
|
||||||
|
|
||||||
执行收发消息操作之前,不许告诉客户端命名服务器的位置。在 RocketMQ 中有多种方法来实现这个目的。这里,我们使用最简单的方法——设置环境变量 `NAMESRV_ADDR` :
|
执行收发消息操作之前,不许告诉客户端命名服务器的位置。在 RocketMQ 中有多种方法来实现这个目的。这里,我们使用最简单的方法——设置环境变量 `NAMESRV_ADDR` :
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
> export NAMESRV_ADDR=localhost:9876
|
> export NAMESRV_ADDR=localhost:9876
|
||||||
> sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
|
> sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
|
||||||
SendResult [sendStatus=SEND_OK, msgId= ...
|
SendResult [sendStatus=SEND_OK, msgId= ...
|
||||||
|
@ -65,7 +65,7 @@ ConsumeMessageThread_%d Receive New Messages: [MessageExt...
|
||||||
|
|
||||||
## 关闭服务器
|
## 关闭服务器
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
> sh bin/mqshutdown broker
|
> sh bin/mqshutdown broker
|
||||||
The mqbroker(36695) is running...
|
The mqbroker(36695) is running...
|
||||||
Send shutdown request to mqbroker(36695) OK
|
Send shutdown request to mqbroker(36695) OK
|
||||||
|
@ -113,7 +113,7 @@ brokerIP1 = 10.10.30.63
|
||||||
|
|
||||||
启动时需要指定配置文件
|
启动时需要指定配置文件
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
nohup sh bin/mqbroker -n localhost:9876 -c conf/broker.conf &
|
nohup sh bin/mqbroker -n localhost:9876 -c conf/broker.conf &
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -21,13 +21,13 @@ Svn 是 Subversion 的简称,是一个开放源代码的版本控制系统,
|
||||||
|
|
||||||
### 1.1. 安装 svn
|
### 1.1. 安装 svn
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ yum install -y subversion
|
$ yum install -y subversion
|
||||||
```
|
```
|
||||||
|
|
||||||
### 1.2. 创建 svn 仓库
|
### 1.2. 创建 svn 仓库
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ mkdir -p /share/svn
|
$ mkdir -p /share/svn
|
||||||
$ svnadmin create /share/svn
|
$ svnadmin create /share/svn
|
||||||
$ ls /share/svn
|
$ ls /share/svn
|
||||||
|
@ -42,7 +42,7 @@ conf db format hooks locks README.txt
|
||||||
|
|
||||||
### 1.3. 配置 svnserve.conf
|
### 1.3. 配置 svnserve.conf
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ vim /share/svn/conf/svnserve.conf
|
$ vim /share/svn/conf/svnserve.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ realm = /share/svn # 认证空间名,版本库所在目录
|
||||||
|
|
||||||
### 1.4. 配置 passwd
|
### 1.4. 配置 passwd
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ vim /share/svn/conf/passwd
|
$ vim /share/svn/conf/passwd
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ user3 = 123456
|
||||||
|
|
||||||
### 1.5. 配置 authz
|
### 1.5. 配置 authz
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ vim /share/svn/conf/authz
|
$ vim /share/svn/conf/authz
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ user3 = rw
|
||||||
|
|
||||||
### 1.6. 启动关闭 svn
|
### 1.6. 启动关闭 svn
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ svnserve -d -r /share/svn # 启动 svn
|
$ svnserve -d -r /share/svn # 启动 svn
|
||||||
$ killall svnserve # 关闭 svn
|
$ killall svnserve # 关闭 svn
|
||||||
```
|
```
|
||||||
|
@ -102,13 +102,13 @@ $ killall svnserve # 关闭 svn
|
||||||
|
|
||||||
编辑 `/etc/rc.d/rc.local` 文件:
|
编辑 `/etc/rc.d/rc.local` 文件:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ vi /etc/rc.d/rc.local
|
$ vi /etc/rc.d/rc.local
|
||||||
```
|
```
|
||||||
|
|
||||||
输入以下内容:
|
输入以下内容:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 开机自动启动 svn,默认端口是 3690
|
# 开机自动启动 svn,默认端口是 3690
|
||||||
$ /usr/bin/svnserve -d -r /share/svn --listen-port 3690
|
$ /usr/bin/svnserve -d -r /share/svn --listen-port 3690
|
||||||
```
|
```
|
||||||
|
@ -125,7 +125,7 @@ CentOS 7 中的 `/etc/rc.d/rc.local` 是没有执行权限的,系统建议创
|
||||||
|
|
||||||
找到 svn 的 service 配置文件 `/etc/sysconfig/svnserve` 编辑配置文件
|
找到 svn 的 service 配置文件 `/etc/sysconfig/svnserve` 编辑配置文件
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ vi /etc/sysconfig/svnserve
|
$ vi /etc/sysconfig/svnserve
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -108,14 +108,14 @@ Git 是一个非常优秀的版本控制工具,但是在实际版本管理中
|
||||||
|
|
||||||
a. 创建develop分支
|
a. 创建develop分支
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
git branch develop
|
git branch develop
|
||||||
git push -u origin develop
|
git push -u origin develop
|
||||||
```
|
```
|
||||||
|
|
||||||
b. 开始新Feature开发
|
b. 开始新Feature开发
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
git checkout -b some-feature develop
|
git checkout -b some-feature develop
|
||||||
# Optionally, push branch to origin:
|
# Optionally, push branch to origin:
|
||||||
git push -u origin some-feature
|
git push -u origin some-feature
|
||||||
|
@ -128,7 +128,7 @@ git commit
|
||||||
|
|
||||||
c. 完成Feature
|
c. 完成Feature
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
git pull origin develop
|
git pull origin develop
|
||||||
git checkout develop
|
git checkout develop
|
||||||
git merge --no-ff some-feature
|
git merge --no-ff some-feature
|
||||||
|
@ -142,7 +142,7 @@ git push origin --delete some-feature
|
||||||
|
|
||||||
d. 开始Relase
|
d. 开始Relase
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
git checkout -b release-0.1.0 develop
|
git checkout -b release-0.1.0 develop
|
||||||
|
|
||||||
# Optional: Bump version number, commit
|
# Optional: Bump version number, commit
|
||||||
|
@ -151,7 +151,7 @@ git checkout -b release-0.1.0 develop
|
||||||
|
|
||||||
e. 完成Release
|
e. 完成Release
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
git checkout master
|
git checkout master
|
||||||
git merge --no-ff release-0.1.0
|
git merge --no-ff release-0.1.0
|
||||||
git push
|
git push
|
||||||
|
@ -172,13 +172,13 @@ git push --tags
|
||||||
|
|
||||||
f. 开始Hotfix
|
f. 开始Hotfix
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
git checkout -b hotfix-0.1.1 master
|
git checkout -b hotfix-0.1.1 master
|
||||||
```
|
```
|
||||||
|
|
||||||
g. 完成Hotfix
|
g. 完成Hotfix
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
git checkout master
|
git checkout master
|
||||||
git merge --no-ff hotfix-0.1.1
|
git merge --no-ff hotfix-0.1.1
|
||||||
git push
|
git push
|
||||||
|
|
|
@ -65,13 +65,13 @@
|
||||||
|
|
||||||
如果你用 `git commit -a` 提交了一次变化(changes),而你又不确定到底这次提交了哪些内容。 你就可以用下面的命令显示当前`HEAD`上的最近一次的提交(commit):
|
如果你用 `git commit -a` 提交了一次变化(changes),而你又不确定到底这次提交了哪些内容。 你就可以用下面的命令显示当前`HEAD`上的最近一次的提交(commit):
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git show
|
(master)$ git show
|
||||||
```
|
```
|
||||||
|
|
||||||
或者
|
或者
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git log -n1 -p
|
$ git log -n1 -p
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -79,13 +79,13 @@ $ git log -n1 -p
|
||||||
|
|
||||||
如果你的提交信息(commit message)写错了且这次提交(commit)还没有推(push), 你可以通过下面的方法来修改提交信息(commit message):
|
如果你的提交信息(commit message)写错了且这次提交(commit)还没有推(push), 你可以通过下面的方法来修改提交信息(commit message):
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git commit --amend
|
$ git commit --amend
|
||||||
```
|
```
|
||||||
|
|
||||||
这会打开你的默认编辑器, 在这里你可以编辑信息. 另一方面, 你也可以用一条命令一次完成:
|
这会打开你的默认编辑器, 在这里你可以编辑信息. 另一方面, 你也可以用一条命令一次完成:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git commit --amend -m 'xxxxxxx'
|
$ git commit --amend -m 'xxxxxxx'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ $ git commit --amend -m 'xxxxxxx'
|
||||||
|
|
||||||
如果这只是单个提交(commit),修改它:
|
如果这只是单个提交(commit),修改它:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git commit --amend --author "New Authorname <authoremail@mydomain.com>"
|
$ git commit --amend --author "New Authorname <authoremail@mydomain.com>"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -105,7 +105,7 @@ $ git commit --amend --author "New Authorname <authoremail@mydomain.com>"
|
||||||
|
|
||||||
通过下面的方法,从一个提交(commit)里移除一个文件:
|
通过下面的方法,从一个提交(commit)里移除一个文件:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git checkout HEAD^ myfile
|
$ git checkout HEAD^ myfile
|
||||||
$ git add -A
|
$ git add -A
|
||||||
$ git commit --amend
|
$ git commit --amend
|
||||||
|
@ -117,7 +117,7 @@ $ git commit --amend
|
||||||
|
|
||||||
如果你需要删除推了的提交(pushed commits),你可以使用下面的方法。可是,这会不可逆的改变你的历史,也会搞乱那些已经从该仓库拉取(pulled)了的人的历史。简而言之,如果你不是很确定,千万不要这么做。
|
如果你需要删除推了的提交(pushed commits),你可以使用下面的方法。可是,这会不可逆的改变你的历史,也会搞乱那些已经从该仓库拉取(pulled)了的人的历史。简而言之,如果你不是很确定,千万不要这么做。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git reset HEAD^ --hard
|
$ git reset HEAD^ --hard
|
||||||
$ git push -f [remote] [branch]
|
$ git push -f [remote] [branch]
|
||||||
```
|
```
|
||||||
|
@ -135,7 +135,7 @@ $ git push -f [remote] [branch]
|
||||||
|
|
||||||
同样的警告:不到万不得已的时候不要这么做.
|
同样的警告:不到万不得已的时候不要这么做.
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git rebase --onto SHA1_OF_BAD_COMMIT^ SHA1_OF_BAD_COMMIT
|
$ git rebase --onto SHA1_OF_BAD_COMMIT^ SHA1_OF_BAD_COMMIT
|
||||||
$ git push -f [remote] [branch]
|
$ git push -f [remote] [branch]
|
||||||
```
|
```
|
||||||
|
@ -144,7 +144,7 @@ $ git push -f [remote] [branch]
|
||||||
|
|
||||||
### 我尝试推一个修正后的提交(amended commit)到远程,但是报错:
|
### 我尝试推一个修正后的提交(amended commit)到远程,但是报错:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
To https://github.com/yourusername/repo.git
|
To https://github.com/yourusername/repo.git
|
||||||
! [rejected] mybranch -> mybranch (non-fast-forward)
|
! [rejected] mybranch -> mybranch (non-fast-forward)
|
||||||
error: failed to push some refs to 'https://github.com/tanay1337/webmaker.org.git'
|
error: failed to push some refs to 'https://github.com/tanay1337/webmaker.org.git'
|
||||||
|
@ -156,7 +156,7 @@ hint: See the 'Note about fast-forwards' in 'git push --help' for details.
|
||||||
|
|
||||||
注意, rebasing(见下面)和修正(amending)会用一个**新的提交(commit)代替旧的**, 所以如果之前你已经往远程仓库上推过一次修正前的提交(commit),那你现在就必须强推(force push) (`-f`)。 注意 – *总是* 确保你指明一个分支!
|
注意, rebasing(见下面)和修正(amending)会用一个**新的提交(commit)代替旧的**, 所以如果之前你已经往远程仓库上推过一次修正前的提交(commit),那你现在就必须强推(force push) (`-f`)。 注意 – *总是* 确保你指明一个分支!
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(my-branch)$ git push origin mybranch -f
|
(my-branch)$ git push origin mybranch -f
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -166,13 +166,13 @@ hint: See the 'Note about fast-forwards' in 'git push --help' for details.
|
||||||
|
|
||||||
如果你意外的做了 `git reset --hard`, 你通常能找回你的提交(commit), 因为Git对每件事都会有日志,且都会保存几天。
|
如果你意外的做了 `git reset --hard`, 你通常能找回你的提交(commit), 因为Git对每件事都会有日志,且都会保存几天。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git reflog
|
(master)$ git reflog
|
||||||
```
|
```
|
||||||
|
|
||||||
你将会看到一个你过去提交(commit)的列表, 和一个重置的提交。 选择你想要回到的提交(commit)的SHA,再重置一次:
|
你将会看到一个你过去提交(commit)的列表, 和一个重置的提交。 选择你想要回到的提交(commit)的SHA,再重置一次:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git reset --hard SHA1234
|
(master)$ git reset --hard SHA1234
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -182,7 +182,7 @@ hint: See the 'Note about fast-forwards' in 'git push --help' for details.
|
||||||
|
|
||||||
### 我需要把暂存的内容添加到上一次的提交(commit)
|
### 我需要把暂存的内容添加到上一次的提交(commit)
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(my-branch*)$ git commit --amend
|
(my-branch*)$ git commit --amend
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -191,13 +191,13 @@ hint: See the 'Note about fast-forwards' in 'git push --help' for details.
|
||||||
|
|
||||||
一般来说, 如果你想暂存一个文件的一部分, 你可这样做:
|
一般来说, 如果你想暂存一个文件的一部分, 你可这样做:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git add --patch filename.x
|
$ git add --patch filename.x
|
||||||
```
|
```
|
||||||
|
|
||||||
`-p` 简写。这会打开交互模式, 你将能够用 `s` 选项来分隔提交(commit); 然而, 如果这个文件是新的, 会没有这个选择, 添加一个新文件时, 这样做:
|
`-p` 简写。这会打开交互模式, 你将能够用 `s` 选项来分隔提交(commit); 然而, 如果这个文件是新的, 会没有这个选择, 添加一个新文件时, 这样做:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git add -N filename.x
|
$ git add -N filename.x
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -211,7 +211,7 @@ $ git add -N filename.x
|
||||||
|
|
||||||
这个有点困难, 我能想到的最好的方法是先stash未暂存的内容, 然后重置(reset),再pop第一步stashed的内容, 最后再add它们。
|
这个有点困难, 我能想到的最好的方法是先stash未暂存的内容, 然后重置(reset),再pop第一步stashed的内容, 最后再add它们。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git stash -k
|
$ git stash -k
|
||||||
$ git reset --hard
|
$ git reset --hard
|
||||||
$ git stash pop
|
$ git stash pop
|
||||||
|
@ -222,13 +222,13 @@ $ git add -A
|
||||||
|
|
||||||
### 我想把未暂存的内容移动到一个新分支
|
### 我想把未暂存的内容移动到一个新分支
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git checkout -b my-branch
|
$ git checkout -b my-branch
|
||||||
```
|
```
|
||||||
|
|
||||||
### 我想把未暂存的内容移动到另一个已存在的分支
|
### 我想把未暂存的内容移动到另一个已存在的分支
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git stash
|
$ git stash
|
||||||
$ git checkout my-branch
|
$ git checkout my-branch
|
||||||
$ git stash pop
|
$ git stash pop
|
||||||
|
@ -238,7 +238,7 @@ $ git stash pop
|
||||||
|
|
||||||
如果你只是想重置源(origin)和你本地(local)之间的一些提交(commit),你可以:
|
如果你只是想重置源(origin)和你本地(local)之间的一些提交(commit),你可以:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# one commit
|
# one commit
|
||||||
(my-branch)$ git reset --hard HEAD^
|
(my-branch)$ git reset --hard HEAD^
|
||||||
# two commits
|
# two commits
|
||||||
|
@ -251,7 +251,7 @@ $ git stash pop
|
||||||
|
|
||||||
重置某个特殊的文件, 你可以用文件名做为参数:
|
重置某个特殊的文件, 你可以用文件名做为参数:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git reset filename
|
$ git reset filename
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -261,14 +261,14 @@ $ git reset filename
|
||||||
|
|
||||||
签出(checkout)不需要的内容,保留需要的。
|
签出(checkout)不需要的内容,保留需要的。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git checkout -p
|
$ git checkout -p
|
||||||
# Answer y to all of the snippets you want to drop
|
# Answer y to all of the snippets you want to drop
|
||||||
```
|
```
|
||||||
|
|
||||||
另外一个方法是使用 `stash`, Stash所有要保留下的内容, 重置工作拷贝, 重新应用保留的部分。
|
另外一个方法是使用 `stash`, Stash所有要保留下的内容, 重置工作拷贝, 重新应用保留的部分。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git stash -p
|
$ git stash -p
|
||||||
# Select all of the snippets you want to save
|
# Select all of the snippets you want to save
|
||||||
$ git reset --hard
|
$ git reset --hard
|
||||||
|
@ -277,7 +277,7 @@ $ git stash pop
|
||||||
|
|
||||||
或者, stash 你不需要的部分, 然后stash drop。
|
或者, stash 你不需要的部分, 然后stash drop。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git stash -p
|
$ git stash -p
|
||||||
# Select all of the snippets you don't want to save
|
# Select all of the snippets you don't want to save
|
||||||
$ git stash drop
|
$ git stash drop
|
||||||
|
@ -289,7 +289,7 @@ $ git stash drop
|
||||||
|
|
||||||
这是另外一种使用 `git reflog` 情况,找到在这次错误拉(pull) 之前HEAD的指向。
|
这是另外一种使用 `git reflog` 情况,找到在这次错误拉(pull) 之前HEAD的指向。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git reflog
|
(master)$ git reflog
|
||||||
ab7555f HEAD@{0}: pull origin wrong-branch: Fast-forward
|
ab7555f HEAD@{0}: pull origin wrong-branch: Fast-forward
|
||||||
c5bc55a HEAD@{1}: checkout: checkout message goes here
|
c5bc55a HEAD@{1}: checkout: checkout message goes here
|
||||||
|
@ -297,7 +297,7 @@ c5bc55a HEAD@{1}: checkout: checkout message goes here
|
||||||
|
|
||||||
重置分支到你所需的提交(desired commit):
|
重置分支到你所需的提交(desired commit):
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git reset --hard c5bc55a
|
$ git reset --hard c5bc55a
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -309,7 +309,7 @@ $ git reset --hard c5bc55a
|
||||||
|
|
||||||
`git status` 会显示你领先(ahead)源(origin)多少个提交:
|
`git status` 会显示你领先(ahead)源(origin)多少个提交:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(my-branch)$ git status
|
(my-branch)$ git status
|
||||||
# On branch my-branch
|
# On branch my-branch
|
||||||
# Your branch is ahead of 'origin/my-branch' by 2 commits.
|
# Your branch is ahead of 'origin/my-branch' by 2 commits.
|
||||||
|
@ -319,7 +319,7 @@ $ git reset --hard c5bc55a
|
||||||
|
|
||||||
一种方法是:
|
一种方法是:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git reset --hard origin/my-branch
|
(master)$ git reset --hard origin/my-branch
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -327,13 +327,13 @@ $ git reset --hard c5bc55a
|
||||||
|
|
||||||
在master下创建一个新分支,不切换到新分支,仍在master下:
|
在master下创建一个新分支,不切换到新分支,仍在master下:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git branch my-branch
|
(master)$ git branch my-branch
|
||||||
```
|
```
|
||||||
|
|
||||||
把master分支重置到前一个提交:
|
把master分支重置到前一个提交:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git reset --hard HEAD^
|
(master)$ git reset --hard HEAD^
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -343,14 +343,14 @@ $ git reset --hard c5bc55a
|
||||||
|
|
||||||
例如, master分支想重置到的提交的hash为`a13b85e`:
|
例如, master分支想重置到的提交的hash为`a13b85e`:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git reset --hard a13b85e
|
(master)$ git reset --hard a13b85e
|
||||||
HEAD is now at a13b85e
|
HEAD is now at a13b85e
|
||||||
```
|
```
|
||||||
|
|
||||||
签出(checkout)刚才新建的分支继续工作:
|
签出(checkout)刚才新建的分支继续工作:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git checkout my-branch
|
(master)$ git checkout my-branch
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -358,7 +358,7 @@ HEAD is now at a13b85e
|
||||||
|
|
||||||
假设你正在做一个原型方案(原文为working spike (see note)), 有成百的内容,每个都工作得很好。现在, 你提交到了一个分支,保存工作内容:
|
假设你正在做一个原型方案(原文为working spike (see note)), 有成百的内容,每个都工作得很好。现在, 你提交到了一个分支,保存工作内容:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(solution)$ git add -A && git commit -m "Adding all changes from this spike into one big commit."
|
(solution)$ git add -A && git commit -m "Adding all changes from this spike into one big commit."
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -371,13 +371,13 @@ HEAD is now at a13b85e
|
||||||
|
|
||||||
我去可以通过把内容拿到你的分支里,来解决这个问题:
|
我去可以通过把内容拿到你的分支里,来解决这个问题:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(develop)$ git checkout solution -- file1.txt
|
(develop)$ git checkout solution -- file1.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
这会把这个文件内容从分支 `solution` 拿到分支 `develop` 里来:
|
这会把这个文件内容从分支 `solution` 拿到分支 `develop` 里来:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# On branch develop
|
# On branch develop
|
||||||
# Your branch is up-to-date with 'origin/develop'.
|
# Your branch is up-to-date with 'origin/develop'.
|
||||||
# Changes to be committed:
|
# Changes to be committed:
|
||||||
|
@ -394,7 +394,7 @@ Note: Spike solutions are made to analyze or solve the problem. These solutions
|
||||||
|
|
||||||
假设你有一个`master`分支, 执行`git log`, 你看到你做过两次提交:
|
假设你有一个`master`分支, 执行`git log`, 你看到你做过两次提交:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git log
|
(master)$ git log
|
||||||
|
|
||||||
commit e3851e817c451cc36f2e6f3049db528415e3c114
|
commit e3851e817c451cc36f2e6f3049db528415e3c114
|
||||||
|
@ -420,21 +420,21 @@ Date: Tue Jul 21 01:12:48 2014 -0400
|
||||||
|
|
||||||
首先, 我们把`master`分支重置到正确的提交(`a13b85e`):
|
首先, 我们把`master`分支重置到正确的提交(`a13b85e`):
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git reset --hard a13b85e
|
(master)$ git reset --hard a13b85e
|
||||||
HEAD is now at a13b85e
|
HEAD is now at a13b85e
|
||||||
```
|
```
|
||||||
|
|
||||||
现在, 我们对 bug #21 创建一个新的分支:
|
现在, 我们对 bug #21 创建一个新的分支:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git checkout -b 21
|
(master)$ git checkout -b 21
|
||||||
(21)$
|
(21)$
|
||||||
```
|
```
|
||||||
|
|
||||||
接着, 我们用 *cherry-pick* 把对bug #21的提交放入当前分支。 这意味着我们将应用(apply)这个提交(commit),仅仅这一个提交(commit),直接在HEAD上面。
|
接着, 我们用 *cherry-pick* 把对bug #21的提交放入当前分支。 这意味着我们将应用(apply)这个提交(commit),仅仅这一个提交(commit),直接在HEAD上面。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(21)$ git cherry-pick e3851e8
|
(21)$ git cherry-pick e3851e8
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -442,7 +442,7 @@ HEAD is now at a13b85e
|
||||||
|
|
||||||
再者, 我们为bug #14 创建一个新的分支, 也基于`master`分支
|
再者, 我们为bug #14 创建一个新的分支, 也基于`master`分支
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(21)$ git checkout master
|
(21)$ git checkout master
|
||||||
(master)$ git checkout -b 14
|
(master)$ git checkout -b 14
|
||||||
(14)$
|
(14)$
|
||||||
|
@ -450,14 +450,14 @@ HEAD is now at a13b85e
|
||||||
|
|
||||||
最后, 为 bug #14 执行 `cherry-pick`:
|
最后, 为 bug #14 执行 `cherry-pick`:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(14)$ git cherry-pick 5ea5173
|
(14)$ git cherry-pick 5ea5173
|
||||||
```
|
```
|
||||||
|
|
||||||
### 我想删除上游(upstream)分支被删除了的本地分支
|
### 我想删除上游(upstream)分支被删除了的本地分支
|
||||||
一旦你在github 上面合并(merge)了一个pull request, 你就可以删除你fork里被合并的分支。 如果你不准备继续在这个分支里工作, 删除这个分支的本地拷贝会更干净,使你不会陷入工作分支和一堆陈旧分支的混乱之中。
|
一旦你在github 上面合并(merge)了一个pull request, 你就可以删除你fork里被合并的分支。 如果你不准备继续在这个分支里工作, 删除这个分支的本地拷贝会更干净,使你不会陷入工作分支和一堆陈旧分支的混乱之中。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git fetch -p
|
$ git fetch -p
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -465,7 +465,7 @@ $ git fetch -p
|
||||||
|
|
||||||
如果你定期推送到远程, 多数情况下应该是安全的,但有些时候还是可能删除了还没有推到远程的分支。 让我们先创建一个分支和一个新的文件:
|
如果你定期推送到远程, 多数情况下应该是安全的,但有些时候还是可能删除了还没有推到远程的分支。 让我们先创建一个分支和一个新的文件:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git checkout -b my-branch
|
(master)$ git checkout -b my-branch
|
||||||
(my-branch)$ git branch
|
(my-branch)$ git branch
|
||||||
(my-branch)$ touch foo.txt
|
(my-branch)$ touch foo.txt
|
||||||
|
@ -475,7 +475,7 @@ README.md foo.txt
|
||||||
|
|
||||||
添加文件并做一次提交
|
添加文件并做一次提交
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(my-branch)$ git add .
|
(my-branch)$ git add .
|
||||||
(my-branch)$ git commit -m 'foo.txt added'
|
(my-branch)$ git commit -m 'foo.txt added'
|
||||||
(my-branch)$ foo.txt added
|
(my-branch)$ foo.txt added
|
||||||
|
@ -498,7 +498,7 @@ Date: Tue Jul 29 13:14:46 2014 -0400
|
||||||
|
|
||||||
现在我们切回到主(master)分支,‘不小心的’删除`my-branch`分支
|
现在我们切回到主(master)分支,‘不小心的’删除`my-branch`分支
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(my-branch)$ git checkout master
|
(my-branch)$ git checkout master
|
||||||
Switched to branch 'master'
|
Switched to branch 'master'
|
||||||
Your branch is up-to-date with 'origin/master'.
|
Your branch is up-to-date with 'origin/master'.
|
||||||
|
@ -519,7 +519,7 @@ oh noes, deleted my branch!
|
||||||
|
|
||||||
正如你所见,我们有一个来自删除分支的提交hash(commit hash),接下来看看是否能恢复删除了的分支。
|
正如你所见,我们有一个来自删除分支的提交hash(commit hash),接下来看看是否能恢复删除了的分支。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git checkout -b my-branch-help
|
(master)$ git checkout -b my-branch-help
|
||||||
Switched to a new branch 'my-branch-help'
|
Switched to a new branch 'my-branch-help'
|
||||||
(my-branch-help)$ git reset --hard 4e3cd85
|
(my-branch-help)$ git reset --hard 4e3cd85
|
||||||
|
@ -534,19 +534,19 @@ README.md foo.txt
|
||||||
|
|
||||||
删除一个远程分支:
|
删除一个远程分支:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git push origin --delete my-branch
|
(master)$ git push origin --delete my-branch
|
||||||
```
|
```
|
||||||
|
|
||||||
你也可以:
|
你也可以:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git push origin :my-branch
|
(master)$ git push origin :my-branch
|
||||||
```
|
```
|
||||||
|
|
||||||
删除一个本地分支:
|
删除一个本地分支:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git branch -D my-branch
|
(master)$ git branch -D my-branch
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -554,13 +554,13 @@ README.md foo.txt
|
||||||
|
|
||||||
首先, 从远程拉取(fetch) 所有分支:
|
首先, 从远程拉取(fetch) 所有分支:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git fetch --all
|
(master)$ git fetch --all
|
||||||
```
|
```
|
||||||
|
|
||||||
假设你想要从远程的`daves`分支签出到本地的`daves`
|
假设你想要从远程的`daves`分支签出到本地的`daves`
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git checkout --track origin/daves
|
(master)$ git checkout --track origin/daves
|
||||||
Branch daves set up to track remote branch daves from origin.
|
Branch daves set up to track remote branch daves from origin.
|
||||||
Switched to a new branch 'daves'
|
Switched to a new branch 'daves'
|
||||||
|
@ -576,7 +576,7 @@ Switched to a new branch 'daves'
|
||||||
|
|
||||||
你可以合并(merge)或rebase了一个错误的分支, 或者完成不了一个进行中的rebase/merge。 Git 在进行危险操作的时候会把原始的HEAD保存在一个叫ORIG_HEAD的变量里, 所以要把分支恢复到rebase/merge前的状态是很容易的。
|
你可以合并(merge)或rebase了一个错误的分支, 或者完成不了一个进行中的rebase/merge。 Git 在进行危险操作的时候会把原始的HEAD保存在一个叫ORIG_HEAD的变量里, 所以要把分支恢复到rebase/merge前的状态是很容易的。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(my-branch)$ git reset --hard ORIG_HEAD
|
(my-branch)$ git reset --hard ORIG_HEAD
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -584,7 +584,7 @@ Switched to a new branch 'daves'
|
||||||
|
|
||||||
不幸的是,如果你想把这些变化(changes)反应到远程分支上,你就必须得强推(force push)。 是因你快进(Fast forward)了提交,改变了Git历史, 远程分支不会接受变化(changes),除非强推(force push)。这就是许多人使用 merge 工作流, 而不是 rebasing 工作流的主要原因之一, 开发者的强推(force push)会使大的团队陷入麻烦。使用时需要注意,一种安全使用 rebase 的方法是,不要把你的变化(changes)反映到远程分支上, 而是按下面的做:
|
不幸的是,如果你想把这些变化(changes)反应到远程分支上,你就必须得强推(force push)。 是因你快进(Fast forward)了提交,改变了Git历史, 远程分支不会接受变化(changes),除非强推(force push)。这就是许多人使用 merge 工作流, 而不是 rebasing 工作流的主要原因之一, 开发者的强推(force push)会使大的团队陷入麻烦。使用时需要注意,一种安全使用 rebase 的方法是,不要把你的变化(changes)反映到远程分支上, 而是按下面的做:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git checkout my-branch
|
(master)$ git checkout my-branch
|
||||||
(my-branch)$ git rebase -i master
|
(my-branch)$ git rebase -i master
|
||||||
(my-branch)$ git checkout master
|
(my-branch)$ git checkout master
|
||||||
|
@ -597,20 +597,20 @@ Switched to a new branch 'daves'
|
||||||
|
|
||||||
假设你的工作分支将会做对于 `master` 的pull-request。 一般情况下你不关心提交(commit)的时间戳,只想组合 *所有* 提交(commit) 到一个单独的里面, 然后重置(reset)重提交(recommit)。 确保主(master)分支是最新的和你的变化都已经提交了, 然后:
|
假设你的工作分支将会做对于 `master` 的pull-request。 一般情况下你不关心提交(commit)的时间戳,只想组合 *所有* 提交(commit) 到一个单独的里面, 然后重置(reset)重提交(recommit)。 确保主(master)分支是最新的和你的变化都已经提交了, 然后:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(my-branch)$ git reset --soft master
|
(my-branch)$ git reset --soft master
|
||||||
(my-branch)$ git commit -am "New awesome feature"
|
(my-branch)$ git commit -am "New awesome feature"
|
||||||
```
|
```
|
||||||
|
|
||||||
如果你想要更多的控制, 想要保留时间戳, 你需要做交互式rebase (interactive rebase):
|
如果你想要更多的控制, 想要保留时间戳, 你需要做交互式rebase (interactive rebase):
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(my-branch)$ git rebase -i master
|
(my-branch)$ git rebase -i master
|
||||||
```
|
```
|
||||||
|
|
||||||
如果没有相对的其它分支, 你将不得不相对自己的`HEAD` 进行 rebase。 例如:你想组合最近的两次提交(commit), 你将相对于`HEAD\~2` 进行rebase, 组合最近3次提交(commit), 相对于`HEAD\~3`, 等等。
|
如果没有相对的其它分支, 你将不得不相对自己的`HEAD` 进行 rebase。 例如:你想组合最近的两次提交(commit), 你将相对于`HEAD\~2` 进行rebase, 组合最近3次提交(commit), 相对于`HEAD\~3`, 等等。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git rebase -i HEAD~2
|
(master)$ git rebase -i HEAD~2
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -681,20 +681,20 @@ Newer, awesomer features
|
||||||
|
|
||||||
如果成功了, 你应该看到类似下面的内容:
|
如果成功了, 你应该看到类似下面的内容:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ Successfully rebased and updated refs/heads/master.
|
(master)$ Successfully rebased and updated refs/heads/master.
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 安全合并(merging)策略
|
#### 安全合并(merging)策略
|
||||||
`--no-commit` 执行合并(merge)但不自动提交, 给用户在做提交前检查和修改的机会。 `no-ff` 会为特性分支(feature branch)的存在过留下证据, 保持项目历史一致。
|
`--no-commit` 执行合并(merge)但不自动提交, 给用户在做提交前检查和修改的机会。 `no-ff` 会为特性分支(feature branch)的存在过留下证据, 保持项目历史一致。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git merge --no-ff --no-commit my-branch
|
(master)$ git merge --no-ff --no-commit my-branch
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 我需要将一个分支合并成一个提交(commit)
|
#### 我需要将一个分支合并成一个提交(commit)
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git merge --squash my-branch
|
(master)$ git merge --squash my-branch
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -702,7 +702,7 @@ Newer, awesomer features
|
||||||
|
|
||||||
有时候,在将数据推向上游之前,你有几个正在进行的工作提交(commit)。这时候不希望把已经推(push)过的组合进来,因为其他人可能已经有提交(commit)引用它们了。
|
有时候,在将数据推向上游之前,你有几个正在进行的工作提交(commit)。这时候不希望把已经推(push)过的组合进来,因为其他人可能已经有提交(commit)引用它们了。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git rebase -i @{u}
|
(master)$ git rebase -i @{u}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -712,13 +712,13 @@ Newer, awesomer features
|
||||||
|
|
||||||
检查一个分支上的所有提交(commit)是否都已经合并(merge)到了其它分支, 你应该在这些分支的head(或任何 commits)之间做一次diff:
|
检查一个分支上的所有提交(commit)是否都已经合并(merge)到了其它分支, 你应该在这些分支的head(或任何 commits)之间做一次diff:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git log --graph --left-right --cherry-pick --oneline HEAD...feature/120-on-scroll
|
(master)$ git log --graph --left-right --cherry-pick --oneline HEAD...feature/120-on-scroll
|
||||||
```
|
```
|
||||||
|
|
||||||
这会告诉你在一个分支里有而另一个分支没有的所有提交(commit), 和分支之间不共享的提交(commit)的列表。 另一个做法可以是:
|
这会告诉你在一个分支里有而另一个分支没有的所有提交(commit), 和分支之间不共享的提交(commit)的列表。 另一个做法可以是:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git log master ^feature/120-on-scroll --no-merges
|
(master)$ git log master ^feature/120-on-scroll --no-merges
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -742,7 +742,7 @@ noop
|
||||||
|
|
||||||
首先执行 `git status` 找出哪些文件有冲突:
|
首先执行 `git status` 找出哪些文件有冲突:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(my-branch)$ git status
|
(my-branch)$ git status
|
||||||
On branch my-branch
|
On branch my-branch
|
||||||
Changes not staged for commit:
|
Changes not staged for commit:
|
||||||
|
@ -766,13 +766,13 @@ Changes not staged for commit:
|
||||||
|
|
||||||
有时候这些合并非常复杂,你应该使用可视化的差异编辑器(visual diff editor):
|
有时候这些合并非常复杂,你应该使用可视化的差异编辑器(visual diff editor):
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master*)$ git mergetool -t opendiff
|
(master*)$ git mergetool -t opendiff
|
||||||
```
|
```
|
||||||
|
|
||||||
在你解决完所有冲突和测试过后, `git add` 变化了的(changed)文件, 然后用`git rebase --continue` 继续rebase。
|
在你解决完所有冲突和测试过后, `git add` 变化了的(changed)文件, 然后用`git rebase --continue` 继续rebase。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(my-branch)$ git add README.md
|
(my-branch)$ git add README.md
|
||||||
(my-branch)$ git rebase --continue
|
(my-branch)$ git rebase --continue
|
||||||
```
|
```
|
||||||
|
@ -781,7 +781,7 @@ Changes not staged for commit:
|
||||||
|
|
||||||
任何时候你想结束整个rebase 过程,回来rebase前的分支状态, 你可以做:
|
任何时候你想结束整个rebase 过程,回来rebase前的分支状态, 你可以做:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(my-branch)$ git rebase --abort
|
(my-branch)$ git rebase --abort
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -789,19 +789,19 @@ Changes not staged for commit:
|
||||||
|
|
||||||
### 克隆所有子模块
|
### 克隆所有子模块
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git clone --recursive git://github.com/foo/bar.git
|
$ git clone --recursive git://github.com/foo/bar.git
|
||||||
```
|
```
|
||||||
|
|
||||||
如果已经克隆了:
|
如果已经克隆了:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git submodule update --init --recursive
|
$ git submodule update --init --recursive
|
||||||
```
|
```
|
||||||
|
|
||||||
### 删除标签(tag)
|
### 删除标签(tag)
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git tag -d <tag_name>
|
$ git tag -d <tag_name>
|
||||||
$ git push <remote> :refs/tags/<tag_name>
|
$ git push <remote> :refs/tags/<tag_name>
|
||||||
```
|
```
|
||||||
|
@ -810,13 +810,13 @@ $ git push <remote> :refs/tags/<tag_name>
|
||||||
|
|
||||||
如果你想恢复一个已删除标签(tag), 可以按照下面的步骤: 首先, 需要找到无法访问的标签(unreachable tag):
|
如果你想恢复一个已删除标签(tag), 可以按照下面的步骤: 首先, 需要找到无法访问的标签(unreachable tag):
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git fsck --unreachable | grep tag
|
$ git fsck --unreachable | grep tag
|
||||||
```
|
```
|
||||||
|
|
||||||
记下这个标签(tag)的hash,然后用Git的 [update-ref](http://git-scm.com/docs/git-update-ref):
|
记下这个标签(tag)的hash,然后用Git的 [update-ref](http://git-scm.com/docs/git-update-ref):
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git update-ref refs/tags/<tag_name> <hash>
|
$ git update-ref refs/tags/<tag_name> <hash>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -832,13 +832,13 @@ $ git update-ref refs/tags/<tag_name> <hash>
|
||||||
|
|
||||||
### 我只想改变一个文件名字的大小写,而不修改内容
|
### 我只想改变一个文件名字的大小写,而不修改内容
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git mv --force myfile MyFile
|
(master)$ git mv --force myfile MyFile
|
||||||
```
|
```
|
||||||
|
|
||||||
### 我想从Git删除一个文件,但保留该文件
|
### 我想从Git删除一个文件,但保留该文件
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git rm --cached log.txt
|
(master)$ git rm --cached log.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -875,12 +875,12 @@ $ git update-ref refs/tags/<tag_name> <hash>
|
||||||
|
|
||||||
你可能有一个仓库需要授权,这时你可以缓存用户名和密码,而不用每次推/拉(push/pull)的时候都输入,Credential helper能帮你。
|
你可能有一个仓库需要授权,这时你可以缓存用户名和密码,而不用每次推/拉(push/pull)的时候都输入,Credential helper能帮你。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git config --global credential.helper cache
|
$ git config --global credential.helper cache
|
||||||
# Set git to use the credential memory cache
|
# Set git to use the credential memory cache
|
||||||
```
|
```
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git config --global credential.helper 'cache --timeout=3600'
|
$ git config --global credential.helper 'cache --timeout=3600'
|
||||||
# Set the cache to timeout after 1 hour (setting is in seconds)
|
# Set the cache to timeout after 1 hour (setting is in seconds)
|
||||||
```
|
```
|
||||||
|
@ -891,7 +891,7 @@ $ git config --global credential.helper 'cache --timeout=3600'
|
||||||
|
|
||||||
这就是 `git reflog` 的目的, `reflog` 记录对分支顶端(the tip of a branch)的任何改变, 即使那个顶端没有被任何分支或标签引用。基本上, 每次HEAD的改变, 一条新的记录就会增加到`reflog`。遗憾的是,这只对本地分支起作用,且它只跟踪动作 (例如,不会跟踪一个没有被记录的文件的任何改变)。
|
这就是 `git reflog` 的目的, `reflog` 记录对分支顶端(the tip of a branch)的任何改变, 即使那个顶端没有被任何分支或标签引用。基本上, 每次HEAD的改变, 一条新的记录就会增加到`reflog`。遗憾的是,这只对本地分支起作用,且它只跟踪动作 (例如,不会跟踪一个没有被记录的文件的任何改变)。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
(master)$ git reflog
|
(master)$ git reflog
|
||||||
0a2e358 HEAD@{0}: reset: moving to HEAD\~2
|
0a2e358 HEAD@{0}: reset: moving to HEAD\~2
|
||||||
0254ea7 HEAD@{1}: checkout: moving from 2.2 to master
|
0254ea7 HEAD@{1}: checkout: moving from 2.2 to master
|
||||||
|
@ -902,7 +902,7 @@ c10f740 HEAD@{2}: checkout: moving from master to 2.2
|
||||||
|
|
||||||
如果事实证明你不小心回移(move back)了提交(commit), reflog 会包含你不小心回移前master上指向的提交(0254ea7)。
|
如果事实证明你不小心回移(move back)了提交(commit), reflog 会包含你不小心回移前master上指向的提交(0254ea7)。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git reset --hard 0254ea7
|
$ git reset --hard 0254ea7
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -117,7 +117,7 @@ Git 中使用这种哈希值的情况很多,你将经常看到这种哈希值
|
||||||
|
|
||||||
如果你使用的系统是 Debian/Ubuntu , 安装命令为:
|
如果你使用的系统是 Debian/Ubuntu , 安装命令为:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \
|
$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \
|
||||||
> libz-dev libssl-dev
|
> libz-dev libssl-dev
|
||||||
$ apt-get install git-core
|
$ apt-get install git-core
|
||||||
|
@ -129,7 +129,7 @@ git version 1.8.1.2
|
||||||
|
|
||||||
如果你使用的系统是 Centos/RedHat ,安装命令为:
|
如果你使用的系统是 Centos/RedHat ,安装命令为:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ yum install curl-devel expat-devel gettext-devel \
|
$ yum install curl-devel expat-devel gettext-devel \
|
||||||
> openssl-devel zlib-devel
|
> openssl-devel zlib-devel
|
||||||
$ yum -y install git-core
|
$ yum -y install git-core
|
||||||
|
@ -196,7 +196,7 @@ $ git config --global user.email johndoe@example.com
|
||||||
|
|
||||||
#### 克隆一个已创建的仓库
|
#### 克隆一个已创建的仓库
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 通过 SSH
|
# 通过 SSH
|
||||||
$ git clone ssh://user@domain.com/repo.git
|
$ git clone ssh://user@domain.com/repo.git
|
||||||
|
|
||||||
|
@ -206,7 +206,7 @@ $ git clone http://domain.com/user/repo.git
|
||||||
|
|
||||||
#### 创建一个新的本地仓库
|
#### 创建一个新的本地仓库
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git init
|
$ git init
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -214,7 +214,7 @@ $ git init
|
||||||
|
|
||||||
#### 添加修改到暂存区
|
#### 添加修改到暂存区
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 把指定文件添加到暂存区
|
# 把指定文件添加到暂存区
|
||||||
$ git add xxx
|
$ git add xxx
|
||||||
|
|
||||||
|
@ -227,7 +227,7 @@ $ git add -A
|
||||||
|
|
||||||
#### 提交修改到本地仓库
|
#### 提交修改到本地仓库
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 提交本地的所有修改
|
# 提交本地的所有修改
|
||||||
$ git commit -a
|
$ git commit -a
|
||||||
|
|
||||||
|
@ -244,7 +244,7 @@ $ git commit -m 'commit message'
|
||||||
|
|
||||||
官方称之为储藏,但我个人更喜欢称之为存草稿。
|
官方称之为储藏,但我个人更喜欢称之为存草稿。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 1. 将修改作为当前分支的草稿保存
|
# 1. 将修改作为当前分支的草稿保存
|
||||||
$ git stash
|
$ git stash
|
||||||
|
|
||||||
|
@ -263,7 +263,7 @@ $ git stash apply stash@{0}
|
||||||
|
|
||||||
#### 撤销本地修改
|
#### 撤销本地修改
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 移除缓存区的所有文件(i.e. 撤销上次git add)
|
# 移除缓存区的所有文件(i.e. 撤销上次git add)
|
||||||
$ git reset HEAD
|
$ git reset HEAD
|
||||||
|
|
||||||
|
@ -288,7 +288,7 @@ $ git checkout HEAD <file>
|
||||||
|
|
||||||
##### 删除添加`.gitignore`文件前错误提交的文件
|
##### 删除添加`.gitignore`文件前错误提交的文件
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git rm -r --cached .
|
$ git rm -r --cached .
|
||||||
$ git add .
|
$ git add .
|
||||||
$ git commit -m "remove xyz file"
|
$ git commit -m "remove xyz file"
|
||||||
|
@ -298,13 +298,13 @@ $ git commit -m "remove xyz file"
|
||||||
|
|
||||||
#### 创建一个新的提交,并回滚到指定版本
|
#### 创建一个新的提交,并回滚到指定版本
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git revert <commit-hash>
|
$ git revert <commit-hash>
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 彻底删除指定版本
|
#### 彻底删除指定版本
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 执行下面命令后,commit-hash 提交后的记录都会被彻底删除,使用需谨慎
|
# 执行下面命令后,commit-hash 提交后的记录都会被彻底删除,使用需谨慎
|
||||||
$ git reset --hard <commit-hash>
|
$ git reset --hard <commit-hash>
|
||||||
$ git push -f
|
$ git push -f
|
||||||
|
@ -314,7 +314,7 @@ $ git push -f
|
||||||
|
|
||||||
#### 更新
|
#### 更新
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 下载远程端版本,但不合并到HEAD中
|
# 下载远程端版本,但不合并到HEAD中
|
||||||
$ git fetch <remote>
|
$ git fetch <remote>
|
||||||
|
|
||||||
|
@ -327,7 +327,7 @@ $ git pull --rebase <remote> <branch>
|
||||||
|
|
||||||
#### 推送
|
#### 推送
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 将本地版本推送到远程端
|
# 将本地版本推送到远程端
|
||||||
$ git push remote <remote> <branch>
|
$ git push remote <remote> <branch>
|
||||||
|
|
||||||
|
@ -343,19 +343,19 @@ $ git push --tags
|
||||||
|
|
||||||
#### 显示工作路径下已修改的文件
|
#### 显示工作路径下已修改的文件
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git status
|
$ git status
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 显示与上次提交版本文件的不同
|
#### 显示与上次提交版本文件的不同
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ git diff
|
$ git diff
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 显示提交历史
|
#### 显示提交历史
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 从最新提交开始,显示所有的提交记录(显示hash, 作者信息,提交的标题和时间)
|
# 从最新提交开始,显示所有的提交记录(显示hash, 作者信息,提交的标题和时间)
|
||||||
$ git log
|
$ git log
|
||||||
|
|
||||||
|
@ -368,7 +368,7 @@ $ git log -p <file>
|
||||||
|
|
||||||
#### 显示搜索内容
|
#### 显示搜索内容
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 从当前目录的所有文件中查找文本内容
|
# 从当前目录的所有文件中查找文本内容
|
||||||
$ git grep "Hello"
|
$ git grep "Hello"
|
||||||
|
|
||||||
|
@ -380,7 +380,7 @@ $ git grep "Hello" v2.5
|
||||||
|
|
||||||
#### 增删查分支
|
#### 增删查分支
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 列出所有的分支
|
# 列出所有的分支
|
||||||
$ git branch
|
$ git branch
|
||||||
|
|
||||||
|
@ -402,7 +402,7 @@ $ git branch -D <branch>
|
||||||
|
|
||||||
#### 切换分支
|
#### 切换分支
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 切换分支
|
# 切换分支
|
||||||
$ git checkout <branch>
|
$ git checkout <branch>
|
||||||
|
|
||||||
|
@ -412,7 +412,7 @@ $ git checkout -b <branch>
|
||||||
|
|
||||||
#### 标签
|
#### 标签
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 给当前版本打标签
|
# 给当前版本打标签
|
||||||
$ git tag <tag-name>
|
$ git tag <tag-name>
|
||||||
|
|
||||||
|
@ -430,14 +430,14 @@ $ git tag -a <tag-name>
|
||||||
|
|
||||||
#### 合并
|
#### 合并
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 将分支合并到当前HEAD中
|
# 将分支合并到当前HEAD中
|
||||||
$ git merge <branch>
|
$ git merge <branch>
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 重置
|
#### 重置
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# 将当前HEAD版本重置到分支中,请勿重置已发布的提交
|
# 将当前HEAD版本重置到分支中,请勿重置已发布的提交
|
||||||
$ git rebase <branch>
|
$ git rebase <branch>
|
||||||
```
|
```
|
||||||
|
|
Loading…
Reference in New Issue