PHP基础及简单linux

这篇博客主要探讨PHP基础和Linux基础,包括反射API的定义、相关类和使用场景,以及PHP错误处理机制,如自定义错误处理和异常处理。还介绍了正则表达式的概念、元字符、限定符和定位符。此外,文章提到了模板引擎的作用和Smarty模板引擎的特点,以及PHP中的网络函数、缓存机制和调试方法。最后,简述了Linux的基础知识,如常用命令和文件系统。
摘要由CSDN通过智能技术生成

评测知识点(PHP基础,LINUX基础)

php基础:

 

  1. 语言语法基础语言语法基础

(基础语法太多了没办法总结)

 

  1. 反射

参考资料:

https://www.cnblogs.com/lonelyxmas/p/8183520.html http://php.net/manual/zh/book.reflection.php

定义:它是指在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。这种动态获取的信息以及动态调用对象的方法的功能称为反射API。

相关类:

Reflection

为类的摘要信息提供静态函数export()

ReflectionClass

类信息和工具

ReflectionMethod

类方法信息和工具

ReflectionParameter

方法参数信息

ReflectionProperty

类属性信息

ReflectionFunction

函数信息和工具

ReflectionExtension

PHP扩展信息

ReflectionException

错误类

 

相关操作:

ReflectionClass::export() 获取类信息提供类的几乎所有的信息,包括属性和方法的访问控制状态、每个方法需要的参数以及每个方法在脚本文档中的位置

ReflectionClass::getFileName()获取类的绝对路径。

ReflectionClass::getMethods()获得ReflectionMethod对象的数组。

ReflectionMethod::getDocComment()获取方法注释。

ReflectionMethod::getParameters()方法返回ReflectionParameter对象数组

 

使用场景:

权限添加

 

 

  1. 异常和错误处理机制

参考资料:

http://php.net/manual/zh/book.reflection.php

http://php.net/manual/zh/function.set-error-handler.php

http://php.net/manual/zh/function.register-shutdown-function.php

http://www.w3school.com.cn/php/php_exception.asp

http://php.net/manual/zh/language.errors.php7.php

 

PHP中什么是错误:

属于php脚本自身的问题,大部分情况是由错误的语法,服务器环境导致,使得编译器无法通过检查,甚至无法运行的情况。

 

PHP错误级别:

Fatal Error:致命错误(脚本终止运行)

Parse Error:编译时解析错误,语法错误(脚本终止运行)

Warning Error:警告错误(仅给出提示信息,脚本不终止运行)

Notice Error:通知错误(仅给出通知信息,脚本不终止运行)

 

自定义PHP错误处理:

set_error_handler($error_handler,$error_types);注册一个函数处理PHP的错误($error_handler:函数名称,$error_type错误等级),但不会一下级别的错误:E_ERROR、 E_PARSE、 E_CORE_ERROR、 E_CORE_WARNING、E_COMPILE_ERROR、 E_COMPILE_WARNING。自定义函数可接受到错误级别、错误信息、错误文件名、错误发生的行数、错误发生时用的的变量数组四个参数。

 

trigger_error($errmsg,$errtype)函数:

函数创建用户级别的错误消息。$errmsg:错误信息。$errtype:错误类型 E_USER_ERROR、E_USER_WARNING、E_USER_NOTICE(默认)。自定义错误可有上诉函数捕获。

 

register_shutdown_function()函数处理无法捕获的错误:

register_shutdown_function:注册一个会在PHP脚本执行完成之后调用的函数(包括因为错误导致的终止。可以注册多个函数,系统会依次调用)。使用 error_get_last()函数获取最后的错误信息,把错误信息传递给注册的函数可以处理一些致命的PHP错误。

 

PHP中什么是异常:

异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程。这种情况称为异常。我自己认为:业务上出现的错误都可以称之为异常。

 

异常产生与处理:

通过关键字throw抛出一个异常类。通过try-catch结构捕获异常。一个throw应该至少有个一个catch去捕获。也可以多个catch去捕获不同的异常。

 

set_exception_handler()函数:

注册一个函数,去处理未被捕获的异常。

 

错误异常统一处理思想:

PHP7以前:注册错误处理函数,把错误变成异常抛出,用异常处理机制统一处理。

PHP7:使用throwable类捕获异常,他可以捕获异常机错误。

 

  1. 正则表达式

参考资料:

http://www.runoob.com/regexp/regexp-syntax.html

https://www.cnblogs.com/mingxiastory/p/5426913.html

 

定义:描述了一种字符串匹配的模式

组成:正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成。

结构:分为三个部分,分隔符,表达式和修饰符。例如:/hello.+?hello/is。"/"就是分隔符。两个"/"之间的就是表达式,第二个"/"后面的字符串"is"就是修饰符。

 

元字符:

$

匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。

( )

标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。

*

匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。

+

匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。

.

匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。

[

标记一个中括号表达式的开始。要匹配 [,请使用 \[。

?

匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。

\

将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。

^

匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。

{

标记限定符表达式的开始。要匹配 {,请使用 \{。

|

指明两项之间的一个选择。要匹配 |,请使用 \|。

 

*

匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。

+

匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。

?

匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 、 "does" 中的 "does" 、 "doxy" 中的 "do" 。? 等价于 {0,1}。

{n}

n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。

{n,}

n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。

{n,m}

m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

限定符

 

 

 

定位符

^

匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配。

$

匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配。

\b

匹配一个单词边界,即字与空格间的位置。

\B

非单词边界匹配。

 

预定义字符集:

 “\d”-->[0-9]-->1位数字

 “\w”-->[0-9a-zA-Z_]-->1位字母,数字或_

 “\s”-->1位空字符:匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。

 “ . “: 除换行回车外的任何一个字符,如:

"a.[0-9]":表示一个字符串有一个"a"后面跟着一个任意字符和一个数字;
"^.{3}$":表示有任意三个字符的字符串(长度为3个字符)

\t--------匹配一个制表符   

 

 预定义字符的反义:预定义字符的大写形式都是小写的反义

 \D---->1位非数字字符

\S------匹配任何非空白字符。等价于 [^\f\n\r\t\v]。

\v------匹配一个垂直制表符

\n------匹配一个换行符

\r-------匹配一个回车符

 

其他匹配

[:alpha:]:匹配任何字母

[:alnum:]:匹配任何字母和数字

[:digit:]:匹配任何数字

[:space:]:匹配空格符

[:upper:]:匹配任何大写字母

[:lower:]:匹配任何小写字母

[:punct:]:匹配任何标点符号

[digit:]:匹配任何16进制数字

 

正则表达式的贪婪与非贪婪匹配

如:String str="abcaxc";

Patter p="ab.*c";

贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式p匹配字符串str,结果就是匹配到:abcaxc(ab.*c)。

非贪婪匹配:就是匹配到结果就好,就少的匹配字符。如上面使用模式p匹配字符串str,结果就是匹配到:abc(ab.*c)。

默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式。

 

  1. PHP模板引擎

参考资料:

https://blog.csdn.net/sinat_30603081/article/details/77671685

https://www.jb51.net/article/66731.htm

https://blog.csdn.net/u013474436/article/details/50010955

https://www.baidu.com/link?url=7vjOo6xuy-RtYRnOd9z3EXPIXQ54Su0Z87DSCdVgnEZLsqiXaUZYyUrokO-hV38B&wd=&eqid=ff8f4c6f00007e2e000000055bfcbf27

 

 

定义:通过定义操作标签,将HTML页面与PHP完全分离的功能代码。

 

六中模板引擎:

Smarty算是一种很老的PHP模板引擎了,它曾是我使用这门语言模板的最初选择。虽然它的更新已经不算频繁了,并且缺少新一代模板引擎所具有的部分特性,但是它仍然值得一看。

Twig是来自于Symfony的模板引擎,它非常易于安装和使用。它的操作有点像Mustache和liquid。

HAML移植了同名的Ruby模板语言。注意,HAML使用的缩进模式(例如像Python)可能在最初会给你带来一定的困扰(而一旦你熟悉这种模式之后便会上瘾)。

Liquid生成Shopify(以及原始的Ruby),Liquid是在限制用户权限的同时又可使其自定义页面服务风格的完美语言。此外,这个语言是跨平台的,并且相同的模板可在PHP和Ruby中交替使用。

Mustache作为多种语言的模板,Mustache可以兼容所有能够想到语言的模板(例如,甚至包括bash)。

Plate受到Twig启发,重载了PHP的原生特性。如果你不想使用需要编译的模板语言,它可以为你大开方便之门。

 

我们大部分使用smarty模板引擎,TP内置的也是smarty模板引擎。这里只介绍一下smarty模板引擎。

Smarty:

1. 速度:采用smarty编写的程序可以获得最大速度的提高,这一点是相对于其它的模板引擎技术而言的。

2. 编译型:采用smarty编写的程序在运行时要编译成一个非模板技术的PHP文件,这个文件采用了PHP与HTML混合的方式,在下一次访问模板时将WEB请求直接转换到这个文件中,而不再进行模板重新编译(在源程序没有改动的情况下)

3. 缓存技术:smarty选用的一种缓存技术,它可以将用户最终看到的HTML文件缓存成一个静态的HTML页,当设定smarty的cache属性为true时,在smarty设定的cachetime期内将用户的WEB请求直接转换到这个静态的HTML文件中来,这相当于调用一个静态的HTML文件。

4. 插件技术:smarty可以自定义插件。插件实际就是一些自定义的函数。

5. 模板中可以使用if/elseif/else/endif。在模板文件使用判断语句可以非常方便的对模板进行格式重排。

 

运行原理:

其实所有的模板引擎的工作原理是差不多的,无非就是在php程序里面用正则匹配将模板里面的标签替换为php代码从而将两者混合为一个php的混编文件,然后执行这个混编文件。

 

例如:

<body> <div>{subject}</div> <div>{content}</div> </body>

 

通过smarty模板引擎改变为:

 

<body> <div><?php echo $subject ?></div> <div><?php echo $content ?></div> </body>

 

然后执行该文件。

 

还有许多其他的标签:

{if}{else}{/if} 为php 的 if {}else{}

{for}{/for} 为 php 的 for{}

 

  1. PHP网络函数

http://www.php.net/manual/zh/ref.network.php

https://blog.csdn.net/phphot/article/details/2755880

 

十个比较重要的网络函数:

 

getmxrr($hostname,$mxhosts):

 该函数用来恢复某个特定主机的MX(邮件交换记录)主机名称。用这个函数来确认某个域的邮件主机,通常以验证那个域上的一个邮箱开始。

 

 gethostbyaddr($ip):

该函数用来恢复与一个IP有关的主机名。用此函数执行一个逆DNS查找,把一个名称给某个IP地址——如记录您的网络服务器日志的IP地址。

 

 gethostbyname($name):

该函数与gethostbyaddr()函数互逆,恢复与主机有关的IP地址。用此函数执行一个标准的DNS查找,获得与IP地址有关的主机名——例如自动将有疑点的域列入黑名单时。

 

 p2long($ip)和long2ip($long):

这些函数将由符号连接的四个小于255的数字代表的IP地址转换成整数,或进行逆操作。

在您需要用整数格式表示IP地址(通常用于数字计算),或用IP地址表示数字格式时,应用这些函数。

 

checkdnsrr($host, $type)

该函数在DNS中检查与$host主机相符的$type类型记录,如发现,即返回布尔真值。用此函数检查主机中是否存在某个特定的DNS记录类型。

 

dns_get_record($host, $type):

该函数返回$host主机的DNS记录。可选的$type参数只可用来恢复那些与一个特定的类型匹配的子集。用此函数恢复某个特殊主机的详细DNS记录。

 

getprotobyname($num)和getprotobynum($name):

这些函数从泛系统/etc/protocols文件中恢复协议名称与号码。

用这些函数根据名称或号码来恢复系统协议信息。

 

 getservbyname($service, $protocol):

该函数利用$protocol协议,从泛系统/etc/services文件中为$service服务恢复端口号码。

用此函数自动获得运行系统服务的端口信息。

 

 inet_ntop($addr)和inet_pton($addr):

这些函数在二进制与人可读地址间转换IP地址。

用此函数在Ipv4/Ipv6地址字符串与二进制表达法间进行转换。

 

 syslog($level, $msg):

这个函数利用警告级别$level将$msg信息记录到系统日志设备中。

用此函数发布泛系统错误或警告。

 

  1. 缓存机制和优化

参考资料:

http://www.cnblogs.com/usa007lhy/p/5421545.html

 

PHP自带output buffer缓存。

首先output_buffering=On打开php缓存。

 

php自带缓存指令:

ob_start()  //开启缓存

ob_clean()  //清空缓存

ob_end_clean()  //清空缓存,关闭缓存

ob_flush() //刷新缓存(将缓存现有内容输出)

ob_end_flush()  //刷新缓存,并关闭缓存

$contents = ob_get_contents() //获得缓存内容

file_put_contents("d:/log.txt",$contents) //将缓存内容打印到文本

flush与ob_flush区别

flush()是输出程序缓存指令;

ob_flush()是输出自带缓存指令;

 

 

 

  1. 调试、单元测试压测

 

调试:平常调试都是使用var_dump(),exit(),断点输出。Php还有一个调试方法Xdebug扩展。

参考资料:

https://www.cnblogs.com/anyeshe/p/5746404.html

https://blog.csdn.net/kikajack/article/details/81021061

(只要安装方法,没有具体使用方法)

 

单元测试:单元测试是对单独的代码对象进行测试的过程,比如对函数、类、方法进行测试。在PHP领域,单元测试的工具主要有 PHPUNIT,PHPUNIT2和SimpleTest三种。

参考资料:

https://www.oschina.net/translate/php-unit-testing-with-phpunit

 

PHPUnit介绍:

PHPUnit是一个用PHP编程语言开发的开源软件,是一个单元测试框架。PHPUnit使用断言来告诉你你所测试的代码是否如你预期那样工作。

压测:

参考资料:

https://www.jianshu.com/p/ef4c1dc329bd

介绍:压力测试指的是检测项目同时能够承受最大的访问量。

 

方法:

ab的全称是Apache Bench,能够测试网站在一定时间内的发生高并发时的反应。用法:

ab -c 并发数 -n 请求数 URL。

ab参数:

-n  //在测试会话中所执行的请求个数。默认时,仅执行一个请求

-c  //一次产生的请求个数。默认是一次一个。(如果请求的总数是1000,请求的总用户是10,那么平均每个用户执行100次请求)

-t  //测试所进行的最大秒数。其内部隐含值是-n 50000。它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。

-p  //包含了需要POST的数据的文件.

-T  //POST数据所使用的Content-type头信息

-v  //设置显示信息的详细程度 – 4或更大值会显示头信息, 3或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。

-V  //显示版本号并退出。

-w  //以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。

-i    //执行HEAD请求,而不是GET。

-x attributes String to insert as table attributes//

-y attributes String to insert as tr attributes//

-z attributes String to insert as td or th attributes//

-C attribute Add cookie, eg. ‘Apache=1234. (repeatable)//-C cookie-name=value 对请求附加一个Cookie:行。 其典型形式是name=value的一个参数对。此参数可以重复。

-H attribute Add Arbitrary header line, eg. ‘Accept-Encoding: gzip’Inserted after all normal header lines. (repeatable)

-A attribute Add Basic WWW Authentication, the attributesare a colon separated username and password.

-P attribute Add Basic Proxy Authentication, the attributesare a colon separated username and password.//-P proxy-auth-username:password 对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。

-X proxy:port Proxyserver and port number to use-V Print version number and exit-k Use HTTP KeepAlive feature

-d Do not show percentiles served table.

-S Do not show confidence estimators and warnings.

-g filename Output collected data to gnuplot format file.

-e filename Output CSV file with percentages served

-h Display usage information (this message)//-attributes 设置 属性的字符串. 缺陷程序中有各种静态声明的固定长度的缓冲区。另外,对命令行参数、服务器的响应头和其他外部输入的解析也很简单,这可能会有不良后果。它没有完整地实现 HTTP/1.x; 仅接受某些’预想’的响应格式。 strstr(3)的频繁使用可能会带来性能问题,即, 你可能是在测试ab而不是服务器的性能。

 

  1. 数据库操作函数(以mysql为例,其他的数据库也有扩展函数)

参考资料:

https://www.cnblogs.com/shenzikun1314/p/8336207.html

 

PHP链接mysql三种方法:

PHP的MySQL扩展是设计开发允许php应用与MySQL数据库交互的早期扩展。MySQL扩展提供了一个面向过程的接口,并且是针对MySQL4.1.3或者更早版本设计的。因此这个扩展虽然可以与MySQL4.1.3或更新的数据库服务端进行交互,但并不支持后期MySQL服务端提供的一些特性。由于太古老,又不安全,所以已被后来的mysqli完全取代;

PHP的mysqli扩展,我们有时称之为MySQL增强扩展,可以用于使用 MySQL4.1.3或更新版本中新的高级特性。其特点为:面向对象接口 、prepared语句支持、多语句执行支持、事务支持 、增强的调试能力、嵌入式服务支持 、预处理方式完全解决了sql注入的问题。不过其也有缺点,就是只支持mysql数据库。如果你要是不操作其他的数据库,这无疑是最好的选择。

PDO是PHP Data Objects的缩写,是PHP应用中的一个数据库抽象层规范。PDO提供了一个统一的API接口可以使得你的PHP应用不去关心具体要连接的数据库服务器系统类型,也就是说,如果你使用PDO的API,可以在任何需要的时候无缝切换数据库服务器,比如从Oracle 到MySQL,仅仅需要修改很少的PHP代码。其功能类似于JDBC、ODBC、DBI之类接口。同样,其也解决了sql注入问题,有很好的安全性。不过他也有缺点,某些多语句执行查询不支持(不过该情况很少)。(PDO能够支持mysql、sqlserver及oracle,PostgreSQL SQLite 3)

MySQL扩展访问数据库函数:

http://www.php.net/manual/zh/ref.mysql.php

 

MySQLI扩展访问数据库函数:

https://www.runoob.com/php/php-ref-mysqli.html

 

PDO访问数据库的方法:

https://www.runoob.com/php/php-pdo.html

 

  1. SQL注入漏洞防范。

参考资料:

https://www.cnblogs.com/mafeng/p/5939329.html

http://www.w3school.com.cn/php/func_string_addslashes.asp

https://www.jb51.net/article/49205.htm

http://www.cnblogs.com/mafeng/p/6306096.html

 

打开magic_quotes_gpc 

设置php配置magic_quotes_gpc = On自动把用户提交对sql的查询进行转换,比如把 ' 转为 \'等

 

addslashes()函数:

函数返回在预定义字符之前添加反斜杠的字符串。默认地,PHP 对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。所以您不应对已转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。

mysql_real_escape_string函数:

类似addslashes函数在预定义字符之前添加反斜杠的字符串但是addslashes不会检查编码。对不认识的编码字符也会去转义。mysql_real_escape_string函数修补了这一漏洞。mysql_real_escape_string 必须在(PHP 4 >= 4.3.0, PHP 5)的情况下才能使用。否则只能用 mysql_escape_string ,两者的区别是:mysql_real_escape_string 考虑到连接的当前字符集,而mysql_escape_string 不考虑。

参数化查询

在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部份来处理,而是在数据库完成SQL指令的编译后,才 套用参数运行,因此就算参数中含有指令,也不会被数据库运行。Access、SQL Server、MySQL、SQLite等常用数据库都支持参数化查询。pdo,mysqli支持参数化查询)。

其他:

对传入的参数进行数据类型的验证,长度的验证,使用str_place替换调特殊字符。如把%替换为\%,等等,也可以简单的防止注入。

 

  1. PHP扩展开发

参考资料:

http://www.php.cn/php-weizijiaocheng-392678.html

https://www.cnblogs.com/boystar/p/6904795.html

(扩展看不同,真的复杂,上面两个链接敬请参考)

 

 

LINUX知识点

 

  1. 常用命令

参考资料

https://www.cnblogs.com/fnlingnzb-learner/p/5831284.html

 

cd

ls

ls -F 查看目录中的文件 
ls -l 显示文件和目录的详细资料 
ls -a 显示隐藏文件

mkdir dir1 dir2 同时创建两个目录 

mv dir1 new_dir 重命名/移动 一个目录 
cp file1 file2 复制一个文件 

find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录 

Whereis 该指令只能用于查找二进制文件、源代码文件和man手册页

groupadd group_name 创建一个新用户组 

useradd user1 创建一个新用户 

passwd 修改口令 

chmod 修改权限

chown 修改所属组所属人

Cat 获取文件内容

Vi vim 编辑文件

rm 删除

shutdown 关机

Reboot 重启

Man 查看命令的信息的命令

命令有很多,我在操作linux过程中这些命令觉得比较基础需要去记住。

 

  1. 网络操作

https://blog.csdn.net/WXXGoodJob/article/details/72642516

https://www.cnblogs.com/tian-yong/p/4497324.html

https://blog.csdn.net/li_101357/article/details/70256411

 

 

  1. 常用工具

https://blog.csdn.net/li_101357/article/details/70256411

https://blog.csdn.net/click_idc/article/details/80496541

 

 

 

  1. 文件系统

参考资料:鸟哥linux私房菜。

https://www.cnblogs.com/alantu2018/p/8461749.html

https://www.linuxprobe.com/linux-system-structure.html

 

 

 

系统:EXT2,EXT3

 

组成:super block,inode,block,inode bitmap,block bitmap

 

Super block:

超级快,记录总体信息,inode/block总量、剩余量,文件系统格式等。

 

Inode:

文件的头,记录文件属性,权限,block地址。一个文件一个inode。128bytes

 

Block:

实际文件的内容。根据文件系统规定大小。(EXT2 系统block具有4k大小。EXT3有8k)。

 

Inode和block关系。Inode直接记录12个block的地址信息,这十二个block记录具体内容和下一个block地址信息。这种关系只有三层。所以EXT2每个文件最大16GB。

(上面是我看鸟哥的书简单理解的,文件系统很复杂,有兴趣看一下链接,第二个链接个人认为很好)

 

  1. 常用软件编译安装

参考地址:

https://blog.csdn.net/anantie/article/details/68954118

 

编译过程图解

 

步骤:

  1. 执行configure脚本

--help:获得其支持使用的选项

--prefix=/PATH/TO/SOMEWHERE:指定默认安装位置;默认为/usr/local/; --sysconfdir=/PATH/TO/SOMEWHERE:配置文件安装位置; --enable-FEATURE[=ARG]:开启指定特性以及安装路径;默认开启时无须指定; --disable-FEATURE:关闭指定特性;默认关闭时无须指定; --with-PACKAGE[=ARG]:安装指定依赖包以及其安装路径; --without-PACKAGE:不安装指定依赖包;

 

执行configure脚本的作用: 
①用户可以通过选项传递参数给configure脚本,以指定启用的功能特性、安装路径等;而configure脚本在执行的过程中会参考用户的指定以及Makefile.in文件生成makefile文件; 
②检查程序指定要启用的功能特性所依赖到的外部环境。

2,执行make程序

make会执行真正的编译操作,但make本身并不是编译器,它只是一个项目构建工具,make程序会根据执行configure脚本所生成的makefile文件,并调用所需要用到的编译器来构建应用程序

3,执行make install安装

在前面的make程序执行之后,在当前目录下会创建出已编译完成的

标二进制格式的应用程序(包括二进制程序、库文件、配置文件及帮助文档等),而make install则会执行安装操作,即把当前目录下已编译好的程序包(二进制程序、库文件、配置文件及帮助文档等)复制到用户指定的各个目录下。

(编译安装完成,还有编译后的配置可以链接查看)

 

  1. Shell编程

参考资料:

http://wiki.ubuntu.org.cn/Shell%E7%BC%96%E7%A8%8B%E5%9F%BA%E7%A1%80

 

什么是shell编程:shell编程就是对一堆Linux命令的逻辑化处理。就是命令的合集

用途:

对常用的linux操作进行功能的封装,工作变得容易、简单、高效。

 

shell编程中分为两种变量,第一种是我们自己定义的变量(自定义变量),第二种是Linux已定义的环境变量(环境变量, 例如:$PATH, $HOME 等..., 这类变量我们可以直接使用)定义变量不用$符号,使用变量要加$就行了。“=”左右千万不要有空

变量赋值:a="hello world"

 

变量算数:

a="hello world"

 

if 语句

if 

  判断命令,可以有很多个,真假取最后的返回值then

  如果前述为真做什么[ # 方括号代表可选,别真打进去了!elif

  可以再来个判断,如果签名为假继续尝试这里then

  如果前述为真做什么 ]else

  如果全都不行做什么fi # 结束,就是倒写的 if 啦。

 

select 循环语句

pocket=()select var in 跳跳糖 糖 很多糖 企鹅糖; do

  echo "除了 $var 还要什么吗?"

  if ((RANDOM%4 == 0)); then

    echo "呀!时间不够了,快上车!"

    break # break 还是那个 break

  fi

  pocket+=("$var")doneecho "你最后说的那个 $var 弄丢了……"IFS='、'echo "现在口袋里只有:${pocket[*]}。"IFS=$' \t\n'

 

while/for 循环

while ...; do

   ....done

 

for var in ....; do

   ....done

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值