1.os基础
计算机分层:硬件,os/kernel,库/api,应用。
应用可以和库同层,即运行在内核上,也可以在库之上。
也有hacker可以直接在硬件上编程。
一些随系统启动而启动的叫做(后台)服务,手动启动的程序叫做交互程序。
只有内核位于0环。应用位于3环
kernel功能:
- 进程管理
- 内存管理
- 文件系统
- 硬件驱动
- 安全机制
内存分配:bios,kernel,app
app部分会产生碎片
库之上的应用包含shell,分为两种:GUI,CLI
linux gui有三种:Gnome©,KDE(c++),XFace
CLI:bash,csh,zsh,ksh,tcsh,bsh(默认)
linux是种内核,库叫做glibc
完整系统名叫做GNU/Linux
一般人无法编译内核,所以有很多第三方(发行商release)将系统编译后打包发行。
学习os:
- 运行程序
- 设备管理
- 软件管理
- 进程管理
- 网络管理
linux基本原则:
- 有目的单一的小程序组成
- 一切皆文件
- 尽量避免捕获用户接口(避免交互)
- 配置文件保存为纯文本格式
[命令提示符prompt]#:root
$:普通用户Shebang符号: #!
脚本中第一行开头中写到,它指明了执行这个脚本文件的解释程序
linux可以启动多个界面
虚拟终端(terminal)使用:
ctrl+alt+(F1-F6)
startx & 开启gui
linux的so(shared object)相当于windows dll
linux文件系统为树状结构
根目录/root
文件类型
- -:普通文件
- d:目录文件
- b:块设备文件
- c:字符设备文件
- l:符号链接文件
- p:命令管道文件
- s:套接字文件
access:访问
modify:改变内容
change:改变元数据metadata
命令类型
内置命令:shell builtin
外部命令
cache is king
慢则加缓存
2.关于命令
eg.时间管理
rtc ntp
1970-1-1 00:00:00 UTC
clock 软件时间
hwclock 硬件时间
date +%Y
date +"this year is %Y. %nToday is %d"
date +%T #time; same as %H:%M:%S
date +%F #%Y-%m-%d
date +%Y-%m-%d
帮助方式
有4种:
- 内部命令:help CMD
- 外部命令:CMD --help
- 手册:man CMD
- 在线文档:info CMD
显示摘要:whatis CMD
/usr/share/doc包含大多数命令文档
type CMD
命令可以显示命令属于内部还是外部。
关于man
man分章节(section)
- 章节1:用户命令
- 章节2:系统调用
- 章节3:库调用
- 章节4:特殊文件,设备文件
- 章节5:文件格式,配置文件的语法
- 章节6:游戏
- 章节7:杂项mixcellaneous
- 章节8:管理命令(/sbin,/usr/sbin,/usr/local/sbin)
- 章节9:内核日常工作
常用:
man 2 read
man 4 tty
man 5 passwd
3.根文件系统
可执行程序,在windows为PE(Portable Executable),Linux中为ELF(Executable and Linkable Format).
FHS:Filesystem Hierarchy Standard(文件系统层次化标准),主要目的是让用户了解已安装软件路径。
文件类型
- -:普通文件
- d:目录文件
- b:块设备文件
- c:字符设备文件
- l:符号链接文件
- p:命令管道文件
- s:套接字文件
文件的3个时间戳
access:访问
modify:改变内容
change:改变元数据metadata
目录
目录 | 描述 |
---|---|
/boot | /boot包含系统启动相关的文件,如内核,initrd,grub(bootloader)。重要文件有vmlinuz,initrd.img,System.map。vmlinuz是可引导的、压缩的内核。 |
/dev | 包含设备文件。ls显示蓝色的文件为链接文件 设备文件前景为黄色。 特殊文件没有大小 设备号:主次设备号,major,minor;主设备号标识设备类型,次设备号标识同一种类型中的不同设备。 |
/etc | 包含配置文件 |
/home/USERNAME | 用户家目录,但注意,但root管理员的家目录是/root。 |
/lib | 包含库文件。 静态库:.a;动态库:.so。 /lib/modules包含内核模块文件 |
/media | /dev/cdrom设备文件是不能cd访问的,需要关联到一个目录,即挂载。 |
/mnt | 挂载点目录,挂载额外的临时文件系统 |
/opt | 可选目录 |
/proc和/sys | 伪文件系统,即虚拟文件系统,数据都在内存中,不占用硬盘。/proc启动后含内核映射文件;/sys跟硬件设备相关的属性映射文件。伪文件系统关机为空 |
/tmp | 临时文件目录(还有/var/tmp),权限777。 |
/var | 可变化的文件。/vat/log/wtmp存储登录信息。 系统运行后渐渐占用容量,该目录针对动态文件,如cache,log file,lock file,run file。 |
/bin | 包含可执行文件,用户命令 |
/sbin | 管理命令,以上两库和/lib,/etc有关 |
/usr | universal(全局) shared read-only,或者UNIX Software Resource。其数据可分享,不可变动。系统安装后占用容量最多(对比/var)。 内置/bin,/sbin,/lib和启动后的功能有关文件 /usr/local和第三方软件有关 |
注意,linux是没有注册表的,所有配置都是通过文本来实现。
关于/etc
文件 | 描述 |
---|---|
/etc/rc,/etc/rc.d,/etc/rc*.d | 启动、或改变运行级时运行的scripts或scripts的目录. |
/etc/hosts | 本地域名解析文件 |
/etc/sysconfig/network | IP、掩码、网关、主机名配置 |
/etc/fstab | 开机自动挂载系统,所有分区开机都会自动挂载 |
/etc/inittab | 设定系统启动时Init进程将把系统设置成什么样的runlevel及加载相关的启动文件配置 |
/etc/init.d | 这个目录来存放系统启动脚本 |
/etc/mtab | 当前安装的文件系统列表.由scripts初始化,并由mount 命令自动更新.需要一个当前安装的文件系统的列表时使用,例如df 命令 |
/etc/{passwd,group,shadow} | 用户数据库 |
/etc/sudoers | 可以sudo命令的配置文件 |
/etc/shells | 列出可信任的shell |
/etc/xinetd.d | 如果服务器是通过xinetd模式运行的,它的脚本要放在这个目录下。 |
关于文件种类
- 普通文件[-],纯文本文件,二进制文件,数据格式文件(如wtmp,不能cat)
- 目录[d],连接文件[l]
- 设备文件。
- 块设备[b]:随机访问,按数据块访问;
- 字符设备[c]:线性访问,按字符为单位;鼠标,显示器都是线性的
- 套接字,管道
关于根目录
所有目录由根目录衍生,根目录与开机、还原及系统修复有关。根目录不应放在很大的分区,因为越大,数据就越多,越容易出错。并且,安装软件不要与根同区。
开机时仅有根被挂载,与开机有关的目录不能与根放到不同的分区:
- /etc:配置文件
- /bin:重要执行文件
- /dev:所需的设备文件
- /lib:执行文件所需的库以及内核模块
- /sbin:重要的系统执行文件
目录操作
tree DIR
:查看目录树
mkdir /mnt/test/x/m /mnt/test/x/m
mkdir /mnt/test/{x/m,y}
花括号用来展开a_c,a_d,b_c,b_d
{a,b}_{c,d}
常用:
mkdir [-pv]
rmdir [-p]
文件操作
touch
:本用于修改时间戳,stat
可查看。