啊啊啊啊啊啊啊刚刚开题答辩完了,可以飞一会儿了,舒舒呼呼
^-^
^-^
^-^
^-^
^-^
^-^
^-^
^-^
^-^
^-^
^-^
^-^
^-^
加油!打工人!喝杯咖啡继续搬砖……
学习任务1:LPI-1 基础知识
Part4 通配符
通过使用通配符模式一次指定多个文件。Bash 和其它 Linux 命令将通过在磁盘上查找并找到任何与之匹配的文件来解释这种模式。因此,如果在当前工作目录中,有从 file1 到 file8 的文件,那么可以输入下面的命令来删除这些文件:
例子:首先建了3个文件,先用 rm file[1-2]
删除1-2,再用 rm file*
删除3
例子:列出 /etc中以g开头的 所有文件系统对象:$ ls -d /etc/g*
, 试图列出 /usr/bin 中以 asdf 开头并且以 jkl 结尾的所有文件:$ ls -d /usr/bin/asdf*jkl
(情况说明:通常,当我们指定一种模式时,该模式与底层系统上的一个或多个文件匹配,bash 以空格隔开的所有匹配对象的列表来替换该模式。但是,当模式不能找到匹配对象时,bash 将不理会参数、通配符等等,保留原样。因此,当“ls”不能找到文件 /usr/bin/asdf*jkl 时,它会报错。此处的有效的规则是:glob 模式只在与文件系统中的对象匹配时才可以进行扩展。)
通配符语法
*
意思是啥都可以
?
与任何单个字符匹配只有我后面一个啥都可以,其他位置不行
[]
与?相似,但是更加确切,匹配[]
内的任一字符,也可以用 - 来指定范围,甚至还可以组合范围
举个栗子:
- myfile[12] 将与 myfile1 和 myfile2 匹配。只要当前目录中至少有一个这样的文件存在,该通配符就可以进行扩展。
- [Cc]hange[Ll]og 将与 Changelog、ChangeLog、changeLog 以及 changelog 匹配。
- ls /etc/[0-9]* 将列出 /etc 中以数字开头的所有文件。
- ls /tmp/[A-Za-z]* 将列出 /tmp 中以大写字母或小写字母开头的所有文件。
[!]
和[]
一样的用法,非的意思,除了括号里的,其他都可以匹配
举个栗子:
rm myfile[!9]
将删除除 myfile9 之外的名为 myfile 加一个字符的所有文件。
关于通配符要注意的一些事儿
由于 bash 对与通配符相关的字符==(?、[、]、*)==进行特别处理,因此包含这些字符的参数输入到命令中时,需要特别小心!!!
比如啊,要把字符[fo]*
写到文件里面,如果用这句话你就不会成功:
$ echo [fo]* > /tmp/mynewfile.txt
因为它会把所有包含fo的文件名写入到mynewfile里,而不是把这几个字符写进去,要用下面的代码才行:
$ echo '[fo]*' > /tmp/mynewfile.txt
还有一种方法,可以使用反斜杠,告诉 bash [、] 和 * 应该被当成文字处理,而不是被当成通配符处理:
& echo \[fo\]\* > /tmp/mynewfile.txt
by the way:为了指定字符 \,可以将它放入单引号中,或者也可以输入 \
单引号和双引号的比较
若确实想要把文字文本传给命令时,单引号是最好的选择。要获取关于通配符扩展更多的信息,请输入 man 7 glob
。要获取关于 bash 中引号作用的更多信息,请输入 man 8 glob
,并阅读题为 QUOTING 的章节
学习任务2:LPI-2 基本管理
Part1 正则表达式
grep的使用
最基本的正则表达式。扫描文件内容查找特点正则表达式,grep打印与正则表达式匹配的每一行,并忽略不匹配的每一行:
$ grep bash /etc/passwd
operator:x:11:0:operator:/root:/bin/bash
root:x:0:0::/root:/bin/bash
ftp:x:40:1::/home/ftp:/bin/bash
其中,grep
是正则表达式,bash是查找的内容,后面是文件passwd
元字符.
的使用
与正则表达式相比,利用元字符可以使搜索执行比到目前为止的示例更为复杂的搜索。这些元字符之一是.(句点),它与任何单个字符匹配:
可以看到,.
的作用相当于?
,.
将匹配任何单个字符
如果想使用更具体的,还有[]
来指定应匹配的字符子集(更精确的匹配括号内的字符):
[^]
的使用
相当于前面的[!]
,不匹配括号里的内容
再次注意,我们使用的 [^]
是正则表达式,但 [!]
使用的是glob
[.]
括号可以把.
的通配意义给消掉,这里就没有找到任何匹配的
??? 有点小奇怪,\.
应该是把.
的通配符意义转成单纯的字符了啊,为什么还是当通配符用的呢???
*
的使用
它不匹配任何内容,而是修改了先前字符的含义,用于匹配零个或多个重复出现的前一个字符。
举些栗子:
- ab*c(匹配abbbbc但不匹配abqc)
- ab*c(匹配abc但不匹配abbqbbc)
- ab*c(匹配ac但不匹配cba)
- b[cq]*e(匹配bqe但不匹配eb)
- b[cq]*e(匹配bccqqe但不匹配bccc)
- b[cq]*e(匹配bqqcce但不匹配cqe)
- b[cq]*e(匹配项bbbeee)
.*
(匹配任何字符串)foo.*
(匹配以开头的任何字符串foo)
注意:对* 正则表达式元字符的解释与与*glob字符根本不同
^
和$
:行首和行尾
例子:^#
匹配以#
开头的任何行
整行正则表达式:^
与$
组合
例子:找出#
开头,.
结尾的所有行
Part2 FHS以及找文件
FHS=Filesystem HIerarchy Standard(文件系统层次结构标准)
该文件系统层次标准是一个文档,指定Linux系统上目录的布局。FHS旨在提供通用布局,以简化与发行版无关的软件开发。FHS指定以下目录(直接取自FHS规范):
- / (根目录)
- /boot (引导加载程序的静态文件)
- /dev (设备文件)
- /etc (特定于主机的系统配置)
- /lib (基本共享库和内核模块)
- /mnt (用于临时挂载文件系统的挂载点)
- /opt (附加的应用程序软件包)
- /sbin (基本系统二进制文件)
- /tmp (临时文件)
- /usr (二级层次结构)
- /var (可变数据)
FHS的两个独立类别
- 可共享 不可共享(可共享的数据可以在主机之间共享;不可共享的数据特定于给定的主机(例如配置文件))
- 可变 静态(可变数据可以修改;静态数据不会被修改(系统安装和维护时除外))
PATH是个啥东西
修改PATH
通过命令行添加PATH的意思???
删除PATH
好像就是重新把PATH敲一遍,就更新了??
$ PATH=/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:~/bin
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/agriffis/bin
关于which
你可以通过which来检查你的PATH里有没有给定的程序,比如,我电脑里就没有sense,ls存在就能找到所在目录
which -a
应该是可以列出所在的所有实例的,但是还是只有一个,不知道咋肥事
如果你不仅仅想找到它的位置,还想知道更多信息的话,可以用
whereis
find命令
可以使用各种搜索条件来搜索所需的任何文件,例如,要搜索文件README:
find和通配符结合
例如,我们可能要搜索README带有扩展名的文件:
$ find /usr/share/doc -name README\*
忽略大小写
可以使用-iname
$ find /usr/share/doc -name '[Rr][Ee][Aa][Dd][Mm][Ee]*'
or
$ find /usr/share/doc -iname readme\*
find和type
-type选项可以查找某种类型的文件系统对象,参数有:-type是b (块设备), c(字符设备), d(目录), p(命名管道), f(常规文件), l (符号链接),和s(套接字socket)
例如,要搜索/usr/bin包含字符串的 符号链接vim:
find和mtimes
可以根据创建时间来查找文件
搜索过去24小时内创建的文件:
$ find . -name \? -mtime -1
./a
或者,可以搜索在当前24小时之前创建的文件:
$ find . -name \? -mtime +0
./b
./c
./d
-daystart选项
如果另外指定该-daystart选项,则时间段将从今天开始而不是24小时之前开始。例如,这是昨天和前一天创建的一组文件:
$ find . -name \? -daystart -mtime +0 -mtime -3
./b
./c
$ ls -l b c
-rw------- 1 root root 0 Jan 6 18:00 b
-rw------- 1 root root 0 Jan 5 18:00 c
-size选项
允许你根据大小来查找文件,默认大小是512byte,但是增加一个后缀会让它变得更简单。可用的后缀为b(512字节块),c(字节),k(千字节)和 w(2字节word),此外,您可以在前面加一个加号(“大于”)或减号(“小于”)
栗子:查找/usr/bin中<50个字节的常规文件
-exec选项
对找到的文件进行操作,接受命令行作为其参数,以;
结尾,并用文件名替换所有{}
里出现的
locate的用法
find由于需要读取正在搜索的每个目录,因此执行该程序可能需要一段时间,locate命令可以依靠外部数据库来加快处理速度。locate命令与路径名的任何部分匹配,而不仅仅是文件本身
slocate和locate是一样的用法