xdays

Linux Systemd笔记

背景

这是我的一篇我之前学习systemd的这个系列教程的笔记,在此记录下吧。

简介

  • 和init和upstart类似的Linux服务管理程序
  • 提供优秀框架以表示系统服务间的依赖关系
  • 并行启动服务,并通过cgroup跟踪服务进程
  • 支持对系统状态建立和恢复快照
  • 支持crontab

使用

服务状态

  • 因为启动过程太快,用户可能来不及看服务启动过程,故systemd跟踪进程的启动过程保留下来,以便后续查看。通过systemctl status能看到服务的状态以及返回的状态码。

cgroup

  • 通过cgroup来管理进程,没有继承可以脱离管理。通过两个命令来查看进程的所属cgroup,一个是ps xawf -eo pid,user,cgroup,args,一个是systemd-cgls

迁移sysv脚本

  • 如何把传统的sysv脚本迁移为systemd的配置文件。shell脚本的弊端,慢,可读性差,脆弱,不具备有序并行执行,不能监控进程。
  • 迁移需要获取的信息,服务描述,服务依赖,运行级别,启动命令
  • 字段描述
    • Unit段表示服务的通用信息,systemd不仅管理服务,还管理设备 ...

U盘安装CentOS7系统

需求

  • U盘安装
  • 小规模
  • 自动安装

工具

  • system-config-kickstart
  • kickstart
  • livecd-iso-to-disk

配置过程

  1. 将iso文件写入U盘sudo livecd-iso-to-disk --format --reset-mbr ./CentOS-6.4-x86_64-minimal.iso /dev/sdb
  2. 用system-config-kickstart创建ks文件,注意修改以下两点:
    • harddrive --partition=sda1 --dir=/ 这里是制定安装介质的存放目录
    • bootloader --location=mbr --driveorder=sdb,sda 指定grub的安装磁盘,如果不指定会写到U盘上去的
  3. 将ks.cfg拷贝只U盘根目录下
  4. 修改U盘上的grub引导菜单syslinux/extlinux.conf,添加内核参数ks=hd:sda1:/ks.cfg

安装

  • 设备设置U盘第一启动,启动菜单第一个即可

参考

ks.cfg ...

主流Linux版本自动化安装

概述

目前主流的发行版本(Redhat和Debian系列)都有相应的自动化安装的工具:Redhat有kickstart,Debian有preseed。其作用都类似,通过预先生成或者写好的配置文件来配合系统安装程序,回答安装过程中需要交互问题来实现自动化安装。

自动化安装配置

kickstart

  • 所有的ks文件配置项参考官方文档
  • 在系统安装完成之后,/root/下会有一个anaconda-ks.cfg文件,此文件是根据手动安装时的配置生成的ks文件,可供下次使用
  • 如果手头没有ks文件可以通过“Kickstart Configurator application”来创建一个,交互式图形界面工具。

注意: %post这个版块,可以写一些定制脚本。

preseed

注意: d-i preseed/late_command string这个版块,和kickstart的%post的类似 ...

Cobbler自动化安装Linux系统

简介

根据官方文档的定位,Cobbler首要的是快速设置网络安装环境的Linux安装服务器;但其功能不限于此,它还可以管理配置,管理DNS,HDCP,TFTP和rsync,软件包升级和电源管理等;个人感觉有些乱,作为一个开源项目明白自己想要解决什么问题并把这个问题解决到极致就够了。

说明

血与泪的经历:

  • Cobbler2.2(来自CentOS5.5) 安装CentOS5.5和CentOS6.4没有问题,安装Ubuntu12.04失败
  • Cobbler2.4(来自CentOS6.4) 安装CentOS5.5和CentOS6.4没有问题,安装Ubuntu12.04没问题

基本概念

PXE原理

PXE原理

  1. 客户端发起Discover包,通过flag说明自身的PXE拓展信息;
  2. 服务器响应Offer包,告知客户端下边去找哪台服务器;
  3. 客户端发送Request包
  4. 服务器发送ACK包
  5. 客户端通过TFTP协议请求pxelinux.0等文件
  6. 客户端加载并启动系统

Cobbler模型

Cobbler模型

这张图画出了Cobbler的模型,越往上的对象越基础越通用,自上而下不断的添加一些新的东西进来让其满足个性化的需求。这里我们需要重点关注的是distro和profile这两个概念。

安装

安装EPEL或者rpmforge

  • CentOS5 ...

RPM包制作

工厂简介

RPM为Redhat Package Manager缩写,是一个为Redhat系列Linux生产软件包的小工厂。其产品是RPM包,包含一些归档文件和meta信息;这些meta信息用来记录如何安装和删除这些文件,一些帮助脚本,文件属性和描述行信息(如包依赖哪些包和被哪些包依赖)。整个RPM包的制作过程严格按照SPEC文件规范的执行,然后通过rpmbuild命令来解析SPEC文件生成对应的RPM包。

生产车间

制作RPM的工厂包括四个实体生产车间,也就是目录结构如下:rpmfactory/{SOURCES,BUILD,SPECS,RPMS,SRPMS};SOURCES是原材料车间用于存放程序的源代码,通常是以.tar.gz后缀结尾的,且压缩前后的的文件名要符合SPEC文件的命令规则,通常是name-version.tar.gz;BUILD是生产车间,是临时目录,主要用于在RPM制作过程中生成临时文件,编译和链接都是在此目录下完成的;SPEC是整个工厂的控制核心车间,所有RPM包的特性都是由次目录下的spec文件来控制的;RPMS是成品车间,此目录下按架构存放对应的rpm包文件;SRPMS是半成品车间,此目录下存放封装好的srpm文件,需要到目标系统上去生产然后安装的。此外有一个目录必须要提下,就是\$BUILDROOT目录,在rpm包的生产过程中除了编译和链接外也进行了安装,只是没有安装到系统中去,而是安装到了\$BUILDROOT目录下,此目录必须提供。

生产线流程 ...

linux网卡绑定

简介

端口绑定就是将多个物理网卡绑定为一个逻辑网卡;根据模式不同可以网卡绑定的作用可分为提升吞吐量和热备份两个主要作用,一般都是提升吞吐量。另外需要bonding内核模块的支持。

配置

挂载模块

修改模块挂载配置文件vim /etc/modprobe.conf

alias bond0 bonding
options bond0 mode=balance-alb miimon=100 use_carrier=0

修改网卡参数

添加bond0配置vim /etc/sysconfig/network-script/ifcfg-bond0

DEVICE=bond0
USERCTL=no
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.110.2
NETWORK=192.168.110.0
NETMASK=255.255.255 ...

linux-LVM

什么是lvm?

lvm即logical volume management(逻辑卷管理),是一种灵活组织磁盘和分区的方式,最大的优势在于可以打破磁盘和分区的界限随意的拓展逻辑卷的大小。原先如果分区不够用了只能备份数据重新分区再还原数据,而使用lvm可以动态的放大一个卷甚至也不需要umount下来直接在线拓展分区大小,这对于服务器来说是很不错的功能。

lvm是如何工作的?

首先了解几个概念: * pv(物理卷)用于创建vg(逻辑卷组)的卷,需要将普通分区的类型改成8e。 * vg(逻辑卷组)由多个物理卷组成一个大的卷,可以把他想象成一个磁盘,只是这个磁盘时逻辑上的跨越了物理磁盘和分区。 * lv(逻辑卷)在vg上创建的逻辑卷,可以想象成vg的分区。 然后,lv大小的更改是通过增减pe实现的,pe是vg和lv的基本单位,vg通过在添加的pv上创建pe来增加自身大小,然后通过增减分配给lv的pe数来控制lv的大小,基本原理图如下:

lvm

相关命令有哪些?

  • 物理分区相关:fdisk pv相关:pvcreate,pvscan,pvdispaly,pvremove
  • vg相关:vgcreate,vgscan,vgdisplay,vgextend,vgreduce,vgchange,vgremove
  • lv相关 ...

GRUB2笔记

GRUB2的组成部分?

GRUB2 主要有三个部份:

/etc/default/grub            --这个文件包含了GRUB2的菜单。
/etc/grub.d/                   --这个目录包含了生成GRUB2菜单的脚本。
/boot/grub/grub.cfg       --GRUB2的配置文件,勿直接编辑。
update-grub command reads the /etc/grub.d directory and looks for executable scripts inside it. The scripts are read, in the order of their numbering, and written into the grub.cfg file, along ...

linux 日志文件

概述

日志文件的概念很好理解,就是什么时间,谁,在哪里里,做了什么事。专门有一个叫做syslog(ubuntu采用的拓展的rsyslog)的程序来负责收集系统产生的这些信息,然后按照规则把他们写道特定的地方,这些地方包括文件,控制台,打印机,远程主机等。由于日志文件记录信息逐渐增多,就需要有程序管理日志文件,这就是logrotate。对于这两个程序的认识主要对配置文件的了解。但是最重要的不是这些,而是要能看懂日志信息,这就要对系统,对服务等有个全面的认识,这样才能知道日志文件里说的是怎么一回事。

syslog配置

语法

语法:服务名称 [运算符] 信息等级         记录信息的位置

服务名称

服务名称:该服务产生的讯息会被纪录的意 思。syslog 认识的服务主要有底下这些:

  • auth, authpriv:主要与认证有关的机制,例如telnet, login, ssh 等需要认证的服务都是使用此一机制;
  • cron:例行性命令 cron/at 等产生讯息记录的地方;
  • daemon:与各个 ...

linux 中文乱码

开这篇文章主要目的是来总结一下自己在linux下遇到的各种问题及其解决办法,其实归根结底都是字符编码的问题,不同系统的不同字符编码之间相互显示就会出现乱码,要做的就是把编码统一就行了。windows采用的gb2312而linux用的utf8,所以两者之间经常出现编码不一致

远程登录putty的中文显示?

打开putty主程序,选择window-〉Appearance-〉Font settings-〉Change...,选择Fixedsys字体,字符集选择CHINESE_GB2312。
在window-〉Appearance-〉Translation中,Received data assumed to be in which character set 中,把Use font encoding改为UTF-8. 如果经常使用,把这些设置保存在session里面。
经过这两步设置就可以显示中文了。

登录vsftp服务器,中文文件列表显示乱码?

还是一开始提到了,linux用uft8而想flashfxp这样的客户端软件用gb2312编码,所以产生乱码。至于解决办法可以这样考虑能更改的地方有四个:linux和windows系统,vsftp,flashfxp。对于服务器而言,让客户去更改设置是不明智的,所以能更改的地方就只有linux和vsftp,但是vsftp我在配置文件中没有找到相关选项,所以干脆直接把linux系统默认的locale改成gb2312吧。对于redhat系统,编辑 ...

linux 字符处理

linux 系统中很多文件都是纯文本文件,如配置文件和日志文件。系统管理时对这些文件的处理显得尤为重要,系统中带有很多经典的字符处理命令,他们在系统管理和脚 本编写时有很强大的功能,这些命令包括cut,diff,expand/unexpand,grep,head /tail,join,paste,sed,sort,cat/tac,tr,uniq。下面具体总结以下相关命令的常用用法:

cut

功能:截取文件内容或者输出中的相应字段
常用选项:
-d 指定字段分隔符
-c 取固定字符范围
-f 取第几个字段

diff

功能:比较两个文本不同,以格式化样式显示。
常用选项:
-b 忽略空格数不同
-B 忽略空白行
-i 忽略大小写
-I 忽略指定字符差异
-t 输出的tab以空格替换

expand/unexpand ...

linux vi编辑器

以下是vim的入门官方教程,学习是多动手,实践为主,很实用的。

第一讲第一节∶移动光标
※※ 要移动光标,请依照说明分别按下 h、j、k、l 键。 ※※

\^
k 提示∶ h 的键位于左边,每次按下就会向左移动。
\< h l > l 的键位于右边,每次按下就会向右移动。
j j 键看起来很象一支尖端方向朝下的箭头。
v

​1. 请随意在屏幕内移动光标,直至您觉得舒服为止。

​2. 按下下行键(j),直到出现光标重复下行。

---> 现在您应该已经学会如何移动到下一讲吧。

​3. 现在请使用下行键,将光标移动到第二讲。

提示∶如果您不敢确定您所按下的字母,请按下\<ESC>键回到正常(Normal)模式。
然后再次从键盘输入您想要的命令。

提示∶光标键应当也能正常工作的。但是使用hjkl键,在习惯之后您就能够快速 ...

linux 磁盘操作

硬盘有哪些组成部分?

这里指的是与存储相关的结构,从大到小依次包括,柱面--磁道--扇区。柱面是指硬盘盘面半径相同的所有磁道,它也是划分分区的单位;磁道就是盘面上的圆 圈;扇区是硬盘上的最小物理存储单位,一般为512字节。再来说一下MBR(master boot record),硬盘的0柱面、0磁头、1扇区,即硬盘的第一个扇区。这512字节有重要信息,前446字节为存储引导程序(boot loader)像grub,lilo等,接着64字节叫做DPT(disk patition table)来存储硬盘分区的信息,最后两字节固定为55AA。

文件系统基本概念有哪些?

节点(inode)和块(block):文件的属性和内容是分开存储的,节点用来存储属性,块用来存储内容包括文件名,而且节点还包括指向块的指针。文件系统就是通过节点和块来定位文件的。

目录(directory)和文件(file):建立目录和文件都需要分配节点和块;目录本质上也是一个文件,只是分配给目录的块存储的是目录内文件的关联性。
超级块(super block ...

linux 环境变量文件

环境设置文件包括系统设置文件和个人设置文件。
1. 系统设置文件:
/etc/sysconfig/i18n   系统语系
/etc/profile   设置系统重要的变量
/etc/bashrc   确定umask功能 确定提示符内容 命令别名及系统其他功能
/etc/profile.d/*.sh   进行一些附加设置值如命令别名
/etc/man.config   man page查找路径
2. 个人设置值:
\~/bash_profile bash_login .profile   定义个性化路径和环境变量 按顺序搜索文件有一个就可以
\~/.bashrc   个性化设置值
\~/.bash_history   历史命令记录文件
\~/.bash_logout 记录注销后进行的操作
体会:
1. 能定义个性设置值的地方有三个/etc/bashrc    \~/.bashrc   /etc/profile.d,容易忽略第三个目录下设置的命令别名。

linux 特殊权限

在linux系统里除了常见的三组权限外,还有一组特殊权限它们分别是
1)suid
2)sgid
3)sticky bit或者称为sbit

这組权限主要用在一些别叫细微的条件下,也可见linxu系统的严谨之处。

由于特殊权限对于文件和目录是不同的,我们这里分开讨论。

对于文件的特殊权限

suid:对二进制文件有效,当用户执行具有该权限的文件时将具有文件拥有者的权限,例如查看/etc/shadow文件发现如下权限:-r-------- 1 root root 1047 May  3 11:57 /etc/shadow,也就是说只有root用户强制写入才能更改该文件,但是每个用户在执行passwd命令的时候却成功的更新了自己的密码,原因就在/usr/bin/passwd这个文件上,来看一下它的权限:-rwsr-xr-x 1 root root 22960 Jul 17  2006 /usr/bin/passwd,看到有s权限 ...

ubuntu 系统配置

​1. 更新源 编辑/etc/apt/sources.list文件,源不列了,搜吧大把大把的。 2.firefox的flash插件中文乱码: 编辑/etc/fonts/conf.d/49-sansserif.conf字体配置文件,将其中的sans-serif替换成AR PL UKai CN(系统中安装的字体),重启firefox即可。 3.安装nvidia显卡驱动 直接打开硬件驱动管理程序选择建议安装的驱动,下载完成重启即可。 ​4. 允许root登录 因为系统建立好后没有给root赋予密码,要想root登录先\$ sudo passwd root , 这样root就可以文本终端登录了,然后设置 系统--系统管理--登录窗口 即可允许root在图形届满登录。 ​5. 安装虚拟机virtualbox-ose 具体安装设置都很简单,找个教程:讲的很详细了,这里只是提一下几个需要特别注意的点: 1)虚拟机的双向共享剪切板可以实现宿主机与客户机之间的拷贝粘贴。 2)宿主机的虚拟光驱会作为客户机的物理光驱。 3 ...

linux 网络命令

​1. ping

功能说明:检测主机。

语  法:ping [-dfnqrRv][-c\<完成次数>][-i\<间隔秒数>][-I\<网络界面>] [-l\<前置载入>][-p\<范本样式>][-s\<数据包大小>][-t\<存活数值>][主机名称或 IP地址]

补充说明:执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。

参  数:
-d 使用Socket的SO_DEBUG功能。
-c\<完成次数> 设置完成要求回应的次数。
-f 极限检测。
-i\<间隔秒数> 指定收发信息的间隔时间。
-I\<网络界面> 使用指定的网络界面送出数据包。
-l\<前置载入> 设置在送出要求信息之前,先行发出的数据包。
-n ...

Linux-PAM

概述

Linux-PAM (Pluggable Authentication Modules for Linux)是一套供管理员选择的用来验证应用程序用户的共享库,它把权限控制与应用程序分离,你可以随意更改认证方式而不需要重新编译程序,具有很好的灵活性和课拓展性。

组成组件

  • 模块文件:/lib/security/*
  • 模块配置文件:/etc/security/*
  • PAM配置文件:/etc/pam.conf和/etc/pam.d/*
  • 一些PAM相关命令如pam-auth-update等

PAM运行原理

 +----------------+
  | application: X |
  +----------------+       /  +----------+     +================+
  | authentication-[---->--\--] Linux-   |--<--| PAM config file|
  |       +        [----<--/--]   PAM    |     |================|
  |[conversation()][--+    \  |          |     | X auth .. a.so |
  +----------------+  |    /  +-n--n-----+     | X auth .. b.so |
  |                |  |       __|  |           |           _____/
  |  service user  |  A ...

Linux-服务管理

概述

服务就是跑在后台的程序;linux的服务主要分为独立启动的和依靠super daemon(xinetd)来启动两种;系统依靠shell脚本来管理服务的启动与停止;另外系统又一套机制负责管理服务的访问权限;最后服务的管理离不开响应的工具。

服务管理脚本

系统的服务管理脚本主要位于/etc/init.d/(redhat)或者/etc/rc.d/init.d/(debian)下,脚本的结构基本上是:脚本的描述、环境调用、搜寻配置文件、加载functions、服务的启动停止与加载、最后还会有脚本的参数。然后在需要运行该服务的runlevel下建立对应的软连接,由init程序在开机时负责在对应的runlevel下启动对应的服务。

服务访问控制

验证是否支持

服务的访问的前提条件是服务加载了libwrap.so模块,可以通过如下命令查看服务是否支持访问控制

ldd $(which sshd) | grep libwrap

hosts.allow和hosts.deny格式

ssh:192.168.1.0 ...

硬盘安装流行linux发行版

概述

比较流行的发行版本每隔一段时间都推出一个版本,不知不觉我也成了最求“时尚”的linux发烧友(虽然我最初的目的不在此)),每推出一个新版本总要试它一把。无奈没有刻录机还要花钱买空盘,刻盘无数消费也不低。于是最近突发总结硬盘安装linux通用方法的想法,特此记录......

硬盘安装方法

硬盘安装fedora11

  • 下载grub4dos文件(引导安装程序启动),将其中的grldr、grub和menu.lst 复制到C盘
  • 改变menu.lst的内容,在最后加上:

~~~~ {style="padding-left: 30px;"} title Install Fedora11 root (hd0,4) kernel (hd0,4)/LiveOS/vmlinuz0 root=/dev/sda5 ro liveimg rhgb initrd (hd0,4)/LiveOS/initrd0.img

注意这里的/dev ...