程序运行的模式;
Linux系统将自身划分为两部分,一部分为核心软件,即是kernel,也称作内核空间,另一部分为普通应用程序,这部分称为用户空间。
用户空间中的代码运行在较低的特权级别上,只能看到允许它们使用的部分系统资源,并且不能使用某些特定的系统功能,也不能直接访问内核空间和硬件设备,以及其它一些具体的使用限制。
用户空间:user space,us 内核空间:system space
POS :Portable Operating System 可移植操作系统规范
POSIX
API;编程接口
运行程序格式;
window;EXE,dll (dynamic library)动态链接库
Linux:ELF, so(shared object)共享对象
一般而言程序分两部分组成
程序;指令+数据
指令;只读
能在CPU上运行的指令,CPU上有哪些是既定的,不可能发生改变也不可能去修改它,所以通常是只读的
数据;读写
数据是指令加工的对象,所以通常是读写的,既能读又能修改
程序;算法加数据结构,程序员写程序无非是调用CPU指令其中的某些命令,对它期望加工的数据进行加工,这些数据就存放在内存中。
库调用,系统调用;允许被调用的程序
malloc(), free()
编程语言;汇编语言、微码编程
系统中某些于硬件相关的特有代码、驱动程序开发。
高级语言c c++ 使用面窄
主要写系统级应用、驱动程序
高级应用java、python php
应用程序 使用面广
unix-like
Linux的发行版;
slackware
二次发行版 suse
opensuse
debian:
二次发行版 ubuntu
三次发行版 mint
redhat:红帽
rhel:redhat enterprise linux 企业版 每18个月发型一个新版本,
CentOS;把rhel发行出来的各种版本用完全兼容rhel的格式重新编译一次在互联网上开放免费提供
fedora;每6个月发行一个新版本 个人版
ArchLinux
Gentoo
Android; kernel(内核) +busybox +java虚拟机来实现的
Apache;apache
BSD;bsd
GNU;GPLv2版本 ,GPLv3版本,流毒无穷的概念
GPL流毒无穷的协定
LGPL(lesser)宽松的
例如:
A: 1000, GPL
B: 20000, 20
A程序写了1000行代码,遵循GPL协定的,又有了B程序,因为A程序是
自由获取的,B程序参考了A,B程序自己有20000行代码,其中它借用
A的20行,这只是千分之以,但只要跟A沾上边儿,B就必须把剩余所
有的代码遵循GPL协定
20000行代码 只借用了20行 剩下的19980都开源了
Apache;apache
BSD;bsd
centos和linux的关系
centos是基础linux建立的操作系统
linux属于内核系统,只有终端命令界面,无图形界面
centos同时拥有终端命令界面和图形界面
linux和centos都是属于开源系统
CentOS和RHEL的关系
RHEL发行时有两种方式,二进制和源代码的发行方式。可以网上下载免费获得,如果使用了在线升级包括补丁咨询服务就要付费。
RHEL一直提供源代码的发行方式,CentOS就是将RHEL发行的源代码重新编译一次,形成一个可使用的二进制版本。由于LINUX的源代码是GNU,所以从获得RUEL的源代码到编译成新的二进制,都是合法。知识REDHAT是商标。所以在新的发行版里将REDHAT的商标去掉。
GPL (General Public License)是一份GNU通用公共授权非正式的中文翻译。它并非自由软件基金会所代表亦非使用GNU通用公共授权的软件的法定发布条款,只有GUN通用公共授权英文原文的攀奔始具有此等效力。
LGPL,GUN宽通用公共许可证
GNU,GNU计划,又称革奴计划,是由Richard Stallman在1983年9月27公开发起的。它的目标是创建一套完全自由的操作系统。GNU通用公共许可证。即反版权概念
Apache,是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。
BSD (Berkeley Software Distribution,伯克利软件套件) 是Unix的衍生系统,今天BSD并不特指任何一个BSD衍生版本,而是类UNIX操作系统中的一个分支的总称
程序包管理器
RPM;RPM Package Manager,这一文件格式名次虽然打上了Redhat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux、RHEL,Fedora,S,u,S,e,以及Turbo Linux CentOS 等都有采用,可以算是公认的行业标准了
dpt;
Debian,Ubuntu
自由软件;
自由使用;自由学习和修改,自由分发,自由创建衍生版,
Linux的哲学思想
1、一切皆文件,把几乎所有资源,包括硬件设备都祖师为文件格式,
2、由众多单一母的小程序组成;一个程序只实现一个功能,而且要做好,组合小程序完成复杂人物
3、尽量避免跟用户交互,目标;实现脚本编程,以自动完成某些功能
4、使用纯文本文件保存配置信息;目标;一款使用的文本编辑器既能完成系统配置工作
如何获取CentOS的发行版;
http://mirrors.aliyun.com
http://mirrors.souhu.com
http://mirrors.163.com
终端;用户与主机交互,必然用到的设备;
物理终端;直接接入本机的显示器和键盘设备;/dev/console (控制台)
虚拟终端;附加在物理终端之上的以软件方式虚拟实现的终端,CentOS 6 默认启动6个虚拟终端
Ctrl+Alt+F1-F6切换
图形终端;附加在物理终端之上的以软件方式虚拟现实的终端,但额外会提供桌面环境,图形终端也是虚拟终端的一种
设备文件的路径;/dev/tty# (0-...)
模拟终端;图形界面下打开的命令行接口。基于ssh协议或telnet协议的等远程打开的界面
设备文件的路径;/dev/pts/# (0到无穷大)
查看自己当前的终端设备命令;#tty
交互式接口;启动终端后,在终端设备附加一个交互式应用程序有两类;
GUI;图像应用界面 窗口管理器来进行管理
X protocol,window,manager,desktop X协议
Desktop;
GNOME 桌面系统 (C语言研发 图形开发库gtk)
ked 桌面系统 (C++研发 qt)
XFCE 嵌入式 (轻量级桌面环境)
CLI:文本界面
shell程序:shell本身的意思就是(外壳,整个系统的外壳)
sh (bourn)
csh 接近C语言风格的csh 像而已,差别还是很大的
tcsh csh的升级版
ksh (korn)商业产品 功能强大 想用得买
bash (bourn again shell) 遵循GPL协定的(集csh、ksh两者的有点) 最为流行的开源sh
zsh 功能强大
看自己喜欢、众多版本默认的还是bash,
显示当前使用的shell的命令 #echo $SHELL
显示当前系统使用的所有shell的命令, #cat /etc/shells
命令提示符(prompt)仅指#号而已
{[email protected] ~}:$PS1 环境变量来进行定义
echo $PS1 [\[email protected]\h \W]\$ 遵循这种格式来使用
prompt;其实有两种 Linux用户有两类
如果用管理员登录则显示:#
如果用普通用户则显示:$
命令;
输入命令,(Ebter)回车
告诉或提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来。表现为一个或多个进程;运行中的程序称之为(进程)
在shell中可执行的命令有两类;
内建命令;由shell自带的,而且通过某命令形式提供;
外部命令;在当前系统的某文件系统路径下有对应的可执行程序文件
which,whereis, 外部命令查看文件在哪
使用格式就是which或whereis后面跟上命令的名字就可以了
区别内部或外部命令:
#type (COMMAND)命令 例如;#type cd
注意!严格区分大小写
运行命令: 在命令提示符下键入命令就可以了,而命令键入格式通常如下;
COMMAND [OPTIONS...] [ARGUMENTS...]
命令 选项 参数
最左侧的必须是一个命令,否则报错
右侧跟上可以是选项,选项可以有多个,加中括号的意思是有些命令是不用的,这个选项是可选的,
再往后就是参数。
选项;用于启用或关闭命令的某个或某些功能;
短选项;-c 例如: -l -h
短选项一般一个横线加上单个字符
大多数情况下多个短选项可以命令使用,例如-l,h, 可写作-lh;可合并,不合并使用中间必须使用空白字符隔开
长选项; --word,例如;--long --human-readable
长选项一般不能合并
长选项一般是用两个横线来引导
参数;命令的作用对象, 生效对象 例如,ls /etc 和ls /var
说白了参数是向命令提供数据;注意!数据不是数字。字符串其实也是数据
参数有时候也可以多个,多个参数之间也需要空白字符进行分隔
再次强调,命令本身一定要卸载左侧,而且命令本身是一个可执行的二进制程序,或者是shell自带的内建的命令。
注意;
1、多选项之间,以及多参数之间和命令之间都应该使用空白字符分隔,空白字符可以是一个空白,也可以是两个空白;
2、取消命令执行;Ctrl+c
文件系统;
C:\Program files\office11\word\word.exe 其实这就是个路径
/etc/sysconfig/network-scripts/ifcfg-eth0 文件路径
目录最后的才叫做文件(eth0)
对Linux而言所有起始范围就叫做根,这是绝对顶级范围,因为对Linux而言所有文件上能访问,必须从这个位置开始,这叫做跟文件系统。
目录只是一个路径映射方式而已
文件有两类数据;文件访问过程是有路径的
元数据;metadata
数据;data
Linux的文件系统
1、文件名严格区分字符大小写;例如;file1,File1,FILE1是不同的文件;
2、文件名可使用除/意外的任意字符,不建议使用特殊字符;
(/)字符有两种意义,第一(/)它是根目录,第二(/它是路径分隔符)
3、文件名长度最长不能超过255个字符;
4、所有.开头的文件,均为隐藏文件;
路径有两种;
1、绝对路径;从最顶级的开始、从根目录起始的路径;
2、相对路径;对当前位置起始的路径;
比如C盘ABC文件夹有个1文件,还有一个DEF文件夹,而DEF文件下有个2文件.
那1和2的文件路径分别为:(都是绝对路径)
C:\ABC\1
C:\ABC\DEF\2
如果让1文件来表示2文件的路径
绝对路径: C:\ABC\DEF\2
相对路径: DEF\2 (因为1和2文件前面的C:\ABC这段路径相同就不用写出来了)
C:/website/img/photo.jpg 我们就知道photo.jpg文件是在c盘的website目录下的img子目录中。这样完整的描述文件位置的路径就是绝对路径。我们不需要知道其它任何信息就可以根据绝对路径判断出文件的位置。
相对路径就是自己相对与目标位置。不论将这些文件放到哪里,只要它们的相对关系没有变就不会出错。
..:表示当前目录的上一级目录
当前目录;current directory,也称作working directory;
pwd:printing working directory
能简写就一定不全写
LSB:Linux Standard Base 标准库
这些路径的定义其实都是LSB有规定的
命令终结:
ls:显示目标列表,在Linux中是使用效率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。
cd:切换工作目录至dirname。其中dirName表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的home directory(也就是刚login时的目录)。另外~也表示为home directory的意思,
.则是表示目前所在的目录,
type:显示指定命令的类型,判断给出的指令是内部指令还是外部指令
tty:打印与标准输入连接的终端设备的文件名称
cat:连接文件并打印到标准输出设备上,cat经常用来显示文件的内容,类似于type命令
which:用于查找并显示给定的绝对路径,环境变量PATH中保存了查找命令时需要便利的目录。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。也就是说,使用which命令,就可以看到某个系统命令是否村长,以及执行的到底是哪一个位置的命令
whereis:定位指令的we禁止程序、源代码文件和man手册页等相关文件的路径。
pwd:以绝对路径的方式显示用户当前工作目录。命令将当前目录的全路径名称(从根目录)写入标志输出。全部目录使用/分隔。第一个/表示根目录,最后一个目录是当前目录。执行pwd命令可立刻得知目前所在的工作目录的绝对路径名称。
echo:用于在shell中打印shell变量的值,或者直接输出指定的字符串。linux的echo命令,在shell编程中极为常用,在终端下打印变量value的时候也是常常用到的,因此有必要了解下echo的用法echo命令的功能是在显示器上的显示一段文字,一般起到一个提示的作用。
命令:
1、文件系统相关;
目录管理
文件管理
文件查看
文件编辑
2、系统管理相关;
Linux命令帮助的获取
外部命令;其实所有外部命令都有一个可执行程序,位于文件系统某目录下;用which,whereis来获取
shell程序搜寻可执行程序文件的路径定义在PATH环境变量中;
#echo $PATH 注意!自左至右,至关重要,是有次序的
它第一次一旦找到了,如果一个命令在多个路径下都有执行程序文件,先后次序是很关键的,这就是搜寻路径的概念
格式;COMMAND [OPTIONS...] [ARGUMENTS...]
命令 选项 参数
内部命令获取帮助;shell程序自己直接附带的一些基本管理累工具
#help COMMAND 例如;help cd help help
外部命令获取帮助;有独立的外部可执行程序文件的命令
1、# COMMAND --help #COMMAND -h
2、使用手册(manual) #man COMMAND
3、信息页 #info COMMAND
4、程序自身的帮助文档 README INSTALL Changelog
5、程序官方文档, 官方站点;Documentation
6、发行版的官方文档
7、Google
内建命令帮助;
#help COMMAND
hash命令:
shell搜寻到的外部命令的路径结果会缓存至kv(key-value)存储中;
history命令;管理命令历史
其实linux的命令历史,在登录进系统以后,所执行所有的新命令。都会放置在内存的缓冲当中,但是一旦推出这个登录,这些命令会被记录在历史文件中,命令历史都有编号。
命令历史有两处;
登录shell时,会读取命令历史文件中记录下的命令;cat.bash_history这个历史文件就在用户的家目录下
登录进shell后新执行的命令智慧记录在缓存中;这些命令会用户退出时“追加至命令历史文件中”
history;
-a;追加本次会话新执行的命令历史列表至历史文件中;
-d;删除历史中指定的命令;
-c;清空命令历史;
8
快捷操作; 1
!#;可调用历史中第#条命令; 6
!string;调用历史中最近一个以string开头的命令; 例如;!1 从下至上看 5
!!;上一条命令; 8
外部命令帮助获取;
每个程序员通常在开发主要的工作有两部分, 1、写程序,2、写程序帮助
man COMMAND
手册页;ls /usr/share/man1 cd ../man2
man1...man8 叫第一章节
man1;用户命令 man ls
man2;系统调用
man3;C库调用
man4;设备文件及特殊文件
man5;配置文件格式
man6;游戏相关
man7;杂项
man8;管理类的命令 对磁盘分区格式化的都是管理累命令
注意;有些关键字在不止一个章节中存在帮助手册;
要查看指定章节中的手册;man # COMMAND(命令)
man命令的配置文件;/etc/man.config
MANPATH /PATH/TO/SOMEWHERE:指明新的手册文件搜索位置
#man -M /PATH/TO/SOMEWHERE COMMAND:到指定位置下
搜索COMMAND名的手册页并显示之:
帮助手册中的段落说明
NAME
SYNOPSIS
DESCRIPTION
OPTIONS
EXAMPLES
AUTHOR
REPORTING BUGS
SEE ALSO
man less
SYNOPSIS 中这些符号的意义;
{};可选内容
<> : 必选内容
a|b : 二选以
...:同一内容可出现多次
man命令的操作手法
空格键(space),^,^f,^F,:向文件尾部翻屏 ^(Ctrl)
b,^B:向文件首部翻屏
d,^D:向文件尾部翻半屏
u,^U:向文件首部翻半屏
RETURN:^N e ^E or ^j :向文件尾部翻一行
y or ^Y or ^P or K or ^K :向文件首部翻一行
q :推出
#:跳转至第#行;
1G:回到文件首部
G:翻至文件首部