Linux学习笔记



  • # 目录


1. 系统概述

1.1. 系统目录结构

Linux_DirStructor.png

  • /bin:Binary的缩写,存放常用命令
  • /dev:Device(设备)的缩写,存放外部设备
  • /home:存放用户主目录,以用户账号命名
  • /lost+found:非法关机后存放一些文件
  • /mnt:软驱与光驱接入挂载的地方
  • /proc:系统内存的映射,存放系统核心与执行程序的一些信息
  • /sbin:s=super user,存放系统管理员使用的系统管理程序
  • /srv:
  • /tmp:存放临时文件
  • /var:摆放系统日志文件
  • /boot:开机设定目录
  • /etc:存放所有的系统管理所需要的配置文件和子目录。如passwd、shadow文件
  • /lib:Linux执行或编译程序函数库目录
  • /media:设备挂载目录
  • /opt:给主机额外按照软件所摆放位置,默认为空
  • /root:超级权限者的用户主目录
  • /selinux:
  • /sys:
  • /usr:存放应用程序和执行文件
  • /usr/bin:系统用户使用的应用程序
  • /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序
  • 【重要文件】
    • /etc/passwd:存放了用户的基本属性
    • /etc/shadow:存放用户加密后的口令
    • /etc/group:存放用户组信息
# cat /etc/passwd
[用户名]:[口令(加密)]:[用户标识号]:[组标识号]:[注释性描述]:[主目录]:[登录Shell]
root:x:0:0:Superuser:/:
daemon:x:1:1:System daemons:/etc:
bin:x:2:2:Owner of system commands:/bin:
sys:x:3:3:Owner of system files:/usr/sys:
adm:x:4:4:System accounting:/usr/adm:
uucp:x:5:5:UUCP administrator:/usr/lib/uucp:
auth:x:7:21:Authentication administrator:/tcb/files/auth:
cron:x:9:16:Cron daemon:/usr/spool/cron:
listen:x:37:4:Network daemon:/usr/net/nls:
lp:x:71:18:Printer administrator:/usr/spool/lp:
sam:x:200:50:Sam san:/usr/sam:/bin/sh
# cat /etc/shadow
[登录名]:[加密口令]:[最后一次修改时间]:[最小时间间隔]:[最大时间间隔]:[警告时间]:[不活动时间]:[失效时间]:[标志]
root:Dnakfw28zf38w:8764:0:168:7:::
daemon:*::0:0::::
bin:*::0:0::::
sys:*::0:0::::
adm:*::0:0::::
uucp:*::0:0::::
nuucp:*::0:0::::
auth:*::0:0::::
cron:*::0:0::::
listen:*::0:0::::
lp:*::0:0::::
sam:EkdiSECLWPdSa:9740:0:0::::
cat /etc/group
[组名]:[口令]:[组标识号]:[组内用户列表]
root::0:root
bin::2:root,bin
sys::3:root,uucp
adm::4:root,adm
daemon::5:root,daemon
lp::7:root,lp
users::20:root,sam

2. 文件属性及操作

2.1. 文件基本属性

[root@izwz93lrf9fjd33ww9xusoz ~]# ls -l -i
total 16
263272 drwxr-xr-x 4 root root 4096 Jun  3 23:58 deploy
262271 drwxr-xr-x 2 root root 4096 May 19 16:39 downloads
395232 drwxr-xr-x 3 root root 4096 May 19 14:52 sdk
266007 drwxr-xr-x 4 root root 4096 May 19 16:39 software

[索引节点号] [文件类型][用户权限][组权限][其他用户权限] [硬链接数] [所属用户] [所属组] [文件大小] [修改时间] [文件名称]

文件的结构:索引节点+数据

索引节点,又称I节点,它是一个结构,包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一一个元素对应。系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号。

  • 文件类型
    • [d]:目录文件
    • [-]:普通文件
    • [l]:链接文件
    • [b]:块设备文件
    • [p]:管道文件
    • [s]:Socket文件
    • [c]:字符设备文件
  • 用户权限
    • [r]:读权限,对应数值4
    • [w]:写权限,对应数值2
    • [x]:执行权限,对应数值1
    • [-]:无该权限,对应数值0

2.2. 文件操作

  • 显示目录和文件 ls [op] 目录名
    • [-a]:列出所有文件,包括隐藏文件(“.”开头)
    • [-d]:显示目录
    • [-i]:显示文件的索引节点
    • [-k]:以k字节的形式表示文件大小
    • [-l]:列出文件的详细信息
    • [-R]:显示子目录下的内容
    • [-t]:以时间排序
    • [-S]:以大小排序
  • 显示文件内容
    • 显示文件内容 cat [op] 文件名
    • [-n]:由1开始对所有输出的行数编号
    • [-b]:对空白行不编号
    • [-s]:将连续两行以上的空白行代换为一行空白行
    • 分页显示指定文件内容,一次加载(适用于小文件) more [op] [-num] [+/pattern] [+linenum] [文件名]
    • [-num]:一次显示行数
    • [+num]:从第num行开始显示
    • [-s]:将连续两行以上的空白行代换为一行空白行
    • 分页显示指定文件内容,按需加载(适用于大文件) less [op] [文件名]
    • [-n]:显示时去掉行号
    • [-s]:压缩空白行
    • 显示文件前N行内容 head [op] 文件名
    • [-c]:显示文件的前多少字节
    • [-n]:显示文件的前多少行
    • [-q]:不显示文件名
    • [-v]:在显示内容前先显示文件名
    • 显示文件后N行内容 tail [op] 文件名
    • [-c]:显示文件的后多少字节
    • [-n]:显示文件的后多少行
    • [-q]:不显示文件名
    • [-v]:显示文件名
    • [-f]:动态显示文件末尾N行内容,Ctrl+C终止显示
    • 提取指定内容 cut [op] [文件名]
    • [-c, –characters=LIST]:指定提取字符串个数
    • [-d, –delimiter=DELIM]:指定分隔符
    • [-f, –fields=LIST]:提取指定列
  • 创建目录 mkdir [op] 目录名
    • [-p]:确保目录名称存在,如果不存在则创建一个
    • [-m]:在创建目录的同时设置目录的权限
  • 删除空目录 rmdir [op] 目录名
    • [-p]:当子目录被删除后使它成为空目录,则一并删除
  • 创建空文件或改变文件的时间记录 touch [op] 文件1 [文件2]
    • [-a]:改变档案的读取时间记录
    • [-m]:改变档案的修改时间记录
    • [-c]:如果目的档案不存在,不会建立新的档案
    • [-f]:/,为了相容性而保留
    • [-r]:使用参考档(文件2)的时间记录
    • [-d]:设定时间与日期
    • [-t]:同-d
    • [–no-create]:同-c
  • 删除文件或目录 rm [op] [文件名或目录名]
    • [-i]:删除前逐一询问
    • [-f]:直接删除
    • [-r]:recursion,递归删除子文件
    • [-v]:显示指令执行过程
  • 显示当前目录 pwd
  • 切换工作目录 cd [目录名]
    • [~]:用户主目录
    • [.]:当前目录
    • [..]:当前目录的父目录
    • [-]:上一次的目录
  • 复制文件 cp [op] [源文件或目录] [目标文件或目录]
    • [-a]:-pdr
    • [-d]:若源文件为链接文件,则复制链接文件属性而非文件本身
    • [-f]:force,强制复制
    • [-i]:若目的文件已存在,询问是否覆盖
    • [-l]:进行硬链接的链接文件建立,而非复制文件本身
    • [-p]:连同文件属性复制
    • [-r]:递归复制子目录,用于目录复制
    • [-s]:复制成为软链接文件,即创建快捷方式
    • [-u]:若目的文件比源文件旧才更新目的文件
  • 移动或更名文件 mv [op] [源文件或目录] [目标文件或目录]
    • [-b]:若覆盖文件,则覆盖前先进行备份
    • [-f]:直接覆盖
    • [-i]:覆盖前询问
  • 修改文件属性 chmod [op] [mode] 文件名或目录
    • [-c]:完成更改后才显示更改动作
    • [-f]:不显示错误信息
    • [-v]:显示详细资料
    • [-R]:对子文件进行相同权限更改
    • [mode]=[ugoa][+-=] [rwxX][,…]
    • [u]:文件拥有者
    • [g]:所属组
    • [o]:其他用户
    • [a]:所有人
    • [+]:增加权限
    • [-]:取消权限
    • [=]:唯一设定权限
    • [r]:可读
    • [w]:可写
    • [x]:可执行
    • [X]:
chmod g+w test.txt
chmod 755 test.txt
  • 修改文件所属用户、组 chown [op] 用户名[:组名] 文件名或目录
    • [-c]:完成更改后才显示更改动作
    • [-f]:不显示错误信息
    • [-h]:只对于链接进行修改,而不修改该链接指向的文件
    • [-v]:显示详细资料
    • [-R]:对子文件进行同等操作
  • 修改文件所属组 chgrp [op] 组名 文件名或目录
    • [-f]:不显示错误信息
    • [-h]:只修改链接
    • [-R]:对子文件进行同等操作
  • 查找文件 find 起始目录 [option] [operate]
    • [option]
    • [-mount, -xdev]:只检查和指定目录在同一个文件系统下的文件
    • [-amin n]:在过去n分钟内被读取过的文件
    • [-anewer file]:比文件file更晚被读取过的文件
    • [-atime n]:在过去n天被读取过的文件
    • [-cmin n]:在过去n分钟内被修改过的文件
    • [-cnewer file]:比档案file更新的文件
    • [-ctime n]:在过去n天被修改过的文件
    • [-empty]:空文件
    • [-gid n, -group name]:gid是n或者group名是name的文件
    • [-ipath p, -path p]:路径名称符合p的文件,ipath忽略大小写
    • [-name name, -iname name]:文件名称符合name的文件,iname忽略大小写
    • [-size n]:文件大小为n单位的文件
    • [-type type]:文件类型为type的文件
    • [-pid n]:文件进程号为n的文件
    • [operate]
    • [-exec]:
    • [-ok]:
    • [-ls]:详细列出找到的所有文件
    • [-print]:在标准输出设备上显示找到的文件名
  • 创建链接 ln [op] 源对象 目的对象
    • [-f]:覆盖
    • [-d]:链接目录
    • [-i]:覆盖前询问
    • [-n]:在进行软链接时,将目的对象视为一般文件
    • [-s]:软链接
    • [-v]:链接前显示文件名
    • [-b]:覆盖或删除前备份
  • 统计字数 wc [op] [文件名]
    • [-c, –bytes]:显示文件大小
    • [-m, –chars]:统计字串数量
    • [-l, –lines]:统计行数
    • [-w, –words]:统计字数
  • 文字排序 sort [op] [文件名]
    • [-u]:显示不重复的内容
    • [-r]:反向排序
    • [-n]:按数字方式排序
    • [-f]:不区分大小写
    • [-t fieldnumberN]:对指定的N字段排序
    • [-k fieldnumberN]:对指定N个字符进行排序
  • 字符转换 tr [op] [字符串1] [字符串2]
    • [-c]:用字符串1中字符集的补集替换此 字符集,要求字符集为ASCII
    • [-d]:删除字符串1中所有输入的字符
    • [-s]:压缩重复出现的字符
  • 打包/解包 tar [op] 文件或目录
    • [-c]:创建一个打包文件
    • [-r]:追加文件到打包文件尾
    • [-t]:列出打包文件内容
    • [-u]:更新打包文件,若打包文件中没有该文件则追加
    • [-x]:解除打包文件内容
    • [-f]:使用打包文件或设备,必选
    • [-v]:详细报告tar指令处理的文件信息
    • [-w]:每一步都要确认
    • [-z]:用gzip来压缩/解压缩,若打包时有该项,解包时也需要有
// 压缩
# tar -zcvf test.tar.gz test.txt
// 解压
# tar -zxvf test.tar.gz
  • 压缩/解压缩
    • gzip [op] 文件名
    • [-c]:将输出写到标准输出上,并保留原有文件
    • [-d]:将压缩文件解压
    • [-r]:递归压缩或解压缩指定目录
    • [-t]:测试,检查压缩文件是否完整
    • [-v]:显示文件名和压缩比
    • 解压缩winzip文件 unzip [op] 文件名
    • [-x]:解压缩文件
    • [-v]:显示信息
    • [-t]:测试是否损坏
    • [-d]:指定压缩目录

3. 用户和用户组管理

Linux系统中的用户分为超级用户、普通用户和特殊用户三种类型

Linux系统中的用户信息保存在/etc/passwd和/etc/shadow两个文件中。其中/etc/passwd文件保存所有用户的账号数据,/etc/shadow文件保存每个账号对应的口令信息。

  • /etc/passwd
# vi /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...
kingsong:x:500:500:kingsong:/home/kingsong:/bin/bash
[用户名]:[加密密码]:[UID]:[GID]:[User Info]:[Home Directory]:[Login Shell]
  • /etc/shadow
# vi /etc/shadow
[用户名]:[加密口令]:[上次更新时间]:[允许更改时间]:[要求更改时间]:[取消口令之前的警告时间]:[取消和停用之间的时间]:[账户口令的天数]:[账户终止时间]:[特殊标志]
  • 添加用户 useradd [op] 用户名
    • [-c comment]:指定注释性描述
    • [-d 目录]:指定用户主目录,加[-m]当目录不存在时创建此目录
    • [-g 用户组]:指定用户组
    • [-G 用户组]:指定用户所属附加组
    • [-s Shell文件]:指定用户登录的Shell
    • [-u 用户名]:指定用户的用户号,加[-o]可以重复使用其他用户的标识号
    • [-mk]:复制其他用户主目录下的文件和配置信息来创建用户
  • 删除用户 userdel [op] 用户名
    • [-r]:连用用户主目录一起删除
  • 修改用户 usermod [op] 用户名
    • [op]同useradd
    • [-I 新用户名]:将原来的用户名改为新的用户名
  • 管理用户口令 passwd [op] 用户名
    • []:修改口令
    • [-I]:锁定口令,即禁用账号
    • [-u]:口令解锁
    • [-d]:使账号无口令
    • [-f]:强制用户下次登录时修改口令
  • 显示登入用户
    • who [op]
    • [-s]:简短格式
    • [-a]:显示所有用户信息
    • [-H]:加上头标志
    • [-u]:显示当前系统的用户状态
    • w [op] [user]
    • [-h]:不显示标题
    • [-u]:列出当前进程和CPU时间时忽略用户名
    • [-s]:短模式,不显示登录时间、JCPU和PCPU时间
    • [user]:只显示指定用户情况
  • 显示用户信息 id [op]
    • [-g]:显示工作组信息
    • [-u]:显示用户信息
  • 切换用户 su [op] [-] [username]
    • [-]:表示在切换用户的同时也改变环境变量
    • [-c command]:表示执行完命令command后就结束切换用户
    • [-m]:环境变量不变
    • [-l]:同时切换用户主目录

每个用户组的相关信息都存放在/etc/group文件中。

  • /etc/group
# vi /etc/group
root:x:0:root
...
kingsong:x:500:
[组名]:[密码字段]:[GID]:[用户列表]
  • 添加用户组 groupadd [op] 用户组
    • [-g GID]:指定新用户组的组标识号
    • [-o]:一般与[-g]同时使用,表示可使用已有GID
    • [-r]:添加系统工作组
    • [-f]:强制添加工作组
  • 删除用户组 groupdel 用户组
  • 修改用户组 groupmod [op] 用户组
    • [-g GID]:指定新GID
    • [-o]:表示可使用已有GID
    • [-n 新用户组名]:修改组名

4. 系统管理

4.1. 设备管理

  • #### 磁盘设备概述

Linux系统中设备是由文件来表示的,每种设备都被抽象为设备文件的形式。设备文件集中在/dev目录下。

hd:Hard Disk 硬盘
sd:SCSI硬盘
/dev/hda:代表第一个硬盘
/dev/hda1:代表第一个硬盘的第一个分区

  • 查看本机硬盘及分区情况 fdisk -l

  • #### 文件系统

文件系统是操作系统最为重要的一部分,它定义了磁盘上存储文件的方法和数据结构

  • 常用文件系统
    • FAT
    • NTFS
    • Ext2(Extended File System)
    • Ext3
    • Ext4
    • iso9660
  • VFS(Vitrual File System)

Linux可以支持多种文件系统,为此,必须使用一种统一的接口——VFS。通过VFS将不同的文件系统的实现细节隐藏起来。

  • 功能
    1. 记录可用文件系统的类型
    2. 将设备同对应的文件系统联系起来
    3. 处理面向文件的通用操作
    4. 涉及针对文件系统的操作时,把它们映射到相关的物理文件系统

  • #### 挂载与卸载

如果要使用USB存储设备、光盘活软盘等存储设备,必须将这些设备中的小目录树像嫁接一样挂载(mount)到Linux系统的大目录树中。

  • 挂载 mount [-t fstype] [-o options] [dev name] [mount point]
    • [-t fstype]:表示文件系统类型,如ext3、vfat、iso9660等
    • [-o options]:表示挂载时的选项,如ro、rw、auto、iocharset等
    • [dev name]:表示设备名,如/dev/sda3、/test.iso等
    • [mount point]:表示挂载点,即挂载目录
  • 卸载 umount 挂载点/设备名

  • #### 磁盘管理命令

硬盘通过fdisk命令分区后,用户还是不能直接对硬盘进行存取数据,而是需要对分区创建文件系统,再讲分区挂载到某一挂载点上。

  • 创建分区 fdisk 设备名
  • 创建文件系统 mkfs [-V] [-t fstyle] [fs -options] filesys [blocks]
    • [-V]:mkfs命令版本
    • [-t fstyle]:表示文件系统类型
    • [fs -options]:表示创建文件系统的选项
    • filesys:表示设备名
    • [blocks]:表示每个分区的大小
  • 查看文件系统整体磁盘使用情况 df [op]
    • [-a]:显示所有文件系统的磁盘使用情况
    • [-h]:以KB或MB为单位
    • [-k]:以1024字节为单位
    • [-i]:显示i节点信息
    • [-t]:显示各指定类型的文件系统的磁盘空间使用情况
    • [-x]:列出不是某一指定类型文件系统的磁盘空间使用情况
    • [-T]:显示文件系统类型
  • 查看磁盘空间使用情况 du [op | param] [目录名...]
    • [-a]:显示子文件
    • [-b]:以字节为单位
    • [-k]:以1024字节为单位
    • [-h]:以KB或MB为单位
    • [-s]:对每个目录参数只给出占用的数据块总数

4.2. 进程管理

  • #### 进程概念

 程序只是一个静态的指令集合,不占系统的运行资源;而进程是一个随时都可能发生变化的、动态的、使用系统运行资源的程序。
 一个程序可以启动多个进程
 一个正在执行的进程称为一个作业,作业可以可以包含一个或多个进程。

  • 类型
    • 交互进程:由Shell启动的进程
    • 批处理进程:和终端没有关系,是一个进程序列
    • 守护进程:在后台持续运行的进程
  • 属性
    • PID:进程ID
    • PPID:父进程ID
    • UID:启动进程的用户ID
    • GID:所归属的组ID
    • 进程状态
    • 运行R
    • 休眠S
    • 僵尸Z
    • 优先级
    • 终端名
    • 资源占用

  • 进程管理
  • 后台启动 ... &

  • 调度启动

    • 执行一次 at [op] TIME
    • [-q queue]:使用指定队列来存储,queue的编号为[a-zA-Z]
    • [-m]:邮件告知执行完成
    • [-f file]:读入命令脚本文件
    • [-l]:列出所有作业
    • [-d]:删除作业
    • [-v]:列出所有已经完成但尚未删除的作业
    • 周期性执行 crontab [-u user] filecrontab || crontab [-u user] { -l | -r | -e }
    • [-u user]:指定用户,若无此项,即表示指定自己
    • [-e]:执行文件编辑器来设定时程表,默认vi
    • [-r]:删除目前的时程表
    • [-l]:列出目前的时程表

当指定了时间并按下回车键之后,at会进入交互模式并要求输入指令或程式,当输入完成后按下Ctrl+D组合键即可完成所有动作,执行结果将会以邮件形式发送到用户账号中

  • crontab文件格式 f1 f2 f3 f4 f5 program
    • f1:分钟
    • f2:小时
    • f3:一个月中的第几天
    • f4:月份
    • f5:一个星期中的第几天
  • 查看进程动态 ps [op]
    • [-e]:显示所有进程
    • [-f]:全格式显示
    • [-h]:不显示标题
    • [-l]:长格式显示
    • [-w]:宽模式显示
    • [-a]:显示所有进程,包括其他用户
    • [-r]:显示正在运行的进程
    • [-x]:显示没有控制终端的进程
  • 树形结构查看进程 pstree [op] [Pid | User]
    • [-a]:显示完整指令和参数
    • [-p]:显示PID
    • [Pid]:指定显示某进程信息
    • [User]:指定显示某用户信息
  • 关闭进程 kill [-s signal | -p] [-a] pid || kill -l [signal]
    • [-s]:指定要送出的信号,有重跑HUP(1)、杀掉KILL(9)、结束TERM(15)
    • [-p]:只显示进程号
    • [-l]:列出所有可用的信号名称

4.3. 系统监视与日志

Linux中大部分的日志位于/var/log目录下

  • 动态显示进程信息 top [op]
    • [-d delay]:改变显示的更新速度
    • [-q]:没有任何延迟的显示速度,如果使用者具有超级管理员的权限,则top将会以最高的优先序执行
    • [-c]:切换显示模式,[只显示执行档的名称 | 显示完整的路径与名称]
    • [-S]:累积模式,会将已完成或消失的子进程(dead child process)的CPU time累积起来
    • [-s]:安全模式
    • [-i]:不显示任何闲置或无用的进程
    • [-n]:更新的次数,完成后退出top
    • [-b]:批次档模式,搭配\”n\”参数一起使用,将top的结果输出到文件中
  • 查看内存使用情况 free [op]
    • [-b]:以字节为单位显示
    • [-k]:以KB为单位显示
    • [-m]:以MB为单位显示

4.4. 系统初始化过程分析

  1. BIOS初始化
  2. Boot loader管理程序的加载
  3. Kernel initialization内核初始化
  4. 第一个初始进程init启动
  5. 确定系统运行的run level
  6. 运行初始化脚本/etc/init.d/rc.sysinit
  7. 确定系统要启动和关闭的服务
  8. 执行自定义脚本/etc/rc.d/rc.local
  9. 激活系统中常规使用的控制台
  10. 启动X Window和桌面环境

init进程扮演了终极父进程的角色,失去父进程的子进程会以init作为它们的父进程


5. 网络管理

5.1. 网络接口配置

  • 显示正在活动的网卡信息 ifconfig
    Linux_ifconfig
  • 开关网卡 ifconfig <设备名> [down | up]
  • 配置IP地址和子网掩码 ifconfig <设备名> <IP地址> netmask <掩码>

注意:ifconfig命令修改都是临时性的,在计算机重启后失效。如果需要永久生效,需要修改/etc/sysconfig/networking-scripts/ifcfg-ethN文件或者使用图形界面配置工具操作。


5.2. 常用指令

  • 测试网络连通 ping [op] <目的主机或IP地址>
    • [-c Count]:指定要被发送(或接收)的回送信号请求的数目
    • [-s PacketSize]:指定要发送数据的字节数。默认56,当和8字节的ICMP头数据合并时被转换成64字节的ICMP数据
  • 显示数据包到主机间的路径 traceroute [op] <目的主机或IP地址>
    • [-g] <网关>:设置来源路由网关,最多可设置8个
    • [-n]:直接使用IP地址而非主机名
    • [-v]:详细显示指令的执行过程
    • [-w] <超时秒数>:设置等待远端主机回报的时间
  • 显示路由表 route
  • 添加或删除路由记录 route [add | del]-net <网络号> netmask <网络掩码> dev <设备名>
  • 添加或删除默认网关 route [add | del] default gw <网关名或网关IP>
  • 显示网络状态 netstat [op]
    • [-a]:显示所有会话数据
    • [-i]:列出系统已经定义的每个网卡
    • [-r]:显示出计算机当前的路由表
    • [-s]:显示出当前网络协议统计信息

5.3. 相关文件

  • #### /etc/hosts

/etc/hosts 是域名或主机名与IP地址的映射文件。

  • #### /etc/sysconfig/network-scripts/ifcfg-ethN

在Linux中,系统网络设备的配置文件保存在/etc/sysconfig/network-scripts目录下,ifcfg-ethN表示第N+1个(从0开始)网卡的配置文件

DEVICE=eth0               //
BOOTPROTO=none
HWADDR=08:00:27:1F:BF:15
ONBOOT=yes
NETMASK=255.255.255.0
IPADDR=192.168.0.17
  • #### /etc/sysconfig/network

该文件是最基本的网络配置信息,系统启动时读取该文件。文件中定义了计算机网络方面的全局配置,对所有网卡生效。

NETWORKING=yes  // 是否支持网络功能
NETWORKING_IPV6=no  // 是否对IPV6支持
HOSTNAME=localhost.localdomain  // 表示主机名
  • #### /etc/resolv.conf

/etc/resolv.conf是域名服务器设置文件

  • #### /etc/host.conf

该文件指定如何解析计算机名

  • #### /etc/services

该文件是网络服务名与端口号的映射文件

  • #### /etc/protocols

该文件描述TCP/IP系统提供的各种网络互联协议以及对应的协议号


5.4. 网络服务管理

  • 检查或设置系统服务 chkconfig [op] <服务名> [status]
    • [–add]:添加指定服务
    • [–del]:删除指定服务
    • [–list]:显示所有或指定服务
    • [–level RunLevel]:改变服务的运行级别
    • []:检查服务状态
    • [status]
    • [on]:启动
    • [off]:停止
    • [reset]:重置
  • 管理系统服务 service <服务名> [op]
    • [start]:启动
    • [stop]:停止
    • [restart]:重启
    • [status]:

5.5. 网络服务模型

Linux系统中网络服务模型有两种,一种是独立的守护进程工作模式,一种是基于xinetd的工作模式。

  • #### 独立的守护进程工作模式

运行独立的守护进程工作方式称作stand-alone。它是UNIX传统的Client/Server模式的访问模式。服务器监听在一个特定的端口上等待客户端产生一个连接请求,守护进程就创建一个子服务器响应这个连接。而主服务器继续监听。以保持多个子服务器池等待下一个客户端请求。

  • #### 基于xinetd的工作模式

RHEL5使用的网络守护进程是xinetd(eXtended InterNET daemon)。和stand-alone模式相对应xinetd模式。xinetd能够同时监听多个指定端口,在接受用户请求时,它能够根据用户请求的端口不同,启动不同的网络服务进程来处理这些用户请求。

xinetd有一下特点

  • 支持对TCP、UCP、RPC服务
  • 基于时间段的访问控制
  • 能进行类似TCP Wrappers 的访问控制
  • 功能完备的log功能,既可以记录连接成功也可以记录连接失败行为
  • 能有效地防止部分DoS(Denial of Services)攻击
  • 能限制同时运行的同一类型的服务器数目
  • 能限制启动的所有服务器数目
  • 能限制log文件大小
  • 将某个服务绑定在特定的系统接口上,从而能实现只允许私有网络访问某项服务
  • 能实现作为其他系统的代理

5.6. 常见网络服务

5.6.1. Telnet

Telnet是一种远程登录应用,起源于ARPANET,是电信网络协议(Telecommunication Network Protocol)的缩写。

配置流程

  1. 默认安装后,RHEL5使用的是krb5-telnet,不是使用普通的Telnet服务,而且未被打开
  2. 编辑/etc/xinetd.d/krb5-telnet
service telnet
{
    flags=REUSE  # 表示当中断或重启xinetd时,TCP/IP Socket可重用
    socket_type=stream  # 表示使用TCP的Socket类型
    wait=no  #  表示该服务提供多线程服务
    user=root  # 设置进程的UID,由root用户操作
    server=/usr/kerberos/sbin/telnetd  # 设置服务程序文件
    log_on_failure += USERID  # 表示当连接失败时,系统除记录/etc/xinetd.conf文件中设置的内容外,还需记录用户ID
    disable = no  # 表示允许xinetd启动本项服务(该项原来是yes)
}
  1. 编辑/etc/securetty,添加以下行
tty1
tty2
...
ttyN
pts/0
pts/1
...
pts/N
# 该文件允许我们规定用户可以从哪个终端设备登录
  1. 重新启动服务:service xinetd restart
  2. 由于krb5-telnet不使用root用户登录,因此可先用普通用户登录,然后通过su切换为root用户。

5.6.2. FTP

FTP(File Transfer Protocol)是文件传输的通信协议,也是一般最常用来传送文件的方式。在Linux下实现FTP服务的软件有很多,最常见的有vsFTPd、wu-FTPd、ProFTP等。

  1. vsFTPd的安装
  2. vsFTPd的配置文件
    • /etc/vsftpd/vsftpd.conf
    • /etc/vsftpd.ftpusers
    • /etc/vsftpd.user_list
  3. vsFTPd的启动和关闭 service vsftpd [start | stop | restart]
  4. 关闭防火墙和SELinux对FTP的禁用状态
    1. 关闭防火墙service iptables stop
    2. setsebool -P ftpd_disable_trans on
    3. setsebool -P ftp_home_dir on
  5. 重启vsFTPd

5.6.3. WWW

WWW服务也称Web服务,流行的WWW服务器软件有APACHE和微软的IIS,IIS是由微软开发的,只能用在微软的操作系统上,而APACHE是一个自由软件。

  1. httpd的安装
  2. httpd的启动与关闭 service httpd [start | stop | restart]
  3. httpd的配置(/etc/httpd/conf/httpd.conf)

    1. ServerRoot "/etc/httpd"
    2. Timeout 120
    3. KeepAlive On
    4. Listen 80
    5. ServerName localhost
    6. DocumentRoot "/var/www/html"

      • 客户端连接

5.6.4. DHCP

DHCP(Dynamic Host Configuration Protool),其前身是BOOTP。它分为两个部分:服务器端和客户端。所有的IP网络设定信息都由DHCP服务器集中管理,并负责处理客户端的DHCP要求。而客户端则会使用从服务器分配下来的IP信息。


6. Shell程序

6.1. 概述

Shell程序也称为Shell脚本程序,Shell程序可以认为是将Shell命令按照控制结构组织到一个文本文件中,批量交给Shell去执行。

特点如下

  • 不同的Shell解释器使用不同的Shell命令语法
  • Shell使用解释型语言,不需要重新编译

运行方法

  1. /bin/bash test.sh
  2. chmod +x test.sh
    ./test.sh

6.2. bash程序设计

  • 变量
  • 自定义变量

变量=值(等号两边不能有空格)

调用变量时,需要使用$

a="Red Hat Enterprise Linux"
bc=5

echo $a
echo RHEL5 is ${a}${bc}

echo "$a"  # 双引号输出Red Hat...
echo '$a'  # 单引号输出字符串"$a"
echo \$a   # 反斜杠输出字符串"$a"
a=`pwd`    # 倒引号执行内部命令
echo $a    # 输出"root"
  • 位置变量和特殊变量
    • $0:脚本名字
    • $n:传进来的第n个参数
    • $*:参数列表
    • $@:参数列表
    • $#:参数个数
    • $$:Shell脚本的进程号
    • $?:紧邻的前驱命令的返回值

shift命令可以将位置变量(参数)左移一位,即1 2 3 –> 2 3

  • 环境变量

    • $HOME:用户主目录
    • $IFS:内部的域分隔符
    • $PATH:寻找命令或可执行文件的搜索路径列表
    • PS1 P S 1 : 主 命 令 提 示 符 , 默 认 为 “
    • $PS2:从命令提示符,默认为“>”
    • $TERM:使用的终端类型
  • 算术运算
  • expr [expression]

  • let [expression]

  • 条件判断

bash程序的条件判断的结果为0表示真,为1表示假

  • 条件判断的格式有两种

    • test condition
    • [condition]
  • 字符串比较

    • str1 = str2:相等则为真
    • str1 != str2:不等则为真
    • -n str:不为空则为真
    • -z str:为空则为真
  • 算术比较

    • exp1 -eq exp2:相等则为真
    • exp1 -ne exp2:不等则为真
    • exp1 -gt exp2:大于则为真
    • exp1 -ge exp2:大于或等于则为真
    • exp1 -lt exp2:小于则为真
    • exp1 -le exp2:小于或等于则为真
    • !exp:exp为假则为真
  • 逻辑运算

    • -a:与
    • -o:或
    • !:非
  • 文件属性比较

    • -d file:是目录则为真
    • -e file:存在则为真
    • -f file:是普通文件则为真
    • -g file:SGID位被设置则为真
    • -r file:可读则为真
    • -s file:长度不为0则为真
    • -u file:SUID位被设置则为真
    • -w file:可写则为真
    • -x file:可执行则为真
  • 控制结构
# if分支语句
if [exp1]
then
    command1
elif [exp2]
then
    command2
elif [expN]
    commandN
else
    command0
fi

# case分支语句
casein
模式1)
    command1
    ;;
模式2)
    command2
    ;;
...
模式n)
    commandN
    ;;
*)
    # default情况
    command
    ;;
esac

# for语句
for var in item1 item2 ... itemN
do
    command
done

# while语句
while condition
do
    command
done

# util语句
until condition
do
    command
done
  • #### 函数
[function] 函数名()
{
    command;
    [return var;]
}

7. GCC

  • C语言的标准
    • ANSI C
    • POSIX
    • SVID
    • GNU C

GCC(GNU Complier Collection,GNU编译器套装),是一套由GNU开发的编程语言编译器。

一个C/C++程序从开始编码到生成二进制可执行文件至少要经过4个步骤
(1)预处理:对源文件的宏进行展开
(2)编译:将源程序编译成汇编文件
(3)汇编:将汇编文件编译成机器码
(4)链接:将目标文件和外部符号进行链接,生成可执行文件

  • 扩展名规范

    • .c:C语言源代码文件
    • .h:头文件
    • .C,.cc,.cpp,.cp,.cxx:C++源代码文件
    • .i:预处理后的C源代码文件
    • .ii:预处理后的C++源代码文件
    • .m:Objective-C源代码文件
    • .o:编译后的目标文件
    • .s:汇编语言源代码文件
    • .S:经过预编译的汇编语言源代码文件
  • GCC的使用

  • gcc [op] [filenames]

    • [-c]:只编译,不连接成为可执行文件,.c–>.o
    • [-o filename]:确定输出文件的名称
    • [-g]:在可执行文件中加入调试信息,方便进行调试
    • [-O [0 | 1 | 2 | 3]]:对生成的代码使用优化。默认2级优化,0为不进行优化
    • [-Ldiranme]:在编译时增加搜索库文件的目录
    • [-Iname]:在连接时,装载名字为libname.a的函数库
    • [-Idir]:在编译时增加一个搜索头文件的目录dir
    • [-E]:指定GCC在生成预处理文件后停止
    • [-S]:指定GCC在生成汇编文件后停止
    • [-w]:禁止所有警告
    • [-Wwarning]:允许产生warning类型的警告,类型取值可以是main、unused、error和all等。
# gcc -E hello.c -o hello.i  // 预处理后停止
# gcc -c hello.c -o hello.o  // 只编译,不连接
# gcc hello.o -o hello  // 生成可执行文件
  • ### makefile
基本格式:  
目标:依赖项列表
(Tab)命令
...

# 示例
hello:hello.o say_hello.o
    gcc hello.o say_hello.o -o hello
say_hello.o:say_hello.c say_hello.h
    gcc -c say_hello.c -o say_hello.o
hello.o:hello.c hello.h
    gcc -c hello.c -o hello.o


# make  // 执行makefile
...
# ./hello  // 运行可执行文件

8. GTK+

  • ### 概述

GTK+是一种图形用户界面(GUI)工具包,它是一个库(或者,实际上是若干个密切相关的库的集合),它支持创建基于GUI的应用程序。

  • 优点

    • 社区活跃
    • 提供广泛的选项
    • 简单易用
    • 设计良好、灵活而可扩展
    • 自由软件
    • 可移植
  • 组成

    • GLib:一个底层库,封装了基本的数据结构操作、底层功能接口以及平台相关的代码。
    • GDK(GIMP Drawing Kit):封装了底层访问窗口系统的函数
    • gdk-pixbuf:一个客户端的图像处理库
    • Pango:一个文本布局和渲染库,着重解决国际化功能
    • Cairo:一个2D图形库,支持多种输出设备,支持硬件加速功能
    • ATK:一组提供访问性的接口
  • 运行环境

  • 检查GTK+当前版本 pkg-config --modversion gtk+-2.0

  • 检查GTK相关库 pkg-config gtk+-2.0 --cflags --libs

  • 语法

  • GTK+的对象层次

  • GObject

    • GtkObject
    • GtkWidget
      • GtkContainer
      • GtkBin
        • GtkWindow
  • 控件
  • 创建控件
    gtk_控件名_new(参数...)gtk_控件名_new_with_参数名(参数...)
    返回值为==GtkWidget==型的指针

  • 窗体控件 GtkWindow

GtkWindow是窗体控件,它是GTK+程序的基础元素。

  1. 创建窗口 GtkWidget * gtk_window_new(GtkWindowType type)
  2. 设置窗口标题 void gtk_window_set_title(GtkWindow *window, const gchar *title)
  3. 设置窗口位置 void gtk_window_set_position(GtkWindow *window, GtkWindowPosition position)
  4. 设置窗口大小 void gtk_window_set_default_size(GtkWindow *window, gint width, gint height)
  5. 调整窗口大小 void gtk_window_set_resize(GtkWindow *window, gint width, gboolean resizable)
  6. 设置窗口是否可调整大小 void gtk_window_set_resizable(GtkWindow *window, gboolean resizable)

    • Position
    • GTK_WIN_POS_NONE(位置由窗口管理器决定)
    • GTK_WIN_POS_CENTER
    • GTK_WIN_POS_MOUSE
    • GTK_WIN_POS_CENTER_ALWAYS
    • GTK_WIN_POS_CENTER_ON_PARENT(对话框有用)

  • 按钮控件 GtkButton
  • GtkButton(普通按钮)

    • GtkToggleButton(转换开关按钮)
    • GtkCheckButton(复选框按钮)

      • GtkRadioButton(单选按钮)

        1. 创建普通按钮 GtkWidget *gtk_button_new(void)
        2. 创建带标签的普通按钮 GtkWidget *gtk_button_new_with_label(const gchar *label)
        3. 创建转换开关按钮 GtkWidget* gtk_toggle_button_new(void)
        4. 读取转换开关按钮的状态 gboolean gtk_toggle_button_get_active(GtkToggleButton *toggle_button)
        5. 设置转换开关按钮的状态 void gtk_toggle_button_set_active(GtkToggleButton *toggle_button)
        6. 从现有单选按钮中获取组信息进而创建单选按钮 GtkWidget* gtk_radio_button_new_from_widget(GtkRadioButton *group)
        7. 设置单选按钮组信息 void gtk_radio_button_set_group(GtkRadioButton *radio_button, GSList *group)
        8. 获取单选按钮组信息 GSList* gtk_radio_button_get_group(GtkRadioButton *radio_button)

  • #### 标签控件 GtkLabel

标签控件GtkLabel是GTK中最常见的控件,它是静态的不可编辑的字段。

  1. 创建标签 GtkWidget* gtk_label_new(const char *str)
  2. 设置标签的文本内容 void gtk_label_set_text(GtkLabel *label, const char *str)
  3. 获取标签的文本内容 const gchar* gtk_label_get_text(GtkLabel *label)

  • #### 文本框控件 GtkEntry

GtkEntry是单行文本输入控件

  1. 创建文本框 GtkWidget* gtk_entry_new(void)
  2. 创建文本框并设置其最大输入长度 GtkWidget* gtk_entry_new_width_max_length(gint max)
  3. 设置文本框的最大输入长度 void gtk_entry_set_max_length(GtkWidget *entry, gint max)
  4. 获取文本框的内容 G_CONST_RETURN gchar* gtk_entry_get_text(GtkEntry *entry)
  5. 设置文本框内容 void gtk_entry_set_text(GtkEntry *entry, const gchar *text)
  6. 在文本框内容末尾插入内容 void gtk_entry_append_text(GtkEntry *entry, const gchar *text)
  7. 在文本框内容开头插入内容 void gtk_entry_prepend_text(GtkEntry *entry, const gchar *text)
  8. 设置文本框内容是否控件 void gtk_entry_set_visibility(GtkEntry *entry, gboolean visiable)

  • #### 对话框控件 GtkDialog

对话框控件GtkDialog是GtkWindow的一个子类

对话框分为模态对话框和非模态对话框,两者主要区别在于前者只要对话框存在,对话框的父窗体就不能响应任何外在的动作。

  1. 创建对话框 GtkWidget * gtk_dialog_new(void)
  2. 创建对话框并指定设置 GtkWidget* gtk_dialog_new_with_buttons(const gchar *title, GtkWindow *parent, GtkDialogFlags flags, const gchar *first_button_text,...)
  3. 运行对话框 gint gtk_dialog_run(GtkDialog *dialog)

    • GtkDialogFlags
    • GTK_DIALOG_MODAL(强迫对话框为模态对话框)
    • GTK_DIALOG_DESTROY_WITH_PARENT(对话框的父窗体消失时,它也跟着结束)
    • GTK_DIALOG_NO_SEPARATOR(主窗口区域和按钮区域之间隐藏分割线)

  • #### 消息对话框 GtkMessageDialog

消息对话框GtkMessageDialog继承于GtkDialog

  • 创建函数
GtkWidget* gtk_message_dialog_new(GtkWidget *parent,
                                  GtkDialogFlags flags,
                                  GtkMessageType type,
                                  GtkButtonsType buttons,
                                  const gchar *message_format,
                                  ...)
  • GtkMessageType
    • GTK_MESSAGE_INFO(信息)
    • GTK_MESSAGE_WARNING(警告)
    • GTK_MESSAGE_QUESTION(询问)
    • GTK_MESSAGE_ERROR(致命错误)
  • GtkButtonsType
    • GTK_BUTTONS_NONE(无按钮)
    • GTK_BUTTONS_OK(确认按钮)
    • GTK_BUTTONS_CLOSE(关闭按钮)
    • GTK_BUTTONS_CANCEL(取消按钮)
    • GTK_BUTTONS_YES_NO()
    • GTK_BUTTONS_OK_CANCEL()

  • #### 事件、信号和回调函数

GTK+用信号(signal)和回调函数(callback)的方式来处理来自外部的事件

  • 回调函数原型
void callback_func(GtkWidget *widget,
                   ... /* other signal arguments */
                   gpointer callback_data){}
  • 信号与回调函数绑定
g_signal_connect(gpointer *object,
                 const gchar *name,
                 Gcallback func,
                 gpointer user_data);

  • #### 页面布局

窗口类控件只能容纳一个子控件,如GtkWindow、GtkDialog…

盒状容器(GtkBox)能容纳一行或一列的子控件,它分成:横向盒状容器(GtkHBox)和纵向盒状容器(GtkVBox)。

  1. 创建横向盒 GtkWidget* gtk_hbox_new(gboolean homogeneous, gint spacing)
  2. 创建纵向盒 GtkWidget* gtk_vbox_new(gboolean homogeneous, gint spacing)
  3. 填充盒状容器 void gtk_box_pack_start(GtkWidget *box, GtkWidget *child, gboolean expand, gboolean fill, guint padding)
  4. 填充顶层容器 gtk_container_add(GtkWidget *window, GtkWidget *box)

  • #### 示例
#include <gtk/gtk.h>
#include <stdio.h>
#include <string.h>

const char * psw="0000";

// 回调函数
void closeApp(GtkWidget *window, gpointer data) {
    gtk_main_quit();
}

void button_clicked(GtkWidget *window, gpointer data) {
    const char *psw_text = gtk_entry_get_text(GTK_ENTRY((GtkWidget *)data));
    if(strcmp(psw,psw_text))
        printf("Access");
    else
        printf("Faliure");
}

int main(int argc, char *argv[]) {
    GtkWidget *window;
    GtkWidget *psw_label;
    GtkWidget *psw_entry;
    GtkWidget *ok_button;
    GtkWidget *hbox;
    GtkWidget *vbox;
    gtk_init(&argc,&argv);
    window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window),"GtkEntryBox");
    gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
    gtk_window_set_default_size(GTK_WINDOW(window),200,200);

    // 连接回调函数
    g_sinal_connect(GTK_OBJECT(window),"destroy",GTK_SIGNAL_FUNC(closeApp),NULL);

    psw_label=gtk_label_new("Password:");
    psw_entry=gtk_entry_new();
    gtk_entry_set_visibility(GTK_ENTRY(psw_entry),FALSE);
    ok_button=gtk_button_new_with_label("OK");

    // 连接回调函数
    g_signal_connect(GTK_OBJECT(ok_button),"clicked",GTK_SIGNAL_FUNC(button_clicked));

    // 界面布局
    hbox=gtk_hbox_new(TRUE,5);
    vbox=gtk_vbox_new(FALSE,10);
    gtk_box_pack_start(GTK_BOX(hbox),psw_label,TRUE,FALSE,5);
    gtk_box_pack_start(GTK_BOX(hbox),psw_entry,TRUE,FALSE,5);
    gtk_box_pack_start(GTK_BOX(vbox),hbox,FLASE,FALSE,5);
    gtk_box_pack_start(GTK_BOX(vbox),ok_button,FALSE,FALSE,5);
    gtk_containner_add(GTK_CONTAINER(window),vbox);
    gtk_widget_show_all(window);

    gtk_main();
    return 0;
}
  • ### 执行
# "`"为倒引号,先执行倒引号里面的内容,获得GTK+的库文件和头文件
gcc filename.c -o filename `pkg-config gtk+-2.0 --cflags --libs`

9. 文本编辑器vi/vim

vi/vim教程

  • ### 命令模式(Command mode)

用户刚进入vi/vim,就处于命令模式

  • 输入

    • i –> 输入模式,从当前位置输入
    • I –> 输入模式,当前行第一个非空格符处开始输入
    • a –> 输入模式,在下一个字符处开始输入
    • A –> 输入模式,当前行最后一个字符处开始输入
    • o –> 输入模式,下一行处开始输入
    • O –> 输入模式,上一行处开始输入
    • r –> 取代模式,取代一次光标所在的字符
    • R –> 取代模式,一直取代光标所在字符
    • x –> 删除当前光标所在处的字符
    • : –> 底线命令模式,在最低行输入命令
    • h –> 向左移动一个字符
    • j –> 向下移动一个字符
    • k –> 向上移动一个字符
    • l –> 向右移动一个字符
    • num+[hjkl] –> 向某个方向移动num个字符
    • [Ctrl] + [f] –> 向下移动一页
    • [Ctrl] + [b] –> 向上移动一页
    • [Ctrl] + [d] –> 向下移动半页
    • [Ctrl] + [u] –> 向上移动半页
    • + –> 光标移动到非空格符的下一行
    • - –> 光标移动到非空格符的上一行
    • n –> 光标向后面移动n个字符
    • 0 –> 移动到行首
    • $ –> 移动到行尾
    • H –> 移动到当前屏幕第一行第一个字符
    • M –> 移动到当前屏幕中央一行的第一个字符
    • L –> 移动到当前屏幕最后一行第一个字符
    • G –> 移动到档案最后一行
    • nG –> 移动到档案第n行
    • gg/1G –> 移动到档案第一行
    • n –> 光标向下移动n行
    • /word –> 向下寻找找字符串
    • ?word –> 向上寻找字符串
    • n –> 继续搜寻动作
    • N –> 反向搜寻
    • :num1,num2s/word1/word2/g –> 在第num1行至num2行之间,将word1替换为word2
    • :1,$s/word1/word2/g –> 在第一行到最后一行,将word1替换为word2
    • :1,$s/word1/word2/gc –> 在第一行到最后一行,将word1替换为word2,需用户确认
    • x –> 向后删除一个字符
    • X –> 向前删除一个字符
    • nx –> 向后删除n个字符
    • dd –> 删除一行
    • ndd –> 向下删除n行
    • d1G –> 删除光标到第一行的数据
    • dG –> 删除光标到最后一行的数据
    • d$ –> 删除光标到行尾的数据
    • d0 –> 删除光标到行首的数据
    • yy –> 复制一行
    • nyy –> 向下复制n行
    • y1G –> 复制光标所在行到第一行的数据
    • yG –> 复制光标所在行到最后一行的数据
    • y0 –> 复制光标所在字符到行首的数据
    • y$ –> 复制光标所在字符到行尾的数据
  • 输入模式(Insert mode)

  • 输入

    • 字符按键以及Shift组合 –> 输入字符
    • ENTER –> 回车换行
    • BACK SPACE –> 删除光标前一个字符
    • DELETE –> 删除光标后一个字符
    • 方向键 –> 移动光标
    • HOME/END –> 移动光标到行首/行尾
    • Page Up/Page Down –> 上下翻页
    • Insert –> 切换光标为输入/替换模式,光标将变成竖线/下划线
    • ESC –> 退出输出模式到命令模式
  • 底线命令模式(Last line mode)

  • 输入

    • q –> 退出程序
    • w –> 保存文件
    • ! –> 强制动作
    • ZZ –> 如果档案有改动,则储存后退出
    • w [filename] –> 另存为
    • r [filename] –> 将文件内容读入到光标后面
    • n1,n2 w [filename] –> 将n1行到n2行的内容写入到文件中
    • !command –> 执行linux指令
    • set nu –> 显示行号
    • set nonu –> 取消行号
  • 文本格式转换

    • unix2dos filename
    • dos2unix filename

10. X Window

10.1. 组成和特点

  • 组成
    • X Server
    • X Client
    • X通信通道
  • X Server

X Server是全部X Window的核心,是运行在系统后台的进程。

  • X Client

X Client是X Window中的用户端程序,它负责提供用户执行程序,然后向X Server发出请求。

  • X通信信道

X通信信道的主体是xlib(X函数库)。

  • 特点
    • 良好的网络支持
    • 个性化的窗口界面
    • 不内嵌于操作系统

10.2. 运行原理

  1. C/S模式应用程序
  2. 关于X Protocol
  3. 实现X Protocol的服务器软件
  4. X Server和WM(Window Manager 窗口管理器)

10.3. 启动和关闭

  • 启动

    • init 5
    • startx
  • 关闭

    • Alt+Ctrl+Backspace

11. 其他指令

  • 显示文字 echo [op] [字符串]
    • [-n]:输出文字后不换行
    • [-e]:输出一空行
  • 显示日历 cal [op] [月] [年]
    • [-m]:以星期一为每周第一天方式显示
    • [-j]:以1月1日起的天数显示
    • [-y]:显示今年年历
  • 显示/设定日期与时间 date [op] [+format] [MMDDhhmm][CC][YY][SS]
    • [-d datestr]:显示datestr中所设定的时间
    • [-s datestr]:设置系统时间
    • [-u]:显示目前的格林威治时间
  • 清除屏幕 clear
  • 软件包管理
    • 安装 rpm [-i | --install] [op] file1.rpm ... fileN.rpm
    • [-h]
    • [–test]
    • [–percent]
    • [–excludedocs]
    • [–includedocs]
    • [–replacepkgs]
    • [–replacefiles]
    • [–force]
    • [–noscripts]
    • [–prefix]
    • [–ignorearch]
    • [–ignoreos]
    • [–nodeps]
    • [–ftpproxy]
    • [–ftpport]
    • [-v]
    • [-vv]
    • [–root]
    • [–rcfile]
    • [–dbpath]
    • 删除 rpm [-e | --erase] [op] pkg1 ... pkgN
    • 升级 rpm [-U | --upgrade] [op] file1.rpm ... fileN.rpm
    • 查询 rpm [-q | --query] [op] pkg1 ... pkgN
    • [-p]
    • [-f]
    • [-a]
    • [–whatrequires]
    • 校验 rpm [-V | --verify | -y] [op] pkg1 ... pkgN
  • 联机帮助
    • man [op] 命令或配置文件
    • [-d]
    • [-h]
    • info <命令名>
    • help [命令名]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值