Linux鸟哥私房菜 笔记六

in Linux with 0 comment

认识系统服务 daemons

系统服务daemons分类

  1. stand_alone:此 daemon 可以自行单独启动服务

这种类型的 daemon 可以自行启动而不必透过其他机制的管理; daemon 启动并加载到内存后就一直占用内存与系统资源
因为是一直存在内存内持续的提供服务, 因此对于发生客户端的要求时,stand alone 的 daemon 响应速度较快,如httpd,php-fpm,nginx,mysqld等

  1. super daemon: 一支特殊的 daemon 来统一管理系统服务 super daemon 可以具有安全控管的机制

这一种服务的启动方式则是藉由一个统一的 daemon 来负责唤起服务

当没有客户端的要求时,各项服务都是未启动的情况,等到有来自客户端的要求时, super daemon 才唤醒相对应的服务。当客户端的要求结束后,被唤醒的这个服务也会关闭并释放系统资源,如telnet等

Super daemon的运行示意图

image

super daemon 的处理模式

  1. multi-threaded (多重线程)

  2. single-threaded (单个线程)

两者区别见下

image

左侧为多重运行的方式, daemon 会一直被触发多支程序来提供不同 client 的服务,所以不论你是第几个登陆者, 都可以享用 daemon 的服务。至于右侧则是单一运行的方式,仅会有一支 daemon 被唤醒,第一个用户达成联机后, 后续想要联机的用户就得要等待,因此她们的联机不会成功的

daemon 的命名守则

每一个服务的开发者,当初在开发他们的服务时,都有特别的故事啦!不过,无论如何,这些服务的名称被创建之后,被挂上 Linux 使用时,通常在服务的名称之后会加上一个 d ,例如例行性命令的创建的 at, 与 cron 这两个服务, 他的程序文件名会被取为 atd 与 crond,这个 d 代表的就是 daemon 的意思

服务与端口的对应

linux系统中所有的服务都是由程序来提供的,因此由linux提供的网络服务也是由网络程序来提供的,单就linux提供的网络服务而言,ip是个很重要的东西,它就好比门牌号,可以让客户端找到你,但linux可以同时提供很多的网络服务,当客户端连接过来时,linux是如何辨别的呢.那就是端口了(port number),因此端口主要是为了服务linux上有关网络程序的处理机制的.

如:

  1. http://ftp.isu.edu.tw/

  2. ftp://ftp.isu.edu.tw/

两个网址都是指向 ftp.isu.edu.tw 这个义守大学的 FTP 网站,但是浏览器上面显示的结果却是不一样的,why ?
因为这两个请求是请求两个不同的服务(program),一个是apache提供的http服务,一个是vsftpd提供的ftp服务,如下

image
port 与 daemon 的对应,客户端连接协议不同,服务导向端口号亦不同

事实上,为了统一整个internet的端口号与对应服务的功能,让所有的主机都用相同的机制与处理请求与发起请求,所以就有了通讯协议这个东东,也就是说所有约定俗成的服务都放置在同个端口上面.如www的80端口, ssh的22端口,ftp的21端口等.

那么系统服务与端口号怎么对应的呢

可以看到端口与对应的网络服务,端口后边可以看到有两个数据封包协议 tcp/udp

tcp: 可靠联机面向连接的 TCP 封包,传说中的三次握手,比较可靠
upd: 较快速但为非面向连接的 UDP 封包

UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收
当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议

root@test-month:/var/log#  /etc/services
tcpmux      1/tcp               # TCP port service multiplexer
echo        7/tcp
echo        7/udp
discard     9/tcp       sink null
discard     9/udp       sink null
systat      11/tcp      users
daytime     13/tcp
daytime     13/udp
netstat     15/tcp
qotd        17/tcp      quote
msp     18/tcp              # message send protocol
msp     18/udp
chargen     19/tcp      ttytst source
chargen     19/udp      ttytst source
ftp-data    20/tcp
ftp     21/tcp
fsp     21/udp      fspd
ssh     22/tcp              # SSH Remote Login Protocol
ssh     22/udp
telnet      23/tcp
smtp        25/tcp      mail
time        37/tcp      timserver
time        37/udp      timserver
rlp     39/udp      resource    # resource location
nameserver  42/tcp      name    
..
.
下边省略

系统服务启动

/etc/init.d/nginx restart
service nginx restart #这个最终还是调用 /etc/init.d/nginx restart 来启动的

root@test-month: ll /etc/init.d
可见mysql*这些都是可执行的shell script,下边的命令会在case....esac中寻找对应的section,从而执行相关动作
-rwxr-xr-x  1 root root 10880 Aug 17 11:06 mysql*
-rwxr-xr-x  1 root root  4479 Mar 21  2014 networking*
-rwxr-xr-x  1 root root  2652 Aug 17 11:17 nginx*
-rwxr-xr-x  1 root root  1581 Feb 17  2016 ondemand*
-rwxr-xr-x  1 root root  2354 Aug 17 11:16 php-fpm*
-rwxr-xr-x  1 root root   561 Apr 22  2015 pppd-dns*
-rwxr-xr-x  1 root root  1192 May 27  2013 procps*
-rwxr-xr-x  1 root root  6120 Mar 13  2014 rc*
-rwxr-xr-x  1 root root   782 Mar 13  2014 rc.local*
-rwxr-xr-x  1 root root   117 Mar 13  2014 rcS*
-rw-r--r--  1 root root  2427 Mar 13  2014 README
-rwxr-xr-x  1 root root   639 Mar 13  2014 reboot*
-rwxr-xr-x  1 root root  2918 Jun 13  2014 resolvconf*

显示系统所有开启的服务(daemons)
service --status-all

root@test-month:/var/log# service --status-all #ubuntu下
 [ + ]  acpid
 [ + ]  apparmor
 [ ? ]  apport
 [ + ]  atd
 [ ? ]  console-setup
 [ + ]  cron
 [ ? ]  cryptdisks
 [ ? ]  cryptdisks-early
 [ - ]  dbus
 [ ? ]  dns-clean
 [ + ]  friendly-recovery
 [ - ]  grub-common
 [ ? ]  irqbalance
 [ ? ]  killprocs
 [ ? ]  kmod
 [ - ]  landscape-client
 [ ? ]  mysql
 [ ? ]  networking
 [ + ]  nginx
 [ ? ]  ondemand
 [ + ]  php-fpm
 [ ? ]  pppd-dns
 [ + ]  procps
 [ ? ]  rc.local
 [ + ]  resolvconf
 [ - ]  rsync
 [ + ]  rsyslog
 [ ? ]  screen-cleanup
 [ ? ]  sendsigs
 [ + ]  ssh
 [ - ]  sudo
 [ + ]  udev
 [ ? ]  umountfs
 [ ? ]  umountnfs.sh
 [ ? ]  umountroot
 [ - ]  unattended-upgrades
 [ - ]  urandom

认识与分析登录文件

-rw-------  1 root root   17553 Dec 21 08:23 messages-demo

[root@changda log]# lsattr messages-demo 
-------------e-- messages-demo
添加chattr +a后不能编辑(vi)不能删除,即使是root,仅能被添加,即可以被写入
对比于chattr +i 这个数据连添加都不行了
[root@changda log]# chattr +a messages-demo

[root@changda log]# lsattr messages-demo 
-----a-------e-- messages-demo
rsyslog.conf尽量不要用vi去编辑,如果出问题了记得reload
[root@changda log]# rm -rf messages-demo 
rm: cannot remove ‘messages-demo’: Operation not permitted

/var/log下的wtmp日志记录的是成功登录信息,读取的时候用last,不能直接
[root@changda log]# last -n 5 -f wtmp 
root     pts/0        116.226.250.56   Thu Dec 22 01:08   still logged in   
root     pts/1        116.247.96.94    Wed Dec 21 01:57   still logged in   
root     pts/1        114.92.66.136    Mon Dec 19 14:40 - 14:55  (00:14)    
root     pts/1        114.92.66.136    Mon Dec 19 13:22 - 13:53  (00:31)    
root     pts/1        114.92.66.136    Mon Dec 19 10:39 - 11:00  (00:21)

显示每个帐户最近一次登录的信息
[root@changda log]# lastlog
Username         Port     From             Latest
root             pts/0    116.226.250.56   Thu Dec 22 01:08:36 +0000 2016
bin                                        **Never logged in**
daemon                                     **Never logged in**
adm                                        **Never logged in**
lp                                         **Never logged in**
sync                                       **Never logged in**
shutdown                                   **Never logged in**
halt                                       **Never logged in**
mail                                       **Never logged in**
operator                                   **Never logged in**
games                                      **Never logged in**
ftp                                        **Never logged in**
nobody                                     **Never logged in**
avahi-autoipd                              **Never logged in**
systemd-bus-proxy                           **Never logged in**
systemd-network                            **Never logged in**
dbus                                       **Never logged in**
polkitd                                    **Never logged in**
tss                                        **Never logged in**
postfix                                    **Never logged in**
sshd                                       **Never logged in**

rsync镜像工具把/root/demo目录镜像到/tmp下的demo目录
用法: rsync -av 来源目录 目标目录
[root@changda tmp]# rsync -av /root/demo /tmp

输出年-月-日-时-分-秒
[root@changda tmp]# date +%Y-%m-%d-%H-%M-%S
2016-12-22-02-41-09

export配置环境变量,只在当前session中有效
[root@changda tmp]# export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/.local/bin:/root/bin"
cp -a 一次备份多个文件或目录 
[root@changda tmp]# cp -a /tmp/{demo,aa} /tmp/test

X Window 配置介绍

通常我们也称文本模式为终端机接口, terminal 或 console喔!Linux默认的情况下会提供六个Terminal来让使用者登陆, 切换的方式为使用:[Ctrl] + [Alt] + [F1]~[F6]的组合按钮。

在Linux默认的登陆模式中,主要分为两种,一种是仅有纯文本接口(所谓的运行等级run level 3)的登陆环境,在这种环境中你可以有tty1~tty6的终端界面,但是并没有图形窗口接口的环境喔。 另一种则是图形接口的登陆环境(所谓的运行等级run level 5),这也是我们第四章安装妥当后的默认环境! 在这个环境中你就具有tty1~tty7了!其中的tty7就是启动完成后的默认等待登陆的图形环境!

其实我们都是透过『程序』在跟系统作沟通的,本章上面提到的窗口管理员或文本模式都是一组或一只程序在负责我们所想要完成的命令。 文本模式登陆后所取得的程序被称为壳(Shell),这是因为这支程序负责最外面跟使用者(我们)沟通,所以才被戏称为壳程序! 更多与操作系统及壳程序的相关性可以参考第零章、计算器概论内的说明。

Modeline "1024*768_75.00" 81.80 1024 1080 1192 1360 768 769 772 802 -HSync+VSync

X window system 的 X server 最初由 XFree86 计画所开发,后来则由 Xorg 基金会所持续开发;
X window system 主要分为 X server 与 X client ,其中 X Server 在管理硬件,而 X Client 则是应用程序。

采用图形用户界面的操作系统/应用程序

Smalltalk
Mac OS
NEXTSTEP
OS X
Microsoft Windows
X Window System(类Unix OS、Linux)
BTRON
TownsOS
MSX-View
SX-Window
BeOS
Newton OS
Zaurus OS
Palm OS
iOS
Android
Firefox OS

了解:https://zh.wikipedia.org/wiki/X_Window%E7%B3%BB%E7%B5%B1 x windows system
https://zh.wikipedia.org/wiki/IOS   iOS
https://zh.wikipedia.org/wiki/Darwin_(%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F)  Darwin操作系统

必看
http://coolshell.cn/articles/105.html

了解mac os 
http://hi.hiing.net/2008/10/what-is-darwin.html

基础于GUI的操作系统与基于CLI的系统
graphical user interface GUI  command line interface CLI

windows xp是基于dos核心  centos是基于kernel核心,mac os 是基于XNU核心

事实上可以把基于GUI的操作系统理解为在核心基础上像 X windows system 只是一套大型套件架构成核心基础之上,方便操作而已

操作系统与硬件架构息息相关,每个操作系统只能针对特定的硬件,在2006年以前的苹果计算机公司是请IBM公司帮忙开发硬件(所谓的Power CPU), 而苹果计算机公司则在该硬件架构上发展自家的操作系统(就是俗称的麦金塔,MAC是也)

在2006年以后,苹果计算机转而请Intel设计其硬件架构,亦即其硬件架构已经转为x86系统, 因此在2006年以后的苹果计算机若使用x86架构时,其硬件则『可能』可以安装Windows操作系统了。 不过,你可能需要自己想些方式来处理该硬件的兼容性

linux 核心编译与管理

Linux内核的体积结构是单内核的、但是他充分采用了微内核的设计思想、使得虽然是单内核、但工作在模块化的方式下、并且这个模块可以动态装载或卸载;[modprobe 命令,insmod,rmmod,lsmod]

Linux负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。如是我们在了解Linux内核的基础上根据自己的需 要、量身定制一个更高效,更稳定的内核,就需要我们手动去编译和配置内核里的各项相关的参数和信息了

内核:系统上面的一个文件,这个文件包含了驱动主机各项硬件的检测程序和驱动模块。计算机真正工作的是硬件,内核是用来控制这些硬件工作的(主要通过硬件驱动),如果我们需要硬件来完成某项工作时需要内核的帮助才能完成

内核模块:编译成模块的驱动程序。既然内核中已经包括了驱动程序[/kernel/drivers],那么为什么需要驱动模块呢[/kernel/*]。因为硬件发展很快,如果一有新的硬件出现,就需要重新编译内核就会很麻烦,因此将部分驱动编译成内核模块,在内核需要的时候加载,这样就既可以保证新硬件的使用,也可以保证内核不会一出现新硬件就重新编译

linux内核编译步骤

用ubuntu 14.04 x86_64来测试
下载虚拟机安装时候提示下面错误

image

这是因为intel处理器默认出于安全考虑没有开启Virtualization Technology,开机F10进入bios开启之

安装时没有提示输入root的密码,因为Ubuntu的默认root密码是随机的,即每次开机都有一个新的root密码。

sudo passwd 输入当前用户的密码,enter后提示输入Enter new UNIX passwd类似的,连续输入两次就是root密码了

uname -r -->4.2.0-27-generic即核心版本是4.2的

到网站下载4.2.8版本的[鸟哥说这样一些Include,库文件变化不大,如果跳跃太大的话,可能库文件就不一样了] https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.2.8.tar.gz

cd /root
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.2.8.tar.gz
解压到/usr/src下 tar zxvf linux-4.2.8.tar.gz -C /usr/src
安装编译环境
apt-get install gcc g++ automake autoconf make libtool
清除环境
make mrproper
编译菜单配置文件
make menuconfig # 目的生成:/boot/底下存在一个名为 config-xxx 的文件,那个文件其实就是核心功能列表档
如: config-3.10.0-327.36.3.el7.x86_64 这个文件
make menuconfig 后会在 /usr/src/linux-4.2.8/ 底下产生一个名为 .config 的隐藏档, 这个文件就是
/boot/config-xxx ,如果不想麻烦的话直接复制/boot下的config-4.2.0-27-generic到/usr/src/linux-4.2.8/.config即可


error:Unable to find the ncurses libraries or the...
因为缺少ncurses库,安装之
CentOS:
yum install -y ncurses-devel
Ubuntu:
sudo apt-get install ncurses-dev

** 别人的总结**

如果编译是在远程连接上的话、make会出问题的、如果远程连接断开的话那运行的进程是不是也都断开了
这个make的进程一定是当前系统上运行的子进程、有些一旦父进程挂了、子进程也将不复存在
所以我们使用一个叫screen这个命令来操作,没安装自己安装上就是了、可以在一个窗口上启动n个虚拟的桌面,
即使退出了也会保留之前的内

指定-j参数加快编译速度

make bzImage -j4 #17:12开始

编译内核
make bzImage -j4 生成/usr/src/linux4.2.8/arch/x86/boot/bzImage ,这就是系统启动时加载的压缩过的核心

image

编译模块
make modules

硬盘给了10G,编译出错了,编译x86_64的系统占用空间,建议给20G

image

原/boot下文件为

image

硬件的驱动程序放在,.ko文件
/lib/modules/3.10.0-327.36.3.el7.x86_64/kernel/drivers
e.g.
-rw-r--r--. 1 root root  47117 Oct 24 16:50 ath9k_common.ko
-rw-r--r--. 1 root root 123405 Oct 24 16:50 ath9k_htc.ko
-rw-r--r--. 1 root root 571253 Oct 24 16:50 ath9k_hw.ko
-rw-r--r--. 1 root root 245349 Oct 24 16:50 ath9k.ko

核心模块放在,后缀为.ko的文件
/lib/modules/3.10.0-327.36.3.el7.x86_64/kernel
e.g.
/lib/modules/3.10.0-327.36.3.el7.x86_64/kernel/fs/ext4
[root@changda ext4]# ll
-rw-r--r--. 1 root root 954749 Oct 24 16:50 ext4.ko

我的mac cpu是i5,是x86_64架构,即64位处理器,支持32和64位的操作系统,建议安装64位操作系统
我公司电脑CPU是intel G640,G640是64位处理器,所以是可以安装win7 64位的

评论