linux-杂货铺

chroot 与 jail

chroot是内核中的一个系统调用,软件可以通过调用库函数chroot,来更改某个 进程所能见到的根目录。例如nsd安装在 /etc/nsd 路径下,以root用户(权限相同用户)启动nsd的服务,nsd会派生出多个以nobody权限运行的子进程,父进程监听端口53,然后将请求分配给子进程进行处理,此时子进程继承自父进程,因此可访问目录也是/etc/nsd.

因为权限设置失误,若nsd的某个子进程遭到攻击,则其可访问的范围可以从/etc/nsd 直至根目录,从而访问到整个服务器,因此需要将nsd相关的访问目录限制在/etc/nsd下,构成
jail。创建chroot“监牢”的作用就是将进程权限限制在文件系统目录树中的某一子树中。

chroot jail技术与虚拟机制有什么不同?

Chroot Jail是操作系统级别(Operating-system-level)的虚拟化技术,通常被用于在主机系统上创建多个相互独立的实例( instances)。和工作在应用层的虚拟机(Virtual Machines)相比,它是内核级别的虚拟化,几乎不占用的系统开销,所以在相同的硬件上,它比用虚拟机来创建多个独立实例(isolated instances)要好得多。虚拟机(VM)则是机器的软件实现,它们经常利用所谓的硬件虚拟化来呈现正在工作的操作系统的虚拟映像。

linux命令

查看进程 ps -ef | grep nsd

查看nsd进程的运行情况

UID   PID   PPID    C    STIME   TTY    TIME     CMD
zzw  14124  13991   0    00:38   pts/0  00:00:00 grep --color=auto dae
  • UID: 程序被该 UID(用户)所拥有
  • PID: 就是这个程序的 ID
  • PPID: 则是其上级父程序的ID
  • C: CPU使用的资源百分比
  • STIME: 系统启动时间
  • TTY: 登入者的终端机位置
  • TIME: 使用掉的CPU时间
  • CMD: 所下达的是什么指令

包管理

  • rpm -qa : 查询一个包是否被安装 q-query a-all

文件查看

  • cat: 查看文件内容,内容整个显示在页面
  • more: more命令和cat的功能一样都是查看文件里的内容,但有所不同的是more可以按页来查看文件的内容,还支持直接跳转行等功能。
  • less: less [参数] 文件 查看文件内容,一页页显示,可以pagedw,pageup

下载命令

curl: curl是基于URL语法在命令行方式下工作的文件传输工具

curl "http://cmccyum.4ggogo.com/yum/cmcc.repo" -o /etc/yum.repos.d/cmcc.repo
下载cmcc.repo 并将输出写到 /etc/yum.repos.d/cmcc.repo

scp: 可以进行远程拷贝

不同的Linux之间copy文件常用有3种方法:

第一种就是ftp,也就是其中一台Linux安装ftp Server,这样可以另外一台使用ftp的client程序来进行文件的copy。

第二种方法就是采用samba服务,类似Windows文件copy 的方式来操作,比较简洁方便。

第三种就是利用scp命令来进行文件复制。scp是有Security的文件copy,基于ssh登录。相比于CP命令,主要就是在source跟dest之前加上remote_username@remote_ip:,通过加的位置的不同区分出到底从远程到本地还是本地到远程。本地到远程:scp local_file remote_username@remote_ip:remote_folder

tailf /var/log/nsd/nsd.log 文件跟踪命令 tailf

Linux 目录

  • /: 根目录 从任何位置执行 cd / 都会进入根目录,所有用户共享

  • /home: 家目录 cd /home 显示当前用户目录列表

  • ~: 当前用户的家目录 在root用户下 cd ~ 等价于 cd /root; 在 zyp 用户下等价于 cd /home/zyp

  • pwd: print working directory 绝对路径方式显示当前用户的工作路径

/opt/目录和/usr/local/的区别

opt: 第三方软件放置的目录(非原本distribution提供的软件)

/opt目录用来安装附加软件包,是用户级的程序目录,可以理解为D:/Software。安装到/opt目录下的程序,它所有的数据、库文件等等都是放在同个目录下面。opt有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接rm -rf掉即可。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用。

/usr/local目录

  • /usr:Unix Software Resource 系统级的目录,可以理解为C:/Windows/。 Linux目录配置标准(FHS)建议所有开发者将数据合理的分别放置在 /usr/ 这个目录的子目录下,而不要自行新建该软件自己的独立目录。
  • /usr/lib:理解为C:/Windows/System32。
  • /usr/local:用户级的程序目录,可以理解为C:/Progrem Files/。用户自己编译的软件默认会安装到这个目录下。
    这里主要存放那些手动安装的软件,即不是通过“新立得”或apt-get安装的软件。它和/usr目录具有相类似的目录结构。让软件包管理器来管理/usr目录,而把自定义的脚本(scripts)放到/usr/local目录下面。

其实安装软件程序并不是非要在指定的目录下完成,安装java、tomcat等也可以安装在opt目录下,但是安装程序的扩展性和管理性来说,方便使用才是最好的。总结opt目录和usr/local目录就是/usr/local下一般是你安装软件的目录,这个目录就相当于在windows下的programefiles这个目录。/opt这个目录是一些大型软件的安装目录,或者是一些服务程序的安装目录 。

源码放哪里

/usr/src:系统级的源码目录。
/usr/local/src:用户级的源码目录。

Linux 查找命令

  • which: 在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果
  • whereis: 只能用于程序名的搜索
  • whatis: 用于查询一个命令执行什么功能,并将查询结果打印到终端上
  • locate: 用来查找文件或目录,locate命令其实是find -name的另一种写法,但是locate要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息, 有时候运行locate命令会出现错误,显示没有这个文件或文件夹,这时候需要用 updatedb 来更新数据库,因为该数据库每天更新一次。
  • find: 在指定目录下查找文件。 find <指定目录><指定条件><指定动作>
  • grep: 全目录全文搜索

安装软件命令

grep: grep [-achinv] [–color=auto] ‘搜寻字符串’ filename 分析一行信息,若该行有搜寻的字符串,则拿出该行,搜寻字符串可以是正则表达式

选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 ‘搜寻字符串’ 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行
–color=auto :可以将找到的关键词部分加上颜色的显示喔
使用教程: https://www.cnblogs.com/tlnshuju/p/7106790.html

Linux环境下安装nginx

https://blog.csdn.net/qq_30038111/article/details/79410354
当前已安装并且设置了环境变量

Linux 磁盘映射

ref: https://blog.csdn.net/XiaoMu_Mu/article/details/80972863
文件共享功能是通过samba协议完成的,Windows系统一般都默认打开了samba,Linux则需要自己安装

  1. 在linux下使用 whereis samba 搜索查看是否安装了samba
  2. 打开samba的conf vim /etc/samba/smb.conf 文件来告诉系统需要共享哪些文件
  3. 修改 smb.conf
  6 [global]
  7         workgroup = SAMBA
  8         security = user
  9 
 10         passdb backend = tdbsam
 11 
 12         printing = cups
 13         printcap name = cups
 14         load printers = yes
 15         cups options = raw
 16 
 17 [homes]
 18         comment = Home Directories
 19         valid users = %S, %D%w%S
 20         browseable = No
 21         read only = No
 22         inherit acls = Yes
 23 
 24 [printers]
 25         comment = All Printers
 26         path = /var/tmp
 27         printable = Yes
 28         create mask = 0600
 29         browseable = No
 30 
 31 [print$]
 32         comment = Printer Drivers
 33         path = /var/lib/samba/drivers
 34         write list = @printadmin root
 35         force group = @printadmin
 36         create mask = 0664
 37         directory mask = 0775
 38 [zhangyangping]
 39         comment = dir for zyp
 40         path = /root/zhangyangping
 41         write list = root
 42         create mask = 0664
 43         directory mask = 0775
  1. 启动脚本启动服务
/etc/init.d/nmbd restart
/etc/init.d/smbd restart

公钥和私钥

https://www.cnblogs.com/tlnshuju/p/7106790.html
比如有两个用户Alice和Bob,Alice想把一段明文通过双钥加密的技术发送给Bob, 应该是Alice 和Bob都有一对公钥和私钥,那么加密解密的过程如下:

  1. Bob将他的公开密钥传送给Alice,Alice将自己的公钥给Bob
  2. Alice用Bob的公开密钥加密她的消息,并且加上自己的私钥(数字签名),然后传送给Bob。 3. Bob用他的私人密钥和Alice的公钥解密Alice的消息。 Bob用Alice的公钥解密证明是Alice发的,用自己的私钥解开肯定是自己的公钥加密的。
    公钥和私钥是成对的,它们互相解密。
  3. 2中Alice私钥加密的内容最好是MD5签名后的明文,这样可以验证明文是否被动过

公钥加密,私钥解密。
私钥数字签名,公钥验证。
信息经公钥加密以后,在公共信道上传输,大家都可以截取到加密后的内容,但是只有拥有私钥的人才能将加密后的内容解密回复为原始信息,保证了通信过程的安全性。

IO模式

https://www.cnblogs.com/zingp/p/6863170.html

阻塞IO、非阻塞IO、异步IO

一次IO访问(以read为例),用户首先发起read请求,内核会接收这一请求然后去磁盘读取数据,数据首先 从磁盘读入内核缓冲区,接着从内核缓冲区拷贝到 应用程序缓冲区,最后从应用程序缓冲区给入 进程。因此一个read操作会经历两个过程:

  1. 等待数据准备 (磁盘->内核)
  2. 等待数据拷贝 (内核->应用程序)

这两个过程都会由于等待数据而产生阻塞,由此而产生三种IO模式:

  • 阻塞IO:用户进程发起IO请求后就阻塞进程,进入阻塞态,等待用户数据,直到数据拷贝到用户空间,解除阻塞。
  • 非阻塞IO:发起IO请求,若内核返回error,表明数据未准备好,则继续发请求,直到得到OK
  • 异步IO:发起IO请求后,继续执行其他流程,内核收到请求后立刻返回数据未准备好,然后内核会等待数据准备,并拷贝到用户内存后,发出signal,提醒进程read完成。

IO多路复用机制

用select, poll, epoll监听多个io对象,当io对象有变化(有数据)的时候就通知用户进程。
select/epoll的优势并不是对于单个连接能处理得更快,而是在于能处理更多的连接。
I/O多路复用的本质就是用select/poll/epoll, 去监听多个socket对象,如果其中的socket对象有变化,只要有变化,用户进程就知道了

  • select是不断轮询去监听的socket,socket个数有限制,一般为1024个;
  • poll还是采用轮询方式监听,只不过没有个数限制;
  • epoll并不是采用轮询方式去监听了,而是当socket有变化时通过回调的方式主动告知用户进程

select select收到通知有数据ready,程序无差别轮询所有流

同时观察许多流的I/O事件,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有I/O事件时,就从阻塞态中醒来,于是我们的程序就会轮询一遍所有的流。

  1. 当用户进程调用了select,那么整个进程会被block;
  2. 而同时,kernel会“监视”所有select负责的socket;
  3. 当任何一个socket中的数据准备好了,select就会返回;
  4. 这个时候用户进程再调用read操作,将数据从kernel拷贝到用户进程。

优势:一个进程同时等待多个IO,任何一个数据准备好即可返回

pool 与select相同,只是没有监听的流的个数限制

epoll event poll事件驱动,会把哪个流发生了怎样的I/O事件通知我们,可以有目的性的操作流

Linux下的IO复用与epoll: https://www.cnblogs.com/lojunren/p/3856290.html

epoll是通过内核与用户空间mmap同一块内存实现的。mmap将用户空间的一块地址和内核空间的一块地址同时映射到相同的一块物理内存地址(不管是用户空间还是内核空间都是虚拟地址,最终要通过地址映射映射到物理地址),使得这块物理内存对内核和对用户均可见,减少用户态和内核态之间的数据交换。内核可以直接看到epoll监听的句柄,效率高。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值