zoukankan      html  css  js  c++  java
  • 《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用于扫描一组主机的网络端口。
  • 相关阅读:
    内存泄漏检测工具VLD在VS2010中的使用举例
    boost::threadpool 调用类成员变量并传入参数 的方法
    boost之ThreadPool
    DllMain 用法
    分布式锁的几种实现方式
    利用cbmakegen导出Code::blocks的Makefile
    搜集C++实现的线程池
    微软开源rDSN分布式系统开发框架
    腾讯互娱开源分布式开发框架Pebble
    SpringBoot指定额外需要扫描的包
  • 原文地址:https://www.cnblogs.com/fhwup/p/8587848.html
Copyright © 2011-2022 走看看