Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。
Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
比较 | Windows | Linux |
---|---|---|
界面风格 | 界面统一,外壳程序固定所有 Windows 程序菜单几乎一致,快捷键也几乎相同。 | 图形界面风格依发布版不同而不同,可能互不兼容。GNU/Linux 的终端机是从 UNIX 传承下来,基本命令和操作方法也几乎一致。 |
驱动程序 | 驱动程序丰富,版本更新频繁。默认安装程序里面一般包含有该版本发布时流行的硬件驱动程序,之后所出的新硬件驱动依赖于硬件厂商提供。对于一些老硬件,如果没有了原配的驱动有时很难支持。另外,有时硬件厂商未提供所需版本的 Windows 下的驱动,也会比较头痛。 | 很多硬件厂商基于版权考虑并未提供驱动程序,尽管多数无需手动安装,但是涉及安装则相对复杂,使得新用户面对驱动程序问题会一筹莫展。但是在开源开发模式下,许多老硬件尽管在Windows下很难支持的也容易找到驱动。HP、Intel、AMD 等硬件厂商逐步不同程度支持开源驱动,问题正在得到缓解。 |
使用体验 | 使用比较简单,容易入门。图形化界面对没有计算机背景知识的用户使用十分有利。 | 图形界面使用简单,容易入门。文字界面,需要学习才能掌握。 |
学习难度 | 系统构造复杂、变化频繁,且知识、技能淘汰快,深入学习困难。 | 系统构造简单、稳定,且知识、技能传承性好,深入学习相对容易。 |
软件支持 | 每一种特定功能可能都需要商业软件的支持,需要购买相应的授权。 | 大部分软件都可以自由获取,同样功能的软件选择较少。 |
Linux系统启动过程的五个阶段:
内核引导
1)当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。
2)操作系统接管硬件以后,首先读入/boot 目录下的内核文件。
运行init
1)init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。
2)init 程序首先是需要读取配置文件 /etc/inittab。
3)许多程序需要开机启动。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。
4)init进程的一大任务,就是去运行这些开机启动的程序。但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。
5)Linux允许为不同的场合,分配不同的开机启动程序,这就叫做"运行级别"(runlevel)。也就是说,启动时根据"运行级别",确定要运行哪些程序。
6)Linux的7个运行级别:
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
系统初始化
1)在init的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。
2)它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。
l5:5:wait:/etc/rc.d/rc 5 //这一行表示以5为参数运行/etc/rc.d/rc
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
//从上面可以看出在2、3、4、5的运行级别中都将以respawn方式运行mingetty程序,mingetty程序能打开终端、设置模式。
//同时它会显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个登录界面中会提示用户输入用户名,
而用户输入的用户将作为参数传给login程序来验证用户的身份。
正确的关机流程为:sync > shutdown > reboot > halt
关机指令为:shutdown
例如你可以运行如下命令关机:
/* 将数据由内存同步到硬盘中 */
sync
/* 这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中 */
shutdown –h 10 'This server will shutdown after 10 mins'
/* 立马关机 */
shutdown –h now
/* 系统会在今天20:25关机 */
shutdown –h 20:25
/* 十分钟后关机 */
shutdown –h +10
/* 系统立马重启 */
shutdown –r now
/* 系统十分钟后重启 */
shutdown –r +10
/* 就是重启,等同于 shutdown –r now */
reboot
/* 关闭系统,等同于shutdown –h now 和 poweroff */
halt
注意:不管是重启系统还是关闭系统,首先要运行 sync 命令,把内存中的数据写到磁盘中。
关机的命令有:shutdown –h now 和 halt 和 poweroff 和 init 0;
重启的命令有:shutdown –r now 和 reboot 和 init 6;
父目录 | 目录 | 解释 |
---|---|---|
/ | /bin | 存放系统中最常用的二进制可执行文件(二进制文件)。基础系统所需要的那些命令位于此目录,也是最小系统所需要的命令。在/bin底下的指令可以被root与一般帐号所使用。功能和/usr/bin类似,这个目录中的文件都是可执行的。主要有:ls、cat、chmod(修改权限)、chown、date、mv、mkdir、cp、bash等等常用的指令。 |
/dev | 在Linux系统上,任何装置与周边设备都是以档案的型态存在于这个目录当中。 只要通过存取这个目录下的某个档案,就等于存取某个装置。在Linux中访问设备的方式和访问文件的方式是相同的。 | |
/home | 用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。~:代表当前使用者的家目录,而 ~guest:则代表用户名为guest的家目录。 | |
/mnt | 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。在早些时候,这个目录的用途与/media相同,只是有了/media之后,这个目录就用来暂时挂载用了。 | |
/proc | 这个目录本身是一个虚拟文件系统,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。因为这个目录下的资料都是在内存当中,所以本身不占任何硬盘空间。 我们可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器: echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all |
|
/srv | 该目录存放一些服务启动之后需要提取的数据。 | |
/tmp | 临时文件目录,有时用户运行程序的时候,会产生临时文件。重要资料不可放置在此目录。 | |
/var | 这个目录中存放着在不断扩充着的东西,/var目录主要针对常态性变动的文件,包括缓存、登录档以及某些软件运作所产生的文件,包括程序文件,包括各种日志文件,或者例如MySQL数据库的文件等等。 | |
/boot | 主要放置开机会使用到的一些核心文件,包括一些连接文件以及镜像文件。 | |
/etc | 用来存放所有的系统管理所需要的配置文件和子目录。一般来说,这个目录下的各档案属性是可以让一般使用者查阅的,但是只有root有权力修改。 | |
/lib | 根目录下的所有程序的共享库目录,包含许多被/bin和/sbin中程序使用的库文件。 | |
/media | 即插即用型设备的挂载点自动在这个目录下创建。例如USB自动挂载后会在这个目录下产生一个目录。 | |
/opt | 作为可选文件和程序的存放目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。 | |
/root | 用户root的$HOME目录。系统管理员(就是root用户或超级用户)的主目录比较特殊,不存放在/home中,而是直接放在/root目录下。因为如果进入单人维护模式而仅挂载根目录时,该目录就能够拥有root的$HOME目录,所以/root与根目录要放置在同一个分区中。 | |
/sbin | 大多是涉及系统管理的命令的存放地,也是超级权限用户root的可执行命令存放地,这些指令只有root才能够利用来设定系统,其他使用者最多只能用来查询而已。注意,凡是目录sbin中包含的都是root权限才能执行的。常见的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。 | |
/sys | 一个类似于proc文件系统的特殊文件系统,用于将系统中的设备组织成层次结构,并向用户模式程序提供详细的内核数据结构信息。其实,就是在用户态可以通过对sys文件系统的访问,来看内核态的一些驱动或者设备等。 | |
/usr | usr不是user的缩写,而是Unix Software Resource(UNIX操作系统软件资源)。/usr里面放置的数据属于可分享的与不可变动的。所有系统默认的软件都会放置到/usr下面,类似Windows系统的C:\Windows\ 和 C:\Program files\ 的结合体。 | |
/lost+found | 这个目录是使用标准的ext2/ext3档案系统格式才会产生的一个目录,目的在于当档案系统发生错误时,将一些遗失的片段放置到这个目录下。当系统崩溃的时候,在系统修复过程中需要恢复的文件,可能就会在这里被找到了,这个目录一般为空。 |
父目录 | 目录 | 解释 |
---|---|---|
/dev | /console | 系统控制台,也就是直接和系统连接的监视器。 |
/hd | 硬盘驱动程序接口。 | |
/sd | 磁盘驱动程序接口。 | |
/fd | 软驱设备驱动程序。 | |
/st | 磁带驱动器驱动程序。 | |
/tty | 提供虚拟控制台支持。 | |
/pty | 提供远程登陆伪终端支持。 | |
/ttys | 计算机串行接口。 | |
/cua | 计算机串行接口,与调制解调器一起使用的设备。 | |
/null | “黑洞”,所有写入该设备的信息都将消失。 |
父目录 | 目录 | 解释 |
---|---|---|
/proc | /x | 关于进程x的信息目录,这一x是这一进程的标识号。每个进程在/proc 下有一个名为自 己进程号的目录。 |
/cpuinfo | 存放cpu(处理器)的信息,如cpu的类型、制造商、型号和性能等。 | |
/devices | 当前运行的核心配置的设备驱动的列表。 | |
/dma | 显示当前使用的dma通道。 | |
/filesystems | 核心配置的文件系统信息。 | |
/interrupts | 显示被占用的中断信息和占用者的信息,以及被占用的数量。 | |
/ioports | 当前使用的 I / O 端口。 | |
/kcore | 系统物理内存映像。与物理内存大小完全一样,然而实际上没有占用这么多内存。它仅仅是在程序访问它时才被创建。 | |
/kmsg | 核心输出的消息。 | |
/kallsyms | 核心符号表。 | |
/meminfo | 各种存储器使用信息,包括物理内存和交换分区(swap)。 | |
/modules | 存放当前加载了哪些核心模块信息。 | |
/net | 网络协议状态信息。 | |
/self | 主要便于程序得到它自己的进程目录。 | |
/stat | 系统的不同状态,例如,系统启动后页面发生错误的次数。 | |
/uptime | 系统启动的时间长度。 | |
/version | 核心版本。 |
根目录 | 目录 | 解释 |
---|---|---|
/var | /cache | 应用程序本身运作过程中产生的一些缓存目录。 |
/crash | 系统错误信息。 | |
/games | 游戏数据。 | |
/lib | 程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录。 | |
/lock | 某些装置或者是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该装置时,就可能产生一些错误的状况,因此就得要将该装置上锁(lock),以确保该装置只会给单一软件所使用。而/lock就是记录文件锁定的目录。 | |
/log | 这是登录文件放置的目录。里面比较重要的文件如/var/log/messages, /var/log/wtmp(记录登入者的信息)等。非常重要。 | |
放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中,通常这两个目录是互为链接文件。 | ||
/opt | /opt目录的变量数据。 | |
/run | 某些程序或者是服务启动后,会将他们的PID放置在这个目录下。进程的标示数据。 | |
/spool | 这个目录通常放置一些队列数据,这些数据被使用后通常都会被删除。例如:电子邮件,打印任务等队列。 | |
/tmp | 临时文件目录。 |
根目录 | 目录 | 解释 |
---|---|---|
/etc | /rc或/rc.d 或/rc?.d |
启动、或改变运行级时运行的脚本或脚本的目录。 |
/passwd | 用户数据库,其中的域给出了用户名、真实姓名、用户起始目录、加密口令和用户的其他信息。 | |
/fstab | 指定启动时需要自动安装的文件系统列表。也包括用swapon -a启用的swap区的信息。 | |
/group | 说明组的信息。包括组的各种数据。 | |
/inittab | init 的配置文件。 | |
/issue | 包括用户在登录提示符前的输出信息。通常包括系统的一段短说明或欢迎信息。具体内容由系统管理员确定。 | |
/magic | “file”的配置文件。包含不同文件格式的说明,“file”基于它猜测文件类型。 | |
/motd | motd是message of the day的缩写,用户成功登录后自动输出。内容由系统管理员确定。常用于通告信息,如计划关机时间的警告等。 | |
/mtab | 当前安装的文件系统列表。由脚本初始化,并由mount命令自动更新。当需要一个当前安装的文件系统的列表时使用(例如df命令)。 | |
/shadow | 在安装了shadow口令软件的系统上的影子口令文件,只对root可读,使破译口令更困难,以此增加系统的安全性。 | |
/login.defs | login命令的配置文件。 | |
/profile 、/csh.login 、/csh.cshrc |
登录或启动时bourne或cshells执行的文件。这允许系统管理员为所有用户建立全局缺省环境。 | |
/security | 确认安全终端,即哪个终端允许root登录。 |
根目录 | 目录 | 解释 |
---|---|---|
/usr | /bin | 绝大部分的用户可使用并且不是系统自检等所必需的指令都放在这里。 |
/include | C/C++等开发工具语言环境的标准include文件。linux下开发和编译应用程序所需要的头文件一般都存放在这里,通过头文件来使用某些库函数。默认来说这个路径被添加到了环境变量中,这样编译开发程序的时候编译器会自动搜索这个路径,从中找到你的程序中可能包含的头文件。 | |
/lib | 目标库文件,包括动态连接库加上一些通常不是直接调用的可执行文件的存放位置。这个目录功能类似/lib目录,理说,这里存放的文件应该是/bin目录下程序所需要的库文件的存放地,也不排除一些例外的情况。例如:如果你使用的是X86_64的Linux系统,那可能会有/usr/lib64/目录产生。 | |
/local | 安装本地程序的一般默认路径。系统管理员在本机自行安装自己下载的软件,建议安装到此目录,这样会比较便于管理。 | |
/sbin | 管理员使用的非系统正常运作所需要的系统指令。最常见的就是某些网络服务器软件的服务指令。 | |
/share | 存放共享文件的目录。在这个目录下放置的数据几乎是不分硬件架构均可读取的数据,例如程序文档信息。在此目录下常见的还有这些次目录: /usr/share/man:联机帮助文件 /usr/share/doc:软件杂项的文件说明 /usr/share/zoneinfo:与时区有关的时区文件 |
|
/src | 内核源代码默认的放置目录。 |
/bin一般存放对于用户和系统来说“必须”的程序(二进制文件)。
/sbin一般存放用于系统管理的“必需”的程序(二进制文件),一般普通用户不会使用,根用户使用。
/usr/bin一般存放的只是对用户和系统来说“不是必需的”程序(二进制文件)。
/usr/sbin一般存放用于系统管理的系统管理的不是必需的程序(二进制文件)。
/lib一般存放对于用户和系统来说“必须”的库(二进制文件)。
/usr/lib一般存放的只是对用户和系统来说“不是必需的”库(二进制文件)。
https://www.runoob.com/linux
https://blog.csdn.net/sweetfather/article/details/79625482
https://blog.csdn.net/yup1212/article/details/82152106
https://blog.csdn.net/mzl87/article/details/79673012