Computing
ENIARC
CPU: 运算器,控制器,寄存器
Memory: RAM
I/O:Input, Output
加法器:
bit, Byte
8bits = 1Byte
1024Bytes = 1KB
1024KB = 1MB
1024MB = 1GB
4 * 1GB
程序:指令+数据
指令:add
多道处理程序 --> time sharing
分时系统
内存:分段 --> 分页
CTSS -->
GE, BELL, MIT ==> Mutlics
Ken, Space Travell
小型机:DEC,
VAX
PDP
PDP-11
PDP-7:汇编语言
Unics --> Unix
Dennis Ritche
B语言:--> C语言
C语言 -->
Bell : AT&T
Ken
BSRG: Bill Joy
BSD: Bekerley System Distribution
MicroSoft: Basic
Xenix
PC: x86, CTSS
DOS: Disk Operation System
Apple: Jobs,
Xexos: PARK, mouse GUI
SystemV, BSD
SysV
IBM: Power, PowerPC, AIX
SUN: Sparc, SunOS --> Solaris, OpenSolaris
HP: Alpha, HP-UX
CPU常见平台:
m68000, m68k
Power
PowerPC
Sparc, UltraSparc
Alpha
x86
x86_64
amd64
MIPS
ARM:知本主义
二进制代码:指令
add: --> 汇编器 --> 二进制格式的指令
芯片:汇编语言
微码编程:
C语言
预处理、编译、汇编、链接
调用:库
基本库:标准库
DOS --> Windows
DEC: VAX: vms, PDP
WindowsNT
IBM, OS/2 --> Vista
BSD-->SysV
BSD Lite
FreeBSD --> MAC OS, ios
NetBSD
OpenBSD
Minix
MIT: Stallman, Freedom
GNU: Gnu is Not Unix.
GPL: General Public License
emacs, vi, bash
Linus: Linux (核心)
版本号:major.minor.release
2.1.4, 3.10.18
GNU/Linux
源代码 --> 机器代码
发行版:
发行商:
slackware
s.u.s.E
Debian
Ubuntu
Redhat
redhat 9 --> Fedora
RHEL: RedHat Enterprise Linux 3
redhat: GPL, GNU
CentOS:
Community ENTerprise OS
LFS: Linux From Scratch
书:
API:Application Programming Interface
ABI:Application Binary Interface
Linux:
API:
syscall
libcall
ABI:
so: Shared Object
dll: Dynamic Link Labraries
POSIX API
Portable OS
x86
32bits linux: p1
64bits linux: p1
自由软件:
FSF:Free Software Fundation
ASF:Apache Software Fundation
自由学习、自由修改源代码
可以出于任何目的获取源代码
自由分发源代码
自由创建衍生版
开源许可协议:开源协定
GPLv2, GPLv3
LGPL: Lesser
BSD:
1、如果二次发布的产品中包含源代码,则在源代码中必须带有原来的代码中的BSD协议;
2、如果二次发布的只是二进制格式的库或程序,则需要在发布的文档或版权声明中说明包含原来的代码中的BSD协议;
3、不可以用开源代码的作者/组织和原来的产品名字做市场推广;
Apache License:
Copyright
Copyleft
发行版: 开源程序 + Linux内核
GPL, LGPL, BSD, APL
Android:
Linux + jvm + java程序
IOS:
FreeBSD + Object-C (swift)
Linux基本法则:
一切皆文件(包括硬件)
由从多单一目的小程序组成
组合小程序完成复杂任务
尽可能避免捕获用户接口,为了方便脚本编程以实现自动化执行;
使用文本文件保存程序的配置数据:使用一个文本编辑器即可完成系统及服务配置工作;
Linux系统层次:
运行程序:通过内核把某应用程序调度至硬件执行其执行;
用户接口:是一种独特的应用程序,能够为用户提供启动其它应用程序的机制;
CLI:
命令提示符,用户输入要执行的命令即可;
shell: 外壳
sh, csh, ksh, bash, zsh, tcsh
GUI:
通过点击操作来启动应用程序;
Gnome, c, gtk
KDE, c++, qt
xfce, 轻量级
终端:
虚拟终端(程序)
Ctrl-Alt-F[1-6]
表示:/dev/tty#
图形终端
Ctrl-Alt-F7
伪终端
使用ssh远程连接
在图形界面下打开的命令提示符
表示:/dev/pts/#
物理终端(控制台console)
表示:/dev/console
串行终端:
表示:/dev/ttyS#
设备文件:
此前未启动X window:
startx &
startx -- :2 &
总结命令:
ifconfig, tty, ls, startx, echo
知识框架:
Linux基础知识
系统管理
shell脚本编程
Linux服务管理
openssl, web, ftp, samba, nfs, dhcp, dns
MySQL数据库系统
Linux集群:
LB:lvs, nginx, haproxy
HA: heartbeat, corosync, rhcs, keepalived
分布式应用:
MogileFS
MongoDB (NoSQL)
HDFS,
MapReduce
缓存系统:varnish
虚拟化:xen, kvm, openstack
监控和自动化:
zabbix, puppet, cobbler, ansible
Python
RedHat:
RHCSA
RHCE
RHCA
回顾:
五大部件:CPU、内存、I/O
Linux:
Debian, ubuntu
slackware, s.u.S.E
RedHat, CentOS, Fedora
CentOS: 社区版的RHEL
Fedora:
ArchLinux
Gentoo
LFS
编译过程:源代码
P2 -- Core 2
GNU/Linux
Linux哲学思想:
1、一切皆文件(硬件设备亦表现为文件)
2、由众多目的单一的小程序组成;一个程序只做一件事,并且要做好;
3、组合小程序完成复杂任务;
4、尽可能避免跟用户交互;
5、使用文本文件保存配置信息;
6、提供机制,而非策略;
自由软件:
自由使用
自由学习和修改
自由分发
自由创建衍生版
shell:
CLI
sh, csh, tcsh, bash, ksh, zsh
GUI
Gnome, KDE, xfce
终端类型:设备文件路径
虚拟终端:/dev/tty#
伪终端:/dev/pts/#
控制台:/dev/console
串行终端:/dev/ttyS#
G, T, P, E, Z, Y
总线:
地址总线:寻址
控制总线:
数据总线:
AMD: HT
INTEL: QPI
cache, buffer
mkdir: 创建目录
中断:interrupt
poll
interrupt
hi
si
DMA: Direct Memory Access
Metadata;元数据
io:controller, device
adapter
协议:
SATA:
IDE:
OS的功能:
进程调度
文件系统
网络协议栈
内存管理
驱动程序
安全功能
生产能力:
应用程序
Linux用户:
管理员:拥有所有权限
普通用户:使用非特权资源
Linux程序:
管理命令
普通命令
命令提示符:prompt
管理员:#
普通用户:$
用户使用环境:
通过改变环境变量的值来实现
变量:有名称的内存空间
变量赋值:
格式:变量名=值
''
""
``
PS1:
\u: 当前用户名
\h: 主机名
\H: FQDN,完整格式的主机名
\W:当前工作目录的基名
\w: 当前工作目录绝对路径
\$: 提示符
Linux的文件系统:
Linux严格区分字符大小写
层次化结构表示文件路径
倒置的树
一个目录:就是一个名称空间
相对路径:从非顶级,缺省路径时从当前路径开始
绝对路径:从顶级名称空间起始标记的路径
rootfs
登录系统:
工作目录:working directory,当前目录,current directory
家目录:
命令的语法格式:
COMMAND OPTIONS ARGUMENTS
命令:
命令
应用程序
脚本文件
命令的类型:
内建命令: 由shell程序自带的命令
查找方式:shell内建
外部命令: 本身是一个独立的可执行程序文件,命令名即为程序文件名
查找方式:通过shell的内置的环境变量PATH中指定的路径进行查找;
如何区分:type COMMAND
选项:调整命令的作用方式
短选项:-char, 例如,-l, -d, -h
多个选项间要使用空白分隔:-l -d -h
合并使用:-ldh
长选项:--word, 例如:--long, --directory, --human-readable
长选项一般不能合并使用
注意:有些选项需要带参数,称为选项参数
mkfs -t ext4
参数:
命令的作用对象
cd: change directory
cd
cd ~
cd ~USERNAME
cd -: 在前一个目录和当前目录之间反复切换
两个独特的路径:
.: 当前目录
..:上一级目录
pwd: print working directory
命令历史:bash的特性之一
history
保存的条数:
环境变量:HISTSIZE
用户退出时的持久保存位置:
环境变量:HISTFILE,通常默认为用户家目录下的.bash_history
此文件中可保存的最大数目:
环境变量:HISTFILESIZE
用法:
history N: 显示最近的N条,包括当前命令自身;
history -c: 清空命令历史
history -d offset: 删除指定的偏移处的命令条目
history -a [/path/to/some_history_file]: 将当前会话中的命令历史写入指定文件
bash调用命令历史列表中的命令:
!#: 执行命令历史中的第#条命令
!!: 执行上一条命令
!string: 执行命令历史中最近一次以string开头的命令;
!$: 调用上一条命令的最后一个参数
ESC, .:功能同上
如何获取命令帮助:
内置命令:help COMMAND
例如:help history
外部命令:
1、COMMAND --help
2、手册:manual
手册:有章节之分,1-9
man [#] COMMAND
如何查看指定命令在哪些章节下有帮助:
whatis COMMAND
注意:whatis根据数据库执行查找操作,此库为系统定期更新;可使用makewhatis手动更新;
手册的段落:
NAME: 命令名称
DESCRIPTION: 命令功能的详细描述
OPTIONS: 所有选项
SYNOPSIS: 使用格式
EXAMPLES: 使用示例
FILES: 与当前命令相关的配置文件
SEE ALSO: 可参考的其它手册
帮助中的格式字串:
[]:可省略
<>: 不可省略
|: 二选一或多选一
...: 同类内容可以出现多个
man的使用机制:
翻屏:
空格键:向文件尾部翻一屏
b: 向文件首部翻一屏
回车键:向文件尾部翻一行
k: 向文件首部翻一行
Ctrl+d: 向文件尾部翻半屏
Ctrl+u: 向文件首部翻并屏
字串搜索:
/keyword: 从文件首部向尾部进行搜索
?keyword: 从文件尾部向首部进行搜索
n: 显示找到的下一个
N:显示找到的上一个
退出:
q
注意:man能够为除命令之外的配置文件、系统调用、库调用等都能提供帮助手册,它们分别位于不同的章节中;
1: 用户命令
2: 系统调用
3: 库调用
4: 设备文件
5: 配置文件
6: 游戏
7:杂项
8:管理命令
3、info命令:获取在线文档
仅在man手册无法获取到足够信息,或想了解程序的开发历史时才使用info
4、很多应用程序都自带有帮助文档:/usr/share/doc/
ChangeLog: 程序版本升级的变动情况
INSTALL: 安装方法说明
README:程序说明信息
5、主流发行版官方文档
redhat, suse, debian
RedHat: http://www.redhat.com/docs/
6、google
练习:获取下面命令的使用方法
shutdown, date, hwclock, ntpdate, reboot, halt, who, whoami, which, hash
如何关机,如何重启,如在指定时间上重启
shutdown -h
-r
-c
时间格式
now
+m
hh:mm
终止当前命令的执行:Ctrl+c
Linux中所有以点号开头的文件名均为隐藏文件:
ls -a
ls -A
Linux的国际化:
internationalization
# export LANG=en
知识回顾:
bash查找命令的方式:
外部命令查找:$PATH
第一次执行真正的查找操作;查找结果会缓存;
查看此缓存使用hash命令
-d: 清除指定名称的缓存内容
-r: 清空缓存
bash的重要特性之一:命令补全
根据内建命令或外部命令的查找方式查找以用户指定的字符串开头的命令
如果用户指定的开头字符串能惟一标识某命令,则tab键可补全此命令
否则,则两次tab键可显示所有以指定字串开头的命令
Linux文件系统的基础特性:
1、文件名严格区分大小写
2、所有文件都们于根目录下,FHS
3、路径以/做为分隔符
4、每个文件的名称可使用除/以外任意字符,单个名称最长不能超出255个字符;
bash重要特性之一:路径补全
以用户指定的起始路径进行文件名补全查找
每个绝对路径都可以切割为两部分
基名
basename /path/to/somewhere
结果为somewhere
目录名
dirname /path/to/somewhere
结果为/path/to
bash的命令历史:
HISTSIZE
HISTFILE
HISTFILESIZE
HISTCONTROL:
ignoredups: 忽略重复的命令,连续的相同命令才会为重复
ignorespace: 忽略以空白字符打头的命令
ignoreboth: 以上二者同行生效;
练习:获取下面命令的使用方法
shutdown, date, hwclock, ntpdate, reboot, halt, who, whoami, which, hash
reboot: 重启
halt: 关机
poweroff: 关机
date: 日期和时间
date [options] [+FORMAT]
%s: 时间戳计时法,从Unix元年(1970-01-01 00:00:00)到此刻所经过的秒数
%F, %D
%T
%Y
%m
%d
%H
%M
%S
date [MMDDhhmm[[CC]YY][.ss]]
Linux有两个时钟:系统时钟和硬件时钟
硬件时钟:
系统时钟:Linux
hwclock
-s: 以硬件为准
-w:以系统为准
ntp: Network Time Protocol
通过网络同步系统时间
C/S: Server, Client
ntpdate SERVER
who: 登录至当前系统的所有用户
whoami: 当前终端上登录的用户
which: 显示指定命令的完整路径
--skip-alias: 路过命令别名
FHS:
/bin, /sbin: 系统自身启动和运行时可能会用户的核心二进制命令
/lib: 共享库文件和内核模块
/lib64:
/etc: 配置文件
/usr:
/usr/bin, /usr/sbin: 系统运行中,用户为完成某些操作可能用到的命令
/usr/lib, /usr/lib64: 库文件
/usr/share/man, /usr/share/doc
/dev: devices的简写,所有设备的设备文件都存放于此处;设备文件通常也称为特殊文件(仅有元数据,而没有数据)
/proc: 伪文件系统,内核和进程信息的虚拟文件系统接口
/sys: 伪文件系统,硬件设备信息虚拟文件系统接口
/boot: 系统引导加载时用到的静态文件,内核和ramdisk(CentOS5:initrd, CentOS6:initramfs), grub(bootloader)
/home/USERNAME
/root
/mnt
/media
/srv: 服务所用到的数据
/tmp: 临时文件存储位置
/var: 经常发生变化的文件
/var/log
/misc: 备用目录
/opt: 第三方应用程序的安装目录
/usr/local:
/selinux
Security Enhanced Linux: 安全加强的Linux
应用程序的组成部分:
二进制程序
库文件
配置文件
帮助文件
文件管理类命令:
文件类型
文件信息查看
用户和权限
bash的一些特性
管道和重定向
文件本编辑器
正则表达式
文件查找
文件类型:
普通文件:-, f
目录文件: d
符号链接文件:l
设备文件:
字符设备:c (线性设备)
块设备:b (随机设备)
命名管道:p
套接字文件:s (unix sock文件)
文件内容的类型:
file /path/to/somefile
目录管理:
cd, pwd, ls
mkdir: make directory
-p: 当指定的目标目录的父目录不存在时,则先创建之
rmdir: remove directory
-p: 删除单传目录路径中各目录
bash的工作特点:没有返回信息通常最好的信息
每个命令执行结束后,会有一个“执行状态返回值”,有效范围0-255
0: 执行成功
1-255: 执行失败
使用特殊变量$?可以获取最近一条命令的状态返回值
# echo $?
bash特性之一:命令行展开
~: 用户家目录
~USERNAME: 指定用户的家目录
{}:
/tmp/{x,y}
/tmp/x, /tmp/y
/tmp/{x,y}/z
/tmp/x/z, /tmp/y/z
创建/tmp/x/z, /tmp/y/z, /tmp/x/m, /tmp/y/m
练习1:创建/tmp/
a_b, c_b, a_d, c_d
练习2:创建/tmp/mylinux/
boot
grub
bin
sbin
etc
rc.d
init.d
sysconfig
networking-scripts
lib
modules
lib64
usr
local
bin
sbin
lib
lib64
bin
sbin
lib
lib64
proc
sys
dev
var
log
run
lock
tmp
# mkdir -pv /tmp/mylinux/{boot/grub,bin,sbin,etc/{rc.d/init.d,sysconfig/networking-scripts},lib/modules,lib64,usr/{bin,sbin,lib,lib64,local/{bin,sbin,lib,lib64}},proc,sys,dev,var/{log,run,lock},tmp}
如何安装tree:
# cd /etc/yum.repos.d/
# wget http://172.16.0.1/centos6.5.repo
# rm CentOS-Base.repo
# yum -y install tree
ls命令:
list简写
ls [option] [file]
常用选项:
-l: long,长格式显示文件的详细属性信息
drwxr-xr-x. 2 root root 4096 Feb 12 09:55 account
左起第一位:文件类型
后面的9位:权限,常称为mode
r: 读,Read
w: 写, Write
x:执行, eXcute
.: 表示文件有隐藏属性
lsattr命令可以查看
数字:此文件被硬链接的次数
属主:owner, 文件的拥有者
属组:group, 文件的所属的组
4096: 文件大小,单位是字节
-h: human-readable,自动做单位换算
文件最近一次被修改的时间
文件名
-a: 显示所有文件
-d: 通常和-l一起使用,用于仅显示目录自身属性
-r: reverse, 逆序显示
-R: recursive, 递归显示,显示子目录中的内容
文件管理类的命令:
查看:cat, tac, head, tail, less, more
时间戳管理:touch
复制:cp
移动:mv
查看元数据属性:stat
文本编辑器:nano, vi
stat: 显示文件的元数据
时间戳:
atime
mtime
ctime
touch:改变文件的atime和mtime
touch [option]... FILE
如果FILE不存在,默认会创建一个空文件
-a: 仅改变atime
-m: 仅改变mtime
-c: 不创建空文件
-t [[CC]YY]MMDDhhmm[.ss]
文件查看类命令:
cat: 连接并显示文本文件内容
数据流:stream
-E:显示行结束符
-n: 显示行号
tac: 逆序显示文件内容
Shift+PageUp/PageDown: 翻屏
分屏显示:
more 和 less
查看首部或尾部的部分内容:
head
tail
-n #: 指定的行数
tail -f
命令总结:shutdown, date, reboot, halt, poweroff, which, who, man, info, help, whatis, makewhatis, whoami, hwclock, ntpdate, touch, stat, file, cat, tac, more, less, head, tail, mkdir, rmdir, cd, pwd, ls, type, hash
回顾:
文件类型:
f, d, l, c, b, p, s
file
文件timestamp:
atime
mtime: 数据的改变
ctime: 元数据的改变
stat
ls -l
文本查看:cat, tac, more, less, head, tail
bash特性之命令别名和命令引用:
alias
alias ALIAS=COMMAND
别名与命令同名时:
绝对路径
\COMMAND
生效范围:命令行定义的别名,其生效范围为当前会话;
unalias [ALIAS]
-a: 撤消所有别名
bash支持的引用:
''
""
``:引用一个命令的执行结果
$()
bash特性之文件名通配(globbing):
: 任意长度的任意字符
pd, pad, pbd, pd
abc
?: 匹配任意单字符
[]: 匹配指定范围内的任意单字符
[abc], [a-z], [0-9], [0-9a-z]
[^]:匹配指定范围以外的任意单字符
[^0-9a-z]
字符集合:
[:space:] : 所有空白字符
[:punct:] : 所有标点符号
[:lower:] :所有小写字母
[:upper:]
[:digit:]
[:alnum:]
[:alpha:]
·