学习笔记兄弟连Linux教程摘要
Posted 囚生CY
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习笔记兄弟连Linux教程摘要相关的知识,希望对你有一定的参考价值。
最近在看兄弟连2014年录制的Linux教学视频,沈超和李明这两个活宝讲得确实是精彩,顺着教学视频讲解的逻辑顺序做了一些笔记,教学视频链接https://www.bilibili.com/video/BV1mW411i7Qf,学的人挺多,每次看都有几十个人陪着一起在学。
笔者是用markdown做的笔记,不过水平太差,不是很会写markdown,格式很flat,有些地方markdown语法写得可能还有问题。管它呢,笔者能看懂就行了[汗]
兄弟连的视频教程主要是基于运维的需求进行的讲授,本文将更新至该视频教程完整16章的内容,争取一周之内更完,留作备份查询。
截至20200806,已经全部更新了10共计16章106节的教学视频笔记摘要
目录
第一章 Linux系统简介
-
Linux与Unix的关系是son与father的关系, 学会Linux可以很容易的上手Unix
-
Linux内核官网: www.kernel.org
-
主流的Linux发行版本
- redhat系列
- redhat: 企业版(稳定版,维护需付费)
- CentOS: 本教程使用的版本(社区维护版本,完全免费,包括后期维护,国内互联网公司使用的最广泛的分支)
- SuSE
- fedora: 个人版(测试版,维护需付费)
- gentoo linux
- 红旗 linux
- Mandriva
- turbolinux
- debian系列
- debian
- ubuntu: GUI界面很好
- KNOPPIX: 无需安装, 只需要光盘或镜像就可以直接使用
- www.netcraft.com 好像需要翻墙
- 可以输入域名得到该域名的网络情况和主机历史: 算是一个很好用的踩点网站
- 发现腾讯门户和淘宝服务器都是用Linux
- 事实上Microsoft也全部用的是Linux作为服务器, 没有用Windows
- Linux的性能要远远优于Windows
- andriod平台也是基于Linux的顶层设计
- 可以在andriod手机上下载QuickSSHd, 连接到远程服务器
- 服务器上使用SecureCRT就可以远程操控手机
- 包括智能电器, 智能卡系统, 航空系统, 银行系统等都是用Linux完成
- Linux如果安装GUI会占用很大资源, 而且会增加出错的可能性
第二章 Linux系统安装
1. VMware虚拟机安装与使用
- 不建议装双系统, 因为容易造成数据丢失, 而且双系统实践中几乎不会涉及
- 很多安装教程里的截图就是在虚拟机中截屏实现的
- 在一台计算机上面模拟多个操作系统, 并且这些系统都可以与本机系统进行通信
- 安装VMware是很简单的: 安装包已经下载好在D盘了
- 打开VMware.exe点击新建虚拟机:
- 进入VMware.exe后新建虚拟机选择标准
- 选择以后安装操作系统(不要用安装盘或镜像文件)
- 选择Linux: 选择2.6.x内核的任意一个版本都可以
- 最好选择CentOS
- 虚拟机名称: CentOS 6 test
- 虚拟机位置: 准备放在F盘, 用于放置虚拟机文件
- 虚拟机最大磁盘空间: 一般20G左右就足够了
- 虚拟磁盘拆分成多个文件
- 新建虚拟机后在起始页后面出现一个新的标签页CentOS 6 test, 虚拟机新建
- 单击菜单中的虚拟机–>设置:
- 内存不能超过真实内存的一半: 一般来说为了GUI不能少于628M, 一般来说1~2G基本足够
- 虚拟机的处理机数量和核数都可以跟主机同样的配置: 当然1+1也可以
- 硬盘: 可以继续添加硬盘
- 光驱: ISO镜像, 注意勾上右上的"打开电源时连接"(相当于给光驱通电源), 然后选择ISO镜像
- 然后去读取光驱就可以了
- CenOS-6.3有两张DVD盘, 只要第一个盘就可以了, 相当于将光盘放入
- 网络适配器: 后期再设置
- 到目前为止相当于分配个硬盘内存再把光盘放入光驱, 目前结束
- 小技巧:
- 点击工具栏中的小钟表, 就可以将虚拟机快照保存下来, 下次直接读取快照就可以到启动后的状态, 相当于恢复备份
- 点击工具栏中的小扳手, 就可以恢复快照, 但是真正的服务器是没有快照的功能的
- 真正的Linux仍然需要备份, 而非快照;
- 点击菜单中的虚拟机–>快照
- 虚拟机–>管理–>克隆, 实际上克隆机并不会跟原始机有同样的大小, 会比原始机小很多
- 如果删除了原始机, 克隆机就没用了, 克隆机只是原始机的一个镜像
- 开始里可以挂起, 相当于睡眠的效果
2. 系统分区: 理论知识
- 磁盘分区:
- 主分区最多4个
- 扩展分区只能有1个
- 不能写入分区, 只能包含逻辑分区(即这个分区只能用于包含很多子分区)
- 主分区+扩展分区一共最多4个
- 格式化: (高级格式化, 逻辑格式化)
- 指根据用户选定的文件系统(FAT16 FAT32 NTFS EXT2 EXT3 EXT4)在分区中写入固定的数据(如文件分配表等)
- 硬件设备文件名:
- WINDOWS: 分区–>格式化–>分配盘符就可以使用了
- LINUX: 多一步分配设备文件名, 即每个外接设备都用以文件形式管理
- IDE硬盘: /dev/hd[a-d]
- SCSI/SATA/USB硬盘: /dev/sd[a-p]
- 光驱: /dev/cdrom或者sr0
- 软盘: /dev/fd[0-1]
- 打印机(25针): /dev/lp[0-2]
- 打印机(USB): /dev/usb/lp[0-15]
- 鼠标: /dev/mouse
- 分区设备文件名: 在硬盘后直接加分区号
- /dev/hda[1-9]: IDE硬盘: 133MB/s
- /dev/sda[1-9]: SCSI/SATA硬盘接口: 200~500MB/s
- 注意逻辑分区永远从5开始标起, 即便主分区没有到4个, 因此是sda5是第一个逻辑分区
- 挂载: 理论上任何一个空的文件名都可以当作盘符, 给每个分区分配挂载点, 挂载点必须是一个空目录
- 必须分区: 一定要存在的分区
- / 根分区
- swap分区: 交换分区, 内存2倍, 不超过2GB(这个好像是虚拟内存)
- 推荐分区: 最好有的分区
- /boot 启动分区, 200MB, 保存启动时需要使用的文件, 防止系统存储不够而无法启动
3. Linux系统安装
- 虚拟机设置:
- CD/DVD(IDE)–>使用ISO镜像文件–>浏览(去CENTOS官网下载镜像,6.3的镜像有两个,4G+1G,装4G就可以了)
- 此时相当于给导入光盘
- 启动后按F2进入Bios: 将硬盘启动改成光盘启动
- 鼠标点进VMware界面就进去了, Ctrl+Alt就切换出到主机界面
- 进入BOOT菜单里将CD-ROM按’+'号把它搞到最上面
- 注意退出Exit时选择leave without change
- 但是真实服务器不会有这种功能, 只能第一次安装时选择leave save
- 第二次再来BIOS修改为硬盘启动
- 安装欢迎界面
- Ctrl+Alt+回车
- 安装语言: 简体中文/English
- 键盘: 美国英语式键盘
- 勾选’基本存储设备’, 而非’指定存储设备’
- 主机名: 使用默认的主机名(localhost.localdomain)
- Linux无所谓主机名, Windows在局域网内不能使用同样的主机名进行通讯
- 时区: 亚洲/上海
- 设置密码:
- 复杂性: 八位字符以上, 大小写字母, 数字, 符号, 不能是英文单词, 不能是和用户相关的内容
- 易记忆性
- 时效性
- 勾选’创建自定义布局’: 出于学习目的
- 生成分区–>标准分区
- 挂载点: /123也可以
- sda1 ext4–>/boot–>固定大小(200MB): boot分区一定是sd1分区, 因为与启动相关的一定在硬盘的头部
- sda2 swap–>没有盘符–>固定大小(1GB): swap分区对系统影响很小
- sda3 ext4–>/home–>固定大小(2GB): 非必要分区, 一般用于下载的存储
- ext4–> / -->自动计算根分区大小:
- 下一步: 跳出格式化对话框, 确认
- 下一步: 引导程序默认
- 软件包选择:
- Desktop 桌面(个人用户)
- Minimal Desktop 最小化桌面
- Minimal 最小化安装(服务器一般都选择这个)
- Basic Server 基本服务器
- Database Server 数据库服务器
- Web Server 网页服务器
- Virtual Host 虚拟主机
- software Development Workstation 软件开发模式
- 学习时按照’Basic Server 基本服务器’安装
- 很熟悉linux的可以用minimal安装
- 可以自定义安装, 很难, 需要很熟悉, 勾选’以后自定义’
- 下一步就安装好了, 点击重新引导(重启)
- 如果是真实机需要F2进入BIOS改成硬盘启动而非CDROM光盘启动
- root + 密码登录
- 安装日志: 根目录下的初始文件
- /root/install.log 安装系统中的软件包及其版本信息
- /root/install.log.syslog 安装过程中的事件记录
- /root/anaconda-ks.cfg 以Kickstart配置文件的格式记录安装过程中设置的选项信息
- 无人监管安装, 用这个文件可以实现自动安装
4. 远程登录管理工具
- 虚拟机设置–>网络适配器
- 设备状态: 已连接+打开电源时连接
- 网络连接:
- 桥接: 使用真实网卡与主机进行通讯连接, 非常简单, 但是需要占用IP
- NAT或HOST only: 虚拟网卡, 只能和主机通信, 但是NAT是可以连接互联网的
- 没有联网的情况下用NAT或HOST only
- ifconfig配置: 默认会有一块网卡lo, 网卡的命名是 eth0 eth1 以此类推
- ifconfig 查看网络配置信息
- ifconfig eth0 192.168.110.2
- cmd --> ping 192.168.118.2
- ifconfig配置: 默认会有一块网卡lo, 网卡的命名是 eth0 eth1 以此类推
- 在有网线的情况下一般都是用桥接: 不勾选复制到…
- ifconfig eth0 192.168.1.156
- cmd --> ping 192.168.1.156
- ifconfig是临时修改, 永久修改要到配置文件中改
- 注意桥接时是默认桥接, 如果你是有线有可能会桥接到无线上
- 修改虚拟网络编辑器
- ifconfig改IP地址后当然会在远程连接时断开连接
- SecureCRT远程连接管理工具: 应该putty也可以
- Winscp文件拷贝工具: 应该filezilla也可以
第三章 Linux初学者手册
1. 学习Linux的注意事项
- Linux命令与文件名称都是区分大小写的
- Linux系统中所有内容都是以文件形式存储, 包括硬件
- 硬盘文件是/dev/sd[a-p]
- 光盘文件是/dev/sr0等
- 一切永久保存的配置都是用文件而非修改内存中的变量
- Linux系统中的文件一般都没有扩展名
- 不靠扩展名区分文件类型, 而是权限
- 一些约定俗成的扩展名:
- 因此很多windows的病毒无法在linux中运行
- 因为识别不出来用什么程序运行
- Linux所有的存储设备都必须挂载后用户才能使用, 包括硬盘, U盘, 光盘
- Windows在分配盘符时就是挂载
- Windows下的程序不能直接在Linux中安装和运行
2. 服务器管理和维护建议
- Linux各目录的作用:
- /bin/: 存放系统命令的目录, 普通用户和超级用户都可以执行, 在单用户模式(类似WIN的安全模式)下也可以执行
- /sbin/: 保护和系统环境设置相关的命令, 只有超级用户可以使用使用这些命令修改环境设置, 有些命令可以允许普通用户查看
- /usr/bin/: 存放系统命令的目录, 普通用户和超级用户都可以执行, 在单用户模式下不可以执行
- /usr/sbin/: 存放根目录系统不必要的系统管理命令, 例如多数服务程序, 只有超级用户可以使用
- /boot/: 系统启动目录, 保存系统启动相关的文件, 如内核文件和启动引导程序(grub)文件
- /dev/: 设备文件保存位置
- /etc/: 配置文件保存位置, 如用户账户密码, 默认安装方式等
- /home/: 普通用户的家目录, /home/user1类似
- /lib/: 系统调用的函数库保存位置
- /lost+found/: 系统意外崩溃关机而产生一些文件碎片放在此处, 系统启动时fsck工具会检查这里, 并修复已经损坏的文件系统, 每个分区中都会有一个这个目录如/boot/lost+found/
- /media/: 挂载目录, 一般挂载媒体设备, 例如软盘和光盘
- /mnt/: 挂载目录, 早期只有这一个, 可以/mnt/usb/ /mnt/media/ /mnt/cdrom/这样多挂载
- /misc/: 挂载目录, 用于挂载NFS服务和共享目录
- /opt/: 第三方安装的软件保存位置, 也可以安装在/usr/local中
- /proc/: 虚拟文件系统, 此处的文件只保存在内存中而非硬盘
- /sys/: 虚拟文件系统, 此处的文件只保存在内存中而非硬盘
- /root/: 超级用户家目录
- /srv/: 服务数据目录
- /tmp/: 临时目录, 每次开机最好清空
- /usr/: 系统软件资源目录(Unix Software Resource)
- /var/: 动态数据保存位置, 一般保存缓存日志以及软件运行产生的文件
- 服务器注意事项
- 远程服务器不允许关机(因为服务器可能离你很远), 只能重启
- 重启时应该关闭服务
- 不要在服务器访问高峰运行高负载命令
- 如大数据的拷贝压缩以及全盘扫描查找等
- 远程配置防火墙时不要把自己提踢出服务器
- 指定合理的密码规范并定期更新
- 合理分配权限: 越少越好, 够用就行
- 定期备份重要数据和日志
第四章 Linux常用指令
1. 文件处理命令
1.1 命令格式与目录处理命令 ls
- 命令格式: 命令 [-选项] [参数]
- ls -la /etc
- 个别命令使用不遵循此格式
- 当有多个选项时, 可以写在一起
- 简化选项与完整选项
- -a 等价于 --all
- ls: 列出路径下的内容
- 路径: /bin/ls
- 权限: 所有用户
- 功能描述: 显示目录文件
- 语法: ls [-ald] [文件或目录]
- -a: 显示所有文件包括隐藏文件(以’.'开头的文件是隐藏文件,一般是系统文件不让碰)
- -l: 显示详细信息, 包括引用次数计数, 所有者(初始为创建者,可转让,永远只有1个), 所属组, 文件大小(默认单位是bit), 最后修改时间, 文件名
- -d: 查看当前目录详细属性而非目录下的信息
- -h: 一般是-lh, 可以使得-l显示的详细信息中的文件大小是K/M/G的单位
- -i: 查看目录下文件的id, 唯一标识符
- 文件类型: ls -l输出的开头是 '-'是文件 'd’是文件夹 'l’是软链接
- ugo: 所有者 所属组 其他人
- rw- r-- r-- 是权限信息: r读w写x执行
1.2 目录处理命令: mkdir, cd, pwd
- mkdir
- 路径: /bin/mkdir
- 权限: 所有用户
- 语法: mkdir [-p] [目录路径1] [目录路径2] [目录路径3]…
- -p: 递归创建, 好像这个dos命令里没有这个
- 同样dos是没有一次性生成多个目录的命令的
- cd: 切换目录
- shell内置命令
- 权限: 所有用户
- cd … 回到上级目录
- cd [路径] 切换到指定目录
- pwd: 显示当前目录
- 路径: /bin/pwd
- 权限: 所有用户
- 无需参数
- rmdir: 删除空目录(基本无用的命令)
- 路径: /bin/rmdir
- 权限: 所有用户
- 语法: rmdir [路径]
- cp: 复制目录/文件
- 路径: /bin/cp
- 权限: 所有用户
- 语法: cp [-rp] [文件或目录1] [文件或目录2] … [文件或目录n] [目标目录]
- -r: 复制目录
- -p: 保留文件属性, 如保持文件最后修改时间等
- 可以同时复制多个文件或目录
- mv: 剪切/重命名
- 路径: /bin/mv
- 权限: 所有用户
- 语法: mv [文件或目录] [目标目录]
- mv /tmp/japan/cangjing /root # 复制文件夹cangjing到/root下
- mv /tmp/japan/cangjing /root/nvshen # 把cangjing复制到/root下改名成nvshen
- mv cangjing canglaoshi 把cangjing文件夹的文件名改成canglaoshi
- 与cp一样可以同时移动多个
- rm: 删除目录/文件
- 路径: /bin/mv
- 权限: 所有用户
- 语法: rm [-rfm] [文件或目录]
- -rf: 强制删除
- -m: 删除目录
- rm -rf / # 删库跑路
- rm -rf /etc #
1.3 文件处理命令
- touch: 创建空文件
- 路径: /bin/touch
- 权限: 所有用户
- 语法: touch [文件名1] [文件名2] … [文件名3]
- 不建议带空格的文件名以及目录名, 否则需要用双引号(同dos)
- cat: 显示文件内容
- 路径: /bin/cat
- 权限: 所有用户
- 语法: cat [-n] [文件名]
- -n: 显示行号
- 不适合查看长文件, 只能查看最后一页
- tac: 显示文件内容(倒序显示)
- 路径: /bin/tac
- 权限: 所有用户
- 用法同cat
- more: 分页显示文件内容
- 路径: /bin/more
- 权限: 所有用户
- 用法: more [文件名]
- 空格/f: 翻页
- Enter: 换行
- q: 退出
- less: 分页显示文件内容(可以返回上一页)
- 路径: /usr/bin/less
- 权限: 所有用户
- 用法: less [文件名]
- 空格/f: 翻页
- Enter: 换行
- q: 退出
- pageup: 返回上一页
- 方向键↑: 返回上一行
- 搜索: 输入 /<关键词> 即可
- 按n可以获取下一处匹配
- less应该可以完全取代more
- head: 显示文件开头几行
- 路径: /usr/bin/head
- 权限: 所有用户
- 用法: head -n [行数] [文件名]
- 显示文件的前20行: head -n 20 /etc/services
- 默认10行
- tail: 显示文件最后几行
- 路径: /usr/bin/tail
- 权限: 所有用户
- 用法: tail [-nf] [行数] [文件名]
- 显示文件的末尾20行: tail -n 20 /etc/services
- -f: 动态显示文件末尾内容, 如果修改了文件内容会动态更新
- 如监控日志
1.4 链接命令
- ln: 生成链接文件
- 路径: /bin/ln
- 权限: 所有用户
- 语法: ln [-s] [原文件] [目标文件]
- -s: 生成软链接, 不加选项是硬链接
- 软链接就是快捷方式
- ls -l 显示的是lrwxrwxrwx, 这意味着所有用户对该软链接文件有所有信息
- 软链接很小, 本质上打开原文件
- 硬链接
- ls -l 显示的结果与原文件基本没有差别
- 硬链接与原文件会同步更新, 类似是一个备份
- echo “www.lampbrother.net” >> /etc/issue # 更新一个文件
- 硬链接与软链接的区别:
- 如果删除原文件, 软链接当然无效, 硬链接永远有效
- 使用ls -i查看标识符(i节点), 硬链接的i节点与原文件相同, 软链接则不同
- 其实硬链接用的非常的少, 类似git
- 硬链接不能跨分区目录: 如/tmp下的文件不能在/boot里创建硬链接, 软链接则可以
- 软链接文件的ls -l的开头是l, 硬链接与原文件相同
2. 权限管理命令
2.1 权限管理命令chmod
- chmod: 更改文件权限/目录权限
- 路径: /bin/chmod
- 权限: 所有者和root
- 语法1: chmod [ugoa±=rwx] [-R] [文件或目录]
- chmod u+x Janpanlovestory.list # 给所有者增加执行权限
- chmod g+w,o-r Janpanlovestory.list # 给所有组增加写入权限, 给其他人去除读取权限
- chmod g=rwx Janpanlovestory.list # 给所有组读取, 写入, 执行权限
- 语法2: chmod [mode=421] [-R] [文件或目录]
- 用整型数表示rwx: r:4,w:2,x:1
- rwx:7,rw:6, 即求和
- rwx-rw-x: 用761表示, 532表示rx-wx-x
- chmod 640 Janpanlovestory.list
- -R表示是递归修改: 将目录下所有的子容器都修改权限
- rwx权限深入理解:
- r: 读取权限, 可以查看文件内容 | 可以列出目录中的内容
- w: 写入权限, 可以修改文件内容 | 可以在目录中创建删除文件
- x: 执行权限, 可以执行文件 | 可以进入目录
2.2 其他权限管理命令
- chown: 改变文件或目录的所有者
- 路径: /bin/chown
- 权限: root, 即便是所有者也没有权限
- 语法: chown [用户] [文件或目录]
- chown shenchao fengjie # 将fengjie文件夹的所有者改为shenchao
- chgrp: 改变文件或目录的所属组
- 路径: /bin/chgrp
- 权限: root, 即便是所有者也没有权限
- 语法: chown [用户组] [文件或目录]
- chown lampbrother fengjie # 将fengjie文件夹的所属组改为lampbrother
- umask: 显示, 设置文件的缺省权限
- 路径: shell内置命令
- 权限: 所有用户
- 语法: umask [-S]
- -S: 以rwx形式显示新建文件缺省权限, umask -S即可
- umask 077 # 则新建的文件是
- linux中默认新建文件对任何用户不会有执行权限, 因此即便用umask设置了执行权限实际也不会有的
3. 文件搜索命令
3.1 find命令
- find: 文件搜索
- 路径: /bin/find
- 权限: 所有用户
- 语法: find [搜索范围] [匹配条件]
- find /etc -name init # 在目录/etc中查找文件init(必须精确的是init, 而非包含init)
- find /etc -name init # 在目录/etc中查找文件init(包含init即可,*为通配符匹配任意数量字符)
- find /etc -name init* # 在目录/etc中查找文件init(以init开头)
- find /etc -name init??? # 在目录/etc中查找文件init(以init开头且后面是3个字母, ?为通配符匹配单个字符)
- find /etc -iname init # 不区分大小写的查找init
- find /etc -size +204800 # 查找大于100MB的文件: 注意linux系统每个数据块是0.5k, 因此100MB等于204800个数据块
- +n: 大于
- -n: 小于
- n: 等于, 极少使用
- find /etc -user shenchao # 查找所有者为shenchao的文件
- find /etc -cmin -5 # 在/etc下查找5分钟内被修改过属性的文件和目录
- find /etc -amin -5 # 在/etc下查找5分钟内被访问过的文件和目录
- find /etc -mmin -5 # 在/etc下查找5分钟内被修改过内容的文件和目录
- +5 -5 5 同 -size的意思
- find /etc -size +163840 -a -size -204800 # 80MB~100MB的文件
- -a: 表示and
- -o: 表示or
- find /etc -name inittab -exec ls -l ; # 在/etc下查找inittab文件并显示详细信息
- -exec/-ok [命令] ; 对搜索结果执行操作, 是把之前的结果放进来, \\是转义符, ;是结束
- find /etc -type f # 只查找文件
- find /etc -type d # 只查找目录
- find /etc -type l # 只查找软链接
- find . -inum 31531 -exec rm ; # 在当前目录下查找i节点是31531的文件并删除
- 用inum可以查找当前文件的所有硬链接
3.2 其他文件搜索命令
- locate: 在文件资料库ntfs中查找文件, 比find要快得多
- 路径: /usr/bin/locate
- 权限: 所有用户
- 语法: locate [-i] [文件名]
- locate inittab # 查找文件名中包含inittab的
- -i: 不区分大小写查找
- 但是新建的文件不在文件资料库中就查找不到
- 使用updatedb命令来更新文件资料库
- 但是/tmp目录下的文件是不在文件资料库中
- which: 搜索命令所在目录及别名信息, 比find高效
- 路径: /usr/bin/which
- 权限: 所有用户
- 语法: which [命令名称]
- which ls # 查找ls命令所在的绝对路径
- which rm # rm的别名是"rm -i", -i是询问确认的选项
- whereis: 搜索命令所在目录及帮助文档路径, 一般都在/usr/share/man目录下
- 路径: usr/bin/whereis
- 权限: 所有用户
- 语法: whereis [命令名称]
- whereis ls
- grep: 在文件中搜寻字串匹配的行并输出
- 路径: /bin/grep
- 权限: 所有用户
- 语法: grep [-iv] [指定字串] [文件]
- -i: 不区分大小写
- -v: 排除指定字串, 支持正则
- grep mysql /root/install.log # 在安装日志里查找mysql相关的记录行
- grep -i multiuser /etc/inittab # 不区分大小写
- grep -v ^# /etc/inittab # 将inittab中带有#开头的行(即注释信息)都去掉然后显示
4. 帮助命令
- man: 获得帮助信息
- 路径: /usr/bin/man
- 权限: 所有用户
- 语法: man [命令名称/配置文件名称(不需要绝对路径)]
- man ls
- man services # 查看配置文件services的帮助信息(网络配置)
- 等价于more /etc/services
- man passwd # passwd很特殊, 它既是一个命令, 而且还是一个配置文件名称, 因此man后既会输出配置信息,
- 1: 命令的帮助
- 5: 配置文件的帮助
- man 1 passwd
- man 5 passwd
- 与more的用法差不多, 可以换行翻页, 且"/".format可以查找内容
- whatis: 获取命令的简短信息
- 语法: whatis [命令名称]
- whatis ls
- apropos: 获取配置文件简短信息
- 语法: apropos [配置文件名称]
- apropos services
- [命令名称] --help
- ls --help 查看ls的帮助信息
-
info: 基本等价于man的用法, 在显示上稍有区别, 早期UNIX没有info
-
help: 获得shell内置命令的帮助信息
- 路径: shell内置命令
- 权限: 所有用户
- 语法: help [shell内置命令名称]
- help cd # cd是不可以用man来查看帮助的
- help umask
5. 用户管理命令
- useradd: 添加新用户
- 路径: /usr/sbin/useradd
- 权限: root
- 语法: useradd [用户名]
- useradd yangmi
- passwd: 设置/更新用户密码
- 路径: /usr/sbin/passwd
- 权限: root
- 语法: passwd [用户名]
- 注意非root用户使用passwd直接进入修改自己密码的环境
- who: 查看当前所有登录用户信息(简洁)
- 路径: /usr/bin/who
- 权限: 所有用户
- 语法: who
- 输出内容:
- tty: 本地登录
- pts: 远程终端登录
- w: 查看当前所有登录用户信息(详细)
- 路径: /usr/bin/w
- 权限: 所有用户
- 语法: w
6. 压缩解压命令: 只有zip是linux和windows通用的
- gzip: 压缩文件(.gz)
- 路径: /bin/gzip
- 权限: 所有用户
- 语法: gzip [-d] [文件]
- -d: 相当于gunzip, 解压文件
- gzip无法压缩目录, 且压缩完不会保留原文件
- gunzip: 解压文件(.gz)
- 路径: /bin/gunzip
- 权限: 所有用户
- 语法: gunzip [文件]
- tar: 打包目录, 顺带压缩(.tar)
- 路径: /bin/tar
- 权限: 所有用户
- 压缩语法: tar [-zcvf] [压缩后文件名] [目录]
- -c: 打包
- -v: 显示详细信息
- -f: 指定文件名
- -z: 打包同时压缩, 也可以变成.tar后再gzip
- tar -zcf Japan.tar.gz Japan
- 解压语法: tar [-zxvf] [压缩包名称]
- -x: 解包
- -v: 显示详细信息
- -f: 指定解压文件名
- -z: 解压缩
- tar -zxf Japan.tar.gz
- zip: 压缩文件或目录(win和linux通用, .zip)
- 路径: /usr/bin/zip
- 权限: 所有用户
- 语法: zip [-r] [压缩后文件名] [文件或目录]
- -r: 压缩目录
- zip boduo.zip boduo
- 没有gzip压缩得多
- unzip: 解压缩文件或目录
- 路径: /usr/bin/unzip
- 权限: 所有用户
- 语法: unzip [压缩文件名]
- bzip2: 压缩文件(.bz2)
- 路径: /usr/bin/bzip2
- 权限: 所有用户
- 语法: bzip2 [-k] [文件名]
- -k: 产生压缩文件后保留原文件
- bzip2 -k boduo
- 解压用bunzip2: bynzip2 -k boduo.bz2
- 可以用tar来解压缩打包后压缩成bz2: tar -cjf Japan.tar.bz2 Japan
- bzip2不能压缩目录
7. 网络命令
- write: 给用户发信息(用户必须处于登陆状态), 输入完(Ctrl+Backspace或delete退回), 以Ctrl+D保存结束
- 路径: /usr/bin/write
- 权限: 所有用户
- 语法: write <用户名>
- write shenchao
- …
- Ctrl + D
- wall: 发广播信息
- 路径: /usr/bin/wall
- 权限: 所有用户
- 语法: wall [信息内容]
- 广播者自己也会收到信息
- ping: 测试网络连通性
- 路径: /bin/ping
- 权限: 所有用户
- 语法: ping [-c] [IP地址]
- -c: 指定ping的次数
- ping -c 3 192.168.1.156 # ping 3次就停下, 不用-c会无限ping
- -c: 指定ping的次数
- ifconfig: 查看/设置网络配置信息
- 路径: /sbin/ifconfig
- 权限: root
- 语法: ifconfig [网卡名称] [IP地址]
- ifconfig # 显示所有网卡信息
- ifconfig eth0 192.168.8.250 # 临时生效的更改IP地址
- linux有两个网卡eth0(默认网卡)和io
- mail: 查看/发送电子邮件(无需用户在线)
- 路径: /bin/mail
- 权限: 所有用户
- 语法: mail [用户名]
- mail # 查看邮件
- 输入help查看如何查看
- 1: 第一封邮件
- d 1: 删除第一封邮件
- mail shenchao # 给用户shenchao发送邮件, Ctrl+D保存
- mail # 查看邮件
- 系统一般会自动给root发送一些日志以及统计信息
- last: 列出目前与过去登入系统的用户信息(包括服务器重启)
- 路径: /usr/bin/last
- 权限: 所有用户
- 语法: last
- lastlog: 只显示每个用户最后一次登录的记录
- 路径: /usr/bin/lastlog
- 权限: 所有用户
- 语法: lastlog [-u] [UID]
- lastlog # 显示全部用户
- lastlog -u 502 # 502是uid
- traceroute: 显示数据包到主机间的路径
- 路径: /bin/traceroute
- 权限: 所有用户
- 语法: traceroute www.lampbrother.net
- 访问一个站点不可能是直接到的, 一般是一个个路由到的
- netstat: 显示网络相关信息(常用)
- 路径: /bin/netstat
- 权限: 所有用户
- 语法: netstat [选项]
- -a: 所有信息
- -t: 查看TCP协议
- -u: 查看UDP协议
- -l: 监听
- -r: 路由
- -n: 显示IP地址和端口号
- netstat -tlun # 查看本机监听得到端口, 很多端口号是固定的, 比如apache是80, ftp是22, 可以等价于查看开放的服务
- netstat -an # 查看本机所有的网络连接, .state==established是正在连接的
- netstat -rn # 查看本机路由表
- setup: 配置网络(永久生效), 红帽系列专有的命令, 其他版本的linux发行是没有的
- 路径: /usr/bin/setup
- 权限: root
- 语法: setup 进入交互界面进行配置
- 网络配置–>使用DHCP: 设置为’*'即为自动获取IP地址
- 配置完后service network restart才能生效
- mount: 挂载
- 路径: /bin/mount
- 权限: 所有用户
- 语法: mount [-t 文件系统] [设备文件名] [挂载点(可以理解为盘符,一般是cdrom)]
- mount -t ios9660 /dev/sr0/mnt/cdrom
- VMware相关操作: 见"02_系统安装.txt"
- umount /dev/sr0 # 卸除挂载
8. 关机重启命令
- shutdown: 关机命令
- 语法: shutdown [-chr] [时间]
- -c: 取消前一个关机命令
- -h: 关机
- -r: 重启
- shutdown -h now # 立即关机
- shutdown -h 20:30 # 下一个20:30关机
- shutdown -c # 取消关机
- 推荐使用shutdown, 因为早期的linux系统中shutdown可以正确的保存服务器里的一些文件和状态, 有的命令写得不好, 可能会伤及物理硬盘
- halt: 关机
- poweroff: 关机(相当于直接断电,这个很坏)
- init 0: 关机
- init 6: 重启
- reboot: 重启
- init [系统运行级别]
- 0: 关机
- 1: 单用户(安全模式), 无GUI
- 2: 不完全多用户, 不含NFS(网络服务系统,是一个文件共享的服务,存在安全问题)服务, 无GUI
- 3: 完全多用户, 无GUI
- 4: 未分配
- 5: 图形界面
- 6: 重启
- 在/etc/inittab中有关于系统运行级别的记录, 且可以设置默认的系统运行级别, 比如改成0或6, 就永远起不来了, 事实上linux会保护不让设成0或6, 一般是默认3
- cat /etc/inittab # 更改系统运行级别
- id:3:initdefault;
- runlevel # 查看当前系统运行级别
- logout: 退出登录
第五章 Linux文本编辑器Vim
1. Vim常用操作
- Vim没有菜单, 只有命令, 是Linux/UNIX最常用的文本编辑器, 可以建立编辑和显示文本文件
- 一般用于写一些小脚本
- Vim工作模式
- vi或vm <文件名> # 进入文件(命令模式)
- 输入: wq # 退出文件
- 输入: i/a/o # 进入插入模式
- 按ESC: 从插入模式转为命令模式
- 输入: 冒号 # 进入编辑模式, 命令以回车结束运行
- :set nu # 添加行号
- 插入命令: 插入模式下使用, 切换插入命令都需要先ESC进入命令模式
- a: 在光标所在字符后插入
- A: 在光标所在行尾插入
- i: 在光标所在字符前插入
- I: 在光标所在行首插入
- o: 在光标下插入新行
- O: 在光标上插入新行
- 定位命令: 在命令模式下使用
- :set nu # 设置行号
- :set nonu # 取消行号
- gg # 到第一行
- G # 到最后一行
- :n # 到第n行
- $ # 移动到行尾
- 0 # 移动到行首
- 删除命令
- x: 删除光标所在处字符
- nx: 删除光标所在处后n个字符
- dd: 删除光标所在行
- ndd: 删除光标所在后n行
- dG: 删除光标所在行到文件末尾内容
- D: 删除光标所在处到行尾内容
- :n1,n2d 删除n1到n2行
- 复制/剪切命令:
- yy: 复制当前行
- nyy: 复制当前行以下n行
- dd: 剪切当前行
- ndd: 剪切当前行以下n行
- p或P: 粘贴在当前光标所在行下或行上
- 替换和取消命令:
- r: 取代光标所在处字符
- R: 从光标所在处开始替换字符, 按Esc结束
- u: 取消上一步操作
- 搜索和搜索替换命令:
- /string: 搜索指定字符串string, 搜索时忽略大小写 编辑模式下输入":set ic", 取消则":set nic"
- n: 搜索指定字符串的写一个出现位置
- :%s/old/new/g: 全文替换指定字符串(old->new)
- :%s/ftp/sftp/g
- :n1,n2s/old/new/g: 在第n1行到n2行替换(old->new)
- n1,n2都是包括在内的
- 保存/退出命令
- :w 保存修改
- :w new_filename 另存为new_filename
- :wq 保存求改并退出
- ZZ 快捷键, 保存修改并退出
- :q! 不保存修改退出
- :wq! 保存修改并退出(root与文件所有者可用)
2. Vim使用技巧
- 导入命令执行结果: ":r!"命令
- :r /etc/issue # 将/etc/issue文件内容导入到光标处
- :! <系统命令> # 在不退出vim的情况下使用linux命令
- :r !date # 将date的执行结果导入到光标处
- 定义快捷键: “:map” 快捷键出发命令
- :map ^P I# # 注意这里的P是蓝色的(要按Ctrl+V+P才能输入出来), 给当前行首添加#号的快捷键P
- :map ^B 0x # 删除行首第一个字符的快捷键B
- :map ^H <字符串> # 插入<字符串>的快捷键
- 连续行注释:
- :n1,n2s/^/#/g
- :1,4s/^/#/g # 1~4行首添加字符"#"
- :n1,n2s/^#//g
- :1,4s/^#//g # 1~4行中存在"#“的行删除”#"
- :n1,n2s/^/g
- :1,4s/^/g # 1~4行首添加字符"//"
- 替换:
- :ab mymail samlee@lampbrother.net # 文件中输入任何mymail都会变成samlee@lampbrother.net
- 这些快捷键都是临时生效的, 重启就没有了, 除非写到/home下的配置文件中(编辑模式的命令不需要写:), 只要把"map ^P I#"写进去就行了
第六章 Linux软件包管理
1. 软件包管理简介
- 软件包分类:
- 源码包: 脚本安装包(因为需要编译所以是安装是很慢的)
- 二进制包(编译后): RPM包, 系统默认包
- 源码包:
- 开源: 可以修改源
- 可以自由选择所需内容
- 软件是编译安装, 所以更加适合自己的系统, 更加稳定且效率高
- 卸载方便
- 安装步骤多(如LAMP环境搭建,容易出现拼写错误)
- 编辑时间很长
- RPM包:
- 包管理系统简单, 只需要几个命令可以实现包的安装, 升级, 查询和卸载
- 安装速度比源码包安装快得多
- 无法查看源
- 功能选择不如源码包灵活
2. RPM包管理: rpm命令管理
2.1 RPM包的命名与依赖性
- RPM包的命名规则
- httpd-2.2.15-15.el6.centos.l.i686.rpm
- httpd: 软件包名(区别与包全名)
- 2.2.15: 软件版本
- 15: 软件发布的次数
- el6.centos: 适合的linux平台, 缺省则所有linux平台都适合
- i686: 适合的应建平台, 如过是x64就是64位系统, i686微机平台
- rpm: RPM包扩展名
- RPM包的依赖性
- 树形依赖: a->b->c
- 安装顺序: c->b->a
- 卸载顺序: a->b->c
- 环形依赖: a->b->c->a
- abc同时安装就好了
- 模块依赖:
- 依赖性查询: www.romfind.net
- 库依赖: 类似.so.2结尾的文件是库, 它是一个模块的一个文件, 所以需要去找这个库所在的模块进行安装, 需要到www.romfind.net去查询
- 因此出现了yum来解决这个坑爹的模块依赖问题
2.2 RPM包安装升级卸载
- 包全名与包名:
- 包全名: 操作的包是没有安装的软件包, 且注意路径
- 包名: 操作已经安装的包, 无需路径, 是搜索/var/lib/rpm/中的数据库
- RPM包安装:
- 语法: rpm [-ivh] [包全名]
- -i: 安装
- -v: 显示详细信息
- -h: 显示进度
- –nodeps: 不检测依赖性(仅实验可用,实际操作必须检测依赖性)
- rpm -ivh httpd-2.2.15-15.e16.centos.1.i686 # 会有很多依赖的包需要安装的, 要花费很长很长的时间, 其实很多时候安装一个主包就可以了, 以后缺什么再装就行了
- RPM包升级:
- 语法: rpm [-Uvh] [包全名]
- -U: 升级, 可以取代安装
- RPM包卸载:
- rpm -e [包名]
- -e: 卸载
- –nodeps: 不检测依赖性
- 卸载必须按照依赖性顺序来卸载
2.3 RPM包查询
- 查询包是否安装:
- rpm -q [包名] # 查询包是否已经安装
- rpm -qa # 查询所有已经安装的包
- rpm -qa | grep httpd # 在查询结果提取包含"httpd"字符串的信息
- 查询包详细信息:
- rpm -qi [包名]
- rpm -qip [包全名] # 查询未安装的包的信息
- 查询包中文件安装位置:
- rpm -ql [包名]
- rpm -qlp [包全名] # 查询未安装的包的信息: 即在安装前可以看一下所有文件的安装位置
- 查询系统文件属于哪个RPM包
- rpm -qf [系统文件路径]
- 必须是通过RPM包安装得到的文件才能反向查出是哪个RPM包
- 查询包依赖性:
- rpm -qR [包名] # 查询已安装包的依赖性
- rpm -qRp [包全名] # 查询未安装包的依赖性
2.4 RPM包校验和文件提取
- RPM包校验: 判断系统文件是否缺失或被修改
- rpm -V [包名]
- 如果没有任何输出表示此包正常
- 如果有输出, 则验证内容中的8个信息具体如下:
- S: 文件大小是否改变
- M: 文件的类型或文件的权限(rwx)是否改变
- 5: MD5校验是否改变(可以视为文件内容是否改变)
- D: 设备的中从代码是否改变
- L: 文件路径是否改变
- U: 文件的所有者是否改变
- G: 文件的所属组是否改变
- T: 文件的修改时间是否改变
- 文件类型:
- c: 配置文件
- d: 普通文档
- g: 鬼(ghost)文件, 很少见, 就是这个文件不应该被该RPM包包含
- l: 授权文件
- r: 描述文件
- RPM包文件提取: 一般用于修复被修改或缺失的RPM文件
- rpm2cpio [包全名] | cpio -idv .[文件绝对路径]
- 应用实例: 如果误删除/bin/ls
- 百度查询rpm -qf /bin/ls 的执行结果: 即找到ls属于哪个rpm包
- rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls
- cp /root/bin/ls /bin/ # 复制回原处即可
3. RPM包管理: yum在线管理
- yum会自动安装依赖的包, 但是有些linux发行版本里yum是售后服务, 要付费的
- yum必须联网才能使用, 配置好IP地址并可以连接到网络yum源即可
- 使用光盘镜像的yum源则无需联网, 比网络yum源下载要快得多
3.1 IP地址配置与网络yum源
- ifconfig eth0 [IP地址]
- setup
- 进入GUI界面的网络配置
- 使用DHCP: 取消"", ""表示自动获取IP地址
- 静态IP: 192.168.1.156
- 子网掩码: 255.255.255.0
- 默认网关IP: 192.168.1.1
- 主DNS服务器: 202.106.0.20
- 第二DNS服务器: 缺省
- 手动把网卡启动设置为yes:
- vi /etc/sysconfig/network-scripts/ifcfg-eth0
- 把ONBOOT="no"改为ONBOOT=“yes”
- 保存退出后重启网络服务: service network restart
- 网络yum源:
- 查看网络yum源: vi /etc/yum.repos.d/CentOS-Base.repo
- /etc/yum.repos.d/CentOS-Base.repo文件内容说明
- [base]: 容器名称, 一定要放在[]中
- name: 容器说明, 可以自己随便写
- mirrorlist: 镜像站点, 这个可以注释掉
- baseurl: 我们的yum源服务器的地址, 默认是CentOS官方的yum源服务器, 如果慢可以改成国内的镜像地址
- enabled: 此容器是否生效, 如果不写或写成enable=1都是生效, enable=0不生效
- gpgcheck: 指RPM的数字证书是否生效, 1是0否
- gpgkey: RPM数字证书的公钥文件保存位置, 无需修改
3.2 yum命令: 只有包名, 没有包全名
- 常用yum命令:
- yum list # 查询所有可用软件包列表
- yum search [关键字] # 搜索服务器上所有和关键字相关的包
- yum [-y] install [包名] # 安装
- -y: 自动安装, 即所有地方都回答yes不会暂停
- yum -y install gcc
- yum [-y] update [包名] # 升级
- -y: 自动升级
- 不加[包名]即升级整个linux系统中所有的包, 包括linux内核, 会导致服务器崩溃
- yum [-y] remove [包名] # 卸载
- -y: 自动卸载
- 注意这个命令是很危险, 因为会把所有依赖的它的包都卸载了, 然后可能会删除一大堆, 很容易系统崩溃, 因此一般不会卸载
- YUM软件组管理命令:
- yum grouplist # 列出所有可用的软件组列表
- yum groupinstall [软件组名] # 安装指定软件组, 由上面的命令查询得到
- yum groupremove [软件组名] # 卸载指定软件组
- 注意[软件组名]有空格则需要""引起来
3.3 光盘yum源
- 光盘yum源搭建步骤
- 挂载光盘: mount /dev/cdrom /mnt/cdrom
- 让网络yum源文件失效:
- cd /etc/yum.repos.d/ # 进入网络yum源的目录
- mv CentOS-Base.repo CentOS-Base.repo.bak # 重命名使得原文件失效
- mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak # 重命名使得原文件失效
- mv CentOS-Vault.repo CentOS-Vault.repo.bak # 重命名使得原文件失效
- 修改光盘yum源配置文件:
- vim CentOS-Media.repo # 打开配置文件
- [c6-media]
- name=CentOS-$releasever - Media
- baseurl=file:///mnt/cdrom # 地址为你自己的光盘挂载地址
- 注释掉这两个不存在的地址:
- # file:///media/cdrom/
- # file:///media/cdrecorder/
- gpgcheck=1
- enabled=1 # 把0改成1使得生效
- gpgkey="…" # 无需修改
4. 源码包管理
4.1 源码包与RPM包的区别
- 区别:
- 安装之前的区别: 概念上的区别
- 安装之后的区别: 安装位置不同, 后续管理不同
- RPM包安装位置:
- /etc/ 配置文件安装目录
- /usr/bin/ 可执行的命令安装目录
- /usr/lib/ 程序所使用的函数库保存位置
- /usr/share/doc/ 基本的软件使用手册保存位置
- /usr/share/man/ 帮助文档保存位置
- 源码包安装位置: 安装在指定位置当中, 一般是/usr/local/软件名/
- 安装位置不同带来的影响:
- RPM包安装的服务可以使用系统管理服务命令(service)来管理
- 如RPM包安装的apache的启动方法是:
- /etc/rc.d/init.d/httpd start
- service httpd start # 这条命令是红帽系列linux专用, 其他版本linux未必有, 且start可以替换成stop, restart
- 如RPM包安装的apache的启动方法是:
- 源码包安装的服务则不能被服务管理命令(service)来管理, 因为没有安装到默认路径中, 只能用绝对路径进行服务的管理
- /usr/local/apache2/bin/apachectl start
4.2 源码包安装过程
- 安装准备:
- 安装C语言编译器: gcc包
- 下载源码包: http://mirror.bit.edu.cn/apache/httpd
- 事实上即便系统已经安装了httpd的RPM包也不影响再安装一次源码包, 虽然这很蠢
- 安装注意事项:
- 源码包保存位置: /usr/local/src/
- 软件安装位置: /usr/local/
- 如何确定安装过程报错:
- 安装过程停止
- 并出现error, warning, no的提示
- 源码包的安装过程:
- 下载源码包
- 解压缩下载的源码包
- 进入解压缩目录
- 注意INSTALL和README文件, 包含了安装步骤与安装说明
- ./configure 软件配置与检查
- 定义需要的功能选项
- 检测系统环境是否符合安装要求
- 把定义好的功能选项和检测系统环境的信息都写入Makefile文件, 用于后续的编辑
- 总结:
- ./configure --help 查看所有功能选项
- ./configure --prefix=/usr/local/apache2 # 定义安装目录, 其他都可以不定义, 安装目录一定要定义, 运行这条命令即刻安装, 将会生成Makefile文件
- make # 编译: 需要占用很长的时间
- 可以编译后执行"make clean"命令: 清空编译数据
- make install # 编译后运行即可
- 查看INSTALL文件可知: /usr/local/apache2/bin/apachectl start # 启动apache
- 注意apache一般默认占用80端口, 如果已经用RPM包安装了apache启动, 则无法启动源码包的apache, 可以使用service httpd stop来停止RPM包的apache
- 源码包的卸载:
- rm -rf /usr/local/apache2/
- Linux比Windows优越的地方在于安装不会有垃圾文件零散在各处, 所有源码包安装的文件都在安装目录下
5. 脚本安装包与软件包选择
- 脚本安装包
- 脚本安装包不是独立的软件包类型, 常见安装的是源码包
- 人为把安装过程写成了自动安装的脚本, 只要执行脚本, 定义简单的参数, 就可以完成安装
- 类似于Windows下软件的安装方式, 下一步, 确认即可
- 以Webmin的脚本安装过程为例说明
- Webmin的作用
- Webmin是一个基于Web和Linux系统管理界面, 就可以通过GUI设置用户账号, Apache, DNS, 文件共享等服务
- Webmin安装过程
- 下载软件: http://sourceforge.net/projects/webadmin/files/webmin
- 解压缩并进入压缩目录
- 执行安装脚本: 一般是setup.sh