当前位置:  操作系统/服务器>linux
本页文章导读:
    ▪Linux基础之文件权限与目录配置      本节内容: Linux文件权与目录 1 三种身份   owner 拥有者 信息存储位置 root: /etc/passwd usr : /etc/shadow group 群组 信息存储位置 /etc/group others 其它人 2 三种权限   read write execute 3 ls示例 .........
    ▪Linux中程序管理与SELinux      本节内容: Linux程序管理 SELinux基础 1 什么是程序 程序文件:通常以二进制文件的形式存放在储存介质中 程序与权限:程序被执行时,执行者的权限与属性,程序的代码,(二进制文件内.........
    ▪Linux开机流程 Linux模块管理与Loader      本节内容: Linux开机流程 Linux模块管理 Linux Loader加载 1 Linux开机流程 1.1 总体流程 加载BIOS的硬件信息并进行自我检测,取得设定的第一个开机设备 读取并执行第一个开机设备内的MBR的Boot.........

[1]Linux基础之文件权限与目录配置
    来源: 互联网  发布时间: 2013-12-24

本节内容:
Linux文件权与目录

1 三种身份
 

owner
拥有者
信息存储位置
root: /etc/passwd
usr : /etc/shadow
group
群组
信息存储位置
/etc/group
others
其它人

2 三种权限
 

read
write
execute

3 ls示例
 

权限  连结数  owner  group  size  month  day  time  filename
drwxrwxr-x  4  minix007  minix007  4096  10月  24  16:08  texmf/
drwxr-xr-x  4  root  root  4096  10月  24  15:52  .texmf-var/
-rw-r–r–  1  minix007  minix007  570  11月  27  21:39  .vimrc

3.1 权限解释
3.1.1 档案类型
d:目录
-:文件
l:链接

3.1.2 owner权限
 

r:读
w:写
x:执行

3.1.3 group权限
3.1.4 others权限

4 改变文件属性及权限

4.1 改变拥有者
 

代码示例:
chown ownername filename

4.2 改变组
 

代码示例:
chgrp groupname filename

4.3 改变权限

4.3.1 数字
 

权限的数字表示
r:4,w:2,x:1,-:0
rwx:4+2+1=7
rw-:4+2+0=6
---:0+0+0=0
rwxrw----:760
改变权限
chmod 760 filename

4.3.2 符号
 

chmod u=rwx,g=rw-,o=--- filename
chmod a+x filename # 去除执行权限
chmod a-x filename # 增加执行权限

5 文件与目录权限
对目录而言,x权限代表可否cd到这个目录,r权限代表可否ls这个目录

6 Linux目录配置依据–FHS(FileSystem Hierarchy Standard)
在特定的目录放置特定的文件,重点在于规范每个特定的目录下应该要放置什么样的数据。


    
[2]Linux中程序管理与SELinux
    来源: 互联网  发布时间: 2013-12-24

本节内容:
Linux程序管理
SELinux基础

1 什么是程序
程序文件:通常以二进制文件的形式存放在储存介质中
程序与权限:程序被执行时,执行者的权限与属性,程序的代码,(二进制文件内容)等数据会被操作系统加载到内存中, 操作系统给予这个内存中的单元一个标识符(PID)。
子程序与父程序:登录系统后会取得一个shell,例如bash程序。在这个bash中启动另一个bash,新启动的bash即是原来bash 的子程序,原来的bash是新bash的父程序。可以通过Parent PID(PPID)得知一个程序的父程序。

例子:
 

代码示例:
minix007:~$ ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000  7538  7530  5  80   0 -  2315 wait   pts/1    00:00:00 bash
0 R  1000  7598  7538  0  80   0 -  1177 -      pts/1    00:00:00 ps
minix007:~$ bash
minix007:~$ ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000  7538  7530  0  80   0 -  2315 wait   pts/1    00:00:00 bash
0 S  1000  7599  7538  9  80   0 -  2316 wait   pts/1    00:00:00 bash
0 R  1000  7655  7599  0  80   0 -  1177 -      pts/1    00:00:00 ps
 

第一次输入ps -l,发现两个程序,第一个bash是我们正在使用的shell,PID为7538,第二个为ps,是我们刚刚在这个 shell中启动的程序,可以看到ps的PPID是7538,即其父程序PID为7538。 第二个命令启动了另一个bash,可以看到此bash的PID为7599。其PPID为7538,即正在使用的shell的PID 第三个命令启动了ps程序,可以看到这个ps程序的PPID为7599,即其父程序为刚刚启动的bash。

fork and exec 程序的启动过程:
先由父程序fork一个一模一样的子程序,此子程序再以exec的方式执行真正要执行的程序。
常驻内存的程序: 平时执行的命令,如ls,执行一次就完了,但是有些程序需要一直执行,比如检测程序,这些程序就 常驻在内存。
Linux的多人多任务环境 Linux可以供多人同时登录系统,并且互不干扰,每个人像是在独立地使用计算机。

Linux中默认提供了六个命令行终端和 一个图形终端:tty1~tty7。
其中tty7是图形终端。
Ubuntu中可以通过Ctrl+Alt+F1~F7切换这7个终端。
当一个终端中程序 死掉时,可以切换到其它终端,用ps -aux查看哪个程序出错,然后kill掉.

2 工作管理(job control)
将程序放入后台执行
为什么:
如果一个程序执行时间很长,在shell中执行它,就要等待它执行完以后才能输入下一个命令,Linux是多 任务的操作系统,这样一来,就变成了一个命令一个命令地执行,为了执行一个程序的同时可以继续使用终端,可以将 程序放入后台执行,这样一来就不影响终端在前台的使用。

怎么做:
可以在要执行的程序命令后加上 & 符号,例如:
 

代码示例:
tar -jcv -f tctar.tar.bz2 t.c &

注意:
后台执行的程序不能和用户交互,不能用ctrl+c中断。
在vim中输入Ctrl+Z可以将vim暂时调入后台,从而可在 前台执行命令,又不退出vim。

观察后台程序状态: jobs
 

代码示例:
$ jobs
[1]+  Stopped  vim t.c
$ jobs -l
[1]+  8705 Stopped  vim t.c

将后台程序调入前台执行:fg %num # num是job的id号
 

代码示例:
$ fg %1
vim t.c

将后台程序暂停与恢复执行
 

Ctrl+z:暂停
bg %num:恢复后台中暂停的程序

将程序停止或重启:kill
 

代码示例:
$ kill -9 %1  #强制移除1号job

脱机时仍然执行:nohup
$ nohup ./foo.sh &
此时,即使你注销,系统仍然会执行foo.sh程序

3 程序管理
程序观察
 

代码示例:
ps -l :观察自己bash中的程序
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000  8594  8583  0  80   0 -  2318 wait   pts/1    00:00:00 bash
0 T  1000  8828  8594  0  80   0 - 12020 signal pts/1    00:00:00 vim
0 R  1000  8877  8594  0  80   0 -  1177 -      pts/1    00:00:00 ps
 

F:程序权限
S:程序状态
R:运行态,S:睡眠态,可唤醒,D:不可唤醒的睡眠态,如等待I/O
T:停止态,Z:僵尸态,程序已经终止但无法被移出内存
UID:启动程序的用户的ID
PID:程序标识
PPID:父程序标识
C:cpu使用率
PRI/NI:与优先级有关
ADDR/SZ/WCHAN:与内存有关,ADDR:内存哪个部分,SZ:占用内存大小,WCHAN:运行状态,-表示正在运行
TTY:登录的终端位置
TIME:使用掉的CPU时间
CMD:使用的命令
ps aux:观察系统中所有运行的程序
 

USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
minix007    8828  0.0  0.2  48080  8568 pts/1    Tl   21:29   0:00 vim t.c
root        8988  0.6  0.0      0     0 ?        S    21:40   0:03 [kworker/1:2]
root        9045  0.2  0.0      0     0 ?        S    21:45   0:00 [kworker/1:1]
minix007    9100  0.0  0.0   4948  1176 pts/1    R+   21:49   0:00 ps aux
 

VSZ:该程序占用的虚拟内存量
RSS:该程序占用的固定内存量
top:动态观察程序变化
 

Tasks: 193 total,   2 running, 189 sleeping,   1 stopped,   1 zombie
Cpu(s):  0.5%us,  1.8%sy,  0.0%ni, 97.6%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3962820k total,  3283620k used,   679200k free,   400800k buffers
Swap:  3905532k total,        0k used,  3905532k free,  1915036k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND             
 9156 root      20   0     0    0    0 R    4  0.0   0:00.21 kworker/0:1         
 1900 minix007  20   0  247m  71m  32m S    3  1.8  15:53.01 compiz              
 1089 root      20   0  126m  65m 8904 S    1  1.7   7:30.94 Xorg                
   18 root      20   0     0    0    0 S    1  0.0   0:44.87 kworker/3:0         
 1969 minix007  20   0  113m  20m  10m S    0  0.5   1:06.10 unity-panel-ser     
 6651 minix007  20   0  268m  26m 8880 S    0  0.7   0:53.59 chrome              

操作:按P按CPU使用率排序,按M按内存使用率排序,按r修改NI值,按h帮助,按q退出。
pstree:显示程序树,可以看到程序之间的关系。

程序管理
基本原理:可以通过发送给程序一个信号,告诉程序你想让它做什么。这些信号包括SIGNUP(重新启动), SIGINT(相当于ctrl+c)等等,可用man 7 signal查询详细信息。
基本方式
 

kill -signal PID
killall processName
killall emacs

程序执行的优先级
priority(PRI):PRI越低表示越优先,由内核动态调整,用户无法改变
nice
PRI(new) = PRI(old) + nice,所以可以通过nice值调整PRI,但并不是修改后就能生效,系统还要去分析判断。

nice值设定方式

方式一:启动程序时,用 nice -n command 设定,n为nice值,范围-20~19

方式二:程序已经启动,用 renice [number] PID 设定
系统资源观察
free: 观察内存
 

代码示例:
$ free
             total       used       free     shared    buffers     cached
Mem:       3962820    2067520    1895300          0     379912     925868
-/+ buffers/cache:     761740    3201080
Swap:      3905532          0    3905532

uname: 查看系统和内核信息(eg: uname -a)
 

代码示例:
$ uname -a
Linux minix007-ubuntu-desktop 3.2.0-37-generic-pae #58-Ubuntu SMP Thu Jan 24 15:51:02 UTC 2013 i686 i686 i386 GNU/Linux
 

uptime: 观察系统启动时间和工作负载
 

代码示例:
$ uptime
 15:14:15 up  4:31,  2 users,  load average: 0.23, 0.24, 0.23

netstat: 查看网络状态
 

代码示例:
$ netstat -t #列出tcp网络封包数据
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address             Foreign Address         State     
tcp        1      0 minix007-ubuntu-des:44769 mistletoe.canonica:http CLOSE_WAIT
tcp        0      0 minix007-ubuntu-des:37063 112.90.137.192:http     ESTABLISHED

dmesg:
查看内核产生的信息 开机时,内核会检测硬件信息,运行中,内核也会产生一些信息,这些信息被放在内存中一个受保护的区域,使用 dmesg可以得到这些信息。

vmstat:
侦测系统资源变化
 

代码示例:
$ vmstat 1 3 #统计系统状态,每秒1次,共3次
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0 1889048 380780 929772    0    0    17    14  160  286  2  2 96  1
 2  0      0 1889172 380780 929772    0    0     0     0  435  788  1  1 99  0
 2  0      0 1889164 380780 929772    0    0     0     0  428  767  1  1 99  0

4 特殊文件与程序
SUID/SGID/SBIT与程序权限的关系

passwd:为什么普通用户执行passwd时拥有了root权限?这是因为执行passwd时,会取得一个新的程序与PID,该PID 产生时通过SUID赋予这个程序相应权限。
/proc:内存中运行的程序都以文件或目录的形式存在于/proc目录下。
fuser:找出使用指定文件,文件系统,或目录的程序。例如使用umount时发现[device is busy],就可以使用fuser找出哪个程序在使用 文件系统。
lsof:找出程序使用的文件
pidof:找出正在执行的程序的PID
 

代码示例:
$ pidof emacs
7021

5 SELinux初探
SELinux是什么:
Security Enhanced Linux,安全强化的Linux。
SELinux是在进行程序,档案等细部权限设定 依据的一个核心模块。


    
[3]Linux开机流程 Linux模块管理与Loader
    来源: 互联网  发布时间: 2013-12-24

本节内容:
Linux开机流程
Linux模块管理
Linux Loader加载

1 Linux开机流程
1.1 总体流程
加载BIOS的硬件信息并进行自我检测,取得设定的第一个开机设备
读取并执行第一个开机设备内的MBR的Boot Loader
根据Boot Loader的设定加载内核(Kernel),内核会开始检测硬件,加载驱动程序
硬件驱动成功后,内核会调用init程序,init程序取得run level信息
init 执行 /etc/rc.d/rc.sysinit 文件来准备软件的作业环境(如网络,时区等)
init 执行 run level 的各个服务的启动(通过shell script的方式)
init 执行终端仿真程序启动login程序,等待用户登录

1.2 详细过程
BIOS,Boot Loader与内核载入 开机后系统首先加载BIOS(Basic Input Output System),并通过BIOS程序加载CMOS信息,由CMOS取得 主机的各项硬件配置,如CPU与各个设备沟通频率,开机装置搜索顺序,硬盘大小与类型等。BIOS会指定 开机装置,好从中读取操作系统内核,由于各个操作系统文件系统格式不同,因此需要一个开机管理程序 处理内核加载,这个开机管理程序就是Boot Loader。这个Boot Loader位于开机装置的第一个扇区内, 即MBR(Master Boot Record,主引导记录)。

Boot Loader作用 每个文件系统都会保留一块启动扇区(Boot sector)给操作系统,用于安装Boot Loader,通常操作系统 都会安装一份Boot Loader到其根目录所在文件系统的Boot sector下。Linux安装时可以选择是否将Boot Loader安装到MBR上,如果安装了,那么MBR和Boot sector上都会保留一份Boot Loader。Windows安装时 没有选择,会在MBR和Boot sector上都会安装Boot Loader。系统只有一个MBR,所以安装多系统时,可能会 被覆盖。
Boot Loader的作用在于:
提供菜单选择要载入的操作系统
载入内核,直接启动操作系统
转交其它Boot Loader
Windows的Boot Loader没有转交其它Boot Loader的能力,不能启动Linux所以安装Windows/Linux双系统 时要先安装Windows, 再安装Linux,这样可以用Linux的Boot Loader覆盖Windows的Boot Loader。

注:鸟哥在写此文章时Windows无此能力,现在的Windows 7已经可以了,我安装的双系统就是MBR上装有Windows 的Boot Loader,提供两个菜单,一个是启动Windows,另一个是转交Linux的Boot Loader,选入Linux后,就会进入 Linux的Boot Loader,这时会进入Grub,再次提供选择菜单。

加载内核 由Boot Loader开始读取内核后,Linux会将内核解压到内存中,此后内核会检测硬件信息,从BIOS手中接过系统 管理的功能。内核文件在/boot/linuz-xxx/下。

另外,Linux内核是可以动态加载内核模块的,这些模块位于 /lib/modules/下。 SATA磁盘的驱动程序就是放在/lib/modules/下,这就有个两难问题,Linux要加载SATA的驱动才能识别磁盘,而要 加载SATA的驱动必须到/lib/modules下才行,可是此时还没有识别磁盘,如何进入/lib/modules呢?Linux使用虚拟 文件系统解决这个问题。虚拟文件系统使用文件/boot/initrd,它可以被Boot Loader加载到内存中,并且仿真一个 根目录,这个仿真的文件系统提供一个程序加载必要的驱动,如USB,SATA,RAID,LVM等。此后内核就会释放虚拟文件 系统,挂载真正的根目录。

第一个程序init 内核加载完成后,就会执行第一个程序/sbin/init。由命令ps aux | grep init,可以知道其PID为1。 init的配置文件位于/etc/inittab。 注:Ubuntu中启动由upstart控制,自9.10后不再使用/etc/event.d目录的配置文件,改为/etc/init。 关于Ubuntu的启动,参见:http://wiki.ubuntu.org.cn/%E5%90%AF%E5%8A%A8。 Linux启动过程,有一个非常重要的概念:runlevel。Linux由runlevel决定启动过程使用的不同服务。 下面即是Ubuntu中各个runlevel的含义。
 

0        系统停机状态
1        单用户或系统维护状态
2~5      多用户状态
6        重新启动
 

用户自定义开机启动程序 可以将要执行的命令写入/etc/init.d/rc.local文件。

2 内核与内核模块
目前的内核都有“可读取模块化驱动程序”的功能,如果一个新的硬件,操盘系统不支持,可以:

加入此硬件驱动源代码,重新编译内核。
将此硬件驱动源代码编译成模块,在开机时加载此模块。
核心模块位于/lib/modules/$(uname -r)/kernel/目录中。
模块之间信赖关系记录在/lib/modules/$(uname -r)/modules.dep。使用depmod命令可以建立此文件。
使用lsmod命令可以列出已经加载的模块。
 

代码示例:
$ lsmod | head
Module                  Size  Used by
ip6table_filter        12711  0
ip6_tables             18432  1 ip6table_filter
ebtable_nat            12695  0
ebtables               21508  1 ebtable_nat
ipt_MASQUERADE         12663  3
iptable_nat            13016  1
nf_nat                 24959  2 ipt_MASQUERADE,iptable_nat
nf_conntrack_ipv4      19084  4 iptable_nat,nf_nat
nf_defrag_ipv4         12649  1 nf_conntrack_ipv4

使用modinfo可以获取模块的描述信息
 

代码示例:
$ modinfo ip6_tables
filename:       /lib/modules/3.2.0-37-generic-pae/kernel/net/ipv6/netfilter/ip6_tables.ko
description:    IPv6 packet filter
author:         Netfilter Core Team <coreteam@netfilter.org>
license:        GPL
srcversion:     6F5DC4CD82D294A10583CD9
depends:        x_tables
intree:         Y
vermagic:       3.2.0-37-generic-pae SMP mod_unload modversions 686
 

模块加载可以使用modprobe 或者 insmod,前者会分析模块之间信赖关系,推荐用前者 模块移除可以使用modprobe -r 或者 rmmod

3、Boot Loader: Grub
Boot Loader 两阶段 由于MBR很小,Boot Loader分两个阶段
Boot Loader 主程序,放在MBR中,不含配置文件
加载配置文件,这些文件位于/boot/下,如grub的相关配置在/boot/grub中,直接与grub有关的是 /boot/grub/grub.cfg


    
最新技术文章:
▪linux系统中的列出敏感用户的脚本代码
▪a10 config backup for aXAPI
▪一键备份gitolite服务器的Shell脚本
▪nagios 分发文件实现代码
▪阿里云云服务器Linux系统更新yum源Shell脚本
▪一个监控LINUX目录和文件变化的Shell脚本分享
▪Linux下实现SSH免密码登录和实现秘钥的管理、...
▪Shell正则表达式之grep、sed、awk实操笔记
▪3个备份系统文件并邮件发送的Shell脚本分享
▪CentOS 6.3下给PHP添加mssql扩展模块教程
▪监控网站是否可以正常打开的Shell脚本分享
▪shell脚本编程之if语句学习笔记
▪shell脚本编程之循环语句学习笔记
▪shell脚本编程之case语句学习笔记
▪Shell脚本实现的阳历转农历代码分享
▪Shell脚本实现复制文件到多台服务器的代码分...
▪Shell脚本实现批量下载网络图片代码分享
▪Shell脚本实现检测文件是否被修改过代码分享
▪Shell脚本数组用法小结
▪Shell脚本批量重命名文件后缀的3种实现
▪C语言实现的ls命令源码分享
▪Linux下查找后门程序 CentOS 查后门程序的shell脚...
▪Shell 函数参数
▪linux shell 自定义函数方法(定义、返回值、变...
▪Shell实现判断进程是否存在并重新启动脚本分...
▪Shell脚本break和continue命令简明教程
▪Shell脚本函数定义和函数参数
▪让代码整洁、过程清晰的BASH Shell编程技巧
▪shell常用重定向实例讲解
▪awk中RS、ORS、FS、OFS的区别和联系小结
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3