博文

目前显示的是 六月, 2017的博文

linux进程和作业管理,以及周期任务(pstree,ps,pgrep,top,htop,vmstat,pmap,glances,dstat,kill/killall,jobs,bg/fg,nice/renice,crontab)(第12天)

Liux进程管理 应用程序开发者可以调用syscall和C库。 用户模式和内核模式的切换 内核的功用有:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能 进程上下文保存 Process:运行中的程序的一个副本,存在生命周期 Linux内核存储进程信息的固定格式:task_struct 多个任务的的task struct组成的链表:task list,双向循环链表 进程的创建,内核初始化完成之后,创建第一个init进程,后面的进程都是init创建的。所以init以及其创建的进程就有父子关系。子进程一般由其父进程调用fork()创建出来的。如果子进程不需要修改进程的数据,将一直共用父进程的内存空间,如果需要写数据的话,则将父进程的内存空间的数据复制一份,然后再写这份属于自己的内存空间。这就是写时复制。 父进程负责销毁子进程。 进程优先级:0-139 1-99:实时优先级,数字越大,优先级越高 100-139:静态优先级,数字越小,优先级越高; Nice值:-20,19  -20对应于静态优先级的100,19对应于静态优先级的139。可以通过调整nice值设置进程的优先级。 进程调度的时间复杂度是O(1)。 Big O:算法复杂度,O(1), O(logn), O(n), O(n^2), O(2^n) task_struck结构概览。 线性地址空间: 物理地址空间: 进程内存的组织结构:每个进程在内存中是如何组织的? 代码段,数据段,堆栈,堆区,等等。 MMU:内存管理单元,将虚拟地址转化为物理地址。 缺页异常: 常驻内存集:不可被交换的内存空间 虚拟内存集:可被交换的内存空间 进程之间的通信:IPC  Inter Process Communication 同主机之间的进程通过如下的机制通信: signal 信号 shm: shared memory  共享内存 semerphor 不同主机之间的进程通过如下的机制通信: rpc: remote procecure call  远程过程调用 socket:  套接字 Linux内核:抢占式多任务 进程类型: 守护进程: 在系统引导过程中启动的进程,...

Linux网络管理(ifconfig,route,netstat,ip,ss,网卡配置文件,nmcli,nmtui,hostnamectl等命令)(第11天)

图片
Linux网络属性管理 MAC:Media Access Control   介质访问控制 MAC地址:48位组成,前24位表示厂商,后24位厂商设定 局域网:以太网,令牌环网 局域网里的各个计算机之间的通信机制: Ethernet: CSMA/CD 载波监听多路访问/碰撞检测机制。 局域网和局域网之间如何通信?就是两个网络之间通信? 可以通过网桥,网桥里有MAC表。一般网桥有多个接口,网桥的每个接口对应一个网络(局域网),网桥有MAC表,MAC表记录了每个接口对应的局域网络里的主机。MAC表通过某种学习机制建立起来。局域网的A主机 要跟局域网的B主机通信的时候,A并不知道B在本地网络里还是另外的局域网里,所以A主机还是要发送广播报文的。并且这个广播报文会被网桥的连接了A主机所在的网络的接口转发到网桥的所有其他接口上。这样一来,B主机才有可能收到A主机的这个广播报文。然后,B主机接收到这个广播报文,就发送报文回应。但是如果是局域网A主机和局域网C主机通信,网桥的连接A主机所在局域网的接口是不会把这个报文广播给其他的接口的,因为网桥的目的就是为了隔离一部分的冲突域。 交换机:交换机有多个接口,一个接口接入一台计算机,各台计算机之间的通信需要通过广播,通过广播才能建立MAC表。如果机器过多,可能造成广播风暴。所以为了隔离广播域,引入了路由器。交换机工作在数据链路层。 路由器: 路由器(英语:Router,又称路径器)是一种电讯网络设备,提供 路由 与 转送 两种重要机制,可以决定数据包从来源端到目的端所经过的路由路径(host到host之间的传输路径),这个过程称为路由;将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转送。路由工作在OSI模型的第三层——即网络层,例如网际协议(IP)。 局域网A里的1号机器和局域网B里的2号机器如何通信? 比如1号机器要发送数据到B.2来表示向局域网B里的2号机器,那么这里的B.2就可以理解为IP地址。所以,IP地址标识了网络段号和那个指定的机器。 局域网A里的1号机器如果发送了报文给局域网A的2号机器,那么必须知道这个A.2是否是本局域网的机器,还是其他网络里的机器? 通过子网掩码和IP地址做与运算可以算出ip地址的网络号。假如:A.1的IP地址...

apt-get详细使用

NAME apt-get - APT包处理程序--基于命令行 SYNOPSIS apt-get [-asqdyfmubV] [-o=config_string] [-c=config_file] [-t=target_release] [-a=architecture] {update | upgrade | dselect-upgrade | dist-upgrade | install pkg [{=pkg_version_number | /target_release}]...  | remove pkg...  | purge pkg...  | source pkg [{=pkg_version_number | /target_release}]...  | build-dep pkg [{=pkg_version_number | /target_release}]...  | download pkg [{=pkg_version_number | /target_release}]...  | check | clean | autoclean | autoremove | {-v | --version} | {-h | --help}} DESCRIPTION apt-get是一种基于命令行的包处理工具,被认为是相对于其它apt库的“后端”(指在命令行下)工具,同样也有一些“前端”(基于图形模式)下工具,如aptitude(8),synaptic(8)和wajig(1). 除了-h,或是--help这两个参数,下面的子命令之一必须使用。 update update是被用来与它们的源中的包索引文件进行同步的。 可用的软件包的索引是从/etc/apt/sources.list文件中指定的路径获取的。举个例子,当我们使用Debian时,这个命令就取出并扫描Packages.gz的文件,因为这样就能得到升级了的包和新的包的信息了。更新(update)应该在使用upgrade或是dist-upgrade这2个子命令之前使用。请注意:因爲无法预知包文件的大小,所以整體更新進度表將不正確。 (译者注:所以請注意,update並不真正升級安裝在系統上的軟件包,只是查...

yum详解,源码编译安装(第10天)

1:程序包管理 CentOS程序包管理前端工具:yum和dnf YUM: yellow dog, Yellowdog Update Modifier yum repository: yum repo:yun仓库 存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录下:repodata目录); yun仓库是文件服务器,可以是支持如下协议的: ftp:// http:// nfs:// file:/// yum客户端: 配置文件:/etc/yum.conf   为所有仓库提供公共配置选项(man 5 yum.conf)                  /etc/yum.repos.d/*.repo 每个repo文件定义一个或多个仓库的配置选项,这里的文件只要不是以.repo结尾的就不会被识别为仓库配置文件。 仓库指向的定义:/etc/yum.repos.d/*.repo中定义的内容如下       [repositoryID]       name=Some name for this repository       baseurl=url://path/to/repository/   #repodata目录的父目录       enabled={1|0}   是否启用此仓库,默认是1,表示启用       gpgcheck={1|0}  检查程序包的来源合法性和完整性       gpgkey=URL   密钥文件的路径       enablegroups={1|0}       failovermethod={roundrobin|priority}  默认为:roundrobin,意为随机挑选;       cost=    开销数字,默认...

btrfs特性,压缩归档,for循环,程序包管理(第9天)

1:btrfs文件系统: 技术预览版 Btrfs (B-tree, Butter FS, Better FS), GPL, Oracle, 2007, CoW(写时复制); ext3/ext4, xfs btrfs核心特性: 多物理卷支持:btrfs可由多个底层物理卷组成;支持RAID,以联机“添加”、“移除”,“修改”; 写时复制更新机制(CoW):复制、更新及替换指针,而非“就地”更新; 数据及元数据校验码:checksum 子卷:sub_volume 快照:支持快照的快照; 透明压缩 文件系统创建: mkfs.btrfs命令的使用 -L 'LABEL' -d <type>指明数据如何存放,type有raid0, raid1, raid5, raid6, raid10, single -m <profile> 指明元数据如何存放,profile有raid0, raid1, raid5, raid6, raid10, single, dup -O <feature> 开启特性。可以使用 -O list-all: 列出支持的所有feature; 例子 mkfs.btrfs -L "my_btrfs" /dev/sdb  /dev/sdc  其中sdb和sdb可以不分区,而直接安装btrfs文件系统 属性查看: btrfs filesystem show   filesystem是btrfs的子命令,show是filesystem的子命令 挂载文件系统: mount -t btrfs /dev/sdb MOUNT_POINT   挂载使用 透明压缩机制: mount -o compress={lzo|zlib} DEVICE MOUNT_POINT btrfs的子命令:filesystem, device(添加,删除底层设备), balance(平衡数据), subvolume(子卷) 博客作业:btrfs管理及应用 2:压缩和解压缩 压缩和归档工具如下: compress/uncompress: .Z gzip/gunzip: .gz bzip2/bunzip2: .bz2 xz/unxz: .xz zip/un...

mount和/etc/fstab文件详解,inode和软硬链接,RAID和LVM2(第8天)

前戏: 内核与ramdisk到底是什么关系?系统在启动的过程中,内核与ramdisk分别扮演什么角色啊? 我对启动的过程一直不明白,懂的朋友帮我讲讲。 谢谢 精彩回答: ramdisk一个作用就是用来解决boot过程中mount根文件系统的“先有鸡还是先有蛋”的问题的。 一般来说,根文件系统在形形色色的存储设备上,不同的设备又要不同的硬件厂商的驱动,比如intel的南桥自然需要intel的ide/sata驱动,VIA的南桥需要VIA的ide/sata驱动,根文件系统也有不同的文件系统的可能,比如ubuntu发行版可能一般用ext3,suse可能就不是了,不同的文件系统也需要不同的文件系统模块;假如把所有驱动/模块都编译进内核(注:即编一个通用的、万能的内核),那自然没问题,但是这样就违背了“内核”的精神或本质,所以一般来说驱动/模块都驻留在根文件系统本身上/lib/modules/xxx,那么“鸡蛋”问题就来了,现在要mount根文件系统却需要根文件系统上的模块文件,怎么办?于是,就想出ramdisk,内核总是能安装ramdisk的(注:这是因为ramdisk临时文件系统和内核一样,也是由bootloader通过低级读写命令(如uboot用nand read,而不用通过文件系统层提供的高级读写接口)加载进内存,因此内核可以挂载内存里ramdisk文件系统),然后把所有可能需要的驱动/模块都放在ramdisk上,首先,让内核将ramdisk当作根文件系统来安装,然后再用这个根文件系统上的驱动来安装真正的根文件系统,就将这个矛盾问题解决了  1:文件系统管理 将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件系统访问入口的行为称之为挂载; 解除此关联关系的过程称之为卸载; 把设备关联挂载点:Mount Point mount 卸载时:可使用设备,也可以使用挂载点 umount 注意:必须退出挂载点,才能umount成功 注意:挂载点下原有文件在挂载完成后会被临时隐藏; 挂载方法:mount DEVICE MOUNT_POINT mount:通过查看/etc/mtab文件显示当前系统已挂载的所有设备 mount [-fnrsvw] [-t vfstype] [-o options] d...