当前位置:文档之家› linux可执行文件格式

linux可执行文件格式

linux可执行文件格式
linux可执行文件格式

Linux可执行文件格式

?Elf 也就是“Executable and Linking Format.”

?Elf 起源于Unix,经改进应用于FreeBSD和Linux等现有类Unix操作系统。

?微软的PE格式也学习了ELF格式的优点。

?ELF文档服务于在不同的操作系统上目标文件的创建或者执行文件的开发。它分以下三个部分:

?“目标文件”描述了ELF目标文件格式三种主要的类型。

?“程序装载和动态连接”描述了目标文件的信息和系统在创建运行时程序的行为。

?“C 语言库”列出了所有包含在libsys中的符号、标准的ANSIC和libc的运行程序,还有libc运行程序所需的全局的数据符号。

三种主要类型:

?一个可重定位文件(relocatable file)保存着代码和适当的数据,用来和其他的目标文件一起来创建一个可执行文件或者是一个共享文件。

?一个可执行文件(executable file)保存着一个用来执行的程序,该文件指出了exec(BA_OS)如何来创建程序进程映象。

?一个共享目标文件(shared object file)保存着代码和合适的数据,用来被下面的两个链接器链接。第一个是链接编辑器,可以和其他的重定位和共享目标文件来创建另一个目标文件。第二个是动态链接器,联合一个可执行文件和其他的共享目标文件来创建一个进程映象。

ELF头

?#define EI_NIDENT 16

?typedef struct {

?unsigned char e_ident[EI_NIDENT];

?Elf32_Half e_type;

?Elf32_Half e_machine;

?Elf32_Word e_version;

?Elf32_Addr e_entry;

?Elf32_Off e_phoff;

?Elf32_Off e_shoff;

?Elf32_Word e_flags;

?Elf32_Half e_ehsize;

?Elf32_Half e_phentsize;

?Elf32_Half e_phnum;

?Elf32_Half e_shentsize;

?Elf32_Half e_shnum;

?Elf32_Half e_shstrndx;

?} Elf32_Ehdr;

?一个目标文件的节头表可以让我们定位所有的节。节头表是一个Elf32_Shdr结构的数组。一个节头表的索引是这个数组的下标。

?ELF头结构中的e_shoff成员给出了节头表的偏移量(从文件开始计数)。

?e_shnum告诉我们节头表中包含了多少个表项;

?e_shentsize 给出了每个表项的长度。某些节头表索引是保留的,这些索引在目标文

件中没有与之对应的节。

?typedef struct {

?Elf32_Word sh_name;

?Elf32_Word sh_type;

?Elf32_Word sh_flags;

?Elf32_Addr sh_addr;

?Elf32_Off sh_offset;

?Elf32_Word sh_size;

?Elf32_Word sh_link;

?Elf32_Word sh_info;

?Elf32_Word sh_addralign;

?Elf32_Word sh_entsize;

?} Elf32_Shdr;

字符串表

?字符串表节(String table sections)保存着以NULL终止的一系列字符,一般我们称为字符串。目标文件使用这些字符串来表示符号和节名。一个字符串的引用是一个字符串表节的索引。

字符表

?一个目标文件的符号表(symbol table)保存了定位和重定位程序的定义和引用的信息。一个符号表索引是相应的下标。0表项特指了该表的第一个表项,就象未定义的符号索引一样。

重定位(Relocation)

?重定位(Relocation)是链接符号引用和符号定义的过程。比如,当一个程序调用一个函数的时候,相关的调用必须在执行时把控制传送到正确的目标地址。换句话说,重定位文件应当包含如何修改他们的节内容的信息,从而允许可执行文件或共享目标文件为一个进程的程序映像保存正确的信息。

程序头

?一个可执行的或共享的目标文件的程序头表是一个结构数组,每一个结构描述一个段或其他系统准备执行该程序所需要的信息。一个目标文件段包含一个或多个部分(就象下面的“段目录”所描述的那样)。程序头仅仅对于可执行或共享的目标文件有意义。

?typedef struct {

?Elf32_Word p_type;

?Elf32_Off p_offset;

?Elf32_Addr p_vaddr;

?Elf32_Addr p_paddr;

?Elf32_Word p_filesz;

?Elf32_Word p_memsz;

?Elf32_Word p_flags;

?Elf32_Word p_align;

?} Elf32_Phdr;

段内容实例

Text Segment Data Segment

程序载入

当创建或增加一个进程映像的时候,系统在逻辑上将拷贝一个文件的段到一个虚拟的内存段

动态链接

?程序解释器(Progam Interpreter)

–系统为解释器“编写”了一个内存映像,而不是使用原始的可执行文件的段映像。此时该解释器就负责接收来自系统的控制并且为应用程序提供一个环境

变量。

?动态链接器(Dynamic Linker)

–当使用动态链接方式建立一个可执行文件时,链接器把一个PT_INTERP类型的元素加到可执行文件中,告诉系统像该系统的解释器一样调用动态链接

器。

?动态节(Dynamic Section)

–如果一个目标文件参与动态的链接,它的程序头表将有一个类型为PT_DYNAMIC的元素。该“段”包含了.dynamic节。一个_DYNAMIC特别的

符号,表明了该节包含了以下结构的一个数组。

?共享目标的依赖关系(Shared Object Dependencies)

–当链接器处理一个文档库时,它取出库中成员并且把它们拷贝到一个输出的目标文件中。当运行时没有包括一个动态链接器的时候,那些静态的链接服

务是可用的。共享目标也提供服务,动态链接器必须把正确的共享目标文件

链接到要执行的进程映象中。因此,可执行文件和共享的目标文件之间存在

着明确的依赖性。

?全局偏移量表(Global Offset Table,GOT)

–全局偏移量表在私有数据中保存着绝对地址,所以在不影响位置无关性和程序代码段共享能力的情况下应该使地址是可用的。一个程序参考它的

GOT(使用位置无关的地址)并提取绝对的地址,所以与重定向无关的位置定

位到绝对的位置。

?PLT过程连接表(Procedure Linkage Table)

–正如GOT重定位把位置无关的地址计算成绝对地址一样,PLT过程链接表重定向那些与位置无关的函数调用到绝对的地址。

简单的C程序及其ELF格式信息

int xx, yy;

main()

{

xx = 1;

yy = 2;

printf ("xx %d yy %d\n", xx, yy);

}

ELF头信息

root# objdump -f a.out

a.out: file format elf32-i386

architecture: i386, flags 0x00000112:

EXEC_P, HAS_SYMS, D_PAGED

start address 0x080483dc

程序头

Program Header:

PHDR off 0x00000034 vaddr 0x08048034 paddr 0x08048034 align 2**2 filesz 0x000000c0 memsz 0x000000c0 flags r-x

INTERP off 0x000000f4 vaddr 0x080480f4 paddr 0x080480f4 align 2**0 filesz 0x00000019 memsz 0x00000019 flags r--

LOAD off 0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12 filesz 0x00000564 memsz 0x00000564 flags r-x

LOAD off 0x00000564 vaddr 0x08049564 paddr 0x08049564 align 2**12 filesz 0x000000a8 memsz 0x000000cc flags rw-

DYNAMIC off 0x0000059c vaddr 0x0804959c paddr 0x0804959c align 2**2 filesz 0x00000070 memsz 0x00000070 flags rw-

NOTE off 0x00000110 vaddr 0x08048110 paddr 0x08048110 align 2**2 filesz 0x00000018 memsz 0x00000018 flags r--

Dynamic节

Dynamic Section:

NEEDED libc.so.4

INIT 0x8048390

FINI 0x8048550

HASH 0x8048128

STRT AB 0x80482c8

SYMTAB 0x80481b8

STRSZ 0xad

SYMENT 0x10

DEBUG0x0

PLTGOT 0x8049584

PLTRELSZ 0x18

PLTREL 0x11

JMPREL 0x8048378

节头表

Sections:

Idx Name Size VMA LMA File off Algn

0 .interp 00000019 080480f4 080480f4 000000f4 2**0

CONTENTS, ALLOC, LOAD, READONLY, DA TA

1 .note.ABI-tag 00000018 08048110 08048110 00000110 2**2

CONTENTS, ALLOC, LOAD, READONLY, DA TA

2 .hash 00000090 08048128 08048128 00000128 2**2

CONTENTS, ALLOC, LOAD, READONLY, DA TA

3 .dynsym 00000110 080481b8 080481b8 000001b8 2**2

CONTENTS, ALLOC, LOAD, READONLY, DA TA

4 .dynstr 000000ad 080482c8 080482c8 000002c8 2**0

CONTENTS, ALLOC, LOAD, READONLY, DA TA

5 .rel.plt 00000018 08048378 08048378 00000378 2**2

CONTENTS, ALLOC, LOAD, READONLY, DA TA

6 .init 0000000b 08048390 08048390 00000390 2**2

CONTENTS, ALLOC, LOAD, READONLY, CODE

7 .plt 00000040 0804839c 0804839c 0000039c 2**2

CONTENTS, ALLOC, LOAD, READONLY, CODE

8 .text 00000174 080483dc 080483dc 000003dc 2**2

CONTENTS, ALLOC, LOAD, READONLY, CODE

9 .fini 00000006 08048550 08048550 00000550 2**2

CONTENTS, ALLOC, LOAD, READONLY, CODE

10 .rodata 0000000e 08048556 08048556 00000556 2**0

CONTENTS, ALLOC, LOAD, READONLY, DA TA

11 .data 0000000c 08049564 08049564 00000564 2**2

CONTENTS, ALLOC, LOAD, DA TA

12 .eh_frame 00000004 08049570 08049570 00000570 2**2

CONTENTS, ALLOC, LOAD, DA TA

13 .ctors 00000008 08049574 08049574 00000574 2**2

CONTENTS, ALLOC, LOAD, DA TA

14 .dtors 00000008 0804957c 0804957c 0000057c 2**2

CONTENTS, ALLOC, LOAD, DA TA

15 .got 00000018 08049584 08049584 00000584 2**2

CONTENTS, ALLOC, LOAD, DA TA

16 .dynamic 00000070 0804959c 0804959c 0000059c 2**2

CONTENTS, ALLOC, LOAD, DA TA

17 .bss 00000024 0804960c 0804960c 0000060c 2**2

ALLOC

18 .stab 000001bc 00000000 00000000 0000060c 2**2

CONTENTS, READONLY, DEBUGGING

19 .stabstr 00000388 00000000 00000000 000007c8 2**0

CONTENTS, READONLY, DEBUGGING

20 .comment 000000c8 00000000 00000000 00000b50 2**0

符号表

SYMBOL TABLE:

080480f4 l d .interp 00000000

08048110 l d .note.ABI-tag 00000000

08048128 l d .hash 00000000

080481b8 l d .dynsym 00000000

080482c8 l d .dynstr 00000000

08048378 l d .rel.plt 00000000

08048390 l d .init 00000000

0804839c l d .plt 00000000

080483dc l d .text 00000000

08048550 l d .fini 00000000

08048556 l d .rodata 00000000

08049564 l d .data 00000000

08049570 l d .eh_frame 00000000

08049574 l d .ctors 00000000

0804957c l d .dtors 00000000

08049584 l d .got 00000000

0804959c l d .dynamic 00000000

?0804960c l d .bss 00000000

?00000000 l d .stab 00000000

?00000000 l d .stabstr 00000000

?00000000 l d .comment 00000000

?00000000 l d .note 00000000

?00000000 l d *ABS* 00000000

?00000000 l d *ABS* 00000000

?00000000 l d *ABS* 00000000

?00000000 l df *ABS* 00000000 crtstuff.c

?08048460 l .text 00000000 gcc2_compiled.

?08049568 l O .data 00000000 p.3

?0804957c l O .dtors 00000000 __DTOR_LIST__

?0804956c l O .data 00000000 completed.4

?08048460 l F .text 00000000 __do_global_dtors_aux

?08049570 l O .eh_frame 00000000 __EH_FRAME_BEGIN__ 080484b4 l F .text 00000000 fini_dummy

0804960c l O .bss 00000018 object.11

080484bc l F .text 00000000 frame_dummy

080484e0 l F .text 00000000 init_dummy

08049570 l O .data 00000000 force_to_data

08049574 l O .ctors 00000000 __CTOR_LIST__

00000000 l df *ABS* 00000000 crtstuff.c

08048520 l .text 00000000 gcc2_compiled.

08048520 l F .text 00000000 __do_global_ctors_aux

08049578 l O .ctors 00000000 __CTOR_END__

08048548 l F .text 00000000 init_dummy

08049570 l O .data 00000000 force_to_data

08049580 l O .dtors 00000000 __DTOR_END__

08049570 l O .eh_frame 00000000 __FRAME_END__

00000000 l df *ABS* 00000000 p10.c

080483ac F *UND* 00000031 printf

0804959c g O *ABS* 00000000 _DYNAMIC

08048550 g O *ABS* 00000000 _etext

08048390 g F .init 00000000 _init

08049624 g O .bss 00000004 environ

00000000 w *UND* 00000000 __deregister_frame_info 08049630 g O *ABS* 00000000 end

08049628 g O .bss 00000004 xx

08049564 g O .data 00000004 __progname

080483dc g F .text 00000083 _start

0804960c g O *ABS* 00000000 __bss_start

080484e8 g F .text 00000038 main

08048550 g F .fini 00000000 _fini

0804962c g O .bss 00000004 yy

080483bc F *UND* 00000070 atexit

0804960c g O *ABS* 00000000 _edata

08049584 g O *ABS* 00000000 _GLOBAL_OFFSET_TABLE_ 08049630 g O *ABS* 00000000 _end

080483cc F *UND* 0000005b exit

00000000 w *UND* 00000000 __register_frame_info

动态符号表

DYNAMIC SYMBOL TABLE:

080483ac DF *UND* 00000031 printf

0804959c g DO *ABS* 00000000 _DYNAMIC

08048550 g DO *ABS* 00000000 _etext

08048390 g DF .init 00000000 _init

08049624 g DO .bss 00000004 environ

00000000 w D *UND* 00000000 __deregister_frame_info 08049630 g DO *ABS* 00000000 end

08049564 g DO .data 00000004 __progname

0804960c g DO *ABS* 00000000 __bss_start

08048550 g DF .fini 00000000 _fini

080483bc DF *UND* 00000070 atexit

0804960c g DO *ABS* 00000000 _edata

08049584 g DO *ABS* 00000000 _GLOBAL_OFFSET_TABLE_ 08049630 g DO *ABS* 00000000 _end

080483cc DF *UND* 0000005b exit

00000000 w D *UND* 00000000 __register_frame_info

Debugging Information

int main ()

{ /* 0x80484e8 */

} /* 0x80484e8 */

int main ()

{ /* 0x80484e8 */

/* file /usr/home/shieyuan/test/p10.c line 3 addr 0x80484ee */ /* file /usr/home/shieyuan/test/p10.c line 5 addr 0x80484ee */ /* file /usr/home/shieyuan/test/p10.c line 6 addr 0x80484f8 */ /* file /usr/home/shieyuan/test/p10.c line 7 addr 0x8048502 */ /* file /usr/home/shieyuan/test/p10.c line 8 addr 0x804851e */ /* file /usr/home/shieyuan/test/p10.c line 8 addr 0x804851e */ } /* 0x8048520 */

int xx /* 0x8049628 */;

int yy /* 0x804962c */;

动态重定位表?DYNAMIC RELOCA TION RECORDS

?OFFSET TYPE V ALUE

?08049590 R_386_JUMP_SLOT printf

?08049594 R_386_JUMP_SLOT atexit

?08049598 R_386_JUMP_SLOT exit

linux各分区作用

Linux根目录”/“下各个 系统文件夹的含义和用途 安装linux分区大小分配: 1:/boot ——100M 2:/usr ——大于800M 3:/home ——50M*用户数量+FTP服务预留空间 4:/var ——大于1GB 5:/swap交换空间:一般为1.5~2倍物理内存。 /boot 该目录默认下存放的是Linux的启动文件和内核。 /initrd 它的英文含义是boot loader initialized RAM disk,就是由boot loader初始化的内存盘。在linux内核启动前,boot loader 会将存储介质(一般是硬盘)中的initrd文件加载到内存,内核启动 时会在访问真正的根文件系统前先访问该内存中的initrd文件系统。/bin 该目录中存放Linux的常用命令。 /sbin 该目录用来存放系统管理员使用的管理程序。

/var 该目录存放那些经常被修改的文件,包括各种日志、数据文件。/etc 该目录存放系统管理时要用到的各种配置文件和子目录,例如网络配置文件、文件系统、X系统配置文件、设备配置信息、设置用户信息等。 /dev 该目录包含了Linux系统中使用的所有外部设备,它实际上是访问这些外部设备的端口,访问这些外部设备与访问一个文件或一个目录没有区别。 /mnt 临时将别的文件系统挂在该目录下。 /root这个就是超级用户的主目录。 /home 如果建立一个名为“xx”的用户,那么在/home目录下就有一个对应的“/home/xx”路径,用来存放该用户的主目录。 /usr 用户的应用程序和文件几乎都存放在该目录下。 /lib 该目录用来存放系统动态链接共享库,几乎所有的应用程序都会用到该目录下的共享库。 /opt 第三方软件在安装时默认会找这个目录,所以你没有安装此类软件时它是空的,但如果你一旦把它删除了,以后在安装此类软件时就有可能碰到麻烦。 /tmp 用来存放不同程序执行时产生的临时文件,该目录会被系统自动清理干净。

linux下编译C语言

GCC 支持了许多不同的语言,包括C、C++、Ada、Fortran、Objective C,Perl、Python 和Ruby,甚至还有Java。 Linux 内核和许多其他自由软件以及开放源码应用程序都是用 C 语言编写并使用GCC 编译的。 编译C++程序: -c 只编译不连接 g++ file1 -c -o file1.o g++ file2 -c -o file2.o g++ file1.o file.o -o exec g++ -c a.cpp 编译 g++ -o a a.o 生成可执行文件 也可以g++ -o a a.cpp直接生成可执行文件。 1. 编译单个源文件 为了进行测试,你可以创建“Hello World”程序: #include #include int main(int argc, char **argv) { printf(“Hello world!n”); exit(0); } 使用如下命令编译并测试这个代码: # gcc -o hello hello.c

# ./hello Hello wordl! 在默认情况下产生的可执行程序名为a.out,但你通常可以通过gcc 的“-o”选项来指定自己的可执行程序名称。 2. 编译多个源文件 源文件message.c包含一个简单的消息打印函数: #include void goodbye_world(void) { printf(“Goodbye, world!n”); } 使用gcc的“-c”标记来编译支持库代码: # gcc -c message.c 这一过程的输出结果是一个名为message.o的文件,它包含适合连接到一个较大程序的已编译目标代码。 创建一个简单的示例程序,它包含一个调用goodbye_world的main函数 #include void goodbye_world(void): int main(int argc, char **argv) { goodbye_world(); exit(0); }

设备驱动加到Linux内核中

7.2.3 设备驱动加到Linux内核中 设备驱动程序编写完后将该驱动程序加到内核中。这需要修改Linux 的源代码,然后重新编译内核。 ①将设备驱动程序文件(比如mydriver.c)复制到/Linux/drivers/char目录下。该目录保存了Linux下字符设备的设备驱动程序。修改该目录下mem.c 文件,在int chr_dev_init()函数中增加如下代码: #ifdef CONFIG_MYDRIVER device_init(); #endif 其中CONFIG_MYDRIVER是在配置Linux内核时赋值。 ②在/linux/drivers/char目录下Makefile中增加如下代码: ifeq ($(CONFIG_MYDRIVER),y) L_OBJ + = mydriver.o endif 如果在配置Linux内核时选择了支持新定义的设备,则在编译内核时会编译mydriver.c生成mydriver.o文件。 ③修改/linux/drivers/char目录下config.in文件,在 comment Character devices 语句下面加上 bool suppot for mydriver CONFIG_MYDRIVER 这样,若编译内核,运行make config,make menuconfig或make xconfig,那么在配置字符设备时就会有选项: Support for mydriver 当选中这个设备时,设备驱动就加到了内核中了。 重新编译内核,在shell中将当前目录cd 到Linux目录下,然后执行以下代码: # make menuconfig # make dep # make 在配置选项时要注意选择支持用户添加的设备。这样得到的内核就包含用户的设备驱动程序。 Linux通过设备文件来提供应用程序和设备驱动的接口,应用程序通过标准的文件操作函数来打开、关闭、读取和控制设备。查看Linux文件系统下的/proc/devices,可以看到当前的设备信息。如果设备驱动程序已被成功加进,这里应该由该设备对应的项。/proc/interrupts纪录了当时中断情况,可以用来查看中断申请是否正常;对于DMA和I/O口的使用,在/proc下都有相应的文件进行记录;还可以在设备驱动程序中申请在/proc 文件系统下创建一个文件,该文件用来存放设备相关信息。这样通过查看该文件就可以了解设备的使用情况。总之,/proc文件系统为用户提供了查

Linux下硬盘分区详解

Linux下硬盘分区详解 2009-06-29 01:28:08 标签:linux硬盘分区fdisk建立文件系统挂载文件系统[推送到技 术圈] 将硬盘某个分区挂载到系统中以便存取文件,先fdisk进行分区,然后mkfs建立文件系统,接着便可以mount 它。 一.Linux 的分区规定 1. 设备管理 在 Linux 中,每一个硬件设备都映射到一个系统的文件,对于硬盘、光驱等 IDE 或 SCSI 设备也不例外。 Linux 把各种 IDE 设备分配了一个由hd 前缀组成的文件;而对于各种 SCSI 设备,则分配了一个由sd 前缀组成的文件。例如,第一个 IDE 设备,Linux 就定义为 hda;第二个 IDE 设备就定义为 hdb;下面以此类推。而 SCSI 设备就应该是 sda、sdb、sdc 等。 2. 分区数量 要进行分区就必须针对每一个硬件设备进行操作,这就有可能是一块IDE硬盘或是一块SCSI硬盘。对于每一个硬盘(IDE 或 SCSI)设备,Linux 分配了一个 1 到 16 的序列号码,这就代表了这块硬盘上面的分区号码。例如,第一个 IDE 硬盘的第一个分区,在 Linux 下面映射的就是 hda1,第二个分区就称作是 hda2。对于 SCSI 硬盘则是 sda1、sdb1 等。 3. 各分区的作用 在 Linux 中规定,每一个硬盘设备最多能有 4 个主分区(其中包含扩展分区)构成,任何一个扩展分区都要占用一个主分区号码,也就是在一个硬盘中,主分区和扩展分区一共最多是 4 个。对于早期的 DOS 和Windows(Windows 2000 以前的版本),系统只承认一个主分区,可以通过在扩展分区上增加逻辑盘符(逻辑分区)的方法,进一步地细化分区。 主分区的作用就是计算机用来进行启动操作系统的,因此每一个操作系统的启动,或者称作是引导程序,都应该存放在主分区上。这就是主分区和扩展分区及逻辑分区的最大区别。我们在指定安装引导 Linux 的bootloader 的时候,都要指定在主分区上,就是最好的例证。 Linux 规定了主分区(或者扩展分区)占用 1 至 16 号码中的前 4 个号码。以第一个 IDE 硬盘为例说明,主分区(或者扩展分区)占用了 hda1、hda2、hda3、hda4,而逻辑分区占用了 hda5 到 hda16 等 12 个号码。因此,Linux 下面每一个硬盘总共最多有 16 个分区。 对于逻辑分区,Linux 规定它们必须建立在扩展分区上(在 DOS 和 Windows 系统上也是如此规定),而不

Linux下Makefile简单教程

目录 一:Makefile基本规则 1.1示例 1.2 隐式规则 1.3 伪目标 1.4 搜索源文件 二:变量 2.1使用变量定义变量值 2.2追加变量 三:条件判断 四:函数

Linux下Makefile总结 ——一步 MakeFile可以看做是一种简单的编程语言,其诞生的本质目的是实现自动化编译。 以Linux下gcc-c编译器为例,编译一个c语言程序需要经过以下几个步骤: 1.将c语言源程序预处理,生成.i文件; 2.预处理后的.i语言编译成汇编语言,生成.s文件; 3.汇编语言经过汇编,生成目标文件.o文件; 4.将各个模块的.o文件链接起来,生成一个可执行程序文件。 我们知道,在Visual C++6.0中,可以新建一个工程,在一个工程当中能够包含若干个c语言文件,则编译的时候直接编译整个工程便可。Linux下无法为多个c语言文件新建工程,但可以通过MakeFile实现它们的整合编译。 如上gcc-c编译步骤,如果使用Makefile则过程为: .C文件——>.o文件——>可执行文件 当然,Makefile中也加入了自己的设置变量方法与集成了一些函数,能够更有效地方便用户使用。 /**************************分隔符********************************/

一:Makefile基本规则 1.1示例 target ... : prerequisites ... command ... ... target也就是一个目标文件,可以是Object File,也可以是执行文件。prerequisites就是,要生成那个target所需要的文件或是目标。command也就是make需要执行的命令。(任意的Shell命令) 为了方便理解,我们来看一个示例: /*Makefile示例*/ edit : main.o kbd.o command.o display.o / insert.o search.o files.o utils.o gcc -o edit main.o kbd.o command.o display.o / insert.o search.o files.o utils.o main.o : main.c defs.h #生成main.o gcc -c main.c

Linux内核—文件系统模块的设计和开发

Linux内核—文件系统模块的设计和开发 郑小辉 摘要:目前,Linux技术已经成为IT技术发展的热点,投身于Linux技术研究的社区、研究机构和软件企业越来越多,支持Linux的软件、硬件制造商和解决方案提供商也迅速增加,Linux在信息化建设中的应用范围也越来越广,Linux产业链已初步形成,并正在得到持续的完善。随着整个Linux产业的发展,Linux技术也处在快速的发展过程中,形成了若干技术热点。 本文介绍了Linux的发展和特点,以及与其他文件系统的区别。文中主要是对Linux2.4.0内核文件系统源代码的分析,并参考其文件格式设计一个简洁的文件系统。源代码的分析主要介绍了VFS文件系统的结构,Linux自己的Ext2文件系统结构,以及文件系统中的主要函数操作。 在设计的简洁文件系统中,通过调用一些系统函数实现了用户的登录、浏览目录、创建目录、更改目录、创建文件以及退出系统功能。 关键字:Linux 源代码分析文件系统Ext2 Linux内核

Linux kernel -Design and development for the File System Module Zheng xiaohui Abstract: Currently, Linux IT technology has become a hot development technology. Participating in Linux technology research communities, research institutes and software enterprises are in support of Linux more and more, software and hardware manufacturers and solution providers have increased rapidly, In the development of the information industry the Linux application is also increasing, Linux industry chain has taken shape, and is sustained improvemently. With the entire industry in the development of Linux, and Linux is also at the rapid development process, formed a number of technical points. This paper presents the development of Linux and features, and with other file system differences. The main text of the document is Linux2.4.0 system kernel source code analysis, and I reference its file format to design a simple file system. The analysis of the source code mainly on the VFS file system structure, Linux Ext2 its own file system structures, file systems and the main function operation. In the design of the file simple system, some system function is used to achieve function such as: the user's login, browse catalogs, create directories, Change directory, create documents and withdraw from the system function and etc. Key words: Linux, the source code, file system, Ext2, Linux kernel

linux下磁盘分区详解 图文

linux下磁盘分区详解图文 来源:互联网作者:佚名时间:07-10 21:28:58【大中小】linux分区不同于windows,linux下硬盘设备名为(IDE硬盘为hdx(x为从a—d)因为IDE硬盘最多四个,SCSI,SATA,USB硬盘为sdx(x为a—z)),硬盘主分区最多为4个,不用说大家也知道 Centos下磁盘管理 1.磁盘分区格式说明 linux分区不同于windows,linux下硬盘设备名为(IDE硬盘为hdx(x为从a—d)因为ID E硬盘最多四个,SCSI,SATA,USB硬盘为sdx(x为a—z)),硬盘主分区最多为4个,不用说大家也知道…..所以主分区从sdb1开始到sdb4,逻辑分区从sdb5开始,(逻辑分区永远从sdb5开始…)设备名可以使用fdisk –l查看 2.分区详解 使用ssh远程连接工具登录到系统,使用fdisk -l命令查看磁盘状态 此处可以看到两块硬盘hda和hdb,第一块硬盘hda是装好系统的。hdb硬盘是未进行分区的。 本例将这个10G的硬盘分区,分区计划:分一个主分区,大小3G,文件格式ext3.三个逻辑分区,大小分别为2G,2G,3G。实际分区个数和大小可论情况所定。 下面就是分区的详细步骤,由于是每一步都进行了截图和说明,内容略显复杂,其实很简单。输入 fdisk /dev/hdb 然后回车,给硬盘进行分区。如下图

输入n回车新建分区,接着再输入p回车新建主分区,如图 此处要求选择分区号在1-4间,输入1回车 First cylinder (1-20805, default 1):这里是设置分区起始的柱面,直接回车选择默认即可,回车后如下图 Last cylinder or +size or +sizeM or +sizeK (1-20805, default 20805):此处是设置分区结束柱面,+3G表示从起始柱面开始向后3G结束,也是是设置分区大小为3G,输入+3G后回车,如下图所示

Linux下如何调整磁盘分区

环境 服务器安装有一个60G的硬盘,目前已经划分为/、/home、/chroot和/swap,详细的分区信息如何下所示: Command (m for help): p Disk /dev/hda: 61.4 GB, 61492838400 bytes 255 heads, 63 sectors/track, 7476 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 915 7349706 83 Linux /dev/hda2 916 1414 4008217+ 83 Linux /dev/hda3 1415 7476 48693015 5 Extended /dev/hda5 1415 1477 506016 82 Linux swap /dev/hda6 1478 7476 48186936 83 Linux 然后现在希望从/home分区里面分出大约4GB的空间用于安装FreeBSD。 过程 首先,我们需要调整文件系统的大小(注意是文件系统,而不是分区的大小),然后对调整完毕的文件系统进行检查,然后再进一步调整分区的大小。 文章以我自己用的系统为例子,实际操作时根据情况调整即可。 用惯了传统调整硬盘工具的人可能会认为文件系统和硬盘的分区之间是统一的,实际上他们之间并不是完整的整体(这也就是为什么BSD可以在一个硬盘分区里面制作多个文件系统分区)。想像一下带有移动式书架的书橱。你可以通过移动式书架调整书橱里面书籍的位置。把书当成文件系统,你可以在书橱里面放满书籍,也可以通过移动式书架调整书橱的空间。当然也可以通过书架调整书橱里面书籍存放的位置。如下图所示: |<-- hda1------>;|<-- hda2------>;| +---------------+---------------+ |XXXXXXXXXXXXXXX|XXXXXXXXXX| | |XXXXXXXXXXXXXXX|XXXXXXXXXX| | +---------------+---------------+

怎样执行在Linux上运行应用程序

如何执行在Linux上运行的应用程序 关键字:Linux 先决条件 要充分理解本文,必须具备Windows 环境下桌面应用程序的工作经验,我认为读者对如何使用Linux 桌面有一个基本的了解。使用一个运行的Linux 计算来机探讨本文的概念和示例是很有帮助的。 概述 有时候第一次在Linux 上运行一个应用程序需要一点额外工作。有些应用程序,比如服务器服务,可能无法安装为服务,因此您需要从命令行启动这些应用程序。对于启动这些应用程序的用户帐户而言,需要在应用程序文件中设置执行许可标志(x)。 运行用户空间应用程序 Linux 在内核空间或用户空间运行进程。用户空间是操作系统的区域,应用程序通常在此运行。简单地说,每个用户帐户有其自己的用户空间,应用程序在这个领域内运行。 默认情况下,只有root 用户有权访问内核空间。root 用户是Linux 中的超级用户,相当于Windows 中的管理员帐户。在root 用户帐户下运行应用程序可能会引起安全风险,是不可取的。 很多服务器服务需要root 权限启动服务。然而,服务启动后,root 帐户通常会将其移至服务帐户。严格地说,Linux 中的服务帐户才是标准的用户帐户。主要区别是服务帐户仅用于运行一个服务,而不是为任何实际登录的用户准备的。 设置权限 您可以使用chmod 命令在一个文件中设置执行权限。在Linux 中,umask 设置通常用来防止下载的文件被执行,也有充分的理由相信,因为它有助于维护Linux 计算机的安全性。 大多数Linux 发行版具有一个值为022 的umask 设置,这意味着,默认情况下一个新文件权限设置为644.权限的数字表示形式采用读(4)、写(2)、执行(1) 的格式。因此,默认权限为644 的应用程序下载意味着文件所有者有读写权限,而组用户和其他用户只有读权限。 例如,为每个人赋予一个文件的执行权限,使用chmod a+x 命令。a 表示所有人,加号(+) 表示添加,而x 表示执行。同样地,如果应用程序是一个服务器服务,您应该确保只有授权帐户才有权执行此服务。 如果一个应用程序能够在标准用户帐户权限下运行,但只有特定组中的用户才需要使用它,您可以将该组所有者权限设置为可执行,然后将这些用户添加到该组中。 更具体地说,您可以在一个可执行文件中设置访问控制列表(ACL) 权限,赋予特定用户或组权限来运行该应用程序。使用setfacl 实用工具设置ACL 权限。 对于这些需要以root 用户启动进程的应用程序,比如服务器服务,您有几个选择。总结了允许用户执行需要root 权限的服务器服务的各种选项。 选项描述 作为root 用户不推荐用于服务器服务。当用户已经知道root 密码而且应用程序泄露不是首要关注问题时,可用于应用程序。 SetUID 由于安全问题,不推荐使用。SetUID 允许标准用户以另一个用户方式,比如root 用户,执行一个文件。 sudo 很常用,并且被认为是一个很好的实践。sudo 授予一个用户或组成员权限以执行可能额外需要root 权限的文件。该用户不需要知道root 密码。 带有文件权限的标准用户帐户在一个文件上为用户所有者、组所有者或其他人(所有人)

linux内核启动 Android系统启动过程详解

linux内核启动+Android系统启动过程详解 第一部分:汇编部分 Linux启动之 linux-rk3288-tchip/kernel/arch/arm/boot/compressed/ head.S分析这段代码是linux boot后执行的第一个程序,完成的主要工作是解压内核,然后跳转到相关执行地址。这部分代码在做驱动开发时不需要改动,但分析其执行流程对是理解android的第一步 开头有一段宏定义这是gnu arm汇编的宏定义。关于GUN 的汇编和其他编译器,在指令语法上有很大差别,具体可查询相关GUN汇编语法了解 另外此段代码必须不能包括重定位部分。因为这时一开始必须要立即运行的。所谓重定位,比如当编译时某个文件用到外部符号是用动态链接库的方式,那么该文件生成的目标文件将包含重定位信息,在加载时需要重定位该符号,否则执行时将因找不到地址而出错 #ifdef DEBUG//开始是调试用,主要是一些打印输出函数,不用关心 #if defined(CONFIG_DEBUG_ICEDCC)

……具体代码略 #endif 宏定义结束之后定义了一个段, .section ".start", #alloc, #execinstr 这个段的段名是 .start,#alloc表示Section contains allocated data, #execinstr表示Section contains executable instructions. 生成最终映像时,这段代码会放在最开头 .align start: .type start,#function /*.type指定start这个符号是函数类型*/ .rept 8 mov r0, r0 //将此命令重复8次,相当于nop,这里是为中断向量保存空间 .endr b 1f .word 0x016f2818 @ Magic numbers to help the loader

中文版Linux 桌面操作系统初级教程

《中文版Linux 桌面操作系统初级教程》郭守华宋雪娇编著 Linux操作系统支持多种安装方式。本章将讨论从硬盘安装对红旗Linux、共创Linux等各种版本的Linux都适用的通用方法。从硬盘安装Linux操作系统,首先要准备安装包,Linux操作系统的安 装包通常是一个或多个ISO镜像文件(一般通过网络下载就可以得到);其次,要通过某种手段启动镜像 文件中的系统安装程序;接下来,按照安装程序的提示信息进行安装就可以了。安装过程中,需要指 定Linux操作系统的安装位置,这主要涉及硬盘分区的一些知识。 综合来看,学习Linux操作系统的安装,关键要学会两点:第一、如何Linux操作系统准备硬盘 空间?第二、如何启动ISO镜像文件中的安装程序。 硬盘分区 通常,在使用硬盘时,都要进行分区。如果把未分区的硬盘比做一张大白纸,那么分区后的硬 盘就相当于这张大白纸被画上了几个大方框。一块硬盘被分成多个分区之后,各分区之间是相对独立 的,每个分区都可以有自己的文件格式,例如FAT16、FAT32、NTFS等等。 Linux操作系统需要的硬盘分区 要安装一个操作系统,一般来讲都要为它准备专门的分区。专门,意味着不能与其他操作系统 合用一个分区,也意味着不要与用户自己的数据文件合用一个分区,前者是因为不同的操作系统可能 需要不同格式的磁盘分区,后者则更多地出于用户数据安全和系统维护方便的考虑。从最低配置角度 讲,Linux 操作系统需要一个EXT2或EXT3格式的硬盘分区作为根分区,大小在2~5G就可以。另外还 需要一个SWAP 格式的交换分区,大小与内存有关:如果内存在256M以下,交换分区的大小应该是内存 的两倍;如果内存在256M以上,交换分区的大小等于内存大小即可。 Windows硬盘分区管理工具 管理硬盘分区的工具有很多,在网上也可以找到详细的使用指导。为了方便读者,本书整理收 录了Windows 环境下运行的PQMagic4.0 的使用方法,其它版本的PQMagic的使用方法也基本相同。

Linux内核与跟文件系统的关系

Linux内核与根文件系统的关系 开篇题外话:对于Linux初学者来说,这是一个很纠结的问题,但这也是一个很关键的问题!一语破天机:“尽管内核是Linux 的核心,但文件却是用户与操作系统交互所采用的主要工具。这对Linux 来说尤其如此,这是因为在UNIX 传统中,它使用文件I/O 机制管理硬件 设备和数据文件。” 一.什么是文件系统 文件系统指文件存在的物理空间,linux系统中每个分区都是一个文件系统,都有自己的目 录层次结构。 Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其 中。这种机制有利于用户和操作系统的交互。 每个实际文件系统从操作系统和系统服务中分离出来,它们之间通过一个接口层:虚拟文件系统或VFS来通讯。VFS使得Linux可以支持多个不同的文件系统,每个表示一个VFS 的通用接口。由于软件将Linux 文件系统的所有细节进行了转换,所以Linux核心的其它部分及系统中运行的程序将看到统一的文件系统。Linux 的虚拟文件系统允许用户同时能透明地安装 许多不同的文件系统。 在Linux文件系统中,EXT2文件系统、虚拟文件系统、/proc文件系统是三个具有代表性的 文件系统。 二.什么是根文件系统 根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所挂载(mount)的第一个文件系统,内核代码的映像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如rcS,inittab)和服务加载到内存中去运行。我们要明白文件系统和内核是完全独立的两个部分。在嵌入式中移植的内核下载到开发板上,是没有办法真正的启动Linux操作系统的,会出现无法加载文件系统的错误。 那么根文件系统在系统启动中到底是什么时候挂载的呢?先将/dev/ram0挂载,而后执行/linuxrc.等其执行完后。切换根目录,再挂载具体的根文件系统.根文件系统执行完之后,也就是到了Start_kernel()函数的最后,执行init的进程,也就第一个用户进程。对系统进行各 种初始化的操作。 根文件系统之所以在前面加一个”根“,说明它是加载其它文件系统的”根“,既然是根的话,那么如果没有这个根,其它的文件系统也就没有办法进行加载的。它包含系统引导和使其他文件系统得以挂载(mount)所必要的文件。根文件系统包括Linux启动时所必须的目录和关键性的文件,例如Linux启动时都需要有init目录下的相关文件,在Linux挂载分区时Linux 一定会找/etc/fstab这个挂载文件等,根文件系统中还包括了许多的应用程序bin目录等,任何包括这些Linux 系统启动所必须的文件都可以成为根文件系统。Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。成功之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。在Linux 中将一个文件系统与一个存储设备关联起来的过程称为挂载(mount)。使用mount 命令将一个文件系统附着到当前文件系统层次结构中(根)。在执行挂装时,要提供文件系统类型、文件系统和一个挂装点。根文件系统被挂载到根目录下“/”上后,在根目录下就有根文件系统的各个目录,文件:/bin /sbin /mnt等,再将其他分区挂接到/mnt 目录上,/mnt目录下就有这个分区的各个目录,文件。

从硬盘安装Linux操作系统的方法步骤(精)

从硬盘安装Linux操作系统的方法步骤来源: ChinaUnix博客日期:2007.04.22 18:30(共有0条评论我要评论从硬盘安装Linux操作系统,首先要准备安装包,Linux操作系统的安装包通常是一个或多个ISO镜像文件(一般通过网络下载就可以得到;其次,要通过某种手段启动镜像文件中的系统安装程序;接下来,按照安装程序的提示信息进行安装就可以了。安装过程中,需要指定Linux操作系统的安装位置,这主要涉及硬盘分区的一些知识。综合来看,学习Linux操作系统的安装,关键要学会两点:第一、如何为Linux操作系统准备硬盘空间?第二、如何启动ISO镜像文件中的安装程序。硬盘分区通常,在使用硬盘时,都要进行分区。如果把未分区的硬盘比做一张大白纸,那么分区后的硬盘就相当于这张大白纸被画上了几个大方框。一块硬盘被分成多个分区之后,各分区之间是相对独立的,每个分区都可以有自己的文件格式,例如 FAT16、FAT32、NTFS等等。Linux 操作系统需要的硬盘分区要安装一个操作系统,一般来讲都要为它准备专门的分区。专门,意味着不能与其他操作系统合用一个分区,也意味着不要与用户自己的数据文件合用一个分区,前者是因为不同的操作系统可能需要不同格式的磁盘分区,后者则更多地出于用户数据安全和系统维护方便的考虑。从最低配置角度讲,Linux 操作系统需要一个EXT2或EXT3格式的硬盘分区作为根分区,大小在2~5G就可以。另外还需要一个SWAP 格式的交换分区,大小与内存有关:如果内存在256M以下,交换分区的大小应该是内存的两倍;如果内存在256M以上,交换分区的大小等于内存大小即可。Linux 硬盘分区管理工具在安装Linux 操作系统时,如果选择了手工的分区方式,将启动硬盘分区工具Disk Druid。这个程序是安装程序自带的。下面讨论一下该软件的使用。Linux下硬盘分区的标识在Linux 下用hda、hdb 等来标识不同的硬盘;用hda1、hda2、hda5、hda6 来标识不同的分区。其中,字母a 代表第一块硬盘,b代表第二块硬盘,依次类推。而数字1 代表一块硬盘的第一个分区、2 代表第二个分区,依次类推。1到4 对应的是主分区(Primary Partition)或扩展分区(Extension Partition。从5开始,对应的都是硬盘的逻辑分区(Logical Partition)。一块硬盘即使只有一个主分区,逻辑分区也是从5开始编号的,这点应特别注意。系统上有一块硬盘,名字为/dev/hda,它上面有一个NTFS 格式的主分区hda1 以及

怎么在linux操作系统上安装可执行的软件

仅以RedHat Linux 为参照,包括但不限于其他版本的Linux都要遵循此方法,以下是说明: 先来看看Linux软件扩展名。软件后缀为.rpm最初是Red Hat Linux提供的一种包封装格式,现在许多Linux发行版本都使用;后缀为.deb是Debain Linux 提供的一种包封装格式;后缀为.tar.gz、tar.Z、tar.bz2或.tgz是使用Unix 系统打包工具tar打包的;后缀为.bin的一般是一些商业软件。通过扩展名可以了解软件格式,进而了解软件安装。 RPM格式软件包的安装 1.简介 几乎所有的Linux发行版本都使用某种形式的软件包管理安装、更新和卸载软件。与直接从源代码安装相比,软件包管理易于安装和卸载;易于更新已安装的软件包;易于保护配置文件;易于跟踪已安装文件。 RPM全称是Red Hat Package Manager(Red Hat包管理器)。RPM本质上就是一个包,包含可以立即在特定机器体系结构上安装和运行的Linux软件。RPM 示意图见图1。 大多数Linux RPM软件包的命名有一定的规律,它遵循名称-版本-修正版-类型-MYsoftware-1.2 -1.i386.rpm 。 2.安装RPM包软件 #rpm -ivh MYsoftware-1.2 -1.i386.rpm RPM命令主要参数: -i 安装软件。 -t 测试安装,不是真的安装。 -p 显示安装进度。 -f 忽略任何错误。 -U 升级安装。 -v 检测套件是否正确安装。 3.卸载软件 #rpm -e 软件名 需要说明的是,上面代码中使用的是软件名,而不是软件包名。例如,要卸载software-1.2.-1.i386.rpm这个包时,应执行: #rpm -e software 4.强行卸载RPM包

Linux(Ubuntu)硬盘”分区“图文教程

Ubuntu 硬盘”分区“图文教程(用于光盘,U盘安装Ubuntu) 关于Linux系统下的“分区”问题,对于新手来说一直是很头疼的。我来简单写一下,它的“分区”方法,规则。 郑重声明: 1.我为了让没有接触过Linux系统的人,理解更加简单。所以在言语表述上不是很规范,专业。我只需要新手们能够明白基础知识,以后想提高,延伸。大家可以去Linux专门的论坛,看帖子学习。这个帖子,只给新手们起到“入门”的作用 2.本教程虽然标题是Ubuntu分区,但其实大部分linux发行版系统,“分区”的方法,形式,都是基本相同的,我后面会给出另外几个发行版本的图,大家看看就知道了。 3. 对于Ubuntu来说,其安装方法现在有:wubi 硬盘安装,普通光盘安装,U盘安装,三种。其中wubi安装不需要涉及到“分区”,另外2种安装方式,必须先学会“分区”方法再谈安装! 大家都看到了,我一直是给“分区”,加了引号,因为在任何的“类Linux”系统里(比如红旗,红帽子,Ubuntu),他们并没有硬盘分区这个概念,这个和Windows是有本质区别的。 一.挂载点 在Linux系统里面,“分区”,被称作“挂载点”,简单明了的说,“挂载点”意思就是:把一部分硬盘容量,“分”成一个文件夹的形式,用来干什么事情。这个文件夹的名字,就叫做:“挂载点”。所以,和Windows有着本质上的超级大的区别,你在任何linux发行版系统里面,绝对不会看到C盘,D 盘,E盘这样的,你能看到的,只有“文件夹”形式存在的“挂载点”。在Linux 系统里面,有一些已经定义好,用来干一些事情的挂载点,常见的“挂载点”有: 1. Boot 大家应该很常见这个英文,是引导的意思。对于Linux来讲,一部分容量,用来“挂载”Boot,就是用于存储系统的引导文件 2. / 或者/ROOT 就一个符号,是Linux系统特有的,是“根目录”的意思。根目录,用来存储用户的一些基本配置文件,软件设置文件等等很多 3. home “家”的意思,在Linux系统里面,它是用来存储用户的程序,文件,文档等等所有资源。因此,进行“分区”操作的时候,它是要分的很大很大很大的。 4. SWAP 这个,是Linux和Windows最大的区别了。Windows没这个东西,只有Linux才有。其实它也不是一个“挂载点”,为了菜鸟们理解方便,我这里姑且把它当作一种挂载点。SWAP分区,是让“内存”临时存储文件的专用空间。 小知识:对于大部分常见的Linux核心的系统,上述的2,4.有它们2个“挂载点”,就够了。

如何在linux中自由执行python程序

可执行的Python程序 这部分内容只对Linux/Unix用户适用,不过Windows用户可能也对程序的第一行比较好奇。首先我们需要通过chmod命令,给程序可执行的许可,然后运行程序。 chmod命令用来改变文件的模式,给系统中所有用户这个源文件的执行许可。然后我们可以直接通过指定源文件的位置来执行程序。我们使用./来指示程序位于当前目录。 为了更加有趣一些,你可以把你的文件名改成仅仅helloworld,然后运行./helloworld。这样,这个程序仍然可以工作,因为系统知道它必须用源文件第一行指定的那个解释器来运行程序。 只要知道程序的确切位置,你现在就可以运行程序了——但是如果你希望你的程序能够从各个位置运行呢?那样的话,你可以把你的程序保存在PATH环境变量中的目录之一。每当你运行任何程序,系统会查找列在PATH环境变量中的各个目录。然后运行那个程序。你只要简单地把这个源文件复制到PATH所列目录之一就可以使你的程序在任何位置都可用了。

我们能够用echo命令来显示PATH变量,用$给变量名加前缀以向shell 表示我们需要这个变量的值。我们看到/home/swaroop/bin 是PATH变量中的目录之一。swaroop是我的系统中使用的用户名。通常,在你的系统中也会有一个相似的目录。你也可以把你选择的目录添加到PATH变量中去——这可以通过运行PATH=$PATH:/home/swaroop/mydir完成,其中“/home/swaroop/mydir”是我想要添加到PATH变量中的目录。 当你想要在任何时间、任何地方运行你的程序的时候,这个方法十分有用。它就好像创造你自己的指令,如同cd或其他Linux终端或DOS提示符命令那样。

Linux服务器硬盘分区的最佳方案

Linux服务器硬盘分区的最佳方案 对于Linuux服务器站长们是否了解呢,在这里专职优化、域名注册、网站空间、虚拟主机、服务器托管、vps主机、服务器租用的中国信息港来为你详细分析Linuux服务器硬盘分区的方法! 第一点也是最重要的一点,要知道当前安装LILO的版本,因为 LILO2.21及早期版本对硬盘大小有限制,如果安装LILO到1023磁道以外即8G的空间以外,LILO就无法启动。但一些BIOS较老的机器,LINUX仍然无法突破1024磁道的限制,因此这些BIOS无法认出大于1024的硬盘空间。 还需要考虑的问题有: · 是否限制用户可使用的磁盘空间大小? · 在系统中需要安装哪些软件? · 交换分区需要多大? · 系统是否有多个硬盘? 下面,我们按系统工作性质的不同对分区的划分提出了一些建议。当然,根据实际情况,在满足系统工作需求的前提下,下面的分区大小也可以灵活的变动。 基本工作站的分区方案 假设系统的硬盘大小是10G。 /boot 20M Swap 128M /root 9.85G 建立一个20M的/boot分区是为了避免将系统内核文件放到1024磁道以外,如果将/boot做为root分区的一个子目录,内核文件就会安装在root分区的任何地方,因为硬盘的大小超过了8G,所以在启动时就有可能出现问题。建议将交换分区的大小设置为内存的两倍,在这里我们假设系统的内存为 64M。最后我们将硬盘的剩余空间全部分给了root分区。 Red Hat Linux 6.2 及其早期版本上的基本服务器硬盘分区方案 这里的服务器我们假设只提供几种通用的服务,如WWW服务及FTP服务等几种服务,通过telnet登录的用户数很少。假设其硬盘大小为 25G。 /boot 20M Swap 128M

linux下编写c源程序并编译运行

姓名:雨田河南大学rjxy 班级:XXXX 实验二Linux基本操作 实验二Linux基本操作 编写c源程序并用编译运行 【需求】 ◆在当前目录下创建新文件t.c,用vi编辑器一段简单代码,代码要求在屏幕上输出 文字“Hello Linux!”; ◆用gcc编译t.c文件,并运行,查看输出结果,若结果错误,请根据提示修改;【系统及软件环境】 操作系统:Virtualbox,Fedora 13 【实验配置文件及命令】 1.配置文件: 2.命令:touch、rpm、gcc、./等

进入Linux操作系统,应用程序-> 系统工具-> 终端,输入命令:su 输入密码切换到root超级用户。 1.在当前目录建立一个新的目录test:$ mkdir test 在test目录下建立文件t.c :$touch t.c 3编辑程序源代码:vi t.c 首先按下键盘的“i”键,字符界面下方出现“insert”提示字符,此时输入以下代码: #include "stdio.h" int main() { printf("Hello Linux!\n"); return 0; } 4 保存退出:先按下“Esc”键,然后按下“shift”和“:”键,界面上出现冒号,然后输入“xq!”或者“x”对代码保存退出。 5 由于系统默认没有安装C语言编译程序,下面进行安装gcc 程序; 此处不再赘述,以下引用实验指导书: 1.gcc的安装 (1)查看gcc是否安装 rpm –q gcc (2)指定安装源 在“系统-分配光驱”里选择“Fedora-13-i386-DVD.iso” (3)查看安装源挂载位置 df命令,可查看到虚拟光驱挂载点 返回结果为:/media/Fedora 13 i386 DVD (4)使用安装源 安装的文件为RPM安装包,所在位置为安装光盘中的“Packages”目录下,可用“cd”命令进入此目录 cd /media/ Fedora 13 i386 DVD/Packages ★由于“Fedora 13 i386 DVD”名字中有空格,若直接输入,则会提示找不到此目录,可用“tab”键自动补全 【方法】cd /media/F)/P() 则可返回如下结果: cd /media/Fedora\ 13\ i386 \DVD\ /Packages (5)查看当前目录下是否有gcc安装包

相关主题
文本预览
相关文档 最新文档