GUI: Graphic User Interface
Windows : Windows
Linux : x-Window
Gnome c
KDE c++
Xface 嵌入式常用桌面
GLI: Command Line Interface
sh
bash
csh
ksh
zsh
tcsh
IDE: 集成开发环境
用户操作:
用户名:计算机识别用户靠的是数字 用户ID
认证机制: Authentication 认证过程就是鉴别用户身份的一种机制
资源访问的授权: 授权 Authorization
审计; Audition (审计对于计算机而言大多数是靠日志完成的)
prompt,命令提示符
命令: 既可以是二进制的程序 也可以是脚本文件 (对于内核而言,是严格区分二者的)
一般一个可执行文件,他必须有一个可执行入口 库是没有执行入口的,但它是个可执行文件
这个二进制文件开头出有几个字节是非常独特的标识,称之为程序的魔数
magic number :魔数 可以标记二进制程序的执行格式
在windows下程序执行的魔数和linux下程序执行的魔数是不一样的,他们所理解的二进制格式也是不进相同的
所以就算二者的库完全一样 你在windows上编译的程序也未必能在linux上执行
#!/bin/bsah 我们脚本这一行必须这样写是因为这就是给我们的文件指定一个魔数的 ,它也被称为shebang
当一个程序执行的时候 这个程序的执行入口就被提交给内核了 只有内核才能管理进程
内核公用: 进程管理 内存管理 文件系统管理 驱动程序管理
当我们在命令提示符地下给它一个命令并敲击回车时 相关的执行程序就会被提交给内核
(由bash提交给内核 内核接着就去找这个执行程序的魔数,判断其是不是可执行格式或者该内核可 理解 是执行 否拒绝运行)
到底要不真正执行还取决于外围权限等各种复杂的机制,所以说程序必须有执行入口 这个执行入口标就是用来标识它的魔数
以及这个程序的执行格式等
# command optians.. arguments....
ls:list
列表 列出 它能列出你所指定目录下所有的子目录或者文件 目录并不是文件夹 它只是路径的映射而已
目录:也是一种文件 是一种路径映射文件
路径: 从指定起始点到目的地所经过的位置(计算机中引用这个概念是为了实现层次化管理文件的一种机制,为了方便快速查找操作文件)
层次化管理文件管理的这种一种机制我们称之为文件系统: file system 、
linux的目录结构我们称之位倒状的树状结构
我们登陆系统的时候一定是处在当前某个目录上 (如windows开机后处在桌面上(桌面也是一个目录))
目录: working directory(工作目录) current directory(当前目录)
FHS:文件系统层级结构标准 它里面规定了有些目录必须存在,而且这些目录必须放什么
pwd : Printing Working directory (显示工作目录)
最顶级那个目录用斜线“/”表示 windows用的反斜线 \
然后个路径之间的分隔符也使用斜线
ls:
-l long 长格式 (表示显示的是完整的信息)
首位代表文件类型:
- :普通文件(f)
d :目录文件
b :块设备文件(block)
c :字符设备文件(character)
l :符合链接文件 (symbolic link file) 也叫软链接文件
p :命令管道文件(pipe)
s : 套接字文件(socke )
后面的九个位表示文件的权限 Mode
文件权限: 9位 每3位一组 每一组里面都有rwx(读 写 执行)(如果没有某种权限则用 "-"表示) rw- 表示能读能写不能执行
下一个是文件硬链接的次数
下一个是文件的属主(owner)
下一个是文件的属组(group)
文件大小(size)默认单位是字节
时间戳(timestamp) 每一个文件都三个时间戳 最近一次被访问的时间 最近一次被修改的时间 最近一次被改变的时间
访问: access
修改: modify 改变了文件的内容
改变: change 改变了文件的属性或者叫改变了文件的元数据
一个文件有两种数据 一种是文件的自身数据 一种是文件的属性数据 属性数据也叫元数据(metadata)
最后一个是文件名
-h: 做单位换算的
-a: 显示以.开头的隐藏文件
. 表示当前目录
.. 表示当前目录的上一级目录(父目录)
-A: 显示所有隐藏文件 但是不包含 .和 ..
-d: 显示目录自身属性
-i: 显示文件的索引结点号的 index node ==> inode 文件的索引结点 每个结点都有对应的结点号
-r: 逆序显示文件
-R: 递归(recursive)显示 不仅该目录显示 该目录的字目录也显示 一直显示到空
cd: change direcotry 切换当前工作目录
cd 不加任何参数 回到用户的主目录(家目录) home directory
对于自己的家目录 用户有所有的操作权限 所以用户创建删除文件等各种工作一般在家目录下完成
每个用户的家在basd中都用波浪线"~"表示
cd ~USERNAME 进入指定用户的家目录 只有管理员可以
cd - 在前一个目录与当前目录之间来回切换
ls / 显示当前所有目录
linux命令类型:
内置命令(shell内置 用来管理本身的一些必要命令) 如cd is a shell builtion (cd是一个内置命令)
外部命令: 在文件系统某个路径下有一个与命令名称相应的可执行文件
环境变量:可理解为就是定义当前用户的工作环境的(比如我们可以定义我们用的主题 壁纸 logo等 每个属性的定义都使用一个环境变量来存放)
所以无论哪种shell 都必须有环境变量
变量是命名的内存空间 向这个起名的内存空间放入数据叫变量赋值
声明变量的过程就是让程序告诉操作系统 我们要使用一块内存
栈:通常放本地声明的一些变量和静态变量等
堆:其他需要保存的数据(比如打开一个文件) 通常存放在堆中
type 显示指定命令属于那种类型
hash 缓存 在缓存中记录下来之前所用过命令的路径 并且在下一次寻找的时候 先看缓存有没有 找不到搜索
缓存保存的是一个hash(哈希)列表 哈希列表保存的是一个键值对 它是一个键值数据库 在键值数据库中 它是(0)1的
(0)1 指的是无论这个队列有多长 我从中找到任何一个数据所用的时间是一样的 所以说 缓存是实现系统加速的
所以一个文件要么给出一个完整路径 要么加载到PATH表当中 才能执行
PATH环境变量: 使用冒号分割的一堆路径
printenv 显示当前环境变量
linux: rtc:硬件时间 实时时钟
ntp:网络时间协议
与windows不同的是,我们的linux在开机的时候,它会通过rtc读取当前时间,但是一旦读取成功后就不在使用这个时间
以后我们操作系统自身或者说是我们内核自身会通过软件的方式模拟晶振在系统内部维持一个时钟
所以linux开机有两个时钟
硬件时钟
系统时钟
由于cpu非常繁忙,所以系统时钟有可能出现误差 AM上午 PM下午
date: 时间管理(看到的是系统时间)
clock/hwclock: 硬件时间
获得命令的使用帮助:
内部命令:
help COMMAND
外部命令:
COMMAND --help (大多数)
命令手册:manual (公共命令使用方式)
man COMMAND 使用手册在linux上是一个文本文档,但这个文档是压缩存放的
对于内部命令而言 你man的不是这个内部命令 man的是这个内部命令所属的shell
whatis COMMAND 它可以显示这个命令的摘要信息以及出现在哪些个章节中
man是分章节的: 常见章节有8个 (分章节说明)
第1章节1:用户命令(/bin, /user/bin, /user/local/bin)
2:系统调用
3:库调用 只有库才有库调用 命令不是库 库也不是命令 会同时出现只可能是重名
4:特殊文件(设备文件) 设备文件是一类比较独特的文件 它在你系统上,在你磁盘上真正的数据区域里没有存储任何内容
它只是作为设备的访问入口存在的,并不是一个真正的文件,因此本章节都是在解释这些设备文件是什么
5:文件格式(就是配置文件的语法(怎么使用))
很多命令为了定义它的执行属性 我们可以使用选项
对于非常复杂的执行文件,它通常都有一个叫做配置文件的文件,在这个配置文件中保存了以往可以通过选项指定的程序执行属性
所以这个配置文件中有很多类似于变量一样的东西,来定义这个程序的执行属性
6:游戏
7:不便归类的杂项命令(miscellaneous)
8:管理命令(/sbin, /user/sbin, /user/local/sbin)
在man中 命令的使用格式里 []可选 |多选一
<>必选 ...可以出现多次
{}分组
在线文档
info COMMAND (详细到发展 历史神马的)
type COMMMAND 显示命令类型(内部还是外部)
文档: /usr/share/doc
man手册各章节说明
NAME:命令名称以及功能简要说明
SYNOPSIS:用法说明 包括可用的选项
DESCRIPTION:命令功能的详尽说明,可能包括每一个选项的意义
OPTIONS: 说明每一个选项的意义
FILES: 此命令相关配置文件
EXAMPLES:使用示例
SEE ALSO:另外参照
翻屏:
向后翻一屏: 空格键(space)
向前翻一屏: b键
向后翻一行: enter键
向前翻一行: k键
查找:
/KEYWORD 向后 (从当前位置)
n:下一个
N: 上一个
?KEYWORD 向前
n:上一个
N:下一个
q:退出
hwclock
-w:将系统时间写到硬件当中去
-s:将硬件时间写到系统当中来
cal:calendar日历