绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
Linux命令学习手册-0前言
2019-12-27 16:12:14
# 读者须知

这篇文章纯粹是我个人在学习Linux过程中实践的积累,其中语言文字上面也许会有些错误,希望读者发现之后能够帮我纠正,在此先谢了。

这里的每个命令都经过我亲身的实践,linux多数命令使用起来并不难,关键是读懂命令的输出信息,以及如何使用命令帮助。我的愿望是大家能够花费尽可能短的时间,熟悉Linux操作系统。

如果你仅仅是为了临时做一些事情,那么本文也适合你,你只需要看本前言中的 `基本命令` 一节即可。

如果有人转载,希望您能注明出处和作者;如果将本文用于商业行为,希望您能先通知我;希望大家能够互相体谅,尊重对方的劳动成果。

# 本文内容

本文档开始介绍Linux命令相关的基本知识,然后给出一些基本的Linux命令。后面每个章节将分别对每个重要的Linux命令进行详细的讲解,并给出详细的举例。

这是一个没有终点的学习,这个手册的内容会随着学习的命令的更多而增加。

侧重应用,重在举例,所以想要了解每个命令的具体细节还需要察看man或者info手册。如机会,每个命令可能会在今后完善更新。

# 本文约定

## 对于每一个命令,大致分为如下三个部分

- 功能

简单介绍该命令功能。

- 举例

给出该命令常使用的例子。

- 描述

详细描述该命令。

- 其他

该命令其他杂乱或者补充性的内容。

## 对于每个命令的使用例子,如下说明

以orgmode格式做为文档格式, orgmode格式一方面可读性强,另一方面便于将来导出为各种格式.

1. 对于单个命令操作

`+` 开始的列表项行给出要操作的目的,然后是具体的命令,后给出该命令的详细解释。

例如:

+ 列出当前目录的内容

=$ls=

这里,将会列出当前目录所文件。

如果命令过长,则使用 `#+BEGIN_SRC/#+END_SRC` 对。

2. 对于某个系列的命令

具体的命令使用列表给出,而命令所述的系列使用子标题(orgmode中,列表的排版比较容易出错,所以使用子标题,尽量避免嵌套列表)。

例如:

** 使用vi编辑:

+ 编辑之前首先打开文件<filename>:

=$vi filename=

打开文件之后,操作如下:

+ 插入

输入 =a=

+ 退出

输入 =:q=

# 基本知识

这里简单介绍linux命令行的一般语法格式。这对初学者很重要,尤其是查找某个命令的帮助手册( `man` 手册)的时候,不会什么也看不懂。

## 命令组成

一般linux的命令语法格式如下:

`命令名称 项 项参数(值) 命令参数(值)`

例如:

od [OPTION]... [FILE]...

这里,命令名称是 =od= ,项是OPTION。这里项用'[]'括起来表示这个部分在 =od= 命令里面可可无。命令的参数是FILE也是可可无;'...'表示其前面的东西(这里是OPTION和FILE可以不只一个.一般来说(不是的),在 =man= 手册里面,命令中像OPTION和FILE这样的变量形式的参数(即其值取决于用户的键入部分会用特殊颜色显示出来;而 =od= 这样本身是固定的部分(即不是用户能改变的用另外一种颜色显示(例如加粗)。也有的描述中把可变的部分用'<>'括起来。

再如:

cp [OPTION]... SOURCE... DIRECTORY

从这里可以看出,=cp= 命令参数SOURCE和DIRECTORY,其中SOURCE参数可以是多个,DIRECTORY只能一个。OPTION部分可可无,但是SOURCE和DIRECTORY部分必须要。

具体的例子:

=$cp -r file1 file2 dir=

## 关于项

项简单书写形式也复杂书写形式。简单形式的项一般用 `-` 引出,复杂形式一般用 `--` 引出等等。

- 例如:

`$cp -v file1 file2` 等价于 `$cp --verbose file1 file2`

这里,=-v= 和 `--verbose` 是一样的, `-v` 是简写形式, `--verbose` 是复杂形式。

- 又例如:

`cp -r src des`

其中, `-r` 就是其中的[OPTION]部分,也可以是 `--recursive` 。

- 另外,有些命令的项不用 `-` 来引出,例如:

`$unrar e test.rar`

使用 `e` 项指定 `unrar` 命令解压 `test.rar` 文件。

- 有些命令项用 `-` 做为前缀,然后可以接多个选项,例如:

`$tar -czvf dir.tgz dir`

这个命令使用 `tar` 命令的 `-c -z -v -f` 四个项,给 `dir` 目录打包并且压缩,生成结果文件为 `dir.tgz`.

- 在项用'[]'包含起来表示可的同时,如果几个值其中只能出现一个的话那么用'|'来分开。例如:

`command [-a|-b]`

这里, `command` 是假设的一个命令,这表示这个命令 `command` 中, `-a` 和 `-b` 项,两者要么都没,要么只一个。

## 关于项的参数

不光是命令,命令的项也可以参数。

- 这里举一个复杂点的命令

gdb [-help] [-nx] [-q] [-batch] [-cd=dir] [-f] [-b bps] [-tty=dev] [-s symfile] [-e prog] [-se prog] [-c core] [-x cmds] [-d dir] [prog[core|procID]]

这是 `gdb` 命令的语法格式,关键的几个部分如下:

`[-d dir]` 就是指,运行gdb命令,可以添加一个可的项 `-d` ,这个项的参数是 `dir`.在本文的描述中,不太容易一下子看出 `[-d dir]` 里面哪部分是固定的字符串,哪部分是随用户输入而变的字符串,但是 `man` 手册里面都把它们标记为不同的颜色了,实际通过分析也很容易知道哪个部分是可变的。

有些命令项和项的参数之间可以没空格,的项和项参数之间用 = 连接,例如这里的 ~[-cd=dir]'

- 再举一个例子

minicom [-somMlwz8] [-c on|off] [-S script] [-d entry] [-a on|off] [-t term] [-p pty] [-C capturefile] [configuration]

这是minicom的命令语法,其中[-c on|off]表示-c项是可的(即在命令中可可无,它一个选项参数,参数值可以是on或者off.

## 基本命令

这里是经常使用的linux命令,用于平时查阅之用.

一般而言,超级用户(root)的命令提示符号是 `#`,一般用户的命令提示符号是 `$`.

### 文件管理相关

- 创建名字为1的目录

`$mkdir 1`

- 创建名字为1的文件

`$touch 1`

- 删除名字为1的文件

`$rm 1`

- 查看文件1的内容

`$cat 1`

- 强制删除一个目录

`$rm -rf dirname`

这里, `rm -r dirname` 是递归删除的意思,如果加上 `-i` 项,表示删除之前提示是否删除。

- 重命名/移动文件

`$mv ./origin ./newname`

这里,Linux中没专门的重命名命令,这里实际是使用了移动命令来进行的。原来的文件名 `origin`,新文件名 `newname`.

- 把文件file1拷贝一份到file2

`$cp file1 file2`

这里,操作都是在当前目录下面进行的,如果拷贝到别的目录,可以指定路径,例如 `cp file1 /anotherdir/file2`.

- 把目录dir1考到另一个地方为dir2

`$cp -r dir1 dir2`

这里, `-r` 表示递归拷贝所子目录。

- 进入到一个目录中

`$cd dirname`

- 查看目录dirname中所包含的文件

`$ls dirname`

- 查看目录dirname中所包含的文件的详细信息

`$ls -l`

这样,会显示相应文件的详细信息,包括属主,大小,权限等信息。

- 查看当前的目录

`$pwd`

这样,会输出当前所在目录的路径。

- 创建文件file的硬链接

`$ln file lnfile`

这里,使用链接的目录格式类似 `cp` 。建立硬链接之后,如果删除源,还可以通过这个硬链接访问到这个文件的内容,除非所的硬链接都被删除了,否则文件内容就一直存在的。硬链接不能够跨越文件系统,不能够建立目录的硬链接。

- 创建文件 `file` 的软链接

`$ln -s file lnfile`

这里,创建软链接,文件名里面 `$` 就用了转义 `\$` 表示 `$`,尽量用路径防止出错。软链接可以跨越文件系统,可以为目录创建软链接,但是软链接的文件,如果删除源,链接会失效,类似windows中的快捷方式。

### 权限管理相关

- 修改文件的权限为所人可读可写可执行

`$chmod 777 filename`

这里,文件属主必须是当前用户,否则就只能进入超级用户才能执行这个命令了。

- 修改文件filename的权限,为other用户添加写权限:

`$chmod o+w filename`

- 修改目录以及所子目录的权限为777

`$chmod 777 -R dir`

- 查看在线登陆用户

`$who`

- 将一个用户添加到用户组中

`#usermod -a -G groupA user`

这里,不要忘记 `-a` 项。如果用: `usermod -G groupA`,这做会使 `user` 用户离开其他用户组,仅仅做为这个用户组 `groupA` 的成员。

- 更改用户user的组为groupA

`#usermod -G groupA user`

- 查看所的用户

`$cat /etc/passwd`

这里,用户都保存在了 `passwd` 文件中,所以查看这个文件的内容就可以看到所的用户了。

成功创建一个新用户以后,在 `/etc/passwd` 文件中就会增加一行该用户的信息,其格式如下:

〔用户名〕:〔密码〕:〔UID〕:〔GID〕:〔身份描述〕:〔主目录〕:〔登陆Shell〕

其中每个字段被冒号 `:` 分成7各部分。

由于小于500的 `UID` 和 `GID` 一般都是系统自己保留,不用做普通用户和组的标志,所以新增加的用户和组一般都是 `UID` 和 `GID` 大于500的。

- 查看所的组

`$cat etc/group`

- 查看所的组

`$cat etc/group`

这里,用户都保存在了 `group` 文件中,所以查看这个文件的内容就可以看到所的用户了。

- 添加一个用户testusr

`#useradd testusr`

这里,注意在超级用户模式才能用,刚建立没密码,没自己的home,其他项可以参见man

- 添加一个用户testusr,并自动建立其用户主目录

`#useradd -m testusr`

运行完毕,自动生成用户的家目录,目录里面 `.bashrc` 等文件。

- 删除一个用户 `testusr`

`#userdel testusr`

这里,命令不会把主目录删除.

- 删除一个用户testusr,连同主目录和邮箱缓存等

`#userdel -r testusr`

- 切换到用户testusr

`$su testusr`

如果用户需要密码,那么需要输入密码才能登录这个用户。

- 切换到超级用户

`$su`

这样,会提示输入超级用户的密码,输入之后,就会切换成超级用户了。

- 以超级用户身份运行一个程序

`$sudo app`

这样,会以超级用户身份运行app程序,如果当前权限不够的时候,这条命令是很用的。当然,运行之前需要输入自己的密码。还有如 `sudo su` 也是类似的。

- 设置更改一个用户testusr的密码

`#passwd testusr`

这里,需要在超级用户下,输入之后,按照提示输入旧密码和新密码就行了。如果运行的 `passwd` 没参数,那么会修改当前用户的密码。更改自己的密码只需输入 `passwd` 不用切换到超级用户下。

- 修改用户testusr的主目录和登录的shell

`#usermod -d/home/quietheart -s/bin/bash testusr`

这里,用户名 `testusr` 的主目录路径设置在 `/home/testusr`,登陆的Shell设置为 `/usr/bin/gcc` ( `-d` 更新使用者新的登陆目录, `-s` 指定新用户Shell),空格无均可.

- 修改用户testusr名称为test

`#usermod -l test testusr`

把用户名 `testusr` 改成 `test` ( `-l` 变更用户登陆时的名称,手册说同时使用者目录名也会跟着更动成新的名称(实践了没变目录呀)) `usermod` 不允许改变正在线上的使用者帐号名称.

- 查看当前用户属于的组

`$groups`

- 查看testusr用户属于的组

`$groups testusr`

### 磁盘管理相关

- 查看当前目录大小

`$du -sh`

- 查看文件的大小

`$du -sh filename`

这里, `filename` 是将要查看的文件名称。

- 查看分区信息

`fdisk -l`

这里,会显示你的电脑上面的所磁盘的信息,例如分区,文件系统等。当前必须是 `root` 用户,否则没权限。

#### 挂载磁盘相关

你的linux系统必须将其他硬盘的其他分区(例如windows分区)挂载到根目录树中,才能访问相应的分区。

- 挂载分区 `/dev/sda7` 到 `/mnt/win`

`#mount -t vfat /dev/sda7 /mnt/win`

这样的挂载可能会出现显示中文的时候乱码,因为可能没指定解码的字符集。必须是超级用户才能执行。

- 指定gb2312字符集的挂载

`#mount -t vfat -o iocharset=gb2312 /dev/sda7 /mnt/win`

这样的挂载的时候,指定使用gb2312字符集,这样就可能没乱码了。其他常用的字符包括cp936,utf8等等(ntfs的一般用utf8挂载)。必须是超级用户才能执行。

- 查看已经挂载的分区

`#mount`

- 卸载已经挂载的分区

`#umount /mnt/win`

或 `#umount /dev/sda7`

这里,是把 `/dev/sda7` 分区挂载到了 `/mnt/win` 上面。

- 重新挂载

`#mount -o rw,remount /mnt/data`

这里,时候文件系统变为只读了,试试这个命令.

- 设置系统启动自动挂载某个分区

方法之一是在 `/etc/fstab` 中加入如下内容:

/dev/sda8 /mnt/winG vfat defaults,rw,exec,iocharset=utf8,umask=0000 0 0

必须 `umask=0000`, 否则只 `root` 可以写,并且 `root` 也不能更改 `chmod 777 -R ...` 这是自己尝试出来的。

### 其他操作

- 清屏

`$clear`

这样,当前用户的屏幕会被“清理”,并被重新刷新,原来输入的命令和命令的输出都被清理掉了,也可以使用 `[Ctrl]l` 来达到相同的效果。

- 查看系统的编码

`$locale`

输入之后,例如我的机器输出如下:

LANG=zh_CN.UTF-8

LC_CTYPE="zh_CN.UTF-8"

LC_NUMERIC="zh_CN.UTF-8"

LC_TIME="zh_CN.UTF-8"

LC_COLLATE="zh_CN.UTF-8"

LC_MONETARY="zh_CN.UTF-8"

LC_MESSAGES="zh_CN.UTF-8"

LC_PAPER="zh_CN.UTF-8"

LC_NAME="zh_CN.UTF-8"

LC_ADDRESS="zh_CN.UTF-8"

LC_TELEPHONE="zh_CN.UTF-8"

LC_MEASUREMENT="zh_CN.UTF-8"

LC_IDENTIFICATION="zh_CN.UTF-8"

LC_ALL=

- 启动xwindow图形界面

`$startx`

这个命令是在纯粹的命令行下面运行的命令。

- 切换到个纯命令行终端

输入: `[Ctrl][Alt][F1]`

这样,如果在图形界面中运行这个命令,会切换到个命令终端上面。可以是 `[F1]~[F7]` 等。

- 切换到图形界面

输入: `[Ctrl][Alt][F7]`

这样,如果在命令行终端,那么会切换到图形终端上面的是 `[F7]` 、 `[F8]` 等等,都不一定,一般是 `[F7]` 。

- 退出图形界面

两种方法,

1. 方法1, 注销(不会 `umount` )

2. 方法2, 输入: `[Ctrl][Alt][Backspace]`

退出图形界面之后,不会 `umount` 之前 `mount` 过的分区。

- 查看内核版本号

`$uname -r`

这里,如果输入 `uname -a` 会显示所的内核信息。

- 查看发行的Linux版本号

`$cat /etc/issue`

- 搜索近匹配的历史命令

使用如下步骤进行:

1. 输入 `[Ctrl]r`

2. 输入以前输入的命令的子字符串

3. 根据 2 的输入会自动匹配近的命令。

如果匹配了一个,但是我们需要的命令是更早的,那么再输入一下 `[Ctrl]r` 。

4. 输入回车,运行匹配的命令。

- 在当前目录中寻找指定的文件

`$find -name filename`

这样,会在当前目录下递归地寻找名称为 `filename` 的文件,并且返回它的位置,这里支持通配符号。

- 在指定的目录中寻找指定的文件

`$find dirname -name filename`

这样,会在 `dirname` 中递归地寻找名称为 `filename` 的文件。

- 在文件中查找字符串

`$grep 'string' filename`

这样会在文件 `filename` 中查找指定的字符串'string'并且返回那个字符串的位置。

- 在当前目录中所文件中查找指定的字符串

`$grep -r 'string' *`

这里,使用了通配符号。

- 查看当前时间

`$date`

### GNome桌面下面的操作

- 切换桌面工作区域

输入 `[Ctrl][Alt]<左右方向键>`

- 锁屏幕

输入 `[Ctrl][Alt]l`

- 切换不同任务窗口的快捷键

输入 `[Alt][Tab]`

- 在桌面和上次的程序之间进行切换

输入 `[Ctrl][Alt]d`

### 任务的前台和后台控制

假设我们运行了多个vi编辑器,以及其他程序(无论前台还是后台,实际上只一个前台的程序)。

- 将当前的程序放到后台停止

输入 `[Ctrl]z`

- 查看所在后台运行的程序

`$jobs`

输入之后,输出如下:

[1]- Stopped vi

[2]+ Stopped vi lex

这里,使用前面的数字来标记每一个后台运行的程序。

- 将后台停止的指定程序变成后台运行

`$bg %1`

这样会把个后台的作业调到后台运行,实际上,用 `bg 1` 就行了。

这样做之后,效果相当于运行了 `app &` ,其中app是运行的程序,&表示放在后台。

- 将指定的后台运行的作业号放到前台运行

`$fg %1`

这样会把个后台的作业调到前台运行,实际上,用 `fg 1` 就行了。

- 将近的被停止的程序放到前台运行

`$fg`

- 杀掉指定的后台运行的程序

`$kill %1`

这样,会在后台运行的作业 `%1` 给杀掉。注意:这里的作业号用%来进行标记,而不像进程直接用数字了。

### 基本的文件编辑操作

这里提供了使用 `vi` 编辑文件的基本的操作,能够实现大多数的编辑目的。

- 用 `vi` 打开一个文件

输入 `vi filename`

这里, `filename` 就是你要打开的文件的名字,默认打开文件后 `vi` 处于指令模式。

- 进入编辑模式编辑打开的文件

输入 `i`.

或输入 `a`.

进入编辑模式后,你可以直接敲入想要输入的字符到文件,两者的区别是 `i` 在当前字符前面开始插入, `a` 在当前字符后面开始插入。

- 退出编辑模式

输入 `[Esc]`

这样,将返回指令模式,准备接收你要传达给 `vi` 的指令并执行,如果之前已经在指令模式下,那么系统将响铃提醒一下。

#### 以下命令都是vi在命令模式下进行

- 撤销修改

输入 `u`

这里,相比以前的vi来说,vim支持多步撤销。

- 恢复修改

输入 `[Ctrl]r`

这里,和撤销命令相反,是撤销的撤销,也可多步。

- 复制行到剪切板

输入 `yy`

- 复制定内容到剪切板

1. 输入 `v` 。

2. 方向键将高亮择的内容。

3. 输入 `y` 。

这里,开始输入 `v` 使vi临时进入了一个"选择模式",输入方向键可以择,输入 `y` 将择的内容复制剪切板。

- 删除行

输入 `dd`

注意,vi的删除等价于剪切,删除的内容会保存到剪切板中。

- 删除定内容

1. 输入 `v` 。

2. 方向键将高亮择的内容。

3. 输入 `d` 。

这里,开始输入 `v` 使vi临时进入了一个“选择模式”,输入方向键可以择,输入 `d` 将择的内容删除。

- 粘贴

输入 `p`

这样会将剪切板的内容粘贴到光标位置或者光标下一行。

- 查找字符并定位到个匹配处

输入 `/character`

这里 `character` 是待查找的字符,只要先输入 `/` ,再输入待查字符,后回车即可定位到个匹配的字符处。

- 定位到匹配查找的下一个字符处

输入 `n`

- 定位到匹配查找的上一个字符处

输入 `N`

- 保存文件

输入 `:w`

注意 `w` 前面的 `:` ,输入 `:` 之后,vim会将 `:` 之后的输入解释为待执行的指令。

- 退出

输入 `:q`

这里,如果文件没保存,将提示无法退出,除非你强制退出,不保存文件,或者保存退出。

- 强制退出

输入 `:q!`

- 保存退出

输入 `:wq`

或输入 `ZZ`.

- 察看帮助

输入 `:help`

分享好友

点击获得分享链接,复制给好友成功购买后您可以获得2成返利哦~

Linux系统之路
创建时间:2019-12-27 16:09:53
分享Linux系统操作与相关知识
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • QuietHeart
    栈主

小栈成员

查看更多
  • ?
  • 栈栈
  • 飘絮絮絮丶
戳我,来吐槽~