APUE读书笔记-00预备知识(02)-Linux命令简介

本节来源

本节是对之前总结的一系列文章中的 Linux命令学习手册-0前言 的摘抄。这里的每个命令都经过我亲身的实践,linux多数命令使用起来并不难,关键是读懂命令的输出信息,以及如何使用命令帮助。

我的愿望是大家能够花费尽可能短的时间,熟悉Linux操作系统。如果仅仅是为了临时做一些事情,那么本节中的 基本命令 部分是一个比较合适的选择。

本节内容

本文档最开始介绍Linux命令相关的基本知识,然后给出一些基本的Linux命令。

“Linux命令学习手册-0前言”这个系列文章中的后面每个章节对每个重要的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的 UIDGID 一般都是系统自己保留,不用做普通用户和组的标志,所以新增加的用户和组一般都是 UIDGID 大于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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容