Linux的体系架构
一般来说著名的linux系统基本上分两大类:
RedHat系列:Redhat、Centos、Fedora等
Debian系列:Debian、Ubuntu等
Linux 的基石是 Unix 内核,其基于 Unix 的基本特点以及 POSIX 和单独的 UNIX 规范标准。看起来,该操作系统官方名字取自于 Linus,其中其操作系统名称的尾部的 “x” 和 Unix 系统相联系。
我不得不贴出最经典的一张图了:
内核:从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程序运行的环境
系统调用:是操作系统的最小功能单位。现在各种版本的Unix实现都提供了不同数量的系统调用,如Linux的不同版本提供了240-260个系统调用,FreeBSD大约提供了320个(reference:UNIX环境高级编程)。我们可以把系统调用看成是一种不能再化简的操作(类似于原子操作,但是不同概念)
Shell:是一个特殊的应用程序,俗称命令行,本质上是一个命令解释器,它下通系统调用,上通各种应用,通常充当着一种“胶水”的角色,来连接各个小功能程序,让不同程序能够以一个清晰的接口协同工作,从而增强各个程序的功能。同时,Shell是可编程的,它可以执行符合Shell语法的文本,这样的文本称为Shell脚本,通常短短的几行Shell脚本就可以实现一个非常大的功能,原因就是这些Shell语句通常都对系统调用做了一层封装。为了方便用户和系统交互,一般,一个Shell对应一个终端,终端是一个硬件设备,呈现给用户的是一个图形化窗口。我们可以通过这个窗口输入或者输出文本。这个文本直接传递给shell进行分析解释,然后执行。
总结一下,用户态的应用程序可以通过三种方式来访问内核态的资源:
1、系统调用(所以应用程序也是不经过shell,直接通过系统调用来访问内核资源的)
2、库函数
3、Shell脚本
Linux的学习阶段
本人结合平时阅读的一些文章,大概把Linux选手分为如下这些阶段:
第一阶段:会使用Linux下的基本操作命令。包括cd、文件命令(rm、mkdir、chmod、chown)编辑工具vim,用户管理(useradd、userdel、usermod等)
第二阶段:会在Linux安装一些软件。并且能修改一些配置,环境变量、网络配置、服务配置等等。能写简单的shell脚本
第三阶段:会在Linux进行相关的开发工作。比如Python开发、大数据开发等等
第四阶段:能写复杂的shell脚本,对服务器进行维护
第五阶段:能保护服务器进行安全设置。放置攻击。保证服务器的正常运行,能对Linux系统进行调优
第六阶段:深入理解Linux系统,深入内核。对内核有研究,能对Linux开源社区贡献对应代码
如题,很显然,本文做的相关笔记止步于第三阶段。并且绝大部分内容还是以命令/shell的讲解记录为主
Linux的学习不比编程,多实践就自然出真知了。
Linux的目录结构
在Linux的世界里,一切皆目录
重点目录介绍
- /:根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的, 同时根目录也与开机/还原/系统修复等动作有关。
根目录(/)所在分区应该越小越好, 且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。 如此不但效能较佳,根目录所在的文件系统也较不容易发生问题。说白了,就是根目录和Windows的C盘一个样。
- /bin:系统有很多放置执行档的目录,但/bin比较特殊。在/bin底下的指令可以被root与一般帐号所使用,主要有:cat,chmod(修改权限), chown, date, mv, mkdir, cp, bash等等常用的指令。
- /sbin:Linux有非常多指令是用来设定系统环境的,这些指令只有root才能够利用来设定系统,其他使用者最多只能用来查询而已。里面包括了开机、修复、还原系统所需要的指令。 至于某些伺服器软体程式,一般则放置到**/usr/sbin/当中。至于本机自行安装的软体所产生的系统执行档(system binary),则放置到/usr/local/sbin/**当中了。常见的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。
- /boot:主要放置开机会使用到的档案
- /dev:在Linux系统上,任何装置与周边设备都是以档案的型态存在于这个目录当中。比如u盘等一般都挂在这里。比要重要的档案有/dev/null, /dev/zero, /dev/tty , /dev/lp*, / dev/hd*, /dev/sd*等等 类似于windows的设备管理器
- /etc:系统主要的配置几乎都放置在这个目录内,例如人员的帐号密码档、各种服务的启始档等等。 普通用户一般只能看,root用户才能修改此目录下的文件。 比较重要的档案有:/etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/等等 其下重要的目录有:/etc/init.d/ :所有服务的预设启动script都是放在这里的,例如要启动或者关闭iptables的话: /etc/init.d/iptables start、/etc/init.d/ iptables stop
- /home:家目录。新建一个用户就会有一个家目录。~ :代表当前使用者的家目录,而 ~guest:则代表用户名为guest的家目录。
- /lib:系统的函式库。比如一些驱动程序等等
- /media:是媒体的英文,顾名思义,这个/media底下放置的就是可移除的装置。
- /mnt:**如果妳想要暂时挂载某些额外的装置,一般建议妳可以放置到这个目录中。**在古早时候,这个目录的用途与/media相同啦。 只是有了/media之后,这个目录就用来暂时挂载用了。
- /opt:这个目录对我们平时就很重要了。一般我们的第三方软件都会放在这个目录里,比如我们java的源代码、jar包、打包脚本等等都放在这里。我们安装的软件:比如需要安装一个redis,也可以安装在这个目录里。
- /root:root用户的家目录。
- /srv:srv可以视为service的缩写,是一些网路服务启动之后,这些服务所需要取用的资料目录。 常见的服务例如WWW, FTP等等。
- /tmp:暂时存放目录。比如一些日志文件、程序运行时的中间临时文件等等可放在这。这个目录所有用户都可以操作的
- /var:/var就是在系统运作后才会渐渐占用硬盘容量的目录。因为/var目录主要针对常态性变动的文件,包括缓存(cache)、登录档(log file)以及某些软件运作所产生的文件、打印输出的日志文件、mysql的数据库文件等等
/var/cache/:应用程序本身运作过程中会产生的一些暂存档
/var/lib/:
程序本身执行的过程中,需要使用到的数据文件放置的目录。
/var/lock/:
/var/log/:非常重要。这是登录文件放置的目录。里面比较重要的文如/var/log/messages, /var/log/wtmp(记录登入者的信息)等。
/var/mail/:放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中,通常这两个目录是互为链接文件。
/var/run/:某些程序或者是服务启动后,会将他们的PID放置在这个目录下
/var/spool/:
- /usr:usr不是user的缩写,其实usr是Unix Software Resource的缩写。也就是Unix操作系统软件资源所放置的目录,而不是用户的数据啦。 因为是所有系统默认的软件(distribution发布者提供的软件)都会放置到/usr底下,因此这个目录有点类似Windows 系统的C:\Windows\ + C:\Program files\这两个目录的综合体,系统刚安装完毕时,这个目录会占用最多的硬盘容量。
/usr/bin/:绝大部分的用户可使用指令都放在这里。请注意到他与/bin的不同之处。(是否与开机过程有关)
/usr/lib/:如果你使用的是X86_64的Linux系统, 那可能会有/usr/lib64/目录产生
/usr/local/:管理员在本机自行安装自己下载的软件。建议安装到此目录。该目录下也是具有bin, etc, include, lib…的次级目录
/usr/sbin/:非系统正常运作所需要的系统指令。最常见的就是某些网络服务器软件的服务指令(daemon)
/usr/share/:放置共享文件的地方,在这个目录下放置的数据几乎是不分硬件架构均可读取的数据, 因为几乎都是文本文件
/usr/src/:
一般原始码建议放置到这里,src有source的意思。至于核心原始码则建议放置到/usr/src/linux/目录下。
linux一切皆文件,因此大家需要行程一共公式,对应的文件放在对应的目录里吧
常用命令
man:帮助命令
man是manual的缩写,man命令用来提供在线帮助,通过man命令可以查看Linux中的命令帮助、配置文件帮助、编程帮助等信息。
man命令支持上下翻,搜索(输入斜线’/’加字符串),退出用q
ping和telnet
先说说ping和telnet命令(Linux和windows都有):
telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。windows默认也是不开启的,需要手动打开
ping通常是用来检查网络是否通畅。
telnet是用来探测指定ip是否开放指定端口。
Linux查看系统版本、内核信息
- cat /etc/issue 或 cat /etc/centos-release 查看系统版本信息
- uname -a 查看内核信息
- 查看系统版本信息
备注:(使用命令时提示command not found,需要安装yum install redhat-lsb -y)
Linux中的SSHD服务
如果我们需要使用类似xshell工具远程登录到Linux中,那么需要远程的Linux启用了SSHD服务。SSHD服务一般都是随系统启动的/etc/init.d/sshd
检查服务是否启动
[root@l-groupclass-server1.syc.dev.ali.qr ~]# service sshd status
已启动了显示如下:
openssh-daemon (pid 13151) is running...
没有安装SSHD服务:请自行先安装吧
sshd:unrecognized service SSHD的默认端口号为22,可以通过修改 /etc/ssh/sshd_config文件,修改默认端口,比如我修改成了如下,然后重启服务servcie sshd restart即可
备注:修改此配置文件,该端口可以避免被端口扫描,规避风险。同时也可以禁止root登录等等配置。
SSH的工作机制
服务器启动的时候自己产生一个密钥(768bit公钥),本地的ssh客户端发送连接请求到ssh服务器,服务器检查连接点客户端发送的数据和IP地址,确认合法后发送密钥(768bits)给客户端,此时客户端将本地私钥(256bit)和服务器的公钥(768bit)结合成密钥对key(1024bit),发回给服务器端,建立连接通过key-pair数据传输。
SSH知识小结
SSH是安全的加密协议,用于远程连接Linux服务器
SSH的默认端口是22,安全协议版本是SSH2
SSH服务器端主要包含2个服务功能:SSH连接和SFTP服务器
SSH客户端包含ssh连接命令和远程拷贝scp命令等