为您找到与linux添加ipv6地址相关的共200个结果:
通过 fdisk查看现在物理磁盘的信息(这个要用root权限才行)
以下操作均是root权限。
[root@orangleliu ~]# fdisk -l
...
Disk /dev/sdb: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
...
写分区表
下面是个交互是过程,每次输入之后根据提示,在进行输入
[root@orangleliu ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xa4378777.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-3916, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-3916, default 3916):
Using default value 3916
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
操作完之后我们再来看磁盘信息
# fdisk -l
...
Disk /dev/sdb: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xa4378777
Device Boot Start End Blocks Id System
/dev/sdb1 1 3916 31455238+ 83 Linux
...
多了一块分区信息
格式化分区
一个命令就可以搞定了
# mkfs.ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1966080 inodes, 7863809 blocks
393190 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
240 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
?
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 26 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
创建新卷标(可忽略)
这一步,我看到有些人做了,有些人没有做,于是查了下资料。
可以看下参考 e2label命令
后面没用上,可以不操作的。
# e2label /dev/sdb1 /data
检查一下
# e2label /dev/sdb1
/data
挂载
创建挂载目录,跟上一步一致
mkdir /data
为了开机自动挂载,还需要编辑 /etc/fstab 文件,文件后面添加一行
/dev/sdb1 /data ext4 defaults 0 0
有些可能对这个配置文件不太熟悉,请参见[fatab中文解释](https://wiki.archlinux.org/index.php/Fstab_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
测试
# mount -a
# df -lh
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_orangleliu-lv_root
6.5G 3.2G 3.0G 52% /
tmpfs 499M 0 499M 0% /dev/shm
/dev/sda1 477M 29M 424M 7% /boot
/dev/sdb1 30G 44M 28G 1% /data
然后重启下,再次查看挂载情况,正常挂载,成功。
浏览量:2
下载量:0
时间:
对于刚入门的Linux初学者来说,还不知道如何配置ip地址,今天读文网小编就给大家介绍下Linux系统要如何配置ip地址,希望能帮助到你。
(1)neat命令
Neat命令=redhat-config-network图形下配置ip地址
双击图下画红线的部分
双击划线部分后出现下图所示:根据要求配置相关信息
双击ok配置完毕。配置完后重启服务,并查看配置ip地址。
注意(此方法配置的ip地址后计算机从新启动仍然有效)
(2)Ifconfig命令
第一种使用ifconfig命令配置网卡的ip地址。此命令通常用来零时的测试用,计算机启动后
ip地址的配置将自动失效。具体用法如下。Ipconfig ethx ipadd netmask x.x.x.x。
其中ethx中的x代表第几快以太网卡,默认第一块为0.ipadd代表ip地址。x.x.x..x为子网掩码。例如给网卡eth0配置的ip地址为192.168.1.1 子网掩码为 255.255.255.0 。如下下图所
注意(此方法配置的ip地址后计算机从新启动将会失效)
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux操作系统诞生于1991 年10 月5 日(这是第一次正式向外公布时间)。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。
浏览量:1
下载量:0
时间:
目前IP协议的版本号是4,即IPv4,那么IPv6就是IPv4的下一代IP协议,那么Linux系统要怎么配置IPv6地址呢?下面读文网小编就给大家介绍下Linux系统配置IPv6地址的方法步骤。
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux操作系统诞生于1991 年10 月5 日(这是第一次正式向外公布时间)。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。
service netowork restart
ping ipv6.baidu.com
浏览量:2
下载量:0
时间:
日常生活中我们都经常会接触到打印机,特别是现在日雏的网络化办公,常常的在办公室上班的都会接触到打印机!打印机,说白了就是:通过一个设备,最常见的以A4纸为介质,把电脑上的文本文档或者图片通过机械转印在纸张上面,使得抽象的东西具体化!既然是设备,使用起来或多或少都会有这样那样的问题,特别是急着要用打印机时,而打印机就是不给力…。
下面就我们使用打印机时的维护做一小总结,希望对使用者或电脑爱好者有帮助!打印机维护分为硬维护和软维护,本文先讲软维护!
图1:打印机脱机无法打印
正常的打印机就像图1那样:图片显示一共有三台打印机,最左边一台是传真机,其中打钩的就是系统默认的打印机。
一旦打印机脱机,那该打印机的图标也会变成灰色,前面的勾也一样变成灰色(注:本文图片设置的打印机是系统虚拟的,不过与正式安装的打印机大同小异)
如果平时使用打印机多的朋友都会留意到,打印机能在系统里找到就是通过了打印线(术语叫USB打印线)与打印机连接,然后找到合适的驱动,把驱动装好,那打印机就会在系统里头找到,为了让大家看得更明白,这里讲一下安装打印机的过程。
首先我们拿到打印机,要把它的电源线,USB打印线与电脑连接好,然后把打印机的电源打开(切记要打开打印机电源),这时候,电脑会提示有发现新硬件,如下图所示:
图2
补充阅读:Win7怎么安装打印机 Win7系统安装打印机图文教程
发现了新硬件,把你下载好的打印机驱动装好,打印机就可以正常使用了!那么怎么知道电脑所连接的打印机正不正常呢?
如图3:检查打印机安装是否可用
一般的我们点击电脑的 开始(这是win7系统,xp的也大同小异)→设备和打印机,点击完之后就会出现,如下图4所示:
如图4
如果是出现以上4张图片的,那恭喜你, 你的打印机可以正常使用!看到这里有些读者也许会疑问,咦,本文不是讲打印机脱机该怎么办吗,怎么说到安装上面去了?!
话又说回来,以上的一段演示就是要告诉读者,电脑系统里的打印机是怎么安装得来的,可以这样子讲,凡是打印机软故障的都可以从打印机安装的过程中中一部部找原因,打印机脱机也不例外!
不言而喻,打印机脱机会使得打印机不能打印。打印机不能打印,也就是说电脑系统里没有打印机这个“硬件”,既然没有打印机,那我们肯定得“从新”安装一次(注 这里的从新加了双引号是假设的,就是说出现问题之前打印机已经安装好的了,可以使用的,不过现在是脱机,不能使用)!
好,那我们回过头来看看安装打印机的时候要准备什么工作的:打印机一台,USB打印线一条,打印机相对应的驱动一个,打印机电源要打开!如果打印机硬件没问题的话,同时具备了这四点,可以肯定地说打印机一定能正常地工作,当然前提是要你的电脑系统确保是好的,电脑系统这里就不多提了,哈哈!
我们一步一步来检查下:
第一、打印机电源有没有打开!现在的打印机电源开关都做得比较明显的。这一点不用多说;
第二、USB打印线!顾名思义,USB打印线就一根线,当打印机出现打印机脱机的情况下,我们要看看USB打印线有没有折断,脱皮,两边的接头有没有生锈,变形等等,如果出现了任何感觉打印线不良的情况那就得换一根打印线;
第三、如果换了打印线还是不行,那只有把打印机的驱动从新安装一次。
最后还要注意一点的就是打印机电源灯面板有没有什么不良的闪烁闪红之类的出现。一般情况下,通过以上这三点都可以把打印机脱机的问题解决掉。当然,很多时候我们都会事不得人为!当我们都试过了上面说的那些方法还是解决不了打印脱机的故障的时候,请不要嫌弃麻烦,请继续往下看!
如图5
我们按照图1、2、3、4的步骤进入到图5的这个画面,然后把脱机的打印机直接删除掉。如图6(这里取打钩的打印机来举例子)。
图6:删除脱机的打印机
打印机删除之后我们就点我的电脑属性(如图7)→设备管理器(如图8)→搜索新硬件(如图9),重新安装打印机驱动,如下图所示:
图7:重新安装打印机驱动示意图
图8
图9
如果打印机硬件正常,打印线正常,打印机电源打开,电脑的USB接口正常(这个很容易判断,换一个接口插就知道原来那个口的好坏了),那么一定会出现图2发现新硬件的图标,把打印机驱动装好就可以正常使用了!如果以上的方法试过了还是不行,那很大可能是打印机硬件或者电脑系统方面出故障了。
最后补充几句:当你能确定打印线,电脑USB是好的,驱动也是正确的,但你点了“扫描硬件改动”,电脑没提示发现新硬件, 那基本上是打印机硬件方面出故障了,这只能去保修或者维修咯!O(∩_∩)O哈哈~话多了点,但希望能真真实实帮到您!
浏览量:2
下载量:0
时间:
对于使用linux系统的用户,该怎么去配置IP地址呢?下面读文网小编就这个问题,为大家介绍一下具体的配置方法,欢迎大家参考和学习。
配置完以后重启动服务.,p地址就配置好了。其实前面3个的配置方法最终还是改变了/etc/sysconfig/network-scripts/ifcfg-ethx下的配置文件罢了。
浏览量:2
下载量:0
时间:
首先读文网小编要给大家介绍的是如何在linux系统添加swap虚拟内存与删除配置。那么具体的操作方法小编就在文章的下文说。
有时可能会需要删除swap分区,该如何正确进行删除分区哪?
首先停止swap分区
swapoff /swap/swap
删除swap分区文件
rm -rf /swap/swap
删除"/etc/swap"指定文件
这样就可以手工添加和删除swap分区。
复制代码
代码如下:
sed -i "/'/swa/swap swap swap defaults 0 0'https://" /etc/fstab
通过这篇文章我们是不是会linux系统添加swap虚拟内存与删除配置的方法了呢。
浏览量:3
下载量:0
时间:
在linux下,我们有时候需要给单网卡设置不同的IP地址,这样就涉及到单网卡绑定多个IP地址的情况。使用读文网小编推荐的这个方法可以方便的为单网卡绑定多个IP地址。
linux的网络设备的存储路径是/etc/sysconfig/network-scripts/
要适用的网卡是eth0,再看一下该设备的IP信息。
IP:192.168.234.128
Brast:192.168.234.255
Mask:255.255.255.0
添加一个IP只需在/etc/sysconfig/network-scripts /创建一个ifcfg-eth0:x(x可以为0,1,2.......)。为了简便我们可以讲ifcfg-eth0,复制一份命名为ifcfg- eth0:1即可,然后修改该文件。
修改后
启用设备,使用命令:ifup eth0:1
下面测试一下,另外一台计算机使用ping来测试
经测试,这样就完成了添加一个IP的工作,同样我们可以添加N个IP
是不是很简单呢~快跟着读文网小编一起学习吧!!!如果觉得这篇文章不错的话就给读文网小编点一个赞吧。
浏览量:2
下载量:0
时间:
linux是一款使用范围最广的开源服务器系统,下面读文网小编介绍一下linux虚拟机添加磁盘并使用磁盘的方法。
我们以xenserver上的CentOS为例,首先选中虚拟机,然后点击右侧的存储(storage)。
点击添加(Add)。
我们将磁盘容量设定为15G,然后点击Add。
磁盘添加完成后,我们将CentOS系统开机。开机后,进入root,执行命令fdisk -l
你会发现新添加的磁盘没有任何分区,但是可能容量与实际不太一样,这主要和计算方法有关,没有大碍。
将磁盘分区也是用到fdisk命令,我们发现设备名称为/dev/xvdb,
直接使用命令fdisk /dev/xvdb
输入m后,会打印出来所有参数,我们使用 n ,新建一个分区。
输入e,新建扩展分区。
然后再新建逻辑分区,注意逻辑分区是从5开始的,因为允许有4个主分区。
分区完成后,我们需要将分区格式化,输入mkfs.ext3 /dev/xvdb5
新建一个挂载点,mkdir /mnt/disk
挂载磁盘,mount /dev/xvdb5 /mnt/disk
挂载成功后,你可以使用df -h查看是否挂载成功,成功后,你可以把数据存到/mnt/disk,数据就会占用新添加的磁盘空间。
修改/etc/fstab,使磁盘自动挂载。
vi /etc/fstab,加入这样一条: /dev/xvdb5 /mnt/disk ext3 defaults 0 2
重启后,磁盘会自动挂载。
浏览量:4
下载量:0
时间:
linux虚拟地址怎么映射物理地址这个问题大家都想知道吧?下面读文网小编就给大家介绍下linux虚拟地址怎么映射物理地址的。
1. 虚拟空间(首先读文网小编必须要给大家介绍下什么是Linux操作系统的虚拟空间)
0-3G 用户空间 0x00000000 ~ 0xbfffffff
3-4G 内核空间 0xc0000000 ~ 0xffffffff
每个用户进程都有独立的用户空间(虚拟地址0-3),而内核空间是唯一的(相当于共享)
每个进程的用户空间用mm_struct描述,即task_struct.mm。
2.进程虚拟地址的组织
2.1 虚拟空间、用户空间
[cpp] view plaincopy
struct mm_struct {
struct vm_area_struct * mmap; /* list of VMAs */
...
pgd_t * pgd; //用于地址映射
atomic_t mm_users; /* How many users with user space? */
atomic_t mm_count; /* How many references to "struct mm_struct" (users count as 1) */
int map_count; /* number of VMAs */
...
//描述用户空间的段分布:数据段,代码段,堆栈段
unsigned long start_code, end_code, start_data, end_data;
unsigned long start_brk, brk, start_stack;
unsigned long arg_start, arg_end, env_start, env_end;
unsigned long rss, total_vm, locked_vm;
...
};
以上结构描述了进程的用户空间的结构,其中
pgd_t 是该进程用户空间地址映射到物理地址时使用
vm_area_struct 是进程用户空间已映射到物理空间的虚拟地址区间,mmap是该空间区块组成的链表。
虚拟空间的空洞:虚拟空间还未被映射的区块(即没有被使用),那么就没有vm_area_struct结构
2.2 内存区间
[cpp] view plaincopy
/*
* This struct defines a memory VMM memory area. There is one of these
* per VM-area/task. A VM area is any part of the process virtual memory
* space that has a special rule for the page-fault handlers (ie a shared
* library, the executable area etc).
*/
struct vm_area_struct {
struct mm_struct * vm_mm; /* VM area parameters */
unsigned long vm_start; //虚拟空间起始地址
unsigned long vm_end; //终止地址
/* linked list of VM areas per task, sorted by address */
struct vm_area_struct *vm_next;
//该区间的权限及标志
pgprot_t vm_page_prot;
unsigned long vm_flags;
//一些vm_area 的链接
...
struct vm_operations_struct * vm_ops;
unsigned long vm_pgoff; /* offset in PAGE_SIZE units, *not* PAGE_CACHE_SIZE */
struct file * vm_file; //用于将磁盘文件映射至用户空间
...
};
虚拟空间区间的描述中:
vm_start/vm_end 为该区块的起始和结束地址
vm_file 是在文件映射中使用到,即常用的mmap(fd,...)函数,简单说即将虚拟空间映射至文件在内核的缓冲区,那么这时候访问该虚拟空间将有别于pgd的映射。
vm_operations_struct 为本虚拟区间的操作,其中的nopage函数指针是处理内存缺页而使用的。对于通用的内存映射,该缺页处理函数为do_no_page()将虚拟地址映射到物理地址(匿名映射):分配物理页& 设置pgd & pte。
而对于mmap操作相关的虚拟地址,其缺页处理函数将和文件系统的缺页函数相关,filemap_nopage(),通过文件系统的缺页从磁盘将相关文件块加载如内核缓冲区.
[cpp] view plaincopy
struct vm_operations_struct {
void (*open)(struct vm_area_struct * area);
void (*close)(struct vm_area_struct * area);
struct page * (*nopage)(struct vm_area_struct * area, unsigned long address, int write_access); //缺页操作
};
3.系统物理地址的组织
内核将物理地址按页来组织,struct page描述系统的物理页的信息,但是页的数据内容是不在该结构中的。系统有全局数据 struct page mem_map[],用于记录每个物理页。
页面大小为4kb,在源码中用体现为(PAGE_SHIFT = 12)
[cpp] view plaincopy
/*
* Try to keep the most commonly accessed fields in single cache lines
* here (16 bytes or greater). This ordering should be particularly
* beneficial on 32-bit processors.
*
* The first line is data used in page cache lookup, the second line
* is used for linear searches (eg. clock algorithm scans).
*/
typedef struct page {
struct list_head list;
struct address_space *mapping;
unsigned long index;
struct page *next_hash;
atomic_t count;
unsigned long flags; /* atomic flags, some possibly updated asynchronously */
struct list_head lru;
unsigned long age;
wait_queue_head_t wait;
struct page **pprev_hash;
struct buffer_head * buffers;
void *virtual; /* non-NULL if kmapped */
struct zone_struct *zone;
} mem_map_t;
struct page是用于描述一个物理页面,该结构仅仅是作为描述,也就是说该页面的4kb数据时存储于某个连续的4kb的物理空间(由MMU决定,具体见下文)。其中:
lru 页面缓冲的调度策略(最少使用优先)
题外话:
page也可以用于文件缓冲,相关参数及作用:
buffer_head 是和设备文件相关的操作,例如在文件系统中,file的一个page有4个块,这些块就存储于buffer_head链表指定的内存中。
index 在文件系统中是用于file缓冲的页号。
3.1 用户空间页面目录(映射关系)
进程的虚拟空间描述中,pgd是用于页式存储的映射使用。当内核发生进程切换时,将新进程的pgd载入CR3寄存器,CPU中的MMU单元依据CR3寄存器进行页面映射。
pgd,pmd和pte可以看做是数组,为进程的地址空间到物理空间实现映射。其中虚拟地址的高位地址决定pgd,中间段地址决定pmd,而低位地址决定pte,pte是“page table entry”。
最终定位的pte中存放的即为对应物理页面的指针。[cpp] view plaincopy
typedef struct { unsigned long pte; } pte_t;
typedef struct { unsigned long pmd; } pmd_t;
typedef struct { unsigned long pgd; } pgd_t;
typedef struct { unsigned long pgprot; } pgprot_t; //操作标志
3.2用户空间的映射:
1. 用户空间的虚拟地址vaddr通过MMU(pgd,pmd,pte)找到对应的页表项x(即为物理地址)
2. 页表项x的高20位是物理也好,物理页号index = x >> PAGE_SHIFT, 同理,index后面补上12个0就是物理页表的首地址。
3. 通过物理页号,我们可以再内核中找到该物理页的描述的指针mem_map[index],当然这个指针是虚拟地址,page结构见上文。
3.3内核空间虚拟地址的映射:
内核空间与物理地址之间有直接的映射关系,而不需要向用户空间那样通过mmu(pgd)。系统空间映射(3G开始)到物理空间0G起始:
例如:
系统内核映像载入的虚拟地址为3G+1M的起始地址,那么对应的物理地址为1M。
紧接着分配在3G+2M开始分配了8M的虚拟地址(物理地址为2-9M)用于PDG
之后预留了16M空间用DMA于存储。
而全局的page结构的mem_page[]数组是在0xc1000000开始的。
所以内核空间虚拟地址到物理地址的转换为:
[cpp] view plaincopy
PAGE_OFFSET = 3GB
vitr_to_phys(kadd)
return vadd - PAGE_OFFSET
内核空间的虚拟地址vaddr是通过如下方式找到它对应物理地址的page结构:
vitr_to_page(vadd)
index = virt_to_phys(kadd) >> PAGE_SHIFT
return mem_map[index]
4. 相关数据结构关系图
说明:
1. 黑色+红色 箭头展示了虚拟地址空间到物理空间的映射关系
2. 蓝色箭头涉涉及到文件的映射操作mmap(),相比匿名映射,文件映射多了文件层的磁盘IO。
浏览量:3
下载量:0
时间:
?读文网小编整理了linux环境下虚拟地址物理地址的相关资料。供大家参考!
CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分,如果CPU没有MMU(Memory Management Unit,内存管理单元),或者有MMU但没有启用,CPU核在取指令或访问内存时发出的地址将直接传到CPU芯片的外部地址引脚上,直接被内存芯片(以下称为物理内存,以便与虚拟内存区分)接收,这称为物理地址(Physical Address,以下简称PA),如下图所示。
物理地址示意图
如果CPU启用了MMU,CPU核发出的地址将被MMU截获,从CPU到MMU的地址称为虚拟地址(Virtual Address,以下简称VA),而MMU将这个地址翻译成另一个地址发到CPU芯片的外部地址引脚上,也就是将虚拟地址映射成物理地址,如下图所示[1]。
虚拟地址示意图
MMU将虚拟地址映射到物理地址是以页(Page)为单位的,对于32位CPU通常一页为4K。例如,虚拟地址0xb700 1000~0xb700 1fff是一个页,可能被MMU映射到物理地址0x2000~0x2fff,物理内存中的一个物理页面也称为一个页框(Page Frame)。
内核也不能直接访问物理地址.但因为内核的虚拟地址和物理地址之间只是一个差值0xc0000000的区别,所以从物理地址求虚拟地址或从虚拟地址求物理地址很容易,+-这个差就行了
物理地址(physical address)
用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。
——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。所以,说它是“与地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,直接把物理地址与物理的内存一一对应,也是可以接受的。也许错误的理解更利于形而上的抽像。
虚拟内存(virtual memory)
这是对整个内存(不要与机器上插那条对上号)的抽像描述。它是相对于物理内存来讲的,可以直接理解成“不直实的”,“假的”内存,例如,一个0x08000000内存地址,它并不对就物理地址上那个大数组中0x08000000 - 1那个地址元素;
之所以是这样,是因为现代操作系统都提供了一种内存管理的抽像,即虚拟内存(virtual memory)。进程使用虚拟内存中的地址,由操作系统协助相关硬件,把它“转换”成真正的物理地址。这个“转换”,是所有问题讨论的关键。
有了这样的抽像,一个程序,就可以使用比真实物理地址大得多的地址空间。(拆东墙,补西墙,银行也是这样子做的),甚至多个进程可以使用相同的地址。不奇怪,因为转换后的物理地址并非相同的。
——可以把连接后的程序反编译看一下,发现连接器已经为程序分配了一个地址,例如,要调用某个函数A,代码不是call A,而是call 0x0811111111 ,也就是说,函数A的地址已经被定下来了。没有这样的“转换”,没有虚拟地址的概念,这样做是根本行不通的。
Linux下获取虚拟地址对应的物理地址的方法
* /proc/pid/pagemap. This file lets a userspace process find out which
physical frame each virtual page is mapped to. It contains one 64-bit
value for each virtual page, containing the following data (from
fs/proc/task_mmu.c, above pagemap_read):
* Bits 0-54 page frame number (PFN) if present
* Bits 0-4 swap type if swapped
* Bits 5-54 swap offset if swapped
* Bit 55 pte is soft-dirty (see Documentation/vm/soft-dirty.txt)
* Bits 56-60 zero
* Bit 61 page is file-page or shared-anon
* Bit 62 page swapped
* Bit 63 page present
If the page is not present but in swap, then the PFN contains an
encoding of the swap file number and the page's offset into the
swap. Unmapped pages return a null PFN. This allows determining
precisely which pages are mapped (or in swap) and comparing mapped
pages between processes.
接下来,我们根据上述描述,给出获取虚拟地址对应的物理地址的代码
#include <stdio.h>
#include <stdint.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#define page_map_file "/proc/self/pagemap"
#define PFN_MASK ((((uint64_t)1)<<55)-1)
#define PFN_PRESENT_FLAG (((uint64_t)1)<<63)
int mem_addr_vir2phy(unsigned long vir, unsigned long *phy)
{
int fd;
int page_size=getpagesize();
unsigned long vir_page_idx = vir/page_size;
unsigned long pfn_item_offset = vir_page_idx*sizeof(uint64_t);
uint64_t pfn_item;
fd = open(page_map_file, O_RDONLY);
if (fd<0)
{
printf("open %s failed", page_map_file);
return -1;
}
if ((off_t)-1 == lseek(fd, pfn_item_offset, SEEK_SET))
{
printf("lseek %s failed", page_map_file);
return -1;
}
if (sizeof(uint64_t) != read(fd, &pfn_item, sizeof(uint64_t)))
{
printf("read %s failed", page_map_file);
return -1;
}
if (0==(pfn_item & PFN_PRESENT_FLAG))
{
printf("page is not present");
return -1;
}
*phy = (pfn_item & PFN_MASK)*page_size + vir % page_size;
return 0;
}
如果担心vir地址对应的页面不在内存中,可以在调用mem_addr_vir2phy之前,先访问一下此地址。
例如, int a=*(int *)(void *)vir;
如果担心Linux的swap功能将进程的页面交换到硬盘上从而导致页面的物理地址变化,可以关闭swap功能。
下面两个C库函数可以阻止Linux将当前进程的部分或全部页面交换到硬盘上。
int mlock(const void *addr, size_t len);
int mlockall(int flags);
看过“虚拟地址物理地址linux ”
浏览量:2
下载量:0
时间:
Linux下创建用户是很easy的事情了,只不过不经常去做这些操作,时间久了就容易忘记。那么linux中怎么添加ftp用户,下面跟着读文网小编一起来了解一下吧。
在linux中添加ftp用,并设置相应的权限,操作步骤如下:
1、环境:ftp为vsftp。被限制用户名为test。被限制路径为/home/test。
2、建用户:在root用户下:
useradd -d /home/test test https://增加用户test,并制定test用户的主目录为/home/test
passwd test https://为test设置密码
3、更改用户相应的权限设置:
限定用户不能telnet,只能ftp: usermod -s /sbin/nologin test
usermod -s /sbin/bash test https://用户恢复正常
更改用户的主目录: usermod -d /test test
4、限制用户只能访问/home/test,不能访问其他路径
修改/etc/vsftpd/vsftpd.conf如下:
chroot_list_enable=YES https://限制访问自身目录
# (default follows)
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
编辑 vsftpd.chroot_list文件,将受限制的用户添加进去。
5、如果需要允许用户修改密码,但是又没有telnet登录系统的权限:
usermod -s /usr/bin/passwd test https://用户telnet后将直接进入改密界面
编辑/etc/vsftpd/vsftpd.conf,增加listen_port=2121
编辑 /etc/services 文件,将其中的
ftp 21/tcp 改为 ftp 2121/tcp
ftp 21/udp 改为 ftp 2121/udp
步骤:1.修改/etc/services文件(默认分配的端口号和协议类型)
# vi /etc/services
将21/tcp修改为2021/tcp
2.修改(新增)FTP配置文件vsftpd.conf
# vi /etc/vsftpd/vsftpd.conf
如果文件中有Listen_port=21,则将21修改为2021,
否则添加一行Listen_port=2021
3.启动TFP服务
# service vsftpd restart
4.检查TFP服务
# service vsftpd status
1、编辑/etc/vsftpd/vsftpd.conf 文件,在该配置文件中添加此行:listen_port=811
2、编辑/etc/services 文件,将其中的
ftp 21/tcp 改为 ftp 811/tcp ,
ftp 21/udp 改为 ftp 811/tcp
3、执行/etc/init.d/vsftpd restart 重新启动vsftpd 服务。启动完成后可以使用
netstat -tnulp | grep vsftpd
看过“ linux中怎么添加ftp用户 ”
浏览量:3
下载量:0
时间:
一台安装了Linux系统的电脑如果想要联网,首先要做的就是进行网络配置。那么Linux系统怎么配置网络IP地址呢?小编为大家分享了Linux系统配置网络IP地址的方法,下面大家跟着读文网小编一起来了解一下吧。
(3)netconfig命令
输入netconfig后将会出现下图所示,单击yes按钮。
进行相关配置后ok退出。
注意(此方法配置的ip地址后计算机从新启动仍然有效)
浏览量:3
下载量:0
时间:
静态分配IP地址是指给每一台计算机都分配一个固定的IP地址,优点是便于管理,那么linux系统怎么设置静态ip地址呢?小编为大家分享了linux系统设置静态ip地址的方法,下面大家跟着读文网小编一起来了解一下吧。
在终端中输入:vi /etc/sysconfig/network-scripts/ifcfg-eth0
开始编辑,填写ip地址、子网掩码、网关、DNS等。其中“红框内的信息”是必须得有的。
编辑完后,保存退出。
重启网络服务。service network restart或/etc/init.d/network restart
ping网关,ping外网进行测试。都能ping通表示网络正常。
摘要:
---修改ip地址---
即时生效:
# ifconfig eth0 192.168.1.155 netmask 255.255.255.0
重启生效:
修改/etc/sysconfig/network-scripts/ifcfg-eth0
---修改default gateway---
即时生效:
# route add default gw 192.168.1.1
重启生效:
修改/etc/sysconfig/network-scripts/ifcfg-eth0
---修改dns---
修改/etc/resolv.conf
修改后即时生效,重启同样有效
---修改host name---
即时生效:
# hostname test1
重启生效:
修改/etc/sysconfig/network
看过“ linux系统怎么设置静态ip地址 ”
浏览量:3
下载量:0
时间:
对于很多刚刚接触linux的朋友来说,如何设置linux系统的IP地址,作为第一步,下面读文网小编以centos系统为例,给大家演示如何给centos设置IP地址
1、自动获取IP地址
虚拟机使用桥接模式,相当于连接到物理机的网络里,物理机网络有DHCP服务器自动分配IP地址。
#dhclient 自动获取ip地址命令
#ifconfig 查询系统里网卡信息,ip地址、MAC地址
分配到ip地址后,用物理机进行ping ip地址,检测是否ping通。
2、手动设置ip地址
如果虚拟机不能自动获取IP,只能手动配置,配置方法如下:
输入命令
#vi /etc/sysconfig/network-scripts/ifcfg-eth0 [编辑网卡的配置文件]
输入上述命令后回车,打开配置文件,使用方向键移动光标到最后一行,按字母键“O”,进入编辑模式,输入以下内容:
IPADDR=192.168.4.10
NETMASK=255.255.255.0
GATEWAY=192.168.4.1
另外光标移动到”ONBOOT=no”这一行,更改为ONBOOT=yes
“BOOTPROTO=dhcp”,更改为BOOTPROTO=none
完成后,按一下键盘左上角ESC键,输入:wq 在屏幕的左下方可以看到,输入回车保存配置文件。
之后需要重启一下网络服务,命令为
#servicenetwork restart
网络重启后,eth0的ip就生效了,使用命令#ifconfigeth0 查看
接下来检测配置的IP是否可以ping通,在物理机使用快捷键WINDOWS+R 打开运行框,输入命令cmd,输入ping 192.168.4.10 进行检测,ping通说明IP配置正确。
备注:我所在的物理机网段为192.168.4.0 网段。大家做实验的时候根据自己的环境进行设定,保持虚拟机和物理机在同一网段即可。
3、使用NAT模式
虚拟机网络连接使用NAT模式,物理机网络连接使用Vmnet8。
虚拟机设置里面——网络适配器,网络连接选择NAT模式。
虚拟机菜单栏—编辑—虚拟网络编辑器,选择Vmnet8 NAT模式,
1.在最下面子网设置ip为192.168.20.0 子网掩码255.255.255.0
2.NAT设置里面网关IP为192.168.20.2
3.使用本地DHCP服务将IP地址分配给虚拟机不勾选
设置完成后点击应用退出。
物理机网络连接VMNet8 手动设置ip地址 192.168.20.1 子网掩码255.255.255.0
网关和DNS地址为192.168.20.2(即虚拟机NAT的网关地址)
编辑linux网卡eth0的配置文件
#vi /etc/sysconfig/network-scripts/ifcfg-eth0
输入上述命令后回车,打开配置文件,使用方向键移动光标到最后一行,按字母键“O”,进入编辑模式,输入以下内容:
IPADDR=192.168.20.3
NETMASK=255.255.255.0
GATEWAY=192.168.20.2
另外光标移动到”ONBOOT=no”这一行,更改为ONBOOT=yes
“BOOTPROTO=dhcp”,更改为BOOTPROTO=none
完成后,按一下键盘左上角ESC键,输入:wq 在屏幕的左下方可以看到,输入回车保存配置文件。
设置DNS地址,运行命令#vi /etc/resolv.conf
光标移动到空行,按“O”键,输入 nameserver 192.168.20.2 退出按ESC键,输入:wq 回车保存配置文件。
重启网络服务 #service network restart
重启之后#ifconfig 查看配置的ip地址,物理机ping这个地址测试是否能通。
看过“ 如何设置linux系统的IP地址 ”
浏览量:2
下载量:0
时间:
linux系统怎么添加计划任务执行php文件?PHP不支持多线程,有时候处理问题不是那么爽,读文网小编以php文件为例,讲解linux下的计划任务。
1.打开linux系统命令行界面。
在命令行界面中输入如下命令:which php,回车。
1.记住上一步的php路径,继续在命令行下输入:crontab -e,回车,按下“i”键进入vi编辑器的编辑模式,在当前模式下输入如下命令:
10,40,50 * * * * /usr/bin/php /opt/lampp/htdocs/wechat/xjtest-web_browser/pcntl_test.php
即:计划任务执行频率+php可执行文件路径+要执行的php文件路径。(文章最后会详细解释命令开始的执行频率)
输入完成后,按下“ESC”键并在当前命令行输入“:”,在“:”后输入“wq”,再回车,出现如下提示,证明计划任务添加成功。
Linux计划任务的执行频率:
命令开始部分的频率,由五个部分组成,分别代表分钟、小时、日、月、星期(0是星期日)。当前频率全部执行时,用“*”表示,所以才会出现这么多“*”。下面的例子,可以帮助大家理解:
下面的计划任务会一直运行
* * * * * [command]
下面的计划任务会在每个小时的0分时运行(就是每小时执行一次)
0 * * * * [command]
下面依旧是一个每小时运行一次的计划任务。不过是在每个小时的一刻钟时运行的(1:15,2:15.。。)
15 * * * * [command]
下面的计划任务每天执行一次,在2:30分
30 2 * * * [command]
下面的计划任务是在每个月2号的午夜执行(比如:2010年2月2日00:00)
0 0 2 * * [command]
下面的计划任务会在每周一的每个小时0分钟时执行一次
0 * * * 1 [command]
下面的会每小时运行3次,在0分,10分,和20分时
0,10,20 * * * * [command]
下面是用除号“/”表示每多少运行一次。本例是每5分钟运行一次
*/5 * * * * [command]
还可以用“-”表示一个范围,如下表示5到10点的每个整点运行一次
0 5-10 * * * [command]
另外还有一个特殊的时间关键字“@reboot”,就是每次重启服务器时运行计划任务
@reboot [command]
看过“linux系统怎么添加计划任务执行php文件”
浏览量:2
下载量:0
时间:
有时候就算路由设置了无线密码, 其他知道密码了,自己修改密码也有可能被他人知道密码, 现在告诉你一个一劳永逸的方法,那么你知道路由器怎么添加mac地址吗?下面是读文网小编整理的一些关于路由器怎么添加mac地址的相关资料,供你参考。
首先 192.168.1.1 输入用户名密码 ,进入路由
进入路由后选中无线设置下的无线MAC地址过滤
点击添加新条目,
怎么查看MAC地址呢 ?
点击 开始 》》运行》》输入cmd 》》ipconfig /all
输入MAC 和描述 点击保存,然后选上“允许 列表中生效规则之外的 MAC 地址访问本无线网络” 点击启动过滤
这样就只有添加MAC地址的电脑/手机可以访问无线网络了。
路由器添加mac地址的相关
浏览量:5
下载量:0
时间:
在web开发过程中,经常需要设定一些定期执行的任务,那么linux怎么添加计划任务执行php文件呢?读文网小编分享了linux添加计划任务执行php文件的方法,希望对大家有所帮助。
1.打开linux系统命令行界面。
在命令行界面中输入如下命令:which php,回车。
1.记住上一步的php路径,继续在命令行下输入:crontab -e,回车,按下“i”键进入vi编辑器的编辑模式,在当前模式下输入如下命令:
10,40,50 * * * * /usr/bin/php /opt/lampp/htdocs/wechat/xjtest-web_browser/pcntl_test.php
即:计划任务执行频率+php可执行文件路径+要执行的php文件路径。(文章最后会详细解释命令开始的执行频率)
输入完成后,按下“ESC”键并在当前命令行输入“:”,在“:”后输入“wq”,再回车,出现如下提示,证明计划任务添加成功。
Linux计划任务的执行频率:
命令开始部分的频率,由五个部分组成,分别代表分钟、小时、日、月、星期(0是星期日)。当前频率全部执行时,用“*”表示,所以才会出现这么多“*”。下面的例子,可以帮助大家理解:
下面的计划任务会一直运行
* * * * * [command]
下面的计划任务会在每个小时的0分时运行(就是每小时执行一次)
0 * * * * [command]
下面依旧是一个每小时运行一次的计划任务。不过是在每个小时的一刻钟时运行的(1:15,2:15.。。)
15 * * * * [command]
下面的计划任务每天执行一次,在2:30分
30 2 * * * [command]
下面的计划任务是在每个月2号的午夜执行(比如:2010年2月2日00:00)
0 0 2 * * [command]
下面的计划任务会在每周一的每个小时0分钟时执行一次
0 * * * 1 [command]
下面的会每小时运行3次,在0分,10分,和20分时
0,10,20 * * * * [command]
下面是用除号“/”表示每多少运行一次。本例是每5分钟运行一次
*/5 * * * * [command]
还可以用“-”表示一个范围,如下表示5到10点的每个整点运行一次
0 5-10 * * * [command]
另外还有一个特殊的时间关键字“@reboot”,就是每次重启服务器时运行计划任务
@reboot [command]
看过“linux怎么添加计划任务执行php文件”
浏览量:4
下载量:0
时间: