2

《Linux命令行大全》读书笔记

 2 years ago
source link: https://tfeima.github.io/2019/02/02/%E3%80%8ALinux%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%A4%A7%E5%85%A8%E3%80%8B%E7%AC%AC%E4%B8%80%E9%83%A8%E5%88%86%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

第一章 什么是shell

shell就是一个程序,它接受从键盘输入的命令,然后把命令传递给操作系统执行。当使用图像用户界面时,我们需要一个叫做终端仿真器的程序和shell作交互。超级用户的提示符是$,普通用户的提示符为#.

一些简单的命令

  • date:显示系统当前的日期和时间
  • cal:显示当前月份的日历
  • df: 查看磁盘剩余空间的数量
  • free:显示内存空闲的数量
  • exit: 结束终端会话

第二章 文件系统中跳转

显示当前工作目录

列出目录内容

更改当前工作目录

  • .: 工作目录
  • ..: 工作目录的父目录
  • ~: 家目录

第三章 研究操作系统

ls命令选项和参数

选项 长选项 描述
-a –all 列出所有文件包括隐藏文件
-h –human-readable 以人们可读的格式列出
-l 以长格式显示结果
-r –reverse 以相反的顺序显示结果
-S 按文件大小来排序
-t 按修改时间来排序

深入研究长格式

-rw-r–r– 1 ma staff 4579 2 3 10:09 debug.log

字段 含义
-rw-r–r– 文件的访问权限。第一个字符指明文件类型,‘-’是一个普通文件,‘d’是一个目录。后面三个是所有者的权限,再三个是群组成员的权限,后三个是其它人的权限。
1 文件的硬链接数目
Ma 文件所属的用户名
staff 文件所属的群组名
4579 以字节数表示的文件大小
—- 上次修改的文件日期
*** 文件名

确定文件类型

file filename

用less浏览文件内容

Less filename

less常用的键盘命令:

命令 行为
page up or b 向上翻页
page down or space 向下翻页
G 移动到最后一个行
1G or g 移动到开头一行
/characters 向前查找指定的字符串
n 向下查找下一个出现的字符
h 显示帮助
q 退出less

第四章 操作文件和目录

通配符 意义
* 匹配任意多个字符,包括0个和1个
匹配任意一个字符
[characters] 匹配任意一个属于字符集中的字符
[!characters] 匹配任意一个非字符集中的字符
[[:class:]] 匹配任意一个指定类中的字符

常用的字符类:
| 字符符 | 意义 |
| ———————- | —————————— |
| [:alnum:] | 匹配任意一个字母或数字 |
| [:alpha:] | 匹配任意一个字母 |
| [:digit:] | 匹配任意一个数字 |
| [:upper:]或者[:lower:] | 匹配任意一个大写或者小写字母 |

mkdir创建目录

mkdir dir1 dir2

创建目录dir1和dir2

cp 复制文件和目录

cp item1 item2

cp item1… directory

一些有用的选项

选项 意义
-a, –archive 复制文件和目录,以及他们的属性
-i, –interactive -i, –interactive
-r, –recursive 递归地复制目录和文件,复制目录时,需要这个选项
-u, –update 仅复制目标目录中不存在的文件

mv 移动和重命名文件

mv item1 item2

选项 意义
-i, –interactive -i, –interactive
-u, –update 仅复制目标目录中不存在的文件

rm 删除文件和目录

rm选项和意义:

选项 意义
-i,–interactive 删除前提示用户
-r,–recursive 递归地删除文件,若删除目录则需指定这个选项
-f,–force 忽视不存在的文件,不显示提示信息
-v,–verbose 执行命令时,显示详实的信息

Linux系统没有复原命令,一旦用rm删除一些东西,就永远消失了,所以无论啥时候,rm命令用到通配符的时候,先用ls测试通配符。

第五章 使用命令

命令是什么

命令可以是下列4种形式之一:

  1. 是一个可执行程序
  2. 是一个内建于shell自身的命令
  3. 是一个shell函数
  4. 是一个命令别名

显示命令的类型

type是shell的内部命令,它会显示命令的类别,给出一个特定的命令名。

显示一个可执行程序的位置

使用which命令可以确定所给定的执行程序的准确位置。

得到shell内部命令的帮助文档

使用help command命令得到命令的帮助文档;许多可执行程序支持--help选项,显示此命令支持的语法和选项说明。

man 显示程序手册页

whatis 显示非常简洁的命令说明

info 显示程序的Info条目

使用alias命令创建命令的别名,使用方法

alias name=’string’

注意:name与string之间没有空格。string是一系列的命令,name是这一系列命令的别名,下次输入name时等价于输入string。

使用unalias命令删除别名。

第六章 重定向

标准输入输出

一般地,输出送到屏幕,输入来自键盘,但是通过I/O重定向我们可以改变输入输出的方向。

重定向标准输出

使用>重定向符,后面跟着文件名,则会把原本输出到标准输出的内容输出到重定向符后面的文件中。需要注意的是使用>重定向符重定向输出结果时,目标文件总是从头开始被重写。所以当我们需要删除一个文件内容或者新建一个空文件的时候,可以使用这样一个技巧:

> filename

使用>>重定向符可以把重定向结果追加到文件内容后面,而不是重头开始写文件,如果文件不存在,文件会被新建。

>> filename

重定向标准错误

文件描述符0,1,2分别表示标准输入、输出和错误。

ls -l /bin/usr 2> ls-error.txt

文件描述符’2‘紧挨着放在重定向符之前,执行重定向标准错误到文件ls-error.txt任务。

重定向标准输出和错误到同一个文件

第一种方法:

ls -l /bin/usr > ls-output.txt 2>&1

这里使用了两次重定向,首先重定向标准输出到文件ls-output.txt,然后重定向文件描述符2到文件描述符1,使用表示法2>&1.

第二种方法:

ls -l /bin/usr &> ls-output.txt

处理不需要的输出

ls -l /bin/usr 2> /dev/null

重定向标准输入

cat 连接文件

cat命令读取一个或多个文件,然后复制他们到标准输出,cat经常用来显示简短的文本文件。

cat [file]

cat可以将多个文件连接成或者合并为一个文件:

cat file1 … filem > cat_file

管道线操作符|可以使一个命令的标准输出作为另一个命令的标准输入:

command1 | command2

  • sort,排序
  • uniq,忽略重复行
  • wc,打印行,字和字节数
  • grep,打印匹配行
  • head/tail,打印文件开头、结尾部分

第七章 从shell眼中看世界

算术表达式展开

花括号展开

通过它可以从一个包含花括号的模式中创建多个字符串。

ma$ echo F-{a,b,c}-B

F-a-B F-b-B F-c-B

ma$ echo {1..10}

1 2 3 4 5 6 7 8 9 10

echo {A..Z}

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

其实就是shell中的变量。

ma$ ls -l ​$(which cd)

-rwxr-xr-x 15 root wheel 190 8 18 08:20 /usr/bin/cd

which cd会返回一个路径。

双引号中的文本被当做普通字符看待,但是参数展开和算术表达式展开仍然有效。

所有的展开将被禁止。

转移序列 含义
\a 响铃
\b 退格键
\n 换行
\r 回车符
\t 制表符

第八章 键盘高级技巧

按键 行动
Ctrl-a 移动光标到行首
Ctrl-e 行尾
Ctrl-f 右键头
Ctrl-b 左箭头
Alt-f 光标前移一个字
Alt-b 光标后移一个字
Ctrl-l 清空屏幕,同clear命令相同
按键 行动
Ctrl-d 删除光标位置的字符
Ctrl-t 光标位置的字符和光标前面的字符互换位置
Alt-t 光标位置的字和前面的字互换位置
Alt-l 把光标位置到字尾的字符换成小写字母
Alt-u 把光标位置到字尾的字符换成大写字母

剪切和粘贴

按键 行动
Ctrl-k 剪切光标位置到行尾的文本
Ctrl-u 剪切光标位置到行首的文本
Alt-d 剪切光标位置到词尾的文本
Alt-backspace 剪切光标位置到词头的文本
Ctrl-y 把剪切板的内容粘贴到光标位置

history显示历史命令。

history | less

来浏览历史命令。通过执行

history | grep 目录

来找到此目录中的命令。通过

来执行历史命令中此行号对应的命令。

第九章 权限

创建一个文件并显示它的详细信息

$ > foo.txt

$ ls -l foo.txt

-rw-r–r– 1 ma staff 0 2 16 19:46 foo.txt

显示的前十个字符是文件的属性,第一个字符表示文件的类型。下表是文件常见的类型:

属性 文件类型
- 普通文件
d 目录
l 符号链接
c 字符设备文件
b 快设备文件

剩下的九个字符代表文件所有者、文件组所有者、其他人的读写和执行权限。

chmod 更改文件模式

可以使用两种方法改变文件模式:八进制数字表示法和符号表示法。

数字表示法

因为对所有者、群组和其他人分别有r、w、x三种权限,所以假如对于所有者的权限来讲,所有者对文件有r权限和w权限,但是x权限没有,那么他有的权限的位置就置为1,反之为0,那么对应地二进制表示为110,与此对应的八进制为6,即所有者的权限用一个4表示,其它群组和其他人时同理,所以一个文件可以用3个八进制数字表示它的权限模式。例如改变foo.txt的文件权限:

$ chmod 600 foo.txt

$ ls -l foo.txt

-rw——- 1 ma staff 0 2 16 19:46 foo.txt

符号表示法

符号表示法分为3个部分:更改会影响谁,要执行那个操作,要设置哪种权限。

符号 含义
u 文件所有者
g 用户组
o 其他人
a u、g、o三者的组合

若没有指定字符,则假定使用a。

执行的操作有两种:+增加一个权限,-删掉一个权限。

权限用r、w、x指定。例如

$ chmod g+r foo.txt

$ ls -l foo.txt

-rw-r—– 1 ma staff 0 2 16 19:46 foo.txt

su 以其他用户和组ID运行一个shell

su命令以另一个用户的身份来启动shell:

su [-[l]] [user]

如果包含-l选项,那么会为指定用户启动一个需要登录的shell,意味着会加载这个用户的shell环境,并且工作目录会更改到这个用户的家目录。如果不指定用户,则默认启动超级用户。-l可以缩写为-,例如启动超级用户:

当工作完成后,输入exit返回原来的shell。也可以只执行单个命令,而不是启动一个新的可交互的shell,

su -c ‘command’

命令用单引号括起来。

sudo 以另一个用户身份执行命令

sudo很多方面类似于su,但sudo还有其他一些总要的功能。管理员可以配置sudo命令,从而使用户以不同身份通过一种可控的方式来执行命令。sudo命令不要求超级用户的密码,而是需要自己的密码来认证。sudo命令不会重新启动一个shell,命令不必用单引号括起来。

chown 更改文件所有者和用户组

使用这个命令需要超级用户权限。命令语法:

chown [owner][:[grou]] file…

更改用户密码

只要输入passwd命令,就能更改你的密码。

References

  1. William E.Shotts,Linux命令行大全

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK