前言文字资料大部分来源于网络。系统分区boot分区/boot存放一些启动Linux时用到的核心文件,一般100M左右(50M~200M)。根分区/根目录必须与/bin、/sbin、/lib、/dev、/etc这5个目录在同一个分区。/bin:二进制文件,常用命令,比如文件操作。如图,可以看到有很多熟悉的命令~可以调用execl、execle、execlp、execv、execve等函数来调用执行文件/命令。/sbin:仅限系统的二进制文件系统命令。/lib:Libraries开机时会用到的函数库,和/bin或/sbin下的指令会用到的函数库。/dev:Devices在Linux中,任何设备和外设都以文件的形式存在于该目录下,如/dev/tty,/dev/hd,/dev/sd等/etc:Etcetera系统的所有配置文件,包括配置系统自动安装的程序文件,如nginx、mysql等配置文件。/media:Media一般是系统自动挂载的可移动设备,挂载后桌面窗口左栏会出现设备图标。如软盘、CD、DVD、U盘、移动硬盘(/media/floppy、/media/cdrom)。/mnt:mount一般用于让用户自己挂载其他文件系统。安装后,设备图标不会出现在桌面窗口的左栏中。可以发现cdrom是挂载的CD,hgfs(),usb挂载的U盘/tmp:Temporaryfiles临时目录,系统会定时或者目录大小达到一定大小后自动清理上线。(因为读写频繁,磁盘容易损坏,所以可以单独分区)用户分区homeHome是除root用户以外的其他用户的家目录。Swap分区swapSwap分区,虚拟内存,一般为物理内存的1.5~2倍系统文件passwd/etc目录下的passwd文件,用于记录用户信息。可以看到有7个字段。 注册名:密码:用户标识号:组标识号:用户名:用户主目录:命令解释器详细解释:1.注册名(login_name):注册名在同一个系统中是唯一的。字母大小写敏感。2.密码(passwd):系统使用密码来验证用户的合法性。超级用户root或者一些高级用户可以使用系统命令passwd修改系统所有用户的密码,普通用户也可以在登录系统后使用passwd命令修改自己的密码。在目前的Unix/Linux系统中,密码不再直接保存在passwd文件中。通常,passwd文件中的密码字段被一个“x”代替,**使用/etc/shadow作为真正的密码文件*,shadow文件只有超级用户才有读权限。如果passwd字段的第一个字符是“”,则表示该帐户已被阻止。3、用户标识号(UID):用来区分不同用户的数值。UID字段在系统内管理进程和文件保护时使用。注册名和UID都可以用来识别用户。对于系统来说,UID更重要,注册名更方便用户使用。在某些特定用途中,系统中可能存在多个注册名不同但UID相同的用户,而这些注册名不同的用户实际上是同一个用户。4.组ID(GID):当前用户的默认工作组ID。可以将具有相似属性的多个用户分配到同一个组,每个组都有自己的组名,并以自己的组标识号区分。每个用户可以同时属于多个组,在/etc/group文件中指定一个组包含的用户。5、用户名(user_name):包含用户的一些信息,如用户的真实姓名、办公地址、联系电话等。在Linux系统中,mail、finger等程序就是利用这些信息来识别系统的用户。6.用户主目录(home_directory):定义个人用户的主目录。当用户登录时,他的Shell会把这个目录作为用户的工作目录。在Unix/Linux系统中,超级用户root的工作目录为/root;其他个人用户在/home目录下有自己独立的工作环境,系统在该目录下为每个用户配置自己的home目录。各个用户文件放置在各自的主目录中。7、命令解释器(Shell):Shell是用户登录系统时运行的程序名,通常是Shell程序的全路径名,如/bin/bash。文件和I/O什么是I/O?Input/output是主存和外部设备之间拷贝数据的过程Device->memory(输入操作)memory->device(输出操作)AdvancedI/O:ANSIC提供的标准I/O库叫做advancedI/OO,通常也称为bufferedI/OLow-levelI/O:通常称为unbufferedI/O对于Linux,所有对设备或文件的操作都是通过文件描述符进行的。打开或创建文件时,内核向进程返回一个文件描述符(一个非负整数)。后续对文件的操作只需要通过文件描述符,内核记录打开文件的信息。一个进程启动时,默认打开3个文件,标准输入、标准输出、标准错误。相应的文件描述符为0(STDIN_FILENO)、1(STDOUT_FILENO)和2(STDERR_FILENO)。这些常量定义在unistd.h头文件中。gdb调试操作:runarg1arg2查看源码:查看最后10行列表设置断点:断行号删除n行断点:删除n单步调试continue(c)-运行到下一个断点step(s)-Single-步跟踪,进入函数,类似于VC中的stepinnext(n)-单步跟踪,不进入函数,类似于VC中的stepoutfinish-运行程序,直到当前函数完成并返回。并在函数返回时打印栈地址、返回值、参数值等信息。until-当厌倦单步执行循环体时,此命令运行程序直到退出循环体。
