做业css
zyhtml
e前端
知识点:java
进入上一级目录:$ cd ..
linux
进入你的“home”目录:$ cd ~
# 或者 cd /home/<你的用户名>
nginx
使用 pwd
获取当前路径正则表达式
绝对路径,以根"/"目录为起点的完整路径,以你所要到的目录为终点shell
表现形式如: /usr/local/bin
,表示根目录下的 usr 目录中的 local 目录中的 bin 目录。编程
相对路径,相对于你当前的目录的路径,相对路径是以当前目录 .
为起点,以你所要到的目录为终点,ubuntu
表现形式如:usr/local/bin
(这里假设你当前目录为根目录)。
实验截图:
使用 touch
命令建立空白文件
建立名为 test 的空白文件,由于在其余目录没有权限,因此须要先 cd ~
切换回用户的/home/shiyanlou
目录:
使用 mkdir
(make directories)命令能够建立一个空目录,也可同时指定建立目录的权限属性
使用cp
(copy)命令复制一个文件或目录到指定目录。
使用rm
(remove files or directories)命令,删除一个文件或目录:
直接使用rm
删除会显示一个提示,
想忽略这提示,直接删除文件,可使用-f
参数强制删除
跟复制目录同样,要删除一个目录,也须要加上-r
或-R
参数
使用mv
(move or rename files)命令,移动文件(剪切)。
出现问题:!!!!!
cat
,tac
和nl
命令查看文件cat
为正序显示,tac
倒序显示。
标准输入输出:当咱们执行一个 shell 命令行时一般会自动打开三个标准文件,即标准输入文件(stdin),默认对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应被重定向到终端的屏幕,以便咱们能直接看到输出内容。进程将从标准输入文件中获得输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。
-n
参数显示行号
nl
命令,添加行号并打印
经常使用的几个参数:
-b : 指定添加行号的方式,主要有两种: -b a:表示不管是否为空行,一样列出行号("cat -n"就是这种方式) -b t:只列出非空行的编号并列出(默认为这种方式) -n : 设置行号的样式,主要有三种: -n ln:在行号字段最左端显示 -n rn:在行号字段最右边显示,且不加 0 -n rz:在行号字段最右边显示,且加 0 -w : 行号字段占用的位数(默认为 6 位)
more
和less
命令分页查看文件tail
命令,不得不提的还有它一个很牛的参数-f
,这个参数能够实现不停地读取某个文件的内容并显示。这可以让咱们动态查看日志起到实时监视的做用
一般使用file
命令能够查看文件的类型
专门的命令行编辑器好比(emacs,vim,nano)
做业:
使用declare
命令建立一个变量名为 tmp 的变量:
取变量的值,使用echo
命令和$
符号($符号用于表示引用一个变量的值,初学者常常会忘记输入):
变量名只能是英文字母,数字或者下划线,且不能以数字做为开头。
环境变量就是做用域比自定义变量要大
Shell 的环境变量做用于自身和它的子进程。
一般咱们会涉及到的环境变量有三种:
也有三个与上述三种环境变量相关的命令,set
,env
,export
。这三个命令很类似,均可以用于打印相关环境变量,区别在于涉及的是不一样范围的环境变量,详见下表:
命令 | 说明 |
---|---|
set |
显示当前 Shell 全部环境变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量 |
env |
显示与当前用户相关的环境变量,还可让命令在指定环境中运行 |
export |
显示从 Shell 中导出成环境变量的变量,也能经过它将自定义变量导出为环境变量 |
每一个用户的 home 目录中有一个 Shell 每次启动时会默认执行一个配置脚本,以初始化环境,包括添加一些用户自定义环境变量等等。zsh 的配置文件是.zshrc
,相应 Bash 的配置文件为.bashrc
变量的修改有如下几种方式
变量设置方式 | 说明 |
---|---|
${变量名#匹配字串} |
从头向后开始匹配,删除符合匹配字串的最短数据 |
${变量名##匹配字串} |
从头向后开始匹配,删除符合匹配字串的最长数据 |
${变量名%匹配字串} |
从尾向前开始匹配,删除符合匹配字串的最短数据 |
${变量名%%匹配字串} |
从尾向前开始匹配,删除符合匹配字串的最长数据 |
${变量名/旧的字串/新的字串} |
将符合旧字串的第一个字串替换为新的字串 |
${变量名//旧的字串/新的字串} |
将符合旧字串的所有字串替换为新的字串 |
好比要修改咱们前面添加到 PATH 的环境变量。
与搜索相关的命令经常使用的有以下几个whereis
,which
,find
,locate
。
whereis
只能搜索二进制文件(-b),man帮助文件(-m)和源代码文件(-s)。若是想要得到更全面的搜索结果可使用locate
命令。
which
小而精which
自己是 Shell 内建的一个命令,咱们一般使用which
来肯定是否安装了某个指定的软件,由于它只从PATH
环境变量指定的路径中去搜索命令:
find
精而细find
应该是这几个命令中最强大的了,它不但能够经过文件类型、文件名进行查找并且能够根据文件的属性(如文件的时间戳,文件的权限等)进行搜索。
注意 find 命令的路径是做为第一个参数的, 基本命令格式为 find [path] [option] [action]
做业:
《黑客帝国》电影里满屏幕代码的“数字雨”,在 Linux 里面你也能够轻松实现这样的效果
Linux 上经常使用的 压缩/解压 工具,介绍了 zip,rar,tar 的使用。
zip
压缩打包程序第一行命令中,-r
参数表示递归打包包含子目录的所有内容,-q
参数表示为安静模式,即不向屏幕输出信息,-o
,表示输出文件,需在其后紧跟打包输出文件名。后面使用du
命令查看打包后文件的大小
unzip
命令解压缩zip文件
不想解压只想查看压缩包的内容你可使用-l
参数
使用-O
(英文字母,大写o)参数指定编码类型:
rar
打包压缩命令a
参数添加一个目录~
到一个归档文件中,若是该文件不存在就会自动建立。做业:天冷的时候,要是有个火炉就行了。
而后再使用mkfs
格式化各分区
cowsay
命令,可让你在终端里以一种动物说话的形式打印出一段话。
顺序执行、选择执行、管道、cut 命令、grep 命令、wc 命令、sort 命令等
&&
就是用来实现选择性执行的,它表示若是前面的命令执行结果(不是表示终端输出的内容,而是表示命令执行状态的结果)返回0则执行后面的,不然不执行,你能够从$?
环境变量获取上一次命令的返回结果
管道又分为匿名管道和具名管道
在使用一些过滤程序时常常会用到的就是匿名管道,在命令行中由|
分隔符表示,|
在前面的内容中咱们已经屡次使用到了。具名管道简单的说就是有名字的管道,一般只会在源程序中用到具名管道。下面咱们就将经过一些经常使用的可使用管道的"过滤程序"来帮助你熟练管道的使用。
uniq
命令能够用于过滤或者输出重复行。tr 命令能够用来删除一段文本信息中的某些文字。或者将其进行转换。
col 命令能够将Tab
换成对等数量的空格建,或反转这个操做。
用于将两个文件中包含相同内容的那一行合并在一块儿。
paste
这个命令与join
命令相似,它是在不对比数据的状况下,简单地将多个文件合并一块儿,以Tab
隔开。
注意不要将管道和重定向混淆,管道默认是链接前一个命令的输出到下一个命令的输入,而重定向一般是须要一个文件来创建两个命令的链接
tee
命令同时重定向到多个文件除了将须要将输出重定向到文件以外也须要将信息打印在终端
exec
命令的做用是使用指定的命令替换当前的 Shell,及使用一个进程替换当前进程,或者指定新的重定向使用exec
命令能够建立新的文件描述符
在 Linux 中有一个被成为“黑洞”的设备文件,因此导入它的数据都将被“吞噬”。
在类 UNIX 系统中,/dev/null,或称空设备,是一个特殊的设备文件,它一般被用于丢弃不须要的输出流,或做为用于输入流的空文件,这些操做一般由重定向完成。读取它则会当即获得一个EOF。
xargs 是一条 UNIX 和类 UNIX 操做系统的经常使用命令。它的做用是将参数列表转换成小块分段传递给其余命令,以免参数列表过长的问题。
正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法
一个正则表达式一般被称为一个模式(pattern),为用来描述或者匹配一系列符合某个句法规则的字符串。
|
竖直分隔符表示选择,例如"boy|girl"能够匹配"boy"或者"girl"
数量限定除了咱们举例用的*
,还有+
加号,?
问号,.
点号,若是在一个模式中不加数量限定符则表示出现一次且仅出现一次:
优先级为从上到下从左到右,依次下降:
rep
命令用于打印输出文本中匹配的模式串,它使用正则表达式做为模式匹配的条件。grep
支持三种正则表达式引擎,分别用三个参数指定:
参数 | 说明 |
---|---|
-E |
POSIX扩展正则表达式,ERE |
-G |
POSIX基本正则表达式,BRE |
-P |
Perl正则表达式,PCRE |
虽然咱们这一节的标题是正则表达式,但实际这一节实验只是介绍grep
,sed
,awk
这三个命令,而正则表达式做为这三个命令的一种使用方式(命令输出中能够包含正则表达式)。正则表达式自己的内容不少,要把它说明清楚须要单独一门课程来实现,不过咱们这一节中涉及到的相关内容一般也可以知足不少状况下的需求了。
想要更深刻地学习使用正则表达式,在这里 正则表达式基础。
咱们先找一个用于练习的文本文件:
$ cp /etc/passwd ~
# 打印2-5行 $ nl passwd | sed -n '2,5p' # 打印奇数行 $ nl passwd | sed -n '1~2p'
# 将输入文本中"shiyanlou" 全局替换为"hehe",并只打印替换的那一行,注意这里不能省略最后的"p"命令 $ sed -n 's/shiyanlou/hehe/gp' passwd
注意: 行内替换能够结合正则表达式使用。
$ nl passwd | grep "shiyanlou" # 删除第21行 $ sed -n '21c\www.shiyanlou.com' passwd
关于sed命令就介绍这么多,你若是但愿了解更多sed的高级用法,你能够参看以下连接:
看到上面的标题,你可能会感到惊异,难道咱们这里要学习的是一门“语言”么,确切的说,咱们是要在这里学习awk
文本处理语言,只是咱们并不会在这里学习到比较完整的关于awk
的内容,仍是由于前面的缘由,它太强大了,它的应用无处不在,咱们没法在这里以简短的文字描述面面俱到,若是你有目标成为一个linux系统管理员,确实想学好awk
,你一不用担忧,实验楼会在以后陆续上线linux系统管理员的学习路径,里面会有单独的关于正则表达式
,awk
,sed
等相关课程,敬请期待吧。下面的内容,咱们就做为一个关于awk
的入门体验章节吧,其中会介绍一些awk
的经常使用操做。
AWK
是一种优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一.其名称得自于它的创始人Alfred Aho(阿尔佛雷德·艾侯)、Peter Jay Weinberger(彼得·温伯格)和Brian Wilson Kernighan(布莱恩·柯林汉)姓氏的首个字母.AWK程序设计语言,三位建立者已将它正式定义为“样式扫描和处理语言”。它容许您建立简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其余的功能。最简单地说,AWK是一种用于处理文本的编程语言工具。
在大多数linux发行版上面,实际咱们使用的是gawk(GNU awk,awk的GNU版本),在咱们的环境中ubuntu上,默认提供的是mawk,不过咱们一般能够直接使用awk命令(awk语言的解释器),由于系统已经为咱们建立好了awk指向mawk的符号连接。
$ ll /usr/bin/awk
nawk: 在 20 世纪 80 年代中期,对 awk语言进行了更新,并不一样程度地使用一种称为 nawk(new awk) 的加强版本对其进行了替换。许多系统中仍然存在着旧的awk 解释器,但一般将其安装为 oawk (old awk) 命令,而 nawk 解释器则安装为主要的 awk 命令,也可使用 nawk 命令。Dr. Kernighan 仍然在对 nawk 进行维护,与 gawk 同样,它也是开放源代码的,而且能够免费得到; gawk: 是 GNU Project 的awk解释器的开放源代码实现。尽管早期的 GAWK 发行版是旧的 AWK 的替代程序,但不断地对其进行了更新,以包含 NAWK 的特性; mawk 也是awk编程语言的一种解释器,mawk遵循 POSIX 1003.2 (草案 11.3)定义的 AWK 语言,包含了一些没有在AWK 手册中提到的特点,同时 mawk 提供一小部分扩展,另外听说mawk是实现最快的awk
awk全部的操做都是基于pattern(模式)—action(动做)对来完成的,以下面的形式:
$ pattern {action}
你能够看到就如同不少编程语言同样,它将全部的动做操做用一对{}
花括号包围起来。其中pattern一般是是表示用于匹配输入的文本的“关系式”或“正则表达式”,action则是表示匹配后将执行的动做。在一个完整awk操做中,这二者能够只有其中一个,若是没有pattern则默认匹配输入的所有文本,若是没有action则默认为打印匹配内容到屏幕。
awk
处理文本的方式,是将文本分割成一些“字段”,而后再对这些字段进行处理,默认状况下,awk以空格做为一个字段的分割符,不过这不是固定了,你能够任意指定分隔符,下面将告诉你如何作到这一点。
awk [-F fs] [-v var=value] [-f prog-file | 'program text'] [file...]
其中-F
参数用于预先指定前面提到的字段分隔符(还有其余指定字段的方式) ,-v
用于预先为awk
程序指定变量,-f
参数用于指定awk
命令要执行的程序文件,或者在不加-f
参数的状况下直接将程序语句放在这里,最后为awk
须要处理的文本输入,且能够同时输入多个文本文件。如今咱们仍是直接来具体体验一下吧。
先用vim新建一个文本文档
$ vim test
包含以下内容:
I like linux www.shiyanlou.com
# "quote>" 不用输入 $ awk '{ > print > }' test # 或者写到一行 $ awk '{print}' test
说明:在这个操做中我是省略了patter
,因此awk
会默认匹配输入文本的所有内容,而后在"{}"花括号中执行动做,即print
打印全部匹配项,这里是所有文本内容
$ awk '{ > if(NR==1){ > print $1 "\n" $2 "\n" $3 > } else { > print} > }' test # 或者 $ awk '{ > if(NR==1){ > OFS="\n" > print $1, $2, $3 > } else { > print} > }' test
说明:你首先应该注意的是,这里我使用了awk
语言的分支选择语句if
,它的使用和不少高级语言如C/C++
语言基本一致,若是你有这些语言的基础,这里将很好理解。另外一个你须要注意的是NR
与OFS
,这两个是awk
内建的变量,NR
表示当前读入的记录数,你能够简单的理解为当前处理的行数,OFS
表示输出时的字段分隔符,默认为" "空格,如上图所见,咱们将字段分隔符设置为\n
换行符,因此第一行本来以空格为字段分隔的内容就分别输出到单独一行了。而后是$N
其中N为相应的字段号,这也是awk
的内建变量,它表示引用相应的字段,由于咱们这里第一行只有三个字段,因此只引用到了$3
。除此以外另外一个这里没有出现的$0
,它表示引用当前记录(当前行)的所有内容。
$ awk -F'.' '{ > if(NR==2){ > print $1 "\t" $2 "\t" $3 > }}' test # 或者 $ awk ' > BEGIN{ > FS="." > OFS="\t" # 若是写为一行,两个动做语句之间应该以";"号分开 > }{ > if(NR==2){ > print $1, $2, $3 > }}' test
1、Linux 上的软件安装
一般 Linux 上的软件安装主要有三种方式:
APT是Advance Packaging Tool(高级包装工具)的缩写,是Debian及其派生发行版的软件包管理器,APT能够自动下载,配置,安装二进制或者源代码格式的软件包,所以简化了Unix系统上管理软件的过程。APT最先被设计成dpkg的前端,用来处理deb格式的软件包。如今通过APT-RPM组织修改,APT已经能够安装在支持RPM的系统管理RPM包。这个包管理器包含以
apt-
开头的的多个工具,如apt-get
apt-cache
apt-cdrom
等,在Debian系列的发行版中使用。
OPT文件,cd OPT,却显示not a directory,经过阅读《linux嵌入式》这本书使用mkdir建立目录,多是由于OPT文件的存在,并不能建立新的目录
与网上得搜索,了解应创建OPT文件夹,而不是文件。
2.同上,在创建fortest这个文件的时候,不当心按了两次touch fortest,列出文件的时候,发现建了两个forloutest文件,修改访问权限得时候,哪怕修改两次,被修改得也只有一个文件,另外一个文件修改不了,并且使用rm删除,好像也没有用。
体会:有时候按照实验指导作,可是并非每一步都是告诉咱们得,因此作实验以前最好要结合课本的知识。并且作实验的时候,以为本身要学的还有不少。