编译LFS

成功编译并运行linux from scratch 7.7 system,有必要作下总结。
本次用的编译LFS的环境是:

虚拟机是virtalbox
宿主系统为CentOS 7.0 x86_64 (core版本)
LFS版本为 7.7 system

我用两块硬盘,一块安装宿主系统,另一个作为LFS的编译安装盘,编译成功后,脱离宿主系统那块硬盘,单独引导启动LFS linux的那块硬盘,登录进入LFS linux。

虚拟机上安装好centos后,在虚拟机上加一块硬盘,大小20G左右,分区如下

sdb1分100多M以后打算给/boot的单独分区,sdb2给swap分区,sdb5 作为系统根目录。
然后根据LFS手册说明创建好文件系统,把sdb5挂载到/mnt/lfs作为工作目录。按手册下载源文件,创建目录,配置环境等,就开始编译工具链,编译工具链有几个地方需要注意
1,手册中所有的软件编译命令都默认在解压出来的软件目录中进行,也就是说必须先用tar解压,再cd进行软件目录。
2,编译完成后用”cd .. “退出软件目录,回到source目录
3,除非特别说明,删除解压出来的目录和所有编译过程中生成的 <package>-build 目录。也就是说编译成功后把解压出来的源文件目录删除,如果有build目录,也要删除,以免影响下下编译。

编译工具链的系统基础软件都很顺利。

由于打算给/boot单独的分区,在编译内核之前,在chroot环境中,先挂载sdb1分区到/boot目录

这样编译出来的kernel就会安装到sdb1分区上。

接下配置grub启动

完成后,一切看上去已经很OK,于是把宿主系统的那块硬盘卸掉,单独启动LFS linux,也成功出现了系统菜单选择,选择后回车后傻眼了,提示找不到分区。

通过grub命令发现,硬盘是hd0,而不是hd1,原因很简单,原来宿主系统还是,宿主系统那块盘是hd0,LFS 系统的那块盘是hd1,而现在已经把宿主系统的硬盘卸掉了,只剩下一块LFS linux,理所当然是hd0。

于是在grub命令下,于是手动设置root和加载linux内核

成功加载内核并启动后,报这个错误,也是没发现sdb硬盘,这让我想到了/etc/fstab 的配置,里面还是sdb,没办在,登录不进系统。

于是关闭虚拟机,重新把宿主系统的那块硬盘加入,引导进入宿主系统,用chroot进入lfs环境,修改/etc/fstab文件如下:

在chroot环境中,把lfa linux的/boot分区挂进来,修改/boot/grub/grub.cfg文件,修改后内容如下

保存退出。

关闭系统,把宿主系统卸掉,只引导LFS linux盘,成功进入系统,用root登录,各功能都正常。

linux的sed命令

sed ,全名叫 stream editor,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等

 

使用

基本的执行流程是:按条件搜索,然后执行命令,条件用address来表示,命令用command表示

 sed [-nefr] ‘AddressCommand' file

参数:

-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。

-e :直接在命令列模式上进行 sed 的动作编辑;

-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;

-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)

-i :直接修改读取的文件内容,而不是输出到终端。

 

Address:

1.startline , endline 起始结束行

     如 1,10 表示1到10行

2,/RegExp/ 正则表达式

     /^root/ 表示以root字符串开头的行

3./pattern1/,/pattern2/,第一次被pattern1匹配到的行开始,到第一次被pattern2匹配到的行结束

     如:/hello/,/china/

4,lineNumber 指定的行

     如:3 表示第三行,$表示最后一行,$-1表示倒数第二行

5,startLine,+N 从startLine开始,向后的N行

     如:10,+5

 

Command:

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~

          例子:

          在包含了hello的行后面添加一行,内容为newline

         $ sed '/hello/a \# newline’ test.txt  

c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!

    …

linux常用

一,文件权限
chmod u+x test.txt
chmod u-x test.txt
chmod u=rwx test.txt
数字形式
chmod 755 test.txt
4 2 1
r w x
每一位用二进制表示
其中:
4表示二进制100
2表示二进制010
1表示二进制001

建立文件链接
ln
硬链接(与源文件一模一样,指向同一个目录,更链接无法给目录做链接)
ln -s test.txt test2.txt
删除源文件
rm -f test.txt
cat test2.txt
发现依然可以打开

ln 源文件 新建链接名
软链接(相当于给源文件建立快捷方式,软链接可以给目录做链接)
ln -s 源文件 新建链接名
ln -s test.txt test_l
链接建立后,修改源文件的内容
cho “hello world ” > test.txt
cat test_l
文件内容也会跟着改变
删除源文件后,就无法打开链接文件
rm -f test.txt
$ cat test_l
cat: test_l: No such file or directory

所属用户
每一个文件都有一个拥有者,文件拥有者可以改变文件的权限
root用户可以用chown来改变文件的拥有者,可以用chgrp 来更改文件的群组
chown user1 test.txt
chown user1:user1
chgrp user2 test.txt

二.标准输出
ls -l > list.file

错误输出
ls-l 2> err.file
ls-l 2>> err.file

双重输出重定向
find /Users/ -name passwd > stdout.file 2> stderr.file

使用&将输出到同一个文件
find /Users/ -name passwd &> out.file
find /Users/ -name passwd > stdout.file 2>&1

linux管道
使用 | 将前一个过滤器的输出直接送到后一个过滤器的输入,允许多个管道
比如
ls | grep pass
ls -l …

nginx屏蔽某些ip访问

最近发现很多奇怪的访问,比如访问xmlrpc.php文件,查了一下,是一种暴力破解攻击的行为。还有很多访问404的页面,也很可能是一种不正常访问行为。

面对这些行为,首先要做的就是博客密码的密码,尽可能地设置复杂密码,提高破解的难度。

还有一种技术手段,就是屏蔽掉该ip(然并卵,换个ip一样能访问),也能只看到一个屏蔽一个了。

我用是nginx服务器,需要在nginx的目录下(其它目录也可以)创建blockips.conf文件,加入以下代码。

在http中加入代码

保存后,重启nginx即可,被屏蔽的ip访问时,会跳到

403 Forbidden

页面