前言
linux是一个很强大开源的系统,笔者作为一个嵌入式Linux学习者,同样被Linux的开源文化深深的吸引着。对于大部分职业可能Windows已经够好了,但是在程序员眼里,Linux开源的文化才是归属地。对对对,就是喜欢内核里面有着各种各样骚操作的代码,喜欢着基于Linux内核的各种各样的开源软件。而被Linux深深吸引的我,为了系统的学习Linux系统,所以我和大家一起学习这个牛逼的不行的系统,有什么意见或建议可以私信我,也可以留言评论,大家一起学习,一起进步。
学习的框架
- 基本shell指令和脚本语言可以参考帖子博客,也可以跟着我一起学习,没有推荐的书籍,但笔者这里有一本《Linux命令行与shell脚本编程大全(第3版)》和《鸟哥的Linux私房菜-基础篇(第四版)》网络评价不错,我会上传到我的博客,有需要的可以去下载。
- Makefile的学习可以参考《GNU Make》和《跟我一起写Makefile》评价不错,我也上传到我的博客中。
认识Linux系统
与Windows不同,Windows是可视化窗口界面,安装软件,存放文件,卸载什么的,都是鼠标点点,硬盘分区更是把各种文件归了类,非常清晰明了。在Linux中,有一句话,基本上每个人都会说,那就是一切皆文件,对于熟悉Linux的人来说,这些都是很清晰的,但是对于不熟悉的人来说,却会说“很麻烦,不好用”之类的话。其实,Linux和Windows一样清晰,存放文件是以文件树的形式体现的,而操作是以终端窗口体现的。
文件树流图
文件树结构释义:
根文件目录 | 主文件目录 | 子文件目录 | 解释 |
---|---|---|---|
/ | bin | 系统文件和目录 | 包含了引导启动所需的命令或普通用户可能用的命令(可能在引导启动后).这些命令都是二进制文件的可执行程序,多是系统中重要的系统文件 |
sbin | 系统文件和目录 | 系统管理命令,存放管理员需要的程序和一些重要的二进制文件,一般不给普通用户使用 | |
etc |
系统文件和目录 | 系统管理和配置文件,包含了用户信息,系统初始化文件 | |
/etc/rc或/etc/rc.d或/etc/rc?.d | 启动、或改变运行级时运行的脚本或脚本的目录 | ||
/etc/passwd | 用户数据库,其中的域给出了用户名、真实姓名、用户起始目录、加密口令和用户的其他信息 | ||
/etc/fdprm | 软盘参数表,用以说明不同的软盘格式.可用setfdprm 进行设置 | ||
/etc/fstab | 指定启动时需要自动安装的文件系统列表.也包括用swapon -a启用的swap区的信息 | ||
/etc/group | 组信息,包括组的各种数据 | ||
/etc/inittab | 初始化的配置文件 | ||
/etc/issue | 包括用户在登录提示符前的输出信息,通常包括系统的一段说明或欢迎信息,具体内容由系统管理员确定 | ||
/etc/magic | “file”的配置文件,包含不同文件的格式说明,“file”基于它猜测文件类型 | ||
/etc/motd | motd是message of the day的缩写,用户成功登录后自动输出,内容由系统管理员确定,常用于通告信息,如计划关机时间的警告等 | ||
/etc/mtab | 当前安装的文件系统列表,由脚本初始化,并由 mount 命令自动更新,当需要一个当前安装的文件系统的列表时使用(例如 df 命令) | ||
/etc/shadow | 在安装了影子(shadow)口令软件的系统上的影子口令文件,影子口令文件将/etc/passwd文件中的加密口令移动到/etc/shadow中,而后者只对超级用户(root)可读,这使破译口令更难,以此增加系统的安全性 | ||
/etc/login.defs | login命令的配置文件 | ||
/etc/termcap | 终端性能数据库,说明不同的终端用什么“转义序列”控制,写程序时不直接输出转义序列(这样只能工作于特定品牌得终端),而是从/etc/termcap中查找要做的工作的正确序列。这样,多数的程序可以在多数的终端上运行 | ||
/etc/profile、/etc/csh.login、/etc/csh.cshrc | 登录或启动时bourne或C shell执行的文件,这允许系统管理员为所有用户建立全局缺省环境 | ||
/etc/printcap | 针对打印机,类似termcap,但语法不同 | ||
/etc/securetty | 确认安全终端,即哪个终端允许超级用户(root)登录,一般只列出虚拟控制台,这样就不可能(至少很困难)通过调制解调器或网络闯入系统并获得超级用户权限 | ||
/etc/shells | 列出可以使用的shell.chsh命令允许用户在本文件指定范围内改变登录的shell 提供一台机器ftp服务的服务进程ftpd检查用户shell是否列在/etc/shells文件中,如果不是,将不允许该用户登录 | ||
dev |
设备文件 | 设备特殊文件,即设备驱动程序生成的设备节点,用户可以通过访问外部设备,设备文件用特殊的约定命名,这在设备列表中有说明,设备文件在安装时有系统产生,以后可以用/dev/makedev/描述 | |
/dev/makedev.local | 是系统管理员为本地设备文件(或连接)写的描述文稿(即一些非标准设备驱动,不是标准makedev的一部分) | ||
/dev/console | 系统控制台,直接和系统连接的监视器也就是电脑屏幕 | ||
/dev/hd | IDE硬盘驱动程序接口,如/dev/hd是指第一个硬盘,hda1是/dev/hda1的第一个分区 | ||
/dev/sd | SCSI磁盘驱动程序接口,如有系统有SCSI硬盘,就不会访问/dev/hda而会访问/dev/sda | ||
/dev/fd | 软盘设备驱动程序 | ||
/dev/st | SCSI磁盘驱动器驱动程序 | ||
/dev/tty | 虚拟控制台支持,tty1就是第一个虚拟控制台 | ||
/dev/pty | 远程登录伪终端支持,进行Telnet登录时就要用到 | ||
/dev/ttys | 计算机串口,对于DOS来说就是COM口 | ||
/dev/cua | 串口,与调制解调器一起使用的设备 | ||
/dev/null | 黑洞,所有写入该设备的信息都将消失,例如:当想要将屏幕上的输出信息隐藏起来时,只要将输出信息输入到/dev/null中即可。 | ||
proc | 系统文件或目录 | 是系统内存的映射,可直接访问这个目录来获取系统信息,这些信息是由系统自己产生,该目录的内容不再硬盘上而在内存上 | |
var | 系统文件或目录 | 包含系统一般运行时要改变的数据,通常这些数据所在的目录的大小是要经常变化的或扩充的,每个系统是特定的,不通过网络和其它计算机共享,系统产生的不可自动销毁的缓存文件、日志记录。(系统和程序运行后产生的数据、不对外提供服务、只能用户手动清理)(包括mail、数据库文件、日志文件) | |
/var/catman | 包括了格式化过的帮助( man )页.帮助页的源文件一般存在/usr/man/man中;有些man页可能有预格式化的版本,存在/usr/man/cat中,而其他的man页在第一次看时都需要格式化,格式化完的版本存在/var/man中,这样其他人再看相同的页时就无须再格式化了,/var/catman 经常被清除,就像清除临时目录一样 | ||
/var/lib | 存放系统正常运行时要改变的文件 | ||
/var/local | 存放系统正常运行时要改变的文件 | ||
/var/lock | 锁定文件.许多程序遵循在/var/lock中产生一个锁定文件的约定,以用来支持他们正在使用某个特定的设备或文件,其他程序注意到这个锁定文件时,就不会再使用这个设备或文件 | ||
/var/log | 各种程序的日志( log )文件,尤其是login (/var/log/wtmp log纪录所有到系统的登录和注销)和syslog (/var/log/messages 纪录存储所有核心和系统程序信息),/var/log 里的文件经常不确定地增长,应该定期清除 | ||
/var/run | 保存在下一次系统引导前有效的关于系统的信息文件,例如:/var/run/utmp 包含当前登录的用户的信息 | ||
/var/spool | 放置“假脱机( spool )”程序的目录,如mail、news、打印队列和其他队列工作的目录 | ||
tmp | 公用的临时文件存储点,保存在使用完毕后可随时销毁的缓存文件。(有可能是由系统或程序产生、也有可能是用户主动放入的临时数据、系统会自动清理) | ||
usr |
系统或个人 | 所有的程序安装在usr目录里,一般为系统发行时自带相当于Windows下的C:\Program files | |
/usr/bin | 集中了几乎所有用户命令,是系统的软件库,另有些命令在/bin 或/usr/local/bin中 | ||
/usr/sbin | 包括了根文件系统不必要的系统管理命令,例如多数服务程序 | ||
/usr/man、/ usr/info、/usr/doc | 这些目录包含所有手册页、gnu信息文档和各种其他文档文件.每个联机手册的“节”都有两个子目录,例如: / usr/man/man1中包含联机手册第一节的源码(没有格式化的原始文件),/usr/man/cat1包含第一节已格式化的内容.l联机手册分为以下九节:内部命令、系统调用、库函数、设备、文件格式、游戏、宏软件包、系统管理和核心程序 | ||
/usr/include | 包含了c语言的头文件,这些文件多以.h结尾,用来描述c语言程序中用到的数据结构、子过程和常量,为了保持一致性,这实际上应该放在/usr/lib下,但习惯上一直沿用了这个名字 | ||
/usr/lib | 包含了程序或子系统的不变的数据文件,包括一些site-wide配置文件,名字lib来源于库(library);编程的原始库也存在/usr/lib里,当编译程序时,程序便会和其中的库进行连接,也有许多程序把配置文件存入其中 | ||
/usr/local | 本地安装的软件和其他文件放在这里,这与/usr类似,用户可能会在这发现一些比较大的软件包,如tex、emacs等! | ||
home |
用户 | 用户自己的目录,可以在此存储自己文件,资料等! | |
boot | 系统文件或目录 | 引导加载文件以及映像文件等 | |
lib | 程序库文件 | 根文件系统上的程序所需的共享库,存放了根文件系统程序运行所需的共享文件,这些文件包含了可被许多程序共享的代码,以避免每个程序都包含有相同的子程序的副本,故可以使得可执行文件变得更小,节省空间 | |
/lib/modules | 目录包含系统核心,可加载各种模块,尤其是那些在恢复损坏的系统时重新引导系统所需的模块(例如网络和文件系统驱动). | ||
opt |
三方软件安装文件夹,相当于Windows下的除C盘外的其它盘 | ||
mnt | 用户临时挂载点 | ||
media | 有些linux的发行版使用这个目录来挂载那些usb接口的移动硬盘(包括U盘)、CD/DVD驱动器等等 | ||
srv | 主要用来存储本机或本服务器提供的服务或数据(用户主动生产的数据、对外提供服务) |
由上面可以知道,红字部分都是重要文件夹,有时候会根据自己的需要修改一些文件,根文件夹下的home文件夹使我们自己可以配置的,三方软件一般要安装到opt文件夹里面。我们可以在home里面新建DEFGH当做我们的盘作为区分,三方软件安装在opt文件夹下,可以把运行脚本建立软连接到home的一个文件夹内,相当于Windows下的快捷方式。这样一看其实结构也是很清晰的。
电子书链接
可以加入群聊:667039215找群主获取
Linux命令行与shell脚本编程大全第三版
鸟哥的Linux私房菜-基础篇》第四版
跟我一起写Makefile 高清无码文档
GNU make中文手册