Linux随笔

速览:

  • 命令行即shell

  • 终端: 让用户访问shell

  • 终端下鼠标选中/单击/双击可快速copy

  • rm 用通配符删除文件之前最好使用 ls 命令查看对应文件

  • 双引号"“和单引号'‘在shell中的意义不完全相同

$

$在不加括号时为参数扩展,比如我的电脑中$USER代表的就是home,所有的可用参数可以由一行命令看到:

printenv | less

命令过多此处不进行展示。

$(命令) 得到的是命令的输出结果,此时可以将其用作其他命令的参数

echo $(ls) # 结果和 ls 一致
ls -l $(which ls)

引用类型: 双引号"" & 单引号'' & 反斜线\

参数之间的分割是通过空格进行的,下面以 cal 命令为例看一下结果

echo $(cal)
三月 2021 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

这里的结果是因为没有经过引用(或者转义)的空格会被当成分割符而不是参数的组成部分,不建议使用 touch 代替这里的 echo,当然,你也可以建个文件夹试试看 : )

利用单/双引号引用的参数会传递一个字符串,此时其中的空格是参数的组成部分,以hello world为例

mkdir testfile
cd testfile
touch hello world
ll
total 0
-rw-r--r-- 1 home staff 0B 5 17 11:52 hello
-rw-r--r-- 1 home staff 0B 5 17 11:52 world

该命令会创建两个文件:helloworld(Ps: 前两行仅为了 ll 命令的简洁,llls -lh 的别名),现在 引用 & 转义 空格让其包含在文件名中:

touch "hello world1"
touch 'hello world2'
touch hello\ world3
ll
+ -rw-r--r--  1 home  staff     0B  5 17 11:56 hello world1
+ -rw-r--r-- 1 home staff 0B 5 17 11:56 hello world2
+ -rw-r--r-- 1 home staff 0B 5 17 11:56 hello world3

以上三种方式都可以达到参数中包含空格的效果。

关于引用下的禁止拓展

'" 在shell中有时并不相同:

echo "$(cal)"
      三月 2021
日 一 二 三 四 五 六
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
echo '$(cal)'
$(cal)

某种意义上来说,单引号禁止的扩展类型比双引号多,另一个例子是 \ 在单引号中将不具备特殊含义:

echo "\$"
echo '\$'
$
\$

更多的内容请参考Bash quoting 手册

history

假设现有历史命令总数为 totalNumber
history [number] 可以查看序号从 numbertotal_number 的历史记录
history [-number] 可以查看最后 number 个记录

history 10

umask

umask [掩码] 和在使用 chmod [增加权限] 的实现原理完全一样,只是反了过来,二者在终端中都是8进制的表现方式,比如掩码 002,展开为2进制就是000 000 010,这代表掩盖其他用户组的写入权限。

文件似乎在创建时默认是没有可执行权限的,目录才有,所以掩码不需要任何值来去除文件的执行权限。