基础系列(一)
Linux操作系统
- 完整的类UNIX操作系统
- Linux内核+GNU工具,如:CentOS,Ubuntu,Android
Linux工作原理
- 应用程序通过shell实现对硬件的操作
Linux哲学思想
- 一切皆文件(包括硬件)
- 程序小型且单一
- 链接程序形成流水线进行工作
- 简洁的用户界面
- 数据存储于文本中
开发接口标准
- ABI:程序与操作系统之间的底层接口
- API:源代码与库之间的接口
空间
- user space:用户空间。必须通过系统接口才能向内核发出指令,不能直接调用系统资源
- kernel space:内核空间。是Linux内核的运行空间,可执行任何命令,调用系统一切资源
SHELL
- shell是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口。接收用户的命令并交由内核执行
- shell是高级程序设计语言,被称为Linux的命令解释器
执行命令
在shell中可执行的命令有两类
- 内部命令:由shell自带,而且通过某命令形式提供
- 外部命令:在文件系统路径下有对应的可执行程序文件
终端terminal
- 查看当前终端设备:#tty
- 设备终端(I/O)集合为物理终端(/dev/console)对应于设备文件
- 虚拟终端(纯文本界面,/dev/tty#) #为1-6。Ctrl+Alt+F[1-6]切换
- 图形终端(/dev/tty7)
- 串行终端(/dev/ttyS#)
- 伪终端(/dev/pts/#)
帮助手册
使用帮助手册之前,使用type命令查看是内部命令还是外部命令
语法:
type [COMMAND]
内部命令:
help COMMAND
- 外部命令:
COMMAND --help
man COMMAND
基础系列(二)
文件系统
- Linux文件系统分层标准(Filesystem Hierarchy Standard)为一个倒置的树状结构,通过根的自引用可以访问到文件系统之下的各个文件
- 标准Linux文件系统(如ext4),文件名称大小写敏感,文件名最长255个字节,包括路径在内文件名称最长4095个字节
- /boot:引导文件存放目录,内核文件、引导加载器都存放于此目录
- /bin:供所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
- /sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
- /lib:启动时程序依赖的基本共享库文件以及内核模块文件
- /lib64:专用于x86_64系统上的辅助共享库文件存放位置
- /etc:配置文件目录
- /home/USERNAME:普通用户家目录
- /root:管理员的家目录
- /media:便携式移动设备挂载点
- /mnt:临时文件系统挂载点
- /dev:设备文件及特殊文件存储位置
- b: block device,随机访问
- c: character device,线性访问
- /opt:第三方应用程序的安装位置
- /srv:系统上运行的服务用到的数据
- /tmp:临时文件存储位置
索引节点
- inode(index node)表中包含文件系统所有文件列表
一个索引节点是在一个表项,包含有关文件的信息( 元数据 ),包括:
- 文件类型,权限,UID,GID
- 链接数(指向这个文件名路径名称个数)
- 该文件的大小和不同的时间戳
- 指向磁盘上文件的数据块指针
- 有关文件的其他数据
硬链接
- 语法:
ln filename [linkname]
ls -i
显示文件的inode- 不同文件路径指向同一个inode
- 创建硬链接会增加inode的引用计数
- 对应于同一文件系统上一个物理文件
- 无法跨分区、驱动器
- 目录不支持硬链接,避免循环引用
删除文件时:
- rm命令递减计数的链接
- 文件存在需至少有一个链接数
- 链接数为零,文件被删除
软链接(符号链接)
- 语法:
ln -s filename [linkname]
- 类似文件的快捷方式
- 是指向另一个文件的路径;其大小为指向的路径字符串的长度;不增减目标的inode引用计数
- 可指向目录、文件
- 可跨分区
缺省(系统默认状态)
- 程序大多都有I/O,且不止一个
- 程序执行关联设备:标准输入,标准输出,错误输出
input 文件描述符:0
- 缺省位置:/dev/stdin —〉keyboard
output 文件描述符:1
- 缺省位置:/dev/stdout —〉terminal monitor
error 文件描述符:2
- 缺省位置:/dev/stdout —〉terminal monitor
创建空文件和刷新时间
- 语法:
touch [OPTION]... FILE...
复制文件和目录
- 语法:
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
cp SRC DEST
移动和重命名文件
- 语法:
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
删除文件
- 语法:
rm [OPTION]... FILE...
目录操作
tree
显示目录树mkdir
创建目录rmdir
删除空目录rm -r
递归删除目录树
重定向
- 输入:<,<<
- 输出:>,>>
- 错误输出:2>,2>>
管道
- 语法:
COMMAND1 | COMMAND2 | COMMAND3 |...
- 用来连接命令,将前一个命令的输出作为后一个命令的输入
- 最后一个命令会在当前shell进程的子shell进程中执行
基础系列(三)
用户和组管理命令
- 用户管理命令
useradd
创建用户
usermod
用户属性修改
userdel
删除用户
- 组帐号维护命令
groupadd
创建组
groupmod
组属性修改
groupdel
删除组
密码
- 用户密码
语法:
passwd [OPTIONS] UserName
- 组密码
语法:
gpasswd [OPTION] GROUP
基础系列(四)
正则表达式
- 正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本
- 基本正则表达式:BRE
扩展正则表达式:ERE
grep
文本过滤(模式:pattern)工具
grep, egrep, fgrep(不支持正则表达式搜索)
grep -E
=egrep
sed
stream editor,文本编辑工具语法:
sed [option]... 'script' inputfile...
awk
Aho, Weinberger, Kernighan,Linux上的实现gawk,文本报告生成器,格式化文本输出
语法:
awk [options] 'program' file…
awk [options] ‘program’ var=value file…
awk [options] -f programfile var=value file…
awk [options] 'BEGIN{ action;… } pattern{ action;… } END{ action;…}' file ...
VIM
- vi: Visual Interface,文本编辑器
- 行编辑器: sed
- 全屏编辑器:nano, vi
- VIM:Vi IMproved,是一个类似于vi的文本编辑器,在vi的基础上改进和增加了很多特性
配置VIM
- 配置文件:永久有效
全局:/etc/vimrc
个人:~/.vimrc
扩展模式:当前vim进程有效
行号
- 启用:
set nu
- 禁用:
set nonu
- 启用:
忽略大小写
- 启用:
set ic
- 禁用:
set noic
- 启用:
自动缩进
- 启用:
set ai
- 禁用:
set noai
- 启用:
智能缩进
- 启用:
set si
- 禁用:
set nosi
- 启用:
高亮搜索
- 启用:
set hlsearch
- 禁用:
set nohlsearch
- 启用:
语法高亮
- 启用:
syntax on
- 禁用:
syntax off
- 启用:
显示tab和换行符^I和$显示
- 启用:
set list
- 禁用:
set nolist
- 启用:
文件格式
- 启用Windows格式:
set ff=dos
- 启用Unix格式:
set ff=unix
- 启用Windows格式:
设置文本宽度
- 启用:
set textwidth=65
- 禁用:
set wrapmargin=15
- 启用:
设置光标所在行的标识线
- 启用:
set cul
- 禁用:
set nocul
- 启用:
复制保留格式
- 启用:
set paste
- 禁用:
set nopaste
- 启用:
基础系列(五)
程序包管理器
- 将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作
- debian:deb文件,dpkg包管理器
- redhat:rpm文件, rpm包管理器
- rpm:
- Redhat Package Manager
- RPM Package Manager
管理RPM包
- 使用包管理器:rpm
- 使用前端工具:yum,dnf
- 语法:
安装:
rpm {-i|--install} [install-options] PACKAGE_FILE…
升级:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE...
查询:
rpm {-q|--query} [select-options] [query-options]
卸载:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
yum
- Yellowdog Update Modifier,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具
- yum客户端配置文件:
/etc/yum.conf
:为所有仓库提供公共配置
/etc/yum.repos.d/*.repo
:为仓库的指向提供配置 - 语法:
显示仓库列表:
yum repolist [all|enabled|disabled]
显示程序包:
yum list
安装程序包:
yum install package1 [package2] [...]
yum reinstall package1 [package2] [...] (重新安装)
升级程序包:
yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...] (降级)
检查可用升级:
yum check-update
卸载程序包:
yum remove | erase package1 [package2] [...]
搜索:
yum search string1 [string2] [...]