0%

缤纷绚烂的终端体验:探索lolcat

lolcat是一款让终端从黑白灰变得缤纷多彩的神奇工具。

通过将文字渲染成彩虹般的颜色,让你的终端充满欢乐与活力。

可以把这个命令替换掉cat,这样你的内容都灵动了起来

比如lolcat /etc/resolv.conf会生成如下信息:

mkdir 创建文件夹

mkdir 命令用来创建指定的名称的目录,看看官方定义:

make directories

所以mkdir是这两个单词的缩写。mkdir要求创建目录的用户在当前目录中具有_写权限_,并且指定的目录名不能是当前目录中已有的目录,参数-p可以指定建立多级目录,这个参数也是用的最多的。

命令格式

1
$ mkdir [可选项] 目录

命令参数

  • -m, –mode=模式,设定权限<模式> (类似 chmod)
  • -p, –parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录

创建一个空目录

1
$ mkdir hello

递归创建多个目录

1
$ mkdir -p a/b/c/d/e/f/g

创建权限为777的目录

1
$ mkdir -m 777 test

小技巧 - 创建目录树

下面的一个命令可以创建一个项目的目录结构,如下:

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
32
33
34
35
36
37
38
$ mkdir -vp project/{src/,include/,lib/,bin/,doc/{info,product},logs/{info,product},service/deploy/{info,product}}

mkdir: created directory ‘project’
mkdir: created directory ‘project/src/’
mkdir: created directory ‘project/include/’
mkdir: created directory ‘project/lib/’
mkdir: created directory ‘project/bin/’
mkdir: created directory ‘project/doc’
mkdir: created directory ‘project/doc/info’
mkdir: created directory ‘project/doc/product’
mkdir: created directory ‘project/logs’
mkdir: created directory ‘project/logs/info’
mkdir: created directory ‘project/logs/product’
mkdir: created directory ‘project/service’
mkdir: created directory ‘project/service/deploy’
mkdir: created directory ‘project/service/deploy/info’
mkdir: created directory ‘project/service/deploy/product’


$ tree project/

project
├── bin
├── doc
│ ├── info
│ └── product
├── include
├── lib
├── logs
│ ├── info
│ └── product
├── service
│ └── deploy
│ ├── info
│ └── product
└── src

14 directories, 0 files

mkdir 创建文件夹

mkdir 命令用来创建指定的名称的目录,看看官方定义:

make directories

所以mkdir是这两个单词的缩写。mkdir要求创建目录的用户在当前目录中具有_写权限_,并且指定的目录名不能是当前目录中已有的目录,参数-p可以指定建立多级目录,这个参数也是用的最多的。

命令格式

1
mkdir [可选项] 目录

命令参数

1
2
-m, --mode=模式,设定权限<模式> (类似 chmod)
-p, --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录

命令实例

创建一个空目录

1
$ mkdir hello

递归创建多个目录

1
$ mkdir -p a/b/c/d/e/f/g

创建权限为777的目录

1
$ mkdir -m 777 test

小技巧

下面的一个命令可以创建一个项目的目录结构,如下:

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
32
33
34
35
36
37
38
mkdir -vp project/{src/,include/,lib/,bin/,doc/{info,product},logs/{info,product},service/deploy/{info,product}}

mkdir: created directory ‘project’
mkdir: created directory ‘project/src/’
mkdir: created directory ‘project/include/’
mkdir: created directory ‘project/lib/’
mkdir: created directory ‘project/bin/’
mkdir: created directory ‘project/doc’
mkdir: created directory ‘project/doc/info’
mkdir: created directory ‘project/doc/product’
mkdir: created directory ‘project/logs’
mkdir: created directory ‘project/logs/info’
mkdir: created directory ‘project/logs/product’
mkdir: created directory ‘project/service’
mkdir: created directory ‘project/service/deploy’
mkdir: created directory ‘project/service/deploy/info’
mkdir: created directory ‘project/service/deploy/product’


$ tree project/

project
├── bin
├── doc
│ ├── info
│ └── product
├── include
├── lib
├── logs
│ ├── info
│ └── product
├── service
│ └── deploy
│ ├── info
│ └── product
└── src

14 directories, 0 files

mv文件移动或更名命令

mv命令用于移动文件或者重命名文件及文件夹。官方定义为:

mv : move files

语法

mv的语法与cp等其他语法类似,如下:

1
2
$ mv [options] source dest
$ mv [options] source ... directory

几个比较常用的选项如下:

  • -b: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份,文件后缀用~表示;
  • -i或–interactive: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作,一般而言,对于不确定的时候可以用此选项,不过文件或文件夹居多时,最好不要用
  • -f或–force: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件,强制的意思force
  • -n或–no-clobber: 不要覆盖任何已存在的文件或目录。
  • -u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。

常规操作

1
2
3
4
5
6
7
$ ls
a.txt

$ mv a.txt b.txt

$ ls
b.txt

直接移动或者叫做重命名,文件夹也类似的操作。

覆盖前备份

1
2
3
4
5
6
7
$ ls
a.txt a.txt~

$ cp -b ../a.txt a.txt

$ ls
a.txt a.txt~

可以看到此时多了一个备份文件

增量更新

1
$ cp -u a b	

此时的操作为,只有a比b更新或者b不存在的时候,才会进行更新,否则失败。

这个用法多用在:当横向对比两个文价夹有无重要更新的时候才会用到。

交互提示

1
2
$ cp -i b.txt a.txt
cp:是否覆盖"a.txt"

在文件存在的时候,-i选项会进行提示,此时需要输入y才能覆盖,而输入n就会取消这个操作。

mv文件移动或更名命令

mv命令用于移动文件或者重命名文件及文件夹。官方定义为:

mv : move files

语法

mv的语法与cp等其他语法类似,如下:

1
2
$ mv [options] source dest
$ mv [options] source ... directory

几个比较常用的选项如下:

  • -b: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份,文件后缀用~表示;
  • -i或–interactive: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作,一般而言,对于不确定的时候可以用此选项,不过文件或文件夹居多时,最好不要用
  • -f或–force: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件,强制的意思force
  • -n或–no-clobber: 不要覆盖任何已存在的文件或目录。
  • -u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。

常规操作

1
2
3
4
5
6
7
$ ls
a.txt

$ mv a.txt b.txt

$ ls
b.txt

直接移动或者叫做重命名,文件夹也类似的操作。

覆盖前备份

1
2
3
4
5
6
7
$ ls
a.txt a.txt~

$ cp -b ../a.txt a.txt

$ ls
a.txt a.txt~

可以看到此时多了一个备份文件

增量更新

1
$ cp -u a b	

此时的操作为,只有a比b更新或者b不存在的时候,才会进行更新,否则失败。

这个用法多用在:当横向对比两个文价夹有无重要更新的时候才会用到。

交互提示

1
2
$ cp -i b.txt a.txt
cp:是否覆盖"a.txt"

在文件存在的时候,-i选项会进行提示,此时需要输入y才能覆盖,而输入n就会取消这个操作。

一去不复还的 rm

.. note::
风萧萧兮易水寒,壮士一去兮不复还。
先秦-荆轲《易水歌》

如果Linux命令按照危险性来个排行榜,rm绝对一骑绝尘,名列第一。

因为发生过太多太多无奈、无辜、无法挽回的事情。

所谓风萧萧兮易水寒,壮士一去兮不复还,还得是rm命令

rm 命令用于删除文件或者目录。官方定义为:

remove files or directories

语法

1
$ rm [options] name...

参数

  • -i 删除前逐一询问确认,确认时比较好用。
  • -f 即使原档案属性设为唯读,也直接删除,无需逐一确认,是force的意思。
  • -r 将目录及里面的子文件逐一删除。

几个示例

删除文件可以直接使用rm命令,若删除目录则必须配合选项”-r”,例如:

1
2
3
4
5
6
$ rm  a.txt 
rm:是否删除 一般文件 "test.txt"? y
$ rm test
rm: 无法删除目录"test": 是一个目录
$ rm -r test
rm:是否删除 目录 "test"? y

删除当前目录下的所有文件及目录,命令行为:

1
$ rm  -r  * 

文件一旦通过rm命令删除,则无法恢复,所以必须格外一定切记小心地使用该命令。

因为发生过很多欲哭无泪的故事。。。

主要的痛点就在如果是在root账户权限下,rm无所不能呀

/bin/rm Argument list too long – Linux”

这种情况主要在大批量删除居多文件的情况下发生,也是因为删除的命令参数超过了shell参数的个数导致的,可以通过getconf ARG_MAX来确认,解决方法好几种

配合find与xargs完成删除海量文件

可以通过find和xargs命令配合的方式,比如删除当前目录所有的png文件,

1
$ find . -name "*.png" -print0 | xargs -0 rm

上面的这个命令会删除当前目录及子目录下所有的png文件,如果不想遍历,仅仅是当前目录,可以采用如下的方式:

1
$ find . -maxdepth 1 -name "*.png" -print0 | xargs -0 rm

使用find的delete选项

还有一种方法是使用如下:

1
$ find . -name "*.png" -delete

切记,需要再三确认。

快速删除大文件

有时候文件可能会变得很大,非常非常大。比如有些log文件动辄几十GB,而通常情况下可能会用rm来删除,可能要产生比较大的IO消耗,一个比较简单的方法可以这么来操作:

1
$ echo '' > big_file

当然这个big_file需要替换为大文件的路径和文件名字。

会写一个空格到这个文件,随后即可删除。

删除文件和目录命令rm

rm 命令用于删除文件或者目录。官方定义为:

remove files or directories

语法

1
$ rm [options] name...

参数

  • -i 删除前逐一询问确认,确认时比较好用。
  • -f 即使原档案属性设为唯读,也直接删除,无需逐一确认,是force的意思。
  • -r 将目录及里面的子文件逐一删除。

几个示例

删除文件可以直接使用rm命令,若删除目录则必须配合选项”-r”,例如:

1
2
3
4
5
6
$ rm  a.txt 
rm:是否删除 一般文件 "test.txt"? y
$ rm test
rm: 无法删除目录"test": 是一个目录
$ rm -r test
rm:是否删除 目录 "test"? y

删除当前目录下的所有文件及目录,命令行为:

1
$ rm  -r  * 

文件一旦通过rm命令删除,则无法恢复,所以必须格外一定切记小心地使用该命令。

因为发生过很多欲哭无泪的故事。。。

rmdir简介

rmdir 相对于 mkdirrmdir 是用来将一个“空的“目录删掉。

如果一个目录下面没有任何文件或文件夹,你就可以用 rmdir 指令将其除去。

而如果一个目录底下有其他的内容, rmdir 将无法将这个目录杀掉,除非使用那么就加上**-r** 选项就ok了。

这个命令比较鸡肋,基本都可以通过rm来搞定解决。

官方定义为:

remove directory

使用方法很简单,基本如下:

1
$ rmdir directory

如果说出彩的话,只有-p选项还可以说道说道。

详细的解释为:

Each directory argument is treated as a pathname of which all components will be removed, if they are empty, starting with the last most component.

如果在删除子目录以后,主目录也是空目录的话,则一并删除之。

用法如下:

1
$ rmdir -p directory	

其他的还是使用rm吧。

rmdir简介

rmdir 相对于 mkdirrmdir 是用来将一个“空的“目录删掉。

如果一个目录下面没有任何文件或文件夹,你就可以用 rmdir 指令将其除去。

而如果一个目录底下有其他的内容, rmdir 将无法将这个目录杀掉,除非使用那么就加上**-r** 选项就ok了。

这个命令比较鸡肋,基本都可以通过rm来搞定解决。

官方定义为:

remove directory

使用方法很简单,基本如下:

1
$ rmdir directory

如果说出彩的话,只有-p选项还可以说道说道。

详细的解释为:

Each directory argument is treated as a pathname of which all components will be removed, if they are empty, starting with the last most component.

如果在删除子目录以后,主目录也是空目录的话,则一并删除之。

用法如下:

1
$ rmdir -p directory	

其他的还是使用rm吧。

休息一会 sleep

.. note::
莫听穿林打叶声,何妨吟啸且徐行。
苏轼

Linux sleep命令可以用来将目前动作延迟一段时间。

sleep的官方定义为:

sleep - delay for a specified amount of time

或许你觉得计算机太累,让它稍事休息,亦或许过个个把钟头需要喝杯水,此时sleep就有点小作用了。

其用法如下:

1
$ sleep [--help] [--version] number[smhd]

除了帮助和版本信息,基本没有参数了。

其中的number是必须的,也就是sleep多久的数字,默认为s秒。其他的几个含义为:

  • s second 秒
  • m minute分钟
  • h hour 小时
  • d day 天

休息5分钟

工作太累了,学习太累了,躺着太累了,休息5分钟

1
$ sleep 5m

1小时后提醒我

1
$ sleep 1h

时分秒搭配使用

当然,sleep也是支持时分秒搭配使用的,如下所示:

1
$ sleep 1h 2m 3s

将会sleep 1个小时2分钟3秒。

倒计时计时器

当然也可以做个循环计时器,通过sleep 1

1
$ echo "five"   && sleep 1 && echo "four"   && sleep 1 && sleep 1 && echo "three"   && sleep 1 && echo "two" && sleep 1 && echo "one" && echo "Stop"

结合脚本

sleep在程序里面使用比较频繁,特别是单片机的走马灯等。而Linux的sleep,也是比较常与bash脚本来配合使用,如下:

1
2
3
4
5
#!/bin/bash
echo -e "start to sleep 15 seconds......"
sleep 15
echo -e "continue to run program......"
./program