# Linux命令

* [Linux命令](https://note.niefee.com/directory-5/pages/-LjTb6fdB9aUpi-NYIeh#linux命令)
  * [文件操作命令](https://note.niefee.com/directory-5/pages/-LjTb6fdB9aUpi-NYIeh#文件操作命令)
    * [man](/directory-5/linux-ming-ling.md#man)
    * [cd](/directory-5/linux-ming-ling.md#cd)
    * [ls](/directory-5/linux-ming-ling.md#ls)
    * [pwd](/directory-5/linux-ming-ling.md#pwd)
    * [mkdir](/directory-5/linux-ming-ling.md#mkdir)
    * [rmdir](/directory-5/linux-ming-ling.md#rmdir)
    * [cp](/directory-5/linux-ming-ling.md#cp)
    * [rm](/directory-5/linux-ming-ling.md#rm)
    * [mv](/directory-5/linux-ming-ling.md#mv)
    * [cat](/directory-5/linux-ming-ling.md#cat)
    * [tac](/directory-5/linux-ming-ling.md#tac)
    * [nl](/directory-5/linux-ming-ling.md#nl)
    * [head](/directory-5/linux-ming-ling.md#head)
    * [tail](/directory-5/linux-ming-ling.md#tail)
    * [more](/directory-5/linux-ming-ling.md#more)
    * [less](/directory-5/linux-ming-ling.md#less)
    * [nano](/directory-5/linux-ming-ling.md#nano)
  * [系统操作](https://note.niefee.com/directory-5/pages/-LjTb6fdB9aUpi-NYIeh#系统操作)
    * [reboot](/directory-5/linux-ming-ling.md#reboot)
    * [poweroff](/directory-5/linux-ming-ling.md#poweroff)
    * [ping](/directory-5/linux-ming-ling.md#ping)
    * [grep](/directory-5/linux-ming-ling.md#grep)
    * [tar](/directory-5/linux-ming-ling.md#tar)
    * [chmod](/directory-5/linux-ming-ling.md#chmod)
    * [useradd](/directory-5/linux-ming-ling.md#useradd)
    * [passwd](/directory-5/linux-ming-ling.md#passwd)
    * [whereis](/directory-5/linux-ming-ling.md#whereis)
    * [find](/directory-5/linux-ming-ling.md#find)
    * [wget](/directory-5/linux-ming-ling.md#wget)

## Linux命令

### 文件操作命令

#### man

可以通过 `man` 命令获取帮助。执行以后，在 man page 页面中按 `q` 退出。

```bash
#查看ls命令使用文档
man ls

#查看cp命令使用文档
man cp
```

#### cd

`cd` 是打开某个路径的命令，也就是打开某个文件夹，并跳转到该处。

```bash
cd path[相对路径或绝对路径]      ### path 为你要打开的路径。
```

其中 `path` 有绝对路径和相对路径之分，绝对路径强调从 `/` 起，一直到所在路径。相对路径则相对于当前路径来说，假设当前家目录有`etc` 文件夹（绝对路径应为 `/home/username/etc`），如果直接 `cd etc` 则进入此文件夹，但若是 `cd /etc/` 则是进入系统 `etc` ，多琢磨一下就可以理解了。另外在 Linux 中， `.` 代表当前目录， `..` 代表上级目录，因此返回上级目录可以 `cd ..` 。

#### ls

`ls` 即 list ，列出文件。

选项与参数：

```bash
ls -a ：全部的文件，连同隐藏档( 开头为 . 的文件) 一起列出来(常用)
ls -d ：仅列出目录本身，而不是列出目录内的文件数据(常用)
ls -l ：长数据串列出，包含文件的属性与权限等等数据(常用)
ls -hl ：列出详细信息并以可读大小显示文件大小
ls -al ：列出所有文件（包括隐藏）的详细信息
```

#### pwd

`pwd`是`Print Working Directory`的缩写，也就是显示目前所在目录的的绝对路径命令。

```bash
#-P  ：可选，显示出确实的路径，而非使用连结 (link) 路径。
pwd [-P]
```

#### mkdir

`mkdir`用于新建文件夹。

选项与参数：

* -m ：配置文件的权限喔！直接配置，不需要看默认权限 (umask) 的脸色～

```bash
#创建权限为rwx--x--x的目录
mkdir -m 711 test1
```

* -p ：帮助你直接将所需要的目录(包含上一级目录)递归创建起来！

```bash
mkdir p1/p2
# mkdir: cannot create directory 'test1/test2/test3/test4'
mkdir: 无法创建目录'p1/p2':没有那个文件或目录     #  <== 没办法直接创建此目录啊！
mkdir -p p1/p2 # 加了这个 -p 的选项，可以自行帮你创建多层目录！
```

#### rmdir

`rmdir` 删除空的目录

```bash
rmdir p1

#-p ：连同上一级(空的)目录也一起删除
rmdir p1/p2 -p
```

> 这个 rmdir 仅能删除空的目录，你可以使用 rm 命令来删除非空目录。

#### cp

`cp`即拷贝文件和目录。

```bash
$ cp source dest            ### 将 source 复制到 dest
$ cp folder/*  dest         ### 将 folder 下所有文件(不含子文件夹中的文件或空文件夹)复制到 dest
$ cp -r folder  dest        ### 将 folder 下所有文件（包含子文件夹中的所有文件）复制到 dest

$ cp -i dest  folder/dest1  ### 将dest复制到folder下，并命名为dest1，-i参数会询问当同名文件存在时是否覆盖
% cp：是否覆盖'm1/hhh.txt'？  ### <==n不覆盖，y为覆盖
```

选项与参数：

* -a：相当於 -pdr 的意思，至於 pdr 请参考下列说明；(常用)
* -d：若来源档为连结档的属性(link file)，则复制连结档属性而非文件本身；
* -f：为强制(force)的意思，若目标文件已经存在且无法开启，则移除后再尝试一次；
* -i：若目标档(destination)已经存在时，在覆盖时会先询问动作的进行(常用)
* -l：进行硬式连结(hard link)的连结档创建，而非复制文件本身；
* -p：连同文件的属性一起复制过去，而非使用默认属性(备份常用)；
* -r：递归持续复制，用於目录的复制行为；(常用)
* -s：复制成为符号连结档 (symbolic link)，亦即『捷径』文件；
* -u：若 destination 比 source 旧才升级 destination ！

#### rm

`rm` 即 remove ，删除文件。

选项与参数：

* -f ：就是 force 的意思，忽略不存在的文件，不会出现警告信息；
* -i ：互动模式，在删除前会询问使用者是否动作
* -r ：递归删除啊！最常用在目录的删除了！这是非常危险的选项！！！

```
$ rm filename      ### 删除 filename
$ rm -i filename   ### 删除 filename 前提示，若多个文件则每次提示
$ rm -rf folder/subfolder/  ### 递归删除 subfolder 下所有文件及文件夹，包括 subfolder 自身
$ rm -d folder     ###  删除空文件夹，这个文件夹里面不可有任何文件或空文件夹
```

#### mv

`mv` 即 move ，移动文件。

选项与参数：

* -f ：force 强制的意思，如果目标文件已经存在，不会询问而直接覆盖；
* -i ：若目标文件 (destination) 已经存在时，就会询问是否覆盖！
* -u ：若目标文件已经存在，且 source 比较新，才会升级 (update)

```
$ mv source  folder        ### 将 source 移动到 folder 下，完成后则为  folder/source
$ mv -i source folder      ### 在移动时，若文件已存在则提示 **是否覆盖**
$ mv source dest           ### 在 dest 不为目录的前提下，重命名 source 为 dest
$ mv folder folder1        ### 两者为目录的情况下，将folder重命名为folder1
```

#### cat

`cat` 用于输出文件内容到 Terminal 。

```
$ cat /etc/locale.gen     ### 输出 locale.gen 的内容
$ cat -n /etc/locale.gen  ### 输出 locale.gen 的内容并显示行号
```

选项与参数：

* -A ：相当於 -vET 的整合选项，可列出一些特殊字符而不是空白而已；
* -b ：列出行号，仅针对非空白行做行号显示，空白行不标行号！
* -E ：将结尾的断行字节 $ 显示出来；
* -n ：列印出行号，连同空白行也会有行号，与 -b 的选项不同；
* -T ：将 \[tab] 按键以 ^I 显示出来；
* -v ：列出一些看不出来的特殊字符

#### tac

`tac`与`cat`命令刚好相反，文件内容从最后一行开始显示，可以看出 `tac` 是 `cat` 的倒着写！

#### nl

显示文件，并输出行号。

选项与参数：

* -b ：指定行号指定的方式，主要有两种：
  * -b a ：表示不论是否为空行，也同样列出行号(类似 cat -n)；
  * -b t ：如果有空行，空的那一行不要列出行号(默认值)；
* -n ：列出行号表示的方法，主要有三种：
  * -n ln ：行号在萤幕的最左方显示；
  * -n rn ：行号在自己栏位的最右方显示，且不加 0 ；
  * -n rz ：行号在自己栏位的最右方显示，且加 0 ；
* -w ：行号栏位的占用的位数。

#### head

取出文件前面几行

```
# 默认的情况中，显示前面 10 行！若要显示前 20 行，就得要这样：
$ head -n 20 test.txt
```

#### tail

取出文件后面几行

```
# 默认的情况中，显示最后的十行！若要显示最后的 20 行，就得要这样：
$ tail -n 20 test.txt

# -f ：表示持续侦测后面所接的档名，要等到按下[ctrl]-c才会结束tail的侦测
$ tail -fn 20 test.txt
```

#### more

`more` 与 `cat` 相似，都可以查看文件内容，所不同的是，当一个文档太长时， cat 只能展示最后布满屏幕的内容，前面的内容是不可见的。

```
$ more /etc/locale.gen
$ more +100 /etc/locale.gen       ### 从 100 行开始显示
```

查看时的操作：

* 空白键 (space)：代表向下翻一页；
* Enter         ：代表向下翻『一行』；
* /字串         ：代表在这个显示的内容当中，向下搜寻『字串』这个关键字；
* :f            ：立刻显示出档名以及目前显示的行数；
* q             ：代表立刻离开 more ，不再显示该文件内容。
* b 或 \[ctrl]-b ：代表往回翻页，不过这动作只对文件有用，对管线无用。

#### less

`less`与 `more`相似，不过 `less` 支持上下滚动查看内容，而 `more`只支持逐行显示。

```
$ less /etc/locale.gen
$ less +100 /etc/locale.gen
```

操作命令：

* 空白键    ：向下翻动一页；
* \[pagedown]：向下翻动一页；
* \[pageup]  ：向上翻动一页；
* /字串     ：向下搜寻‘字串’的功能；
* ?字串     ：向上搜寻‘字串’的功能；
* n         ：重复前一个搜寻 (与 / 或 ? 有关！)
* N         ：反向的重复前一个搜寻 (与 / 或 ? 有关！)
* q         ：离开 less 这个程序；

#### nano

`nano` 是一个简单实用的文本编辑器，使用简单。

```
$ nano  filename       ### 编辑 filename 文件，若文件不存在，则新打开一个文件，若退出时保存，则创建该文件
```

### 系统操作

#### reboot

`reboot` 为重启命令。

```
# reboot
```

`$` 和 `#` 的区别在于 `$` 普通用户即可执行，而 `#` 为 **root** 用户才可执行，或普通用户使用 `sudo`。

#### poweroff

`poweroff` 为关机命令。

```
# poweroff
```

#### ping

`ping` 主要用于测试网络连通，通过对目标机器发送数据包来测试两台主机是否连通，及延时情况。

```
$ ping locez.com    ### 通过域名 ping，若 DNS 未设置好，可能无法 ping 通
$ ping linux.cn
PING linux.cn (211.157.2.94) 56(84) bytes of data.
64 bytes from 211.157.2.94.static.in-addr.arpa (211.157.2.94): icmp_seq=1 ttl=53 time=41.5 ms

...
```

#### grep

`grep` 主要用于返回匹配的项目，支持正则表达式。

```
$ grep PATTERN filename      ### 返回所有含有 PATTERN 的行
$ grep zh_CN /etc/locale.gen ### 返回所有含 zh_CN 的行
```

> [grep正则表达式](http://www.cnblogs.com/kaituorensheng/p/4236254.html)

#### tar

`tar` 主要用于创建归档文件，和解压归档文件，其本身是没有压缩功能的，但可以调用 `gzip` 、 `bzip2` 进行压缩处理。

参数选项：

* -c 创建归档
* -x 解压归档
* -v 显示处理过程
* -f 目标文件，其后必须紧跟 目标文件
* -j 调用 bzip2 进行解压缩
* -z 调用 gzip 进行解压缩
* -t 列出归档中的文件

```
$ tar -cvf filename.tar .       ### 将当前目录所有文件归档，但不压缩，注意后面有个 ’.‘ ，不可省略，代表当前目录的意思
$ tar -xvf filename.tar         ### 解压 filename.tar 到当前文件夹
$ tar -cvjf filename.tar.bz2 .  ### 使用 bzip2 压缩
$ tar -xvjf  filename.tar.bz2   ### 解压 filename.tar.bz2 到当前文件夹
$ tar -cvzf filename.tar.gz     ### 使用 gzip  压缩
$ tar -xvzf filename.tar.gz     ### 解压 filename.tar.gz 到当前文件夹
$ tar -tf   filename            ### 只查看 filename 归档中的文件，不解压
```

#### chmod

`chmod` 永远更改一个文件的权限

```
#有 读取 、 写入 、 执行 ，三种权限，其中 所有者 、 用户组 、 其他 各占三个
-rwxr--r-- 1 locez users   154 Aug 30 18:09 filename
```

> r=read ， w=write ， x=execute

```
# chmod +x filename        ### 为 user ，group ，others 添加执行权限
# chmod -x filename        ### 取消 user ， group ，others 的执行权限
# chmod +w filename        ### 为 user 添加写入权限
# chmod ugo=rwx filename   ### 设置 user ，group ，others 具有 读取、写入、执行权限
# chmod ug=rw filename     ### 设置 user ，group 添加 读取、写入权限
# chmod ugo=--- filename   ### 取消所有权限
```

#### useradd

`useradd`用于添加一个普通用户。

```
# useradd -m -g users -G audio -s /usr/bin/bash newuser     
### -m 创建 home 目录， -g 所属的主组， -G 指定该用户在哪些附加组， -s 设定默认的 shell ，newuser 为新的用户名
```

#### passwd

`passwd` 用于改变用户登录密码。

```
$ passwd                 ### 不带参数更改当前用户密码
# passwd newuser         ### 更改上述新建的 newuser 的用户密码
```

#### whereis

`whereis` 用于查找文件、手册等。

```
$ whereis bash
bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz
```

#### find

`find` 也用于查找文件，但更为强大，支持正则，并且可将查找结果传递到其他命令。

```
$ find . -name PATTERN    ### 从当前目录查找符合 PATTERN 的文件
$ find /home -name PATTERN -exec ls -l {} \;  # 从 /home 文件查找所有符合 PATTERN 的文件，并交由 ls 输出详细信息
```

#### wget

`wget`是一个下载工具，简单强大。

```
$ wget -O newname.md https://github.com/.../README.md     ### 下载 README 文件并重命名为 newname.md
$ wget -c url     ### 下载 url 并开启断点续传
```

> 资料参考：<https://linux.cn/article-6160-1.html> 、<http://www.runoob.com/linux/linux-file-content-manage.html>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://note.niefee.com/directory-5/linux-ming-ling.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
