最近在看兄弟连2014年录制的Linux教学视频,沈超和李明这两个活宝讲得确实是精彩,顺着教学视频讲解的逻辑顺序做了一些笔记,教学视频链接https://www.bilibili.com/video/BV1mW411i7Qf,学的人挺多,每次看都有几十个人陪着一起在学。
笔者是用markdown做的笔记,不过水平太差,不是很会写markdown,格式很flat,有些地方markdown语法写得可能还有问题。管它呢,笔者能看懂就行了[汗]
兄弟连的视频教程主要是基于运维的需求进行的讲授,本文将更新至该视频教程完整16章的内容,争取一周之内更完,留作备份查询。
第一章 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系统中的文件一般都没有扩展名
- 不靠扩展名区分文件类型, 而是权限
- 一些约定俗成的扩展名:
- 压缩包: .gz .bz2 .tar.bz2 .tgz
- 二进制软件包: .rpm
- 网页文件: .html .php
- 脚本文件: .sh
- 配置文件: .conf
- 因此很多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 [email protected] # 文件中输入任何mymail都会变成[email protected]
- 这些快捷键都是临时生效的, 重启就没有了, 除非写到/home下的配置文件中(编辑模式的命令不需要写:), 只要把"map ^P I#"写进去就行了