《Linux从入门到精通》笔记,


第一篇 基础篇   第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用于扫描一组主机的网络端口。

相关内容

    暂无相关文章