《Linux从入门到精通》笔记
程序员文章站
2022-09-11 13:17:54
第一篇 基础篇 第1章 Linux概述 1.1 Linux的起源 1991年芬兰学生Linus Torvalds写的磁盘驱动和文件系统开源发布,Linux即“Linus的Minix”。 1994年内核1.0版发布,最新内核版本4.14.11。 1.2 追溯到Unix 1969年AT&T贝尔实验室的一 ......
第一篇 基础篇
第1章 Linux概述
1.1 Linux的起源
1991年芬兰学生Linus Torvalds写的磁盘驱动和文件系统开源发布,Linux即“Linus的Minix”。
1994年内核1.0版发布,最新内核版本4.14.11。
1.2 追溯到Unix
1969年AT&T贝尔实验室的一个研究项目。
1977年加州大学伯克利分校基于源码发布了Berkeley Unix,发行版通称为BSD(伯克利软件发行版)。
1979年免费提供给各大学,但获取源代码需要缴纳许可费。
1989年彻底移除AT&T代码的BSD发布。
1995年 4.4BSD-Lite发行,团队解散,目前大多数BSD如FreeBSD,OpenBSD都从该版本发展而来。同时沿用AT&T代码的Unix系统有HP-UX、Solaris等。
Linux由全球开发社区对Unix借鉴后重新实现,不属于BSD和AT&T任何一种。
1.3 开源许可证协议
BSD、MIT、Apache 用户可以修改并保留修改部分的源代码版权。
GPL linux所遵守,更严格,要求用户将所做的一切修改回馈社区,变成*软件。
上世纪80年代初期,Richard Stallman发起GNU计划,即GNU's NOT Unix的缩写。
GPL即GNU公共许可证(GNU Public License),包括四点内容:
A、软件最初的作者保留版权。
B、其他人可以修改、销售该软件,也可以此为基础开发新软件。但必须保证开源。
C、经过修改的软件仍然受GPL约束。
D、软件使用中引起的损失,开发人员不承担责任。
1.4 Linux的发行版
Linux实际上只定义了一个操作系统内核,这个内核由kernel.org负责维护。不同企业和组织在此基础上开发了一系列辅助软件,打包发布自己的“发行版本”。
第2章 Linux安装
2.1 Grub
Grub是linux默认的操作系统引导加载器,可以引导windows,linux、FreeBSD等多种操作系统。
安装linux后再安装windows会覆盖原有的Grub引导程序。
Grub硬盘编号格式hd#(不区分硬盘类型),从数字0开始,如:hd0、hd1。
Grub硬盘分区格式(hd#,#),也从数字0开始,主分区为0-3,逻辑分区为4开始,如:(hd0,0)。
2.2 Linux硬盘分区
hd:IDE硬盘;sd:SCSI硬盘、SATA硬盘。
第一块硬盘编号从小写字母a开始,如:sda、sdb。
每块硬盘只能存在4个主分区,即数字1-4,如:sda1、sda2、sda3、sda4。数字5开始的为逻辑分区,没有个数限制,如sdb5。
操作系统主体可以安装在主分区或逻辑分区,但引导程序必须安装在主分区。
swap交换分区不需要挂载点,容量应该大于实际物理内存容量。
第3章 桌面环境
3.1 X窗口系统
X系统基于一种独特的服务器/客户机架构。
X服务器:实际控制输入和输出设备,并定义设备的抽象接口给X客户端程序使用。设计意义:与平台无关,让用户*选择来定制桌面。配置文件为 /etc/X11/xorg.conf 。
X客户端程序:需要向X服务器请求服务的程序,包括窗口管理器。
窗口管理器:负责控制应用程序窗口的各种行为。
显示管理器:一个验证用户身份的登录界面,并由它启动包括X服务器的所有图形界面。若关闭,则只能startx命令启动X服务器。
widget库:定义一套图形用户界面的编程接口。应用程序开发人员调用它来与X服务器交互。
桌面环境:分为KDE(C++语言实现,基于Qt库,华丽)和Gnome(C语言实现,基于GTK+widget库,简洁,*,后诞生)两大类,它将除X服务器以外的上述所有与X有关的东西打包成大杂烩。但最后处理图形输出的仍然是X服务器。
3.2 X系统启动过程
X系统启动由显示管理器来完成,显示管理器启动后依次完成如下操作:
A、启动X服务器。
B、提供登录界面,等待验证用户身份。
C、执行用户引导脚本Xsession,窗口管理器是Xsession启动的唯一前台程序。Xsession一直运行直到用户退出。
3.3 启动X程序
X服务器接受来自多个应用程序(含远程网络主机)的请求,并在本地显示。
环境变量DISPLAY格式:DISPLAY=servername:X服务器编号(从0开始). 屏幕编号(从0开始)。如:host:3.2,:0.0,:0 。
第二篇 系统管理篇
第4章 Shell基本命令
4.1 Shell简介
Shell是一个命令解释器程序,在用户和操作系统之间提供一个面向行的可交互接口。
Shell种类有BASH、TCSH Shell、Z-Shell等,BASH是Linux默认安装的,并默认有7个控制台,分别是Ctrl+Alt+F1~F7进入,第7个留给X服务器。
Shell通配符为“ * ”,“?”," [ ] "。其中*匹配文件名中任意长度字符串,?匹配一个字符,[ ] 匹配所有出现在方括号中的字符,可以用“-”指定一个字符集范围。
4.2 常用命令
第一批:cd,ls,pwd,cat,more,head,tail,less,[ez]grep,find,location,whereis,who,whoami,uname,man,whatis,apropos,date,hostname,env。
第二批:groupadd,useradd,passwd,mkdir,touch,chown,chgrp,chmod,mv,cp,echo,rm,rmdir,ls,>,>>,<,<< EOF\n 。。。\nEOF,| 。
第三批:rpm,yum,apt,dpkg,./configure脚本生成makefile文件,make,make install。
第四批:mount,umount,df,fsck,mkfs,lsusb,gzip,gunzip,bzip2,bunzip2,rar,tar,dd,[r]dump,[r]restore,fdisk,mkswap 。
第五批:history,userdel,usermod,id,su,sudo。
第六批:ps,kill,top,lsof,nice,renice。
第七批:ifconfig,netstat,route。
第八批:cut,diff,sort,uniq,tr,wc,substr,seq,source,export。
第九批:exportfs,showmount,at,atq,atrm,iptables,nmap。
4.3 find命令
格式:find [路径] [选项]
-name 文件名,可含通配符。
-type 文件类型,取值:bcdfpl 。b块设备文件,c字符设备文件,d目录文件,f普通文件,p命名管道,l符号链接。
-atime n 最后一次使用在n天前;+n 大于等于n天前; -n 小于n天前。
-mtime n 最后一次修改在n天前。
-print 将结果输出到标准输出(屏幕)。
#查找当前目录最后一天内修改过的名字后缀zip的普通文件
$ find . -type f -name *zip -mtime -1 -print
location命令查找文件数据库,速度很快,使用updatedb命令更新数据库。如:location *.doc 。
4.4 uname命令
$uname -r #查看内核版本。
$uname -a #查看操作系统所有有用信息。
4.5 ln命令
格式:ln [-s] TARGET LINKNAME #默认建立硬链接,-s选项为符号链接。
两者区别:硬链接是直接引用,符号链接通过名称进行引用。
第5章 磁盘管理
5.1 ext3fs文件系统
ext3fs比ext2fs增加了日志功能,用于灾难恢复,提高文件系统可靠性。原理:文件写操作时,先记录写前日志文件,并将日志保存到一块专门区域。
swap交换分区,目的是通过操作系统的调度,程序实际可使用的内存空间远远超过物理内存。原理:当内存不足时,将暂时不用的数据取出,放到交换分区里,来为当前程序腾出内存空间。
5.2 设备文件
Linux中每个设备都映射为一个设备文件,使用时需先挂载到文件系统的一个目录下。启动时挂载 /etc/fstab 。
块设备文件可以随机读写,如磁盘。
字符设备文件只能按顺序接收字符流,如打印机。
5.3 硬盘管理
RAID:独立磁盘冗余阵列。
LVM:逻辑卷管理器。
第6章 用户管理
6.1 ID和文件
UID:用户唯一标识,32位无符号整数,root用户uid为0。
GID:用户组唯一标识,32位无符号整数,root用户组gid为0。
用户信息文件为/etc/passwd,用户口令文件为/etc/shadow。
用户组文件为/etc/group。
第7章 进程管理
7.1 ID和文件
PID:进程唯一标识。
PPID:父进程的PID。
UID:只有进程的创建者和root用户才能操作进程。
EUID:进程的有效用户ID,用来确定进程对某些资源和文件的访问权限。场景:setuid类的程序passwd,当普通用户修改只有root才能操作的shadow文件,临时提高权限。
GID:进程的组ID,场景:当进程需要创建一个新文件时,将采用该进程的GID。
EGID:进程的有效组ID。
谦让度:与优先级相反。
/PROC:一个特殊的“文件系统”目录,存放内核有关系统状态的各种有意义信息。
第8章 网络管理
8.1 文件
本地dns信息保存到/etc/hosts 。
第9章 传输文件
9.1 NFS
NFS目前只用于Linux和UNIX主机间共享文件系统,首先要求对方主机开启NFS服务器,就可以挂载到本地 。
#挂载NFS共享目录
mount -o rw,hard,intr,bg IP或host@path localpath/
#查看服务器共享目录
showmount -e IP或主机
#卸载NFS共享目录
umount localpath/
9.2 Samba
SMB:Server Message Block ,服务器消息块协议。微软和英特尔共同研发的windows的共享文件系统协议。
CIFS:Common Internet File System , 公共Internet文件系统协议,是SMB的升级版本。
Samba:1991年澳大利亚人用逆向工程实行的CIFS协议。
Samba包含一个服务端程序和多个客户端程序。安装在Linux的服务端向windows提供共享,windows不用安装任何工具。客户端程序用于获取windows的共享内容。
命令:smbtree,nmblookup,smbclient,smbmount,mount.cifs 。
9.3 FTP
ftp:linux自带的一个命令行的FTP工具,采用不加密传输方式,格式:ftp host|ip [port] 。
ftp>? 登录后,用?列出所有ftp命令。
put 上传文件,get 下载文件,cd,ls,pwd,mkdir,rm,quit等。
9.4 sftp和scp
sftp:基于SSH的文件传输,首先确保远程主机开启了SSH守护进程,格式:sftp user@host|ip [port] 。
scp:基于SSH的文件复制,格式:scp user@host|ip:path localpath/ 。
第10章 远程登录
10.1 SSH
telnet:采用明文口令,已废弃。
SSH:secure shell,安全的shell。SSH会对用户身份进行验证,并加密两台主机的通信。商业版本为SSH2。开源社区版本是OpenSSH,由FreeBSD负责维护。启动SSH服务器命令 /etc/init.d/ssh start 。
ssh -l user -p 22 ip|host #ssh登录。
exit #ssh退出。
使用SSH秘钥,客户端使用rsa私钥,服务端用公钥验签。
ssh-keygen -t rsa #生成rsa密钥对,id_rsa和id_rsa_pub两个文件自动放到~/.ssh/目录下。
ssh -l user2 host|ip #登录到user2
mkdir .ssh
chmod 700 .ssh
exit
scp ~/.ssh/id_rsa_pub user@host|ip:/home/user2/.ssh/authorized_keys #拷贝公钥到服务器登录用户名下。
10.2 VNC
VNC:Virtual Network Computing,虚拟网络计算,用于图形化的远程登录。要求服务器端运行有X窗口系统,需要先用vncserver命令配置远程访问密码。。
vncviewer是一款跨平台的VNC客户端工具,
10.3 跨平台登录
windows登录linux:命令行用putty,图形化用vncviewer。
linux登录windows:命令行用rdesktop,图形化用vnc(windows需装vnsserver)。
第11章 Linux编程
11.1 编辑器
vim:vi的增强版本。分为插入和命令两种模式。格式:vim file。
emacs:类似快捷方式,几乎等价于一个操作系统,可以打开后完成所有工作,直到关机离开。
图形化编辑器:gedit在gnome下,kate在KDE下。
11.2 gcc和gdb
gcc:GUN Compiler Collection,可以编译C、C++、OC、Java等语言。
g++:编译C++时,可以完成编译和连接,而gcc不能自动和cpp使用的库连接。
gdb:程序调试工具。
11.3 常用shell命令
cut -c3-6 file #提取每一行的第3~6位置的字符,首字符位置从1开始。
cut -d" " -f2 file #提取每一行按空格分割的第2个字段,没有d,则默认TAB为分隔符。
sort -k2 -r file #按第2个字段倒序排序。
uniq #从已排好序的输入中删除重复行,必须在输入已排序时才能正确工作。
source file #强行让一个脚本文件影响其父shell环境。
export key=value #让脚本可以影响其子shell环境。
11.4 个性化设置
alias ll='ls -l' #创建命令的别名。
~/.bashrc文件是一个shell脚本,用户登录后自动执行。修改后$source .bashrc 立即生效。
/etc/bash.bashrc文件是全局定制shell。
第三篇 服务器配置篇
第12章 服务器基础知识
12.1 系统引导
按下电源后启动过程如下:
①执行存储在ROM中的BIOS代码,目的:根据BIOS设置来获取引导设备位置。
②加载引导设备开头512个字节段的MBR(Master Boot Record,主引导记录),目的:根据MBR内容来获取“引导加载程序”的位置,即Boot Loader,linux最著名的引导加载程序就是Grub。
③加载并执行引导加载程序Grub,Grub负责加载操作系统内核。
④Grub加载并初始化Linux内核,
⑤内核配置并检测硬件设备。
⑥内核创建自发进程。该进程只执行最基本的硬件操作和调度。
⑦由用户决定是否进入手工引导模式
⑧由init进程执行系统启动脚本。创建用户级操作的进程最后都被内核下放给init进程完成。
⑨进入多用户模式。
12.2 init进程和运行级
几乎所有的进程都是由init创建的。init的配置文件为/etc/inittab。
init有7个运行级,默认是5,服务器设置为3。
0 系统关闭,1或S 单用户模式,2 功能受限的多用户模式,3 完整的多用户模式,4 保留自定义,5 多用户模式,运行X窗口系统,6 重新启动。
telinit 6 #强制系统进入某个运行级,此处为重启。
/etc/init.d/rc脚本,根据传入运行级参数查找对应目录,执行其中的脚本。
/etc/rc[0-6S].d目录,保存各运行级脚本。
/etc/init.d,服务器守护进程的启动脚本全部位于该目录下。
12.3 守护进程
守护进程daemon是一类在后台运行的特殊进程。init是系统第一个启动、也是最重要的守护进程。
守护进程两种运行方式:standalone模式和inetd/xinetd模式。
standalone模式:随系统启动而启动,并持续在后台监听连接请求,缺点:“没有事做”的守护进程会大量消耗系统资源。
inetd/xinetd模式:接管其他守护进程使用的网络端口,在监听到连接请求后启动相应守护进程,建立到指定端口的IO通道,完成任务后再关闭守护进程。缺点:对于高并发的连接请求,频繁启动关闭守护进程会很糟糕。
/etc/xinetd.conf 配置文件,/etc/xinetd.d目录保存要添加的守护进程服务。
第13章 服务器搭建
13.1 FTP服务器
vsftpd:一款安全性较高的FTP服务器程序,ftp服务器应尽量使用inetd/xinetd方式运行。缺点:使用明文口令。
FTP两种连接模式
主动连接:默认21和20端口,21端口处理客户端的命令,20端口文件传输。
被动连接:21端口和大于1024的非特权端口,21端口处理命令,另一个文件传输。
/etc/init.d/vsftpd start|stop|restart #启动ftp服务
13.2 NFS
NFS:Network File System,网络文件系统,基于服务器/客户机架构,需要安装nfs-common,nfs-kernel-server软件包。NFSv3协议增加异步写操作功能,但为无状态不支持文件上锁功能。NFSv4协议有状态,增加锁、支持windows客户机、更高性能。
/etc/exports:NFS配置文件,用来设置NFS服务器的共享文件列表。用exportfs -a使改动生效。showmount查看挂载情况。
NFS使用基于TCP协议的RPC作为传输协议。应该使用防火墙、压制root和匿名映射等方法增加NFS服务器安全性。
nfsstat -s #监视NFS服务器相关信息。
nfsstat -c #监视NFS客户机相关信息。
第三篇 系统安全篇
第14章 任务计划cron
14.1 crontab
/etc/crontab:全局任务计划配置文件,格式为:分钟 小时 日 月 星期 执行用户 (执行命令) 。“*”为不限,“-”为连续整数区间,“,”为离散整数。
/etc/init.d/cron restart|start|stop:cron守护进程的启动脚本。
/var/spool/cron/username.cron:用户个性化cron配置文件。
第15章 防火墙iptables
15.1 iptables
iptables是一种典型的包过滤防火墙。通过检测到达的数据包头中的信息,如:目的地址,端口,协议号等,来确定哪些数据包可以通过。
chain:链,一条防火墙规则。
table:表,一组功能相似的chain的集合。iptables默认表是filter(过滤器),其中默认包含3条链:FORWARD(转发),INPUT(发入本机),OUTPUT(本机发出)。其他表还有nat和mangle两个表。nat表用于网络地址转换NAT,mangle则用于修改除了NAT和包过滤之外的网络包。
15.2 nmap
nmap用于扫描一组主机的网络端口。