当前位置:首页 » 操作系统 » hwclock源码

hwclock源码

发布时间: 2022-11-07 08:08:13

源码包安装ntp后找不到/etc/ntp.conf配置文件

NTP服务器在我这里,我想做客户端连接,但是当我通过终端想打开etc/ntp.conf时,提示我没有权限!
找到文件能打开,但是是只读的,不能修改,恳请高人指点如何修改这个文件。
三、什么是NTP
为了实现时间同步,我们就需要用户NTP(Network Time Protocol)这个协议。如图1所示。简单地说,NTP是用来使系统和一个精确的时间源保持时间同步的协议。笔者建议管理员最好在自己管理的网络中建立至少一台时间服务器来同步本地时间。
如 果在一个公司的局域网中,如果让每个员工通过手动的方式每隔一段时间去校准时间,不但不利于管理,而且校准目标时间源也不一定准确。公司局域网络中不同计 算机的时间偏差尤其是客户机/服务器之间的时间偏差,就会对一些要求时间同步的服务产生影响。比如,为了管理方便,服务器设置了一到下班时间便 账号过期,用户无法访问Internet网络。而如果你的电脑时间与服务器的时间不同步,当你为你下班时间未到,正准备发送邮件时,或许在服务器的时间 上,你的账号便过期了,从而导到无法发送邮件。解决这种问题的方法很简单,就是建立一个能提供精确时间的服务器,局域网内的所有电脑统一通过这台时间服务 器进行时间同步、校准。
四、NTP服务器安装
现在,我们就来介绍一下,如何在linux系统下,建立一个NTP服务器吧。在本文中,我们采用的是Fedora 2操作系统作为例子 (其它版本Linux也可以,系统的配置类似)。
使用 RPM 安装
首先输入如下指令
rpm -q ntp
查询本机是否安装了NTP软件包。如果没有安装的话,找到您的 Linux 的安装光盘,mount 上后,查找以NTP开头的软件包名,然后安装上去,就可以了!
rpm –ivh ntp-4.1.2-5.i386.rpm
五、NTP服务的设置
1.NTP软件包的结构
NTP服务的配置文件:
/etc/ntp.conf :这个是 NTP 服务的主要配置文件,不同的Linux版本文件所在的目录可能会不同!
与NTP服务有关的Linux 系统文件及目录:
/usr/share/zoneinfo:这是个目录,在这个目录下是规定了各主要时区的时间设定文件,例如中国大陆地区的时区设置文件是 /usr/share/zoneinfo/Asia/Shanghai 。
/etc /sysconfig/clock:这个文件是Linux 的主要时区设定文件。每次启动后,Linux 会自动读取这个文件来设定系统预设要显示的时间!比如这个文件内容为“ZONE=Asia/Shanghai”,这表示我们的时间设定使用 /usr/share/zoneinfo/Asia/Shanghai 这个文件!
/etc/localtime:这个文件是本地系 统的时间设定文件! 假设clock 文件里面规定了使用的时间设定文件为 /usr/share/zoneinfo/Asia/Shanghai, Linux 系统就会将 Shanghai那个文件复制一份为 /etc/localtime ,所以系统的时间显示就会以 Shanghai 那个时间设定文件为准。假设这台主机到了美国纽约,您只要将 /etc/sysconfig/clock 里面的ZONE 设定成为ZONE="America/New_York" 并且将/usr/share/zoneinfo/America/New_York复制成为 /etc/localtime ,其它什么设置都不需要改动,系统的显示时间就是美国纽约当地的时间了!

与 NTP 及系统时间有关的执行文件:
/bin/date: Linux 系统上面的日期与时间修改及输出命令。
/sbin /hwclock:因为主机的 BIOS 时间与 Linux 系统时间是分开的,所以使用 date 这个指令调整了时间之后,只是调整了linux的系统时间,还需要使用 hwclock 才能将修改过后的时间写入 BIOS。这个命令必须root用户才能执行 。
/usr/sbin/ntpd:NTP服务的守护进程文件,需要启动它才能提供NTP服务。
/usr/sbin/ntpdate:NTP客户端用来连接NTP服务器命令文件。
2.NTP服务端的设置
编辑 /etc/ntp.conf 文件
关于权限设定部分
权限的设定主要以 restrict 这个参数来设定,主要的语法为:
restrict IP地址 mask 子网掩码 参数
其中 IP 可以是IP地址,也可以是 default ,default 就是指所有的IP
参数有以下几个:
ignore:关闭所有的 NTP 联机服务
nomodify:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。
notrust :客户端除非通过认证,否则该客户端来源将被视为不信任子网
noquery :不提供客户端的时间查询
注意:如果参数没有设定,那就表示该 IP (或子网)没有任何限制!
上级时间服务器的设定
由于我们配置的NTP 服务器需要网络上面时间比较准确的NTP服务器来更新自己的时间,所以在我们的 NTP 服务器上面要配置一部上级时间服务器来进行校准!在 Internet 上面提供了许多时间服务器,从下面地址找一个离你最近的

用server这个参数设定上级时间服务器,语法为:
server IP地址或域名 [prefer]
IP地址或域名就是我们指定的上级时间服务器,如果 Server 参数最后加上 prefer,表示我们的 NTP 服务器主要以该部主机时间进行校准。
解决NTP服务器校准时间时的传送延迟
使用driftfile参数设置:
driftfile 文件名
在与上级时间服务器联系时所花费的时间,记录在driftfile参数后面的文件内。
注意: driftfile 后面接的文件需要使用完整的路径文件名,不能是链接文件,并且文件的权限需要设定成 ntpd守护进程可以写入。
ntp.conf文件举例:
设置要求:不对 Internet 提供服务,仅对内部子网 192.168.0.0/24 提供服务,NTP 服务器的上级时间主机为:clock.nc.fukuoka-u.ac.jp和ntp.nasa.gov,内部子网的客户端不能修改NTP服务器的时间参数。
在ntp.conf中增加以下内容:
restrict default ignore# 关闭所有的 NTP 要求封包
restrict 127.0.0.1 # 开启内部递归网络接口 lo
restrict 192.168.0.0 mask 255.255.255.0 nomodify #在内部子网里面的客户端可以 进行网络校时,但不能修改NTP服务器的时间参数。
server 133.100.9.2 prefer #用133.100.9.2做上级时间服务器
server 198.123.30.132 #198.123.30.132作为上级时间服务器参考
restrict 133.100.9.2 #开放server 访问我们ntp服务的权限
restrict 198.123.30.132
driftfile /var/lib/ntp/drift
保存退出后。启动NTP服务
service ntpd start
如果想每次系统启动,NTP服务自动启动,请输入下面命令: chkconfig -level 35 ntpd on 注意:
1.NTP服务的端口是123,使用的是udp协议,所以NTP服务器的防火墙必须对外开放udp 123这个端口。
2.Ntpd启动的时候通常需要一段时间进行时间同步,所以在ntpd刚刚启动的时候还不能正常提供时钟服务,最长大概有5分钟吧,如果超过了这个时间请检查一下您的配置文件。
六、NTP客户端的使用
Linux系统
在Linux 上面进行网络校时非常简单,执行 ntpdate 即可:
ntpdate 192.168.0.1 #192.168.0.1是NTP服务器的IP
不要忘了使用hwclock命令,把时间写入bios
hwclock -w
如果想定时进行时间校准,可以使用crond服务来定时执行。
编辑 /etc/crontab 文件
加入下面一行:
30 8 * * * root /usr/sbin/ntpdate 192.168.0.1; /sbin/hwclock -w #192.168.0.1是NTP服务器的IP地址
然后重启crond服务
service crond restart
这样,每天 8:30 Linux 系统就会自动的进行网络时间校准。
Windows 系统
在 Windows XP上面使用NTP进行时间校准也很简单:
双击桌面任务栏上的时间,弹出“日期和时间”属性窗口,如图所示:
选择Internet时间,在服务器中填入你的NTP服务器的IP地址或者域名,然后点击立即更新,您的系统时间就会立即更新。如果想定时更新,把左上角的自动与Internet时间服务器同步选中,然后点击右下角的应用即可。
yy-2-3.tif
如 果不是Windows XP系统,但是NTP服务器同时也是samba服务器的话,则对Windows来说,不需要安装任何时间同步软件,因为Windows客户端可以用net time\\时间服务器IP或服务器netbios名/set/yes来同步。可以把该命令放在开始菜单的启动项中,启动windows时自动同步。

由于net time命令是利用Netbios over TCP/IP协议来同步时间,所以NTP服务器不同时是samba 服务器的话,就需要Windows客户端安装时间同步软件。这方面的软件很多,使用也很简单,读者可以上网查找一下。

Ⅱ hwclock 输出打印是什么意思

clock命令就是hwclock的链接。
设置需要su权限。
设置系统时间用date
date 041809392011
将系统时间设为2011年4月18日 9:39

设置硬件时间用hwclock
hwclock --systohc 将系统时间赋予硬件时间
hwclock --hctosys 将硬件时间赋予系统时间

硬件时间应为当地时间,而不是UTC时间

Ⅲ 如何复制centos系统形

在我们使用CentOS系统的时候,也许时区经常会出现问题,有时候改完之后还是会出错,下面我们就来学习一种方法来改变这个状况。如果没有安装,而你使用的是 CentOS系统 那使用命令 yum install ntp
然后:ntpdate us.pool.ntp.org 。
因为CentOS系统是用rhas的源码再编译的,很多地方是完全一样的。
rhas5的时区是以文件形式存在的,当前的时区文件是在/etc/localtime
那么其他时区的文件存放在哪里呢?
在/usr/share/zoneinfo下
我们用东八区,北京,上海的时间
#cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#reboot
重启之后,date查看时间、查看当前时区 date -R、查看/修改Linux时区和时间
一、时区
1. 查看当前时区
date -R
2. 修改设置时区
方法(1)
tzselect
方法(2) 仅限于RedHat Linux 和 CentOS系统
timeconfig
方法(3) 适用于Debian
dpkg-reconfigure tzdata

3. 复制相应的时区文件,替换CentOS系统时区文件;或者创建链接文件
cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime
在中国可以使用:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
二、时间
1、查看时间和日期
date
2、设置时间和日期
将CentOS系统日期设定成1996年6月10日的命令
date -s 06/22/96
将CentOS系统时间设定成下午1点52分0秒的命令
date -s 13:52:00
3. 将当前时间和日期写入BIOS,避免重启后失效
hwclock -w
三、定时同步时间
# /usr/sbin/ntpdate 210.72.145.44 > /dev/null 2>&1

Ⅳ win7怎样使用kernel streaming

内核流(Kernel Streaming)驱动模型在多媒体方面应用的比较多,支持内核流模型的驱动能够
向系统报告它的性能,以及能够将数据高效,通用的传递。通俗的说,就是可以将摄像头的数据直接传递到显卡中显示,而不需要通过应用层.它可以避免数据在应用层和内核层之间的传递,但是这对于上层来说是透明的;并且采用WDM 内核流模型还可以实现设备无关性,使得程序有很好的移植性和通用性。一般来说,QQ摄像头就是使用基于WDM内核流的组件来实现的。所以可以在打开摄像头的时候轻易的更换为给对方播放影音文件(在上层使用相同的组件和流程,仅仅更换了source filter)。在这里需要指明的是,minidriver一般是可以和硬件设备相关,但是也不一样会和硬件设备相关,它在内核层同样可以调用其他的组件,例如可以实现虚拟摄像头之类的应用。

一般来说,硬件设备会提供一个KsProxy组件,这个组件能够完成一些相应的扩展功能,同时,也可以将数据进行不同类别的传送。上层应用程序能够控制底层数据的流向,而不是将数据拷贝到应用层,然后再传递给内核层处理(这个和DirectX的处理有相似的地方,因为DirectShow曾经也是DirectX的一员)。

虽然现在微软对于流内核结构进行了调整,新的流类型采用的是AVStream(下一次在叙述AVStream框架)。但是从目前来看,很多情况下仍然采用目前的方式来处理数据。

下面通过源代码和数据类型的形式来讲解一下这个驱动程序的框架结构。会尽量屏蔽代码中关于具体设备的细节,专注于描述stream class的流程和结构:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1. 驱动程序的入口点:

NTSTATUS DriverEntry(__in PDRIVER_OBJECT DriverObject, __in PUNICODE_STRING

RegistryPath)
{
HW_INITIALIZATION_DATA HwInitData;

RtlZeroMemory( &HwInitData, sizeof(HW_INITIALIZATION_DATA) );

HwInitData.HwInitializationDataSize = sizeof(HwInitData); // 结构大小
HwInitData.HwInterrupt = NULL; // 硬件回调
HwInitData.HwReceivePacket = MyReceivePacket; // 控制回调
HwInitData.HwCancelPacket = MyCancelOnePacket; // 取消回调
HwInitData.HwRequestTimeoutHandler = MyTimeoutHandler; // 超时回调
HwInitData.DeviceExtensionSize = sizeof(MY_EXTENSION); // 设备扩展
HwInitData.PerStreamExtensionSize = sizeof(STREAMEX); // 流扩展
HwInitData.PerRequestExtensionSize = sizeof(IRB); // SRB大小
HwInitData.FilterInstanceExtensionSize = 0; // 安装大小
HwInitData.BusMasterDMA = FALSE; // 总线DMA
HwInitData.Dma24BitAddresses = FALSE; // DMA地址
HwInitData.BufferAlignment = sizeof(ULONG) - 1; //
HwInitData.TurnOffSynchronization = TRUE;
HwInitData.DmaBufferSize = 0;

// 注册流端口驱动和回调函数
return (StreamClassRegisterAdapter(DriverObject, RegistryPath, &HwInitData));
}

这里可以看得出,驱动入口点基本上只是向stream class注册回调函数和信息。此处的设备

扩展和流扩展需要我们自己定义。

超时回调函数和取消回调函数本身并没有做太过于特殊的事情,关键在于控制命令回调函数,它是接收上层,也就是stream class 发送的控制包,下面会详细的讲解控制命令回调函数:

2. MyReceivePacket函数:

VOID
MyReceivePacket(IN PHW_STREAM_REQUEST_BLOCK pSrb)
{
PIO_STACK_LOCATION IrpStack;
PMY_EXTENSION pDevExt = (PMY_EXTENSION) pSrb->HwDeviceExtension;

PAGED_CODE();

pSrb->Status = STATUS_SUCCESS;

switch (pSrb->Command) {

case SRB_INITIALIZE_DEVICE: // 初始化设备
break;

case SRB_INITIALIZATION_COMPLETE: // 初始化设备完成
break;

case SRB_GET_STREAM_INFO:// 获取设备信息
break;

case SRB_OPEN_STREAM: // 打开流
break;

case SRB_CLOSE_STREAM: // 关闭流
break;

case SRB_SURPRISE_REMOVAL: // 移除设备
break;

case SRB_UNKNOWN_DEVICE_COMMAND: // 未知的命令
break;

case SRB_UNINITIALIZE_DEVICE: // 卸载设备
break;

case SRB_GET_DATA_INTERSECTION: // 获取格式和范围
break;

case SRB_CHANGE_POWER_STATE: // 改变电源状态
break;

case SRB_GET_DEVICE_PROPERTY: // 获取设备属性
break;

case SRB_SET_DEVICE_PROPERTY: // 设置设备属性
break;

case SRB_PAGING_OUT_DRIVER: // ?
break;

default:

pSrb->Status = STATUS_NOT_IMPLEMENTED;
break;
}

StreamClassDeviceNotification(DeviceRequestComplete, pSrb->HwDeviceExtension,

pSrb);

}

可以看出来的是,上层会通过向这个函数发送命令包,来控制设备的行为。这个端口驱动需要

自己决定从什么拷贝来数据,或者怎么向上层回复。

这里stream class的命令中,需要关注地方并不多,由于设备可能会是USB设备/1394设备/网络

组件/图像采集卡,所以很难统一的给出一份具体的代码.但是通过下面的几个命令的讲解,大家

应该很容易的构建出具体设备的代码来:

2.1 初始化命令: 在设备的初始化阶段,stream class 会依次发送下面的命令
SRB_INITIALIZE_DEVICE->SRB_GET_STREAM_INFO->SRB_INITIALIZATION_COMPLETE

一般来说,SRB_INITIALIZE_DEVICE命令主要是初始化设备扩展和属性结构的初始化,

SRB_GET_STREAM_INFO命令则是向注册表写入自己的属性,并提供相应的另一组回调函数给

Stream class,便于接受更微观的控制;SRB_INITIALIZATION_COMPLETE命令一般是一个完成回调

的方式。

下面的代码会揭示在SRB_GET_STREAM_INFO命令时候,一般会进行的处理:

typedef struct _HW_STREAM_HEADER {
ULONG NumberOfStreams; // 支持的流的数目
ULONG SizeOfHwStreamInformation; // 结构大小
ULONG NumDevPropArrayEntries; // 支持的属性数组大小
PKSPROPERTY_SET DevicePropertiesArray; // 属性数组
ULONG NumDevEventArrayEntries; // 支持的事件数组大小
PKSEVENT_SET DeviceEventsArray; // 事件数组
PKSTOPOLOGY Topology; //
PHW_EVENT_ROUTINE DeviceEventRoutine; // 超时时间
ULONG Reserved[2]; // 保留
} HW_STREAM_HEADER, *PHW_STREAM_HEADER;

typedef struct _HW_STREAM_INFORMATION {
ULONG NumberOfPossibleInstances; // 设备支持的流的数量
KSPIN_DATAFLOW DataFlow; // 数据流的方向
BOOLEAN DataAccessible; // 数据释放是否能够被看到
ULONG NumberOfFormatArrayEntries; // 支持的属性信息
PKSDATARANGE* StreamFormatsArray; // 属性信息数组
PVOID ClassReserved[4];
ULONG NumStreamPropArrayEntries; // 流媒体的支持属性数组的下标
PKSPROPERTY_SET StreamPropertiesArray;// 属性数组
ULONG NumStreamEventArrayEntries;
PKSEVENT_SET StreamEventsArray;
GUID* Category; // Pin范围
GUID* Name; // Pin的名字
ULONG MediumsCount;
const KSPIN_MEDIUM* Mediums; // 媒体类型
BOOLEAN BridgeStream; // 允许流进行桥接?
ULONG Reserved[2];
} HW_STREAM_INFORMATION, *PHW_STREAM_INFORMATION;

VOID MyGetStreamInfo(IN PHW_STREAM_REQUEST_BLOCK Srb)
{
PHW_STREAM_HEADER StreamHeader = &(Srb->CommandData.StreamBuffer->StreamHeader);

PMY_EXTENSION pDevExt = (PMY_EXTENSION) Srb->HwDeviceExtension;
PHW_STREAM_INFORMATION StreamInfo = &(Srb->CommandData.StreamBuffer->StreamInfo);

PAGED_CODE();

ASSERT (Srb->NumberOfBytesToTransfer >=
sizeof (HW_STREAM_HEADER) +
sizeof (HW_STREAM_INFORMATION));

RtlZeroMemory(StreamHeader,
sizeof (HW_STREAM_HEADER) +
sizeof (HW_STREAM_INFORMATION));

StreamHeader->NumberOfStreams = 1;
StreamHeader->SizeOfHwStreamInformation = sizeof(HW_STREAM_INFORMATION);

StreamHeader->NumDevPropArrayEntries = pDevExt->ulPropSetSupported;
StreamHeader->DevicePropertiesArray = &pDevExt->VideoProcAmpSet;

StreamInfo->NumberOfPossibleInstances = 1;

StreamInfo->DataFlow = KSPIN_DATAFLOW_OUT;

StreamInfo->DataAccessible = TRUE;

StreamInfo->NumberOfFormatArrayEntries = pDevExt->ModeSupported;
StreamInfo->StreamFormatsArray = &pDevExt->MyStrmModes[0];

StreamInfo->NumStreamPropArrayEntries = NUMBER_VIDEO_STREAM_PROPERTIES;
StreamInfo->StreamPropertiesArray = (PKSPROPERTY_SET) VideoStreamProperties;

StreamInfo->Name = (GUID *) &PINNAME_VIDEO_CAPTURE;
StreamInfo->Category = (GUID *) &PINNAME_VIDEO_CAPTURE;

Srb->CommandData.StreamBuffer->StreamHeader.Topology = &Topology;

Srb->Status = STATUS_SUCCESS;

}

2.2 打开和关闭流: SRB_OPEN_STREAM/SRB_CLOSE_STREAM 命令,此处需要注意的就是一个协商的

过程了,因为此处上层和下层需要来协商进行哪种数据类型的传递。

下面的代码片段屏蔽了硬件的具体相关细节,主要描述和stream class相关的部分:

VOID MyOpenStream(IN PHW_STREAM_REQUEST_BLOCK pSrb)
{

PIRB Irb;
ULONG nSize;
PMY_EXTENSION pDevExt;
PSTREAMEX pStrmEx;
PKS_DATAFORMAT_VIDEOINFOHEADER pKSDataFormat =
(PKS_DATAFORMAT_VIDEOINFOHEADER) pSrb->CommandData.OpenFormat;
PKS_VIDEOINFOHEADER pVideoInfoHdrRequested =
&pKSDataFormat->VideoInfoHeader;

PAGED_CODE();

Irb = (PIRB) pSrb->SRBExtension;
pDevExt = (PMY_EXTENSION) pSrb->HwDeviceExtension;
pStrmEx = (PSTREAMEX)pSrb->StreamObject->HwStreamExtension;

// 缓存流扩展
pDevExt->pStrmEx = pStrmEx;

pSrb->Status = STATUS_SUCCESS;

// 确定哪些编号流被打开了。这些编号表明在流信息结构的偏移数组中被调用的
// 流信息适配器
//
// So:
// 0 - Video data from camera
//
// 0 - 从硬件出来的视频数据

switch (pSrb->StreamObject->StreamNumber) {

case 0:
// 检查设备是否在使用

// 找出格式,他们正试图打开第一格式,此处一般采用的是循环对比的方式
// 来找到合适的媒体类型。
if (!AdapterVerifyFormat (pDevExt->ModeSupported, pDevExt->MyStrmModes, pKSDataFormat, pSrb->StreamObject->StreamNumber)) {
pDevExt->pStrmEx = NULL;
pSrb->Status = STATUS_INVALID_PARAMETER;
return;
}

// 初始化流扩展
InitializeStreamExtension(pDevExt, pSrb->StreamObject, pStrmEx);

// 使用我们的安全版本
if (!NT_SUCCESS(RTL_SAFE_KS_SIZE_VIDEOHEADER(pVideoInfoHdrRequested, &nSize))) {

pSrb->Status = STATUS_INTEGER_OVERFLOW;
return;
}

pStrmEx->pVideoInfoHeader = ExAllocatePoolWithTag(NonPagedPool, nSize, 'macd');
if (pStrmEx->pVideoInfoHeader == NULL) {

ASSERT(pStrmEx->pVideoInfoHeader != NULL);

pDevExt->pStrmEx = NULL;

pSrb->Status = STATUS_INSUFFICIENT_RESOURCES;
return;
}

// 拷贝媒体信息头
RtlCopyMemory(
pStrmEx->pVideoInfoHeader,
pVideoInfoHdrRequested,
nSize);

// 分配硬件需要的资源
pSrb->Status = MyAllocateIsochResource(pDevExt, pSrb->SRBExtension, TRUE);

if (pSrb->Status) {

ExFreePool(pStrmEx->pVideoInfoHeader);
pStrmEx->pVideoInfoHeader = NULL;
pDevExt->pStrmEx = NULL;
pSrb->Status = STATUS_INSUFFICIENT_RESOURCES;
return;
}

// 提交控制回调/数据回调函数
pSrb->StreamObject->ReceiveDataPacket = (PHW_RECEIVE_STREAM_DATA_SRB) MyReceiveDataPacket;
pSrb->StreamObject->ReceiveControlPacket = (PHW_RECEIVE_STREAM_CONTROL_SRB) MyReceiveCtrlPacket;

if(pDevExt->bDevRemoved || pDevExt->bStopIsochCallback) {
pDevExt->bStopIsochCallback = FALSE;
pDevExt->bDevRemoved = FALSE;
}

// 初始化流扩展句柄信息

break;

default:
ASSERT(FALSE);
pDevExt->pStrmEx = NULL;
pSrb->Status = STATUS_INVALID_PARAMETER;
return;
}

pSrb->StreamObject->HwClockObject.ClockSupportFlags = 0;

// 我们不使用DMA方式
pSrb->StreamObject->Dma = FALSE;
pSrb->StreamObject->StreamHeaderMediaSpecific = sizeof(KS_FRAME_INFO);

// PIO 必须设置为mini驱动缓冲区使用逻辑寻址,我们不打算控制这部分缓冲区
pSrb->StreamObject->Pio = FALSE;

// 将最后保存配置
(pDevExt, (PIRB) pSrb->SRBExtension);

ASSERT(pSrb->Status == STATUS_SUCCESS);

}

VOID MyCloseStream(IN PHW_STREAM_REQUEST_BLOCK pSrb)
{
PMY_EXTENSION pDevExt;
PSTREAMEX pStrmEx;
PIRB pIrb;

PAGED_CODE();

pSrb->Status = STATUS_SUCCESS;

pDevExt = (PMY_EXTENSION) pSrb->HwDeviceExtension;
ASSERT(pDevExt);

// 等待所有的未决工作完成
KeWaitForSingleObject( &pDevExt->PendingWorkItemEvent, Executive, KernelMode, FALSE, NULL );

pStrmEx = (PSTREAMEX)pDevExt->pStrmEx;
ASSERT(pStrmEx);
if(!pStrmEx ) {
StreamClassDeviceNotification(DeviceRequestComplete, pSrb->HwDeviceExtension, pSrb);
return;
}

// pDevExt->Irb可能被释放了,在HwUninitialize()中
// 由于某个原因,所以必须使用下面的
pIrb = (PIRB) pSrb->SRBExtension;

// 保存设备扩展信息
MySetPropertyValuesToRegistry(pDevExt);

// 释放硬件资源
MyFreeIsochResource (pDevExt, pIrb, TRUE);
if(pStrmEx->pVideoInfoHeader) {
ExFreePool(pStrmEx->pVideoInfoHeader);
pStrmEx->pVideoInfoHeader = NULL;
}

pStrmEx->hMasterClock = 0;

// 如果输入读,那么取消掉它们
if(pDevExt->PendingReadCount > 0) {

if( InterlockedExchange((PLONG)&pStrmEx->CancelToken, 1 ) == 0 ) {

MyCancelAllPackets(
pDevExt,
&pDevExt->PendingReadCount
);
}
}

pDevExt->pStrmEx = 0;

StreamClassDeviceNotification(DeviceRequestComplete, pSrb->HwDeviceExtension, pSrb);

}

2.3 属性设置: 属性设置这一部分实际上都是通过特定的属性表来实现的,它和硬件的相关性很大,一般采用DEFINE_KSPROPERTY_TABLE宏来实现对于属性的封装,这一部分可以查阅相应的资料即可实现。

Ⅳ centos 7 安装完系统后怎么修改时区

设置修改CentOS系统时区在我们使用CentOS系统的时候,也许时区经常会出现问题,有时候改完之后还是会出错,下面我们就来学习一种方法来改变这个状况。如果没有安装,而你使用的是 CentOS系统 那使用命令 yum install ntp然后:ntpdate us 。因为CentOS系统是用rhas的源码再编译的,很多地方是完全一样的。rhas5的时区是以文件形式存在的,当前的时区文件是在/etc/localtime那么其他时区的文件存放在哪里呢?在/usr/share/zoneinfo下我们用东八区,北京,上海的时间#cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime#reboot重启之后,date查看时间、查看当前时区 date -R、查看/修改linux时区和时间一、时区1. 查看当前时区date -R2. 修改设置时区方法(1)tzselect方法(2) 仅限于RedHat linux 和 CentOS系统timeconfig方法(3) 适用于Debiandpkg-reconfigure tzdata3. 复制相应的时区文件,替换CentOS系统时区文件;或者创建链接文件cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime在中国可以使用:cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime二、时间1、查看时间和日期date2、设置时间和日期将CentOS系统日期设定成1996年6月10日的命令date -s 06/22/96将CentOS系统时间设定成下午1点52分0秒的命令date -s 13:52:003. 将当前时间和日期写入BIOS,避免重启后失效hwclock -w三、定时同步时间# /usr/sbin/ntpdate 210.72.145.44 > /dev/null 2>&1这样我们就完成了关于设置修改CentOS系统时区的问题了。

Ⅵ 如何安装gentoo linux

下载基本系统和源码包
为了加快安装速度,我是先将需要用到的几个镜象全部下载到本地。所须下载的文件包括:
1、最小安装镜象包:install-x86-minimal-20130528.iso
2、Stage Tarball快照包:stage3-i686-20130528.tar.bz2
3、系统Portage快照包:portage-latest.tar.bz2

网络环境或U盘准备
下载完成之后,我的办法是将上述2与3两个包放置到局域网的web上(web地址为:192.168.1.100),做个简单的页面,便于下载与访问。页面为:index.html,
页面上只有两行简单的代码:
< a href="stage3-i686-20130528.tar.bz2" > stage3< / a >
< br >< a href="portage-latest.tar.bz2" >portage < / a >< br >
如此,准备工作完成。以下开始安装:
或使用Linux文件系统的EXT4格式的U盘存放以上两个文件

分区
用最小安装镜象包install-x86-minimal-20130528.iso启动系统,
1、划分磁盘为了简单方便,还是按wiki的方法,只分为三个区,
如下:
/dev/sda1 启动分区
/dev/sda2 交换分区
/dev/sda3 根分区
以下是具体划分磁盘与步骤:
fdisk /dev/sda首先建立boot分区:Command (m for help):
nCommand action e extended p primary partition
(1-4)pPartition number (1-4): 1First cylinder (1-3876, default 1): (按回车)
Using
default value 1Last cylinder or +size or +sizeM or +sizeK (1-3876,
default 3876):
+100M(这里设定比wiki上稍大一些,便于今后使用多个内核)由于这个分区是将来的boot,所以需要把这个分区设置成可启动的。
键入a来给分区添加启动标志,
然后键入1。如果你再次按p键,你就会注意到,
在“Boot”那一列有个*。下面建立swap分区:同上,
键入n创建一个新分区,然后键入p来告诉fdisk你创建的是主分区。接着输入2来创建第2个主分区,在本例中是/dev/sda2。当提示输入第一个柱面的时候,直接敲回车。当提示输入最后一个柱面的时候,输入+512M来创建一个512MB大小的分区。在这之后,键入t来设置分区类型,键入2选择你刚刚创建的那个分区,然后再输入82,即把分区设置成了“Linux

Swap”。下面,建立根分区:同上,键入n创建一个新分区,然后键入p来告诉fdisk你创建的是主分区。接着输入3来创建第3个主分区,在本例中是/dev/sda3。当提示输入第一个柱面的时候,直接敲回车。当提示输入最后一个柱面的时候,仍然直接回车,把磁盘上的剩余空间创建一个分区。完成以上这些步骤之后,键入p,应该显示一个与下面类似的分区表:
Device Boot Start End Blocks Id
System/dev/sda1 * 1 14 105808+ 83
Linux/dev/sda2 15 81 506520 82
Linux swap/dev/sda3 82 3876 28690200 83
Linux2、 格式化分区并挂载分区格式化分区
mkfs.ext3 /dev/sda1
mkfs.ext4 /dev/sda3
mkswap /dev/sda2
挂载分区
swapon /dev/sda2
mount /dev/sda3 /mnt/gentoo
mkdir /mnt/gentoo/boot
mount /dev/sda1 /mnt/gentoo/boot

开始安装基本系统
首先安装Stage Tarball进入Gentoo的挂载点#
cd /mnt/gentoo我是预先将Stage包放到了局域网内的web上的,所以直接使用links访问页面并下载:
# links http://192.168.1.100局域网速度很快,几秒就下载完毕,那么现在解开stage包:
# tar xvjpf stage3-*.tar.bz2注意,解包的参数千万不要出错:xvjpf
现在stage已经安装好,下面我们继续安装Portage。小心:要确保执行操作的当前位置是:
#/mnt/gentoo ,如果不是,那么还得执行:
# cd /mnt/gentoo同样使用links访问上述局域网内的页面并下载:
# links http://192.168.1.100以下,解开Portage快照包:
# tar xvjf /mnt/gentoo/portage-latest.tar.bz2 -C /mnt/gentoo/usr
小心,上述参数中的“-C”,C为大写!

编译安装
-----------------------------------
以下,配置编译的选项注意:
编译选项放在make.conf中,现在中文wiki上对这个文件位置的说明有错误,现在的位置是在/mnt/gentoo/etc/portage/make.conf,
中文wiki上说的是在/mnt/gentoo/etc/make.conf(英文wiki上是正确的)。所有可参考的变量,都用注释形式罗列在/mnt/gentoo/usr/share/portage/config/make.conf.example里。以下,开始编辑这个配置文件:用你喜欢的编辑器(nano或者vi)打开该文件
# vi /mnt/gentoo/etc/make.conf此时我们只须添加简单点的下三个变量:
CFLAGS="-O2 -march=i686 -pipe"CXXFLAGS="${CFLAGS}"
MAKEOPTS="-j2"
将自己访问时速度最快的镜象站点也加入该文件:
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
mirrorselect -i -r -o >> /mnt/gentoo/etc/portage/make.conf
----------------------------------拷
贝DNS设置到系统中:
cp -L /etc/resolv.conf /mnt/gentoo/etc/
将几个重要的当前目录,挂载到新系统下去:
# mount -t proc none /mnt/gentoo/proc
# mount --rbind /sys /mnt/gentoo/sys
# mount --rbind /dev /mnt/gentoo/dev
或者下面这样也行:
# mount -t proc none /mnt/gentoo/proc
# mount -o bind /sys /mnt/gentoo/sys
# mount -o bind /dev /mnt/gentoo/dev
----------------------------------以下,切换到新系统:
# chroot /mnt/gentoo /bin/bash
# source /etc/profile# export PS1="(chroot) $PS1"
------------------------------------------------------------------
更新Portage树
# mkdir /usr/portage
# emerge-webrsync 或者:# emerge --sync
定义系统profile运行下面代码,查看可用的profile
# eselect profile list看到列表之后,我选择的是desktop,对应的是3,所以执行:# eselect profile set 3
--------------------------------
查看USE变量的可用列表
# less /usr/portage/profiles/use.desc将自己可能用到的USE变量,加入到编译选项文件中
# nano -w /etc/portage/make.conf
例如我的:USE="gtk alsa xorg nv"
--------------------------------
一系列基本设置:
1、时区设置:
# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
或者:# ln –s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
2、字符编码设置
# nano -w /etc/locale.gen
还是先保留美式英语吧en_US ISO-8859-1en_US.UTF-8 UTF-8保存之后,
执行:# locale-gen
--------------------------------
安装内核码源:
# emerge gentoo-sources安装完毕之后,不要忙着手工配置,毕竟很多选项还弄不明白其含义,所以我选择的是自动配置:
先安装自动配置工具genkernel
# emerge genkernel复制配置文件到新系统(其实也可不复制,自动工具可按默认配置文件进行配置)
# zcat /proc/config.gz > /usr/share/genkernel/arch/x86/kernel-config
下面进行自动配置
# genkernel all于是,慢慢等吧,上个厕所,喝几口茶都行……完成之后,查看一下自动生成的内核和initrd的名字
# ls /boot/kernel* /boot/initramfs*这里要记下来,等会儿安装grub的时候要用到
---------------------------------------
配置系统fstab
# nano -w /etc/fstab如果没有出错,那么几乎不用修改,看看就行。
---------------------------------------
生成主机名等
# nano -w /etc/conf.d/hostname
下面变量指定主机名HOSTNAME="主机名"配置网络
# nano -w /etc/conf.d/net
我用的是DHCPCD,所以加入:
config_eth0=( "dhcp" )固定IP的设定,请参考wiki另外,这里要小心,因为网卡名很可能不是eth0 !
在启动时自动启用网络,执行:
# rc-update add net.eth0 default
同样,这里要注意网卡名!修改网络信息
# nano -w /etc/hosts127.0.0.1 (主机名) localhost
----------------------------------
修改Root根密码:
# passwd输入两次不用说!
修改通用系统配置
# nano -w /etc/rc.conf要改什么东西就自己看着办啦,不改,保持默认也行。不过不要忘了,一旦安装了图形界面,就得安装显示管理器,显示管理器的启动都是在这里加入的。
修改键盘设置
# nano -w /etc/conf.d/keymapsKEYMAP这个变量要特别注意。如果你选择了错误的KEYMAP,在你敲击键盘的时候会有奇怪的结果。
修改时钟选项
#
nano -w
/etc/conf.d/hwclock(中文wiki这里又是错的)如果你机器上的钟不用UTC,你需要在文件钟加上CLOCK="local"。否则,你的时钟就有可能出现偏差。完成对/etc/conf.d/clock的配置后,保存并且退出。上述几项其实都可以暂时保持默认。
安装必要的系统工具
1、系统日志工具
# emerge syslog-ng# rc-update add syslog-ng default

安装引导
安装开机引导程序,还是选grub,这东西我熟悉,呵呵~~~~
# emerge grub安装完成之后,修改grub的配置文件。这里要特别小心,一旦出错就启动不了机子啦。我没有按wiki修改,而是按自己对grub的理解进行的修改:
# nano -w /boot/grub/grub.confdefault 0timeout 5
#
splashimage=(hd0,0)/boot/grub/splash.xpm.gztitle Gentooroot
(hd0,0)kernel /boot/ kernel-genkernel-x86-3.8.13-gentoo
root=/dev/sda3initrd /boot/ initramfs-genkernel-x86-3.8.13-gentoo
# 在有windows,需要双启动时,可输入以下内容:title Windows XProotnoverify (hd0,5) (小心,我这里假设windows是在磁盘的第6个分区)makeactivechainloader +1
创建/etc/mtab#
grep -v rootfs /proc/mounts > /etc/mtab执行grub-install安装GRUB:#
grub-install --no-floppy /dev/sda至此,基本系统安装完成,下面准备结束安装:首先退出挂载:
# exit然后卸载先前挂载到新系统中的目录
# cd
# umount -l /mnt/gentoo/dev{/shm,/pts,}
# umount -l /mnt/gentoo{/boot,/proc,}
或者如下也行:# umount /mnt/gentoo/boot /mnt/gentoo/dev /mnt/gentoo/proc /mnt/gentoo
完成安装:
重启系统
# reboot
或者关闭系统
# poweroff
------------------------------------

Ⅶ linux 嵌入式软硬件时钟 怎么同步

置硬件时间,

开机时Linux会从硬件的rtc的时钟芯片中获取一次硬件时间,然后以此为基础来运行系统时间。
settimeofday 相当于date shell命令,紧紧能设置系统时间。

如果想设置硬件时间,需要一个hwclock -w shell原理的函数来写硬件的rtc。
扒一扒 busybox的 hwclock.c源码(http://www.codeforge.cn/read/97203/hwclock.c__html)
可以知道这么抄写功能源码:

[cpp] view plain
static void write_rtc(time_t t, int utc)
{
int rtc;
struct tm tm;

if (( rtc = open ( "/dev/rtc", O_WRONLY )) < 0 )
{
if (( rtc = open ( "/dev/misc/rtc", O_WRONLY )) < 0 )
bb_perror_msg_and_die ( "Could not access RTC

Ⅷ 关于linux 下 rtc的问题,求高手解答

系统时间一般是保存在时钟寄存器中的,由于绝对时间值比较大,所以寄存器中都是放一个相对时间值,即系统时间(日期+时间)减去一个固定的值(多数是1900年,也有的用1970年)后的秒数。取系统时间时会再把这个值加回来,从而得到真正的系统时间。
uboot中取时间的函数是将时钟寄存器中的值取出后,加上那个固定值(如1900年),直接返回,如果时间寄存器中放的是12年的秒数,在u-boot中就会显示是1912年。
linux kernel计算日期中有点不同,在算出年号后(加上1900年),接着判断,年号<=1969,再加上100,所以同样时间寄存器值将会校正为2012了。
你的系统显示不一致,可能原因是u-boot和kernel源代码移植不完整,u-boot和kernel实时时钟的存储和计算策略不一致。

Ⅸ linux如何设置服务器上的系统时间

date -s “20181121 17:34:00”

输入这条命令系统时间会设置为2018年11月21日17点39分。

修改之后你可以输入date命令查询当前时间。

(9)hwclock源码扩展阅读:

1、桌面右上角齿轮按钮,点击System Settings。

Ⅹ 深入解析Ubuntu操作系统的目录

第Ⅰ部分 安装与配置
第1章 Ubuntu概述
1.1 什么是Ubuntu
1.1.1 Ubuntu内部
1.1.2 Ubuntu的安装特点
1.1.3 Ubuntu文件系统的特点
1.2 Ubuntu的商业应用
1.3 Ubuntu的个人应用
1.4 64位Ubuntu
1.5 基于PPC平台的Ubuntu
1.6 基于双核处理器的Ubuntu
1.7 充分利用Ubuntu与Linux的文档
1.8 Ubuntu开发者与文档
1.9 阅读参考
第2章 安装Ubuntu前的准备
2.1 计划Ubuntu的部署方案
2.1.1 商业部署需要考虑的因素
2.1.2 系统部署需要考虑的因素
2.1.3 用户因素
2.1.4 预部署计划的核对表
2.1.5 安装计划
2.2 硬件需求
2.2.1 安装Ubuntu的最低硬件配置
2.2.2 在遗留的设备上安装Ubuntu
2.2.3 为Ubuntu安装分配硬盘空间
2.2.4 检查硬件的兼容性
2.2.5 为潜在的硬件问题做准备
2.2.6 准备并使用硬件列表
2.3 安装过程的准备
2.4 安装前与安装过程中的硬盘分区操作
2.4.1 选择分区方案
2.4.2 将Linux文件系统安排到各个分区上
2.5 使用Ubuntu的kickstart安装方式
2.6 阅读参考
第3章 安装Ubuntu
3.1 开始安装前的准备
3.1.1 检查硬件规格
3.1.2 安装选项
3.1.3 计划分区策略
3.1.4 引导程序
3.1.5 本地光盘安装
3.2 逐步安装
3.2.1 开始安装
3.2.2 首次更新
3.3 关机
3.4 阅读参考
第4章 安装后的配置
4.1 安装后配置问题的故障诊断
4.2 sudo命令
4.3 首次更新
4.4 配置软件源
4.5 安装显卡驱动
4.6 更改Ubuntu的桌面风格
4.6.1 更改桌面背景
4.6.2 更改颜色
4.6.3 更改系统字体
4.7 首选行为
4.7.1 首选应用程序
4.7.2 Removable Drives and Media
4.8 输入设备
4.8.1 键盘快捷键
4.8.2 键盘布局
4.8.3 鼠标
4.9 检测与配置调制解调器
4.9.1 配置串口调制解调器
4.9.2 为笔记本电脑配置WinModem
4.10 配置Ubuntu中的电源管理
4.11 重设日期和时间
4.11.1 使用date命令
4.11.2 使用hwclock命令
4.11.3 更改时间和日期
4.12 管理PCMCIA
4.12.1 使用PCMCIA
4.12.2 控制PCMCIA服务
4.13 配置与使用CD. DVD和CD-RW光驱
4.14 配置无线网络
4.15 配置Firestarter
4.16 阅读参考
第5章 Ubuntu初步
5.1 使用Linux文件系统
5.1.1 查看Linux文件系统
5.1.2 使用/bin和/sbin目录下的基本命令
5.1.3 在/boot目录和/dev目录中存储引导的内核和查看存储设备
5.1.4 使用和编辑/etc目录下的文件
5.1.5 保护用户目录/home中的内容
5.1.6 使用/proc目录的内容与内核进行交互
5.1.7 使用/usr目录下的共享数据
5.1.8 在/tmp目录下存储临时文件
5.1.9 访问/var目录下的可变数据文件
5.2 登录与使用Linux
5.2.1 基于文本的控制台登录
5.2.2 使用虚拟控制台
5.2.3 在Linux控制台会话中使用简单的键盘和鼠标技巧
5.2.4 退出
5.2.5 从远程计算机登录与退出
5.3 修改用户信息
5.4 阅读文档
5.4.1 使用手册页
5.4.2 查找和阅读软件包文档
5.5 使用shell
5.5.1 使用环境变量
5.5.2 使用shell导航和搜索
5.5.3 使用shell管理文件
5.5.4 通过shell压缩解压的文件
5.6 使用文本编辑器
5.6.1 使用vi
5.6.2 使用emacs
5.7 使用权限
5.7.1 指派权限
5.7.2 目录权限
5.7.3 理解设置用户ID和设置组ID权限
5.8 以root用户身份工作
5.8.1 创建用户
5.8.2 删除用户
5.8.3 关闭系统
5.8.4 重启系统
5.9 阅读参考
第6章 X Window系统
6.1 X的基本概念
6.2 使用X11R7
6.2.1 xorg.conf文件的元素
6.2.2 配置X
6.3 启动X
6.3.1 使用显示管理器
6.3.2 通过使用startx从控制台启动X
6.4 选择和使用窗口管理器
6.5 GNOME和KDE桌面环境
6.5.1 GNU网络对象模型环境GNOME)
6.5.2 K桌面环境(KD)
6.5.3 Xfce:备选的轻量级桌面环境
6.6 阅读参考
第7章 管理软件
7.1 使用Add/Remove Applications管理软件
7.2 使用Synaptic管理软件
7.3 保持最新
7.4 使用命令行
7.4.1 日常使用
7.4.2 查找软件
7.5 从源代码编译软件
7.6 阅读参考
第8章 Internet应用:Web冲浪. 写邮件. 读新闻
8.1 选择Web浏览器
8.1.1 Mozilla Firefox
8.1.2 Mozilla Suite
8.1.3 Epiphany
8.1.4 Konqueror
8.2 选择电子邮件客户端
8.2.1 Evolution
8.2.2 Mozilla Thunderbird
8.2.3 Balsa
8.2.4 KMail
8.2.5 Mozilla Mail
8.2.6 mail应用程序
8.2.7 mutt
8.2.8 其他邮件客户端
8.3 网络新闻概述
8.4 选择新闻阅读器
8.4.1 slrn新闻客户端
8.4.2 Pan新闻客户端
8.4.3 Mozilla新闻客户端
8.4.4 Thunderbird新闻客户端
8.5 Internet Relay Chat
8.6 GAIM IM
8.7 使用Ekiga进行视频会议
8.8 阅读参考
第9章 生产应用程序
9.1 Ubuntu中的办公套件
9.1.1 使用OpenOffice.org
9.1.2 使用OpenOffice.org Writer
9.1.3 使用OpenOffice.org Calc
9.1.4 使用GNOME Office
9.1.5 使用KOffice
9.2 为Microsoft Windows编写的生产应用程序
9.3 阅读参考
第10章 多媒体应用
10.1 在Ubuntu中烧录CD和DVD
10.1.1 从命令行创建CD
10.1.2 从命令行创建DVD
10.1.3 使用Ubuntu的图形界面客户端创建CD和DVD
10.2 声音和音乐
10.2.1 声卡
10.2.2 录音
10.2.3 声音格式
10.2.4 翻录音乐
10.2.5 音乐播放器
10.2.6 流式音频
10.3 观看电视和视频
10.3.1 电视和视频硬件
10.3.2 视频格式
10.3.3 在Linux中观看视频
10.3.4 使用Linux观看电视
10.3.5 个人录像机
10.3.6 DVD和视频播放器
10.4 阅读参考
第11章 图形处理
11.1 在Ubuntu中使用数码相机
11.1.1 网络摄像头
11.1.2 手持式数码相机
11.1.3 使用F-Spot
11.2 在Ubuntu中使用扫描仪
11.2.1 使用图形格式
11.2.2 捕获屏幕图像
11.3 阅读参考
第12章 Ubuntu打印
12.1 Ubuntu打印概述
12.2 配置和管理打印服务
12.2.1 快速完成基于GUI的打印机配置
12.2.2 管理打印服务
12.3 创建和配置本地打印机
12.3.1 创建打印队列
12.3.2 编辑打印机设置
12.4 阅读参考
第13章 游戏
13.1 Linux游戏
13.1.1 安装专有显卡驱动程序
13.1.2 安装DOOM 3
13.1.3 安装Unreal Tournament 2004
13.1.4 安装Quake 4
13.1.5 安装Wolfenstein: Enemy Territory
13.1.6 安装Battle for Wesnoth
13.1.7 使用Cedega玩Windows游戏
13.2 阅读参考
第Ⅱ部分 系统管理
第14章 管理用户
14.1 用户账户
14.1.1 用户ID和组ID
14.1.2 文件访问权限
14.2 用户组管理
14.3 用户管理
14.3.1 用户管理工具
14.3.2 添加新用户
14.3.3 监视用户在系统上的行为
14.4 口令管理
14.4.1 系统口令策略
14.4.2 口令文件
14.4.3 shadow口令
14.4.4 管理用户口令的安全性
14.4.5 用户口令的批量更改
14.5 权限提升
14.5.1 用su命令临时改变用户身份
14.5.2 适时地用sudo命令获取root权限
14.5.3 用受限shell控制用户权限
14.6 用户登录过程
14.7 磁盘配额
14.7.1 使用磁盘配额
14.7.2 手动配置磁盘配额
14.8 阅读参考
第15章 自动执行任务
15.1 自启动服务
15.1.1 开始启动加载过程
15.1.2 加载Linux内核
15.1.3 系统服务和运行级别
15.1.4 运行级别的定义
15.1.5 启动到默认运行级别
15.1.6 用GRUB启动到非默认的运行级别
15.1.7 理解init脚本以及初始化的最后步骤
15.1.8 用管理工具控制自启动服务
15.1.9 改变运行级别
15.1.10 利用运行级别排除故障
15.2 手动启动和停止服务
15.3 计划任务
15.3.1 使用at和batch命令制定计划任务
15.3.2 使用cron命令重复执行任务
15.4 shell控制基础
15.4.1 shell命令行
15.4.2 在shell中进行模式匹配
15.4.3 输入输出的重定向
15.4.4 管道数据
15.4.5 后台处理
15.5 编写和执行shell脚本
15.5.1 运行shell脚本程序
15.5.2 系统启动时自动加载shell脚本
15.5.3 使用指定的命令行解释器运行shell脚本
15.5.4 在脚本中使用变量
15.5.5 给变量赋值
15.5.6 获取变量的值
15.5.7 位置参数
15.5.8 位置参数实例
15.5.9 使用位置参数从命令行获取变量
15.5.10 使用简单的脚本自动执行任务
15.5.11 内置变量
15.5.12 特殊字符
15.5.13 用双引号处理字符串中含有空格的变量
15.5.14 用单引号保留未被扩展的变量
15.5.15 使用反斜杠作为逃逸符号
15.5.16 使用backtick符号
15.5.17 pdksh和bash中的表达式比较
15.5.18 tcsh中的表达式比较
15.5.19 for语句
15.5.20 while语句
15.5.21 until语句
15.5.22 repeat语句(tcsh)
15.5.23 select语句(pdksh)
15.5.24 shift语句
15.5.25 if语句
15.5.26 case语句
15.5.27 break和exit语句
15.5.28 在shell脚本中使用函数
15.6 阅读参考
第16章 系统资源
16.1 系统监视工具
16.1.1 控制台环境下的系统监视
16.1.2 使用kill命令控制进程
16.1.3 进程优先级调度与控制
16.1.4 使用free命令显示内存使用情况
16.1.5 磁盘配额
16.1.6 图形界面的进程和系统管理工具
16.1.7 KDE桌面环境的进程和系统监视工具
16.2 阅读参考
第17章 备份. 还原和恢复
17.1 选择合适的备份策略
17.1.1 为什么会丢失数据
17.1.2 备份需求与所需资源的评估
17.1.3 如何评价备份策略的好坏
17.1.4 做出选择
17.2 选择备份硬件和介质
17.2.1 可移动存储介质
17.2.2 网络存储
17.2.3 磁带驱动器备份
17.3 使用备份软件
17.3.1 tar:最基本的备份工具
17.3.2 GNOME中的File Roller软件
17.3.3 KDE中的归档工具(KDE ark和kdat)
17.3.4 使用dd命令归档
17.3.5 使用Amanda备份程序
17.3.6 可供选择的其他备份软件
17.4 复制文件
17.4.1 用tar命令复制文件
17.4.2 压缩. 加密和发送tar数据流
17.4.3 用cp命令复制文件
17.4.4 用mc命令复制文件
17.4.5 用scp命令复制文件
17.4.6 用rsync命令复制文件
17.5 恢复被删除的文件
17.5.1 在遇到未知的文件系统错误时使用-S选项重新格式化
17.5.2 用mc命令恢复被删除的文件
17.6 系统修复
17.6.1 Ubuntu系统修复盘
17.6.2 备份和恢复主引导记录
17.6.3 从普通的可引导软盘启动系统
17.6.4 使用GRUB可引导软盘
17.6.5 使用系统恢复功能
17.7 阅读参考
第18章 网络连接
18.1 基础:localhost接口
18.1.1 检查loopback接口是否可用
18.1.2 手动配置loopback接口
18.2 TCP/IP网络
18.2.1 TCP/IP地址
18.2.2 在Ubuntu中使用IP伪装技术
18.2.3 端口
18.3 网络结构
18.3.1 子网划分
18.3.2 子网掩码
18.3.3 广播. 单播和多播地址
18.4 网络硬件设备
18.4.1 网卡
18.4.2 网线
18.4.3 集线器和交换机
18.4.4 路由器和网桥
18.4.5 初始化新的网络硬件
18.5 使用网络配置工具
18.5.1 在命令行中配置网络接口
18.5.2 网络配置文件
18.5.3 使用图形界面配置工具
18.6 动态主机配置协议
18.6.1 DHCP工作原理
18.6.2 在安装和启动时激活DHCP
18.6.3 DHCP软件的安装和配置
18.6.4 使用DHCP配置网络主机
18.6.5 DHCP的其他用途
18.7 无线网络
18.7.1 Ubuntu对无线网络的支持..
18.7.2 无线网络的优势
18.7.3 从现有的无线网络协议中选择合适的协议
18.8 连接Internet
18.9 通用的配置信息
18.10 配置数字用户线路访问Internet
18.10.1 理解以太网上的点对点协议
18.10.2 手动配置PPPoE连接
18.11 配置拨号Internet访问
18.12 排除连接故障
18.13 阅读参考
18.13.1 通用
18.13.2 DHCP
18.13.3 无线网络
18.13.4 书籍
第19章 使用ssh和telnet进行远程访问
19.1 架设Telnet服务器
19.2 Telnet与SSH的对比
19.3 架设SSH服务器
19.4 SSH工具
19.4.1 使用scp在计算机之间复制单个文件
19.4.2 使用sftp在计算机之间复制多个文件
19.4.3 使用ssh-keygen启动Key-based登录方式
19.5 远程X图形环境
19.5.1 XDMCP
19.5.2 VNC
19.6 阅读参考
第Ⅲ部分 服务器应用
第20章 Apache Web服务器管理
20.1 Apache Web服务器简介
20.2 安装Apache服务器
20.2.1 使用APT安装
20.2.2 亲自从源代码构建
20.3 启动与停止Apache
20.3.1 手动启动Apache服务器
20.3.2 使用/etc/init.d/apache2
20.4 设置运行时服务器配置
20.4.1 运行时配置指令
20.4.2 编辑httpd.conf
20.4.3 Apache多处理模块
20.4.4 使用.htaccess配置文件
20.5 文件系统认证与访问控制
20.5.1 使用allow和deny限制访问
20.5.2 认证
20.5.3 关于访问控制的结束语
20.6 Apache模块
20.6.1 mod_access
20.6.2 mod_alias
20.6.3 mod_asis
20.6.4 mod_auth
20.6.5 mod_auth_anon
20.6.6 mod_auth_dbm
20.6.7 mod_auth_digest
20.6.8 mod_autoindex
20.6.9 mod_cgi
20.6.10 mod_dir和mod_env
20.6.11 mod_expires
20.6.12 mod_headers
20.6.13 mod_include
20.6.14 mod_info和mod_log_config
20.6.15 mod_mime和mod_mime_magic
20.6.16 mod_negotiation
20.6.17 mod_proxy
20.6.18 mod_rewrite
20.6.19 mod_setenvif
20.6.20 mod_speling
20.6.21 mod_status
20.6.22 mod_ssl
20.6.23 mod_unique_id
20.6.24 mod_userdir
20.6.25 mod_usertrack
20.6.26 mod_vhost_alias
20.7 虚拟主机
20.7.1 基于地址的虚拟主机
20.7.2 基于名字的虚拟主机
20.8 日志
20.9 动态内容
20.9.1 CGI
20.9.2 SSI
20.9.3 基本的SSI指令
20.9.4 流程控制
20.10 可在Ubuntu中使用的其他Web服务器
20.10.1 Sun ONE Web服务器
20.10.2 Zope
20.10.3 Zeus Web服务器
20.11 阅读参考
第21章 管理数据库服务
21.1 简要回顾数据库的基本概念
21.1.1 关系数据库的工作方式
21.1.2 了解SQL的基础知识
21.1.3 创建表
21.1.4 向表中插入数据
21.1.5 从数据库中检索数据
21.2 选择数据库:MySQL和PostgreSQL
21.2.1 速度
21.2.2 数据锁定
21.2.3 在事务处理中用来保护数据完整性的ACID兼容性
21.2.4 SQL子查询
21.2.5 过程语言与触发器
21.3 配置MySQL
21.3.1 为MySQL root用户设置口令
21.3.2 在MySQL中创建数据库
21.3.3 在MySQL中授予与撤销特权
21.4 配置PostgreSQL
21.4.1 在PostgreSQL中初始化数据目录
21.4.2 在PostgreSQL中创建数据库
21.4.3 在PostgreSQL中创建数据库用户
21.4.4 在PostgreSQL中删除数据库用户
21.4.5 在PostgreSQL中授予和撤销特权
21.5 数据库客户端
21.5.1 通过SSH访问数据库
21.5.2 通过本地GUI客户端访问数据库
21.5.3 通过Web访问数据库
21.5.4 MySQL命令行客户端
21.5.5 PostgreSQL命令行客户端
21.5.6 图形界面的客户端
21.6 阅读参考
第22章 文件和打印
22.1 使用网络文件系统
22.1.1 安装和启动/停止NFS
22.1.2 NFS服务器配置
22.1.3 NFS客户端配置
22.2 让Samba工作
22.2.1 用/etc/samba/smb.conf手动配置Samba
22.2.2 使用testparm命令测试Samba
22.2.3 启动smbd守护进程
22.2.4 挂载Samba共享
22.2.5 使用SWAT配置Samba
22.3 使用Ubuntu进行网络和远程打印
22.3.1 创建网络打印机
22.3.2 在局域网上进行网络打印
22.3.3 任务消息块打印
22.4 使用通用UNIX打印系统GUI
22.5 避免打印机支持问题
22.5.1 多功能一体机(打印/传真/扫描)设备
22.5.2 使用USB和老式打印机
22.6 阅读参考
第23章 FTP远程文件服务
23.1 使用FTP客户端
23.1.1 FTP客户端界面
23.1.2 使用基于文本的FTP客户端界面
23.1.3 使用图形界面FTP客户端
23.2 FTP服务器
23.2.1 选择认证的或匿名服务器
23.2.2 Ubuntu的FTP服务器包
23.2.3 其他FTP服务器
23.3 安装FTP软件
23.4 FTP用户
23.5 为wu-ftpd配置inetd
23.6 配置VSFTP服务器
23.6.1 控制匿名访问
23.6.2 其他的vsftpd服务器配置文件
23.6.3 默认的vsftpd行为
23.7 配置Wu-FTPd服务器
23.8 使用ftpaccess文件中的命令对wu-ftpd进行配置
23.8.1 配置访问控制
23.8.2 配置用户信息
23.8.3 配置系统日志
23.8.4 配置权限控制
23.8.5 配置定向到cdpath的命令
23.8.6 shutdown文件的结构
23.9 配置FTP服务器的文件转换操作
23.9.1 剥离前缀
23.9.2 剥离后缀
23.9.3 添加前缀
23.9.4 添加后缀
23.9.5 外部命令
23.9.6 类型
23.9.7 选项
23.9.8 描述
23.9.9 一个转换操作的例子
23.10 使用ftphosts文件中的命令允许或禁止FTP 服务器连接
23.11 服务器管理
23.11.1 显示关于连接用户的信息
23.11.2 计算连接的数目
23.11.3 使用/usr/sbin/ftpshut安排FTP服务器停机时间
23.11.4 使用/var/log/xferlog查看服务器事务的日志
23.12 阅读参考
第24章 处理电子邮件
24.1 电子邮件是如何发送和接收的
24.1.1 邮件传输代理
24.1.2 选择一个MTA
24.1.3 邮件分发代理
24.1.4 邮件用户代理
24.2 基本的Postfix配置和操作
24.2.1 配置伪装
24.2.2 使用智能主机
24.2.3 设置消息传递时间间隔
24.2.4 邮件中继
24.2.5 转发带别名的电子邮件
24.3 使用Fetchmail获取邮件
24.3.1 安装Fetchmail
24.3.2 配置Fetchmail
24.4 选择邮件分发代理
24.4.1 Procmail
24.4.2 Spamassassin
24.4.3 Squirrelmail
24.4.4 病毒扫描器
24.5 邮件守护程序
24.6 Microsoft Exchange Server的替代者
24.6.1 Microsoft Exchange Server/Outlook客户端
24.6.2 CommuniGate Pro
24.6.3 Oracle协作套件
24.6.4 Bynari
24.6.5 Open-Xchange
24.6.6 phpgroupware
24.6.7 PHProjekt
24.6.8 Horde
24.7 阅读参考
24.7.1 Web资源
24.7.2 参考书目
第25章 代理与反向代理
25.1 什么是代理服务器
25.2 安装Squid
25.3 配置客户端
25.4 访问控制列表
25.5 指定客户端IP地址
25.6 配置示例
25.7 阅读参考
第26章 LDAP
26.1 配置LDAP服务器
26.2 配置客户端
26.2.1 Evolution
26.2.2 Thunderbird
26.3 管理
26.4 阅读参考
第Ⅳ部分 Linux编程
第27章 使用Perl
27.1 在Linux中使用Perl
27.1.1 Perl的版本
27.1.2 一个简单的Perl程序
27.2 Perl中的变量和数据结构
27.2.1 Perl的变量类型
27.2.2 特殊变量
27.3 操作符
27.3.1 比较操作符
27.3.2 复合操作符
27.3.3 算术操作符
27.3.4 其他操作符
27.3.5 特殊字符串常量
27.4 条件语句:if/else和unless
27.4.1 if
27.4.2 unless
27.5 循环
27.5.1 for
27.5.2 foreach
27.5.3 while
27.5.4 until
27.5.5 last和next
27.5.6 do…while和do…until
27.6 正则表达式
27.7 访问shell
27.8 模块和CPAN
27.9 代码示例
27.9.1 发送电子邮件
27.9.2 清理日志
27.9.3 往新闻组发信
27.9.4 单行小程序
27.9.5 命令行处理
27.10 阅读参考
27.10.1 书目
27.10.2 新闻组
27.10.3 万维网
27.10.4 其他资源
第28章 使用Python
28.1 Linux中的Python
28.2 Python基础
28.2.1 数字
28.2.2 进一步讨论字符串
28.2.3 列表
28.2.4 字典
28.2.5 条件和循环
28.3 函数
28.4 面向对象
28.4.1 类和对象变量
28.4.2 构造函数和析构函数
28.4.3 类继承
28.4.4 多重继承
28.5 标准库和Vaults of Parnassus
28.6 阅读参考
第29章 编写PHP脚本
29.1 PHP入门
29.1.1 进入和退出PHP模式
29.1.2 变量
29.1.3 数组
29.1.4 常量
29.1.5 引用
29.1.6 注释
29.1.7 转义序列
29.1.8 变量替换
29.1.9 操作符
29.1.10 条件语句
29.1.11 特殊操作符
29.1.12 switch语句
29.1.13 循环
29.1.14 包含其他文件
29.2 基本函数
29.2.1 字符串
29.2.2 数组
29.2.3 文件
29.2.4 其他函数
29.3 处理HTML表格
29.4 数据库
29.5 阅读参考
第30章 Ubuntu中的C/C++ 编程工具
30.1 Linux中的C编程
30.1.1 C++编程
30.1.2 Linux C/C++编程入门
30.1.3 编程的步骤
30.2 C/C++语言的基本元素
30.3 Ubuntu中的C语言编程项目管理工具
30.3.1 使用make构建程序
30.3.2 使用autoconf工具配置代码
30.3.3 使用RCS和CVS管理软件项目
30.3.4 调试工具
30.4 使用GNU C编译器
30.5 一个简单的C程序
30.6 图形界面开发工具
30.6.1 使用KDevelop客户端
30.6.2 Trolltech的Qt Designer
30.6.3 GNOME中的开发工具Glade客户端
30.7 阅读参考
第Ⅴ部分 Ubuntu日常维护
第31章 保护您的机器
31.1 了解计算机攻击
31.2 评估机器的弱点
31.3 保护您的机器
31.3.1 保护无线网络
31.3.2 口令和物理安全
31.3.3 配置和使用Tripwire
31.3.4 设备
31.4 病毒
31.5 配置防火墙
31.6 构建一个灾难恢复计划
31.7 在Linux安全问题上要保持最新
31.8 阅读参考
第32章 性能调整
32.1 硬盘
32.1.1 使用BIOS和内核来调整磁盘驱动器
32.1.2 hdparm命令
32.1.3 文件系统调整
32.1.4 tune2fs命令
32.1.5 e2fsck命令
32.1.6 badblocks命令
32.1.7 禁止文件访问时间
32.2 内核
32.3 Apache
32.4 MySQL
32.4.1 衡量关键字缓冲区的使用
32.4.2 使用查询缓存
32.4.3 其他调整
32.4.4 查询优化
32.5 阅读参考
第33章 命令行高级班
33.1 为什么使用Shell
33.2 基本命令
33.2.1 使用cat输出文件的内容
33.2.2 使用cd改变目录
33.2.3 使用chmod修改文件访问权限
33.2.4 使用cp复制文件
33.2.5 使用输出磁盘使用情况
33.2.6 通过使用find查找文件
33.2.7 使用grep在输入中查找字符串
33.2.8 使用less为输出翻页
33.2.9 使用ln在文件间创建链接
33.2.10 使用locate通过索引查找文件
33.2.11 使用ls命令列出当前目录下的文件
33.2.12 使用man阅读用户手册页
33.2.13 使用mkdir创建目录
33.2.14 使用mv移动文件
33.2.15 使用ps列出进程
33.2.16 使用rm删除文件和目录
33.2.17 使用tail输出文件的最后一行
33.2.18 使用top输出资源利用率
33.2.19 使用which输出命令的位置
33.3 将命令组合使用
33.4 多终端
33.5 阅读参考
第34章 高级APT
34.1 使用Aptitude
34.2 dpkg后端
34.3 配置APT
34.4 阅读参考
第35章 内核和模块管理
35.1 Linux内核
35.1.1 Linux源代码树
35.1.2 内核的类型
35.2 管理模块
35.3 何时进行重新编译
35.4 内核版本
35.5 获得内核源代码
35.6 为内核打补丁
35.7 编译内核
35.7.1 使用xconfig配置内核
35.7.2 创建一个初始的RAM磁盘映像
35.8 当发生故障时
35.8.1 编译时的错误
35.8.2 运行时错误. 启动加载器问题和内核oops
35.9 阅读参考
第Ⅵ部分 附录
附录A Ubuntu和Linux的Internet资源
A.1 Web站点和搜索引擎
A.2 Usenet新闻组
A.3 邮件列表
A.4 Internet Relay Chat

热点内容
监控存储服务器如何调试 发布:2025-05-15 12:36:30 浏览:216
一万级净化车间有哪些配置 发布:2025-05-15 12:16:41 浏览:97
javazip解压加密 发布:2025-05-15 12:15:02 浏览:941
dnf服务器存放什么信息 发布:2025-05-15 12:11:07 浏览:216
办公室视频剧本脚本 发布:2025-05-15 12:03:51 浏览:490
编译失败什么意思 发布:2025-05-15 11:58:18 浏览:87
lcs脚本官网 发布:2025-05-15 11:56:15 浏览:88
三国志战略版打9级矿什么配置 发布:2025-05-15 11:41:29 浏览:953
安卓加速器怎么关 发布:2025-05-15 11:38:16 浏览:465
密码锁坏了如何打开 发布:2025-05-15 11:30:19 浏览:838