Linux学习笔记
一、Linux部分定义
linux哲学思想
1 一切皆文件,包括硬件
2 小型,单一用途的程序(功能尽量单一)--------> 目标是一个程序集合多个单一功能的程序完成复杂的功能
3 链接程序,完成复杂的任务,需要用户完成
4 避免令人困惑的用户界面
5 配置数据存储在文件中
开发接口标准
ABI:Application Binary Interface 描述了应用程序和OS之间的底层的接口,允许编译好的代码在使用兼容ABI的系统中运行
API:Application Programming interface 定义了源代码和库之间中接口,因此同样的源代码可以在支持这个api的任何系统中编译
用户交互界面
GUI:Graphic User Interface 图形用户界面
CLI:Command Line Interface 命令行界面
文件结构:倒置树结构,所有文件路径都从根开始
basename 基名
dirname 路径名
路径
绝对路径:文件路径从根开始,指向要到达的文件。 eg:cd /bin/bash
相对路径:从当前位置出发,到要到达的文件路径。 eg:cd bin/tmp 进程init
进程
程序的安全上下文,运行的程序的能访问的资源的权限取决于发起进程的用户的权限。
程序运行时系统就会创建一个进程,并为它分配资源,然后核心开始处理该进程。
子进程先于父进程结束。
僵尸进程:进程结束后,父进程才能结束,否则,父进程结束了,子进程没有结束,但是子进程处于僵尸状态。
操作系统下,程序员的主要工作围绕两棵树展开。
两棵树,文件树-/,进程树-init;对其进行增删改查四个操作。
程序=指令+数据
程序=算法+数据结构
以算法为中心,数据结构服务于算法:过程式编程
以数据为中心,算法服务于数据:对象式编程
设备终端
物理终端 /dev/console
虚拟终端 /dev/tty# [1-6] Ctrl+ Alt +F[1-6]
伪终端 /dev/pts/# (ssh远程连接,图形界面开启的终端)
图形终端 /dev/tty7
串行终端 /dev/ttyS#
查看当前的终端设备:#tty
二、Linux指令学习
bash的内部命令
enable command 启用内部命令
enable command -n command禁用内部命令
enable command -n 查看禁用的内部命令
命令格式 【-w / --word 】 【参数】
type cmd 查看命令类型 内部命令是当前使用的shell的,其他外部命令可通过whereis cmd或者which cmd (外部可执行命令的文件路径获取)查询
eg:which eg:which which which tty
cd:change directory,改变工作会目录,只输入cd会回到当前用户的家目录,与cd~相同。
cd -:切换至上一目录。
tty 显示当前设备类型
whoami 显示当前身份
w显示所有当前用户及操作
who显示当前操作用户
alias/unalias定义别名/取消定义别名,在指令最左端输入禁用别名。
hwclock :硬件时钟
hwclock -s :硬件时钟同步为系统时钟
-w :系统时钟同步为硬件时钟
date:系统时间
+%a : 周几的缩写
+%A : 周几的全写
+%b :几月的缩写 +%h
+%B :几月的全写
+%c :本地日期时间
+%C :2018的20
+%d :某月的几号 %e
+%D :日期 07/25/18
+%F : 日期 2018-07-25
+%g :2018的18
+%H :几点-24小时制 00-23
+%I :几点-12小时制 00-12
+%j :一年的第几天
+%k : 0-23
+%l : 0-12
+%m : 月
+%M :分钟
+%T : 08:42:11
+%u : 一周的第几天 Monday是第一天 1-7
+%w : 一周的第几天 SUNday是第一天 0-6
+%U :一年的第几周
+%y : 2018 的18
+%Y :年
设置时间:date [-u] [MMDDhhmm][[cc]YY][.SS]]
shutdown 关机
-r重启
-h 关机 等于halt
-c取消
+m延后关机
reboot重启
获取帮助
help:帮助指令,使用格式
help [COMMAND] [COMMAND] -h [ COMMAND] --help
man:手册页放在/usr/share/man
man章节:
1、用户命令
2、系统调用
3、C库调用
4、设备文件以及特殊文件
5、配置文件格式
6、游戏
7、杂项 ·
8、管理类命令
9、linux内核API
man帮助段落说明:
NAME:名称及简要说明
SYNOPSIS:用法格式
DESCRIPTION:详细描述
OPTIONS:选项说明
EXAMPLES:实例
查看手册:man 1 cat
列出所有帮助:man -a cat
搜索man手册:man -k cat
通过在线文档获取帮助:第三方应用官方文档
http://www.nginx.org
http://tomcat.apache.org
http://httpd.apache.org
http://www.python.org
通过发行版官方的文档光盘或网站可以获得,安装指南、部署指南、虚拟化指南等,红帽知识库和官方在线文档
http://kbase.redhat.com
http://www.redhat.com/docs
http://access.redhat.com
三、Linux的文件管理
文件系统
文件系统从根目录下开始,用“/”表示
根文件系统(rootfs):root filesystem
文件名称区分大小写
以.开头的文件为隐藏文件
路径分隔的 /
文件有两类数据:
元数据:metadata(保存属性信息)
数据:data
文件系统分层结构:LSB Linux Standard Base
FHS: (Filesystem Hierarchy Standard)
http://www.pathname.com/fhs/
文件名规则
包括路径在内文件名称最长4095个字节
蓝色-->目录 绿色-->可执行文件 红色-->压缩文件 浅蓝色-->链接文件 灰色-->其他文件 紫色-->套接字文件
除了斜杠和NUL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用它们。
标准Linux文件系统(如ext4),文件名称大小写敏感。例如:MAIL, Mail, mail, mAiL
/bin:供所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
/sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
/lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
/lib64:专用于x86_64系统上的辅助共享库文件存放位置
/etc:配置文件目录
/home/USERNAME:普通用户家目录
/root:管理员的家目录
/media:便携式移动设备挂载点(非强制)
/dev:设备文件及特殊文件存储位置
b: block device,随机访问
c: character device,线性访问
/opt:第三方应用程序的安装位置
/srv:系统上运行的服务用到的数据
/tmp:临时文件存储位置,自动清除30天内未访问的文件
bin: 保证系统拥有完整功能而提供的应用程序
sbin:
lib:32位使用
lib64:只存在64位系统
include: C程序的头文件(header files)
share:结构化独立的数据,例如doc, man等
local:第三方应用程序的安装位置(非关键)
cache: 应用程序缓存数据目录
lib: 应用程序状态信息数据
local:专用于为/usr/local下的应用程序存储可变数据;
lock: 锁文件
log: 日志目录及文件
opt: 专用于为/opt下的应用程序存储可变数据;
run: 运行中的进程相关数据,通常用于存储进程pid文件
spool: 应用程序数据池
tmp: 保存系统两次重启之间产生的临时数据
/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统
/selinux: security enhanced Linux,selinux相关的安全策略等信息的存储位置,初学者最好关掉selinux,输出disabled为关闭,输出enforcing为开启输出permissive为许可模式。
Linux的文件类型
d: 目录文件
b: 块设备
c: 字符设备
l: 符号链接文件
p: 管道文件pipe
s: 套接字文件socket
文件权限:
owner: 属主, u
group: 属组, g
other: 其他, o
每个文件针对每类访问者都定义了三种权限
权限 | 文件 | 目录 | |
r: Readable | 可使用文件查看类工具获取其内容 | 可以使用ls查看此目录中文件列表 | |
w: Writable | 可修改其内容 | 可在此目录中创建文件,也可删除此目录中的文件 | |
x: eXcutable | 可以把此文件提请内核启动为一个进程 | 可以使用ls -l查看此目录中文件列表,可以cd进入此目录 |
文件名通配符
? 匹配任何单个字符
~ 当前用户家目录
~mage 用户mage家目录
~+ 当前工作目录
~- 前一个工作目录
[0-9] 匹配数字范围
[a-z]:字母
[A-Z]:字母
[wang] 匹配列表中的任何的一个字符
[^wang] 匹配列表中的所有字符以外的字符
预定义的字符类:man 7 glob
[:digit:]:任意数字,相当于0-9[:lower:]:任意小写字母
[:upper:]: 任意大写字母
[:alpha:]: 任意大小写字母
[:alnum:]:任意数字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:标点符号
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:]:图形字符
[:xdigit:]:十六进制字符
四、LInux的目录管理
目录操作指令
ls -l 显示额外的信息
ls -R 目录递归通过
ls -ld 目录和符号链接信息
ls -1 文件分行显示
ls –S 按从大到小排序
ls –t 按mtime排序
ls –u 配合-t选项,显示并按atime从新到旧排序
ls –U 按目录存放顺序显示
ls –X 按文件后缀排序
cd:change directory,改变工作会目录,只输入cd会回到当前用户的家目录,与cd~相同。
cd -:切换至上一目录。
touch [OPTION]... FILE...
-a 仅改变 atime和ctime
-m 仅改变 mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss]
指定atime和mtime的时间戳
-c 如果文件不存在,则不予创建
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
cp SRC DEST
SRC是一个文件:
如果目标不存在:新建DEST,并将SRC中内容填充至DEST中
如果目标存在:
如果DEST是文件:将SRC中的内容覆盖至DEST中
基于安全,建议为cp命令使用-i选项
如果DEST是目录:在DEST下新建与原文件同名的文件,并将SRC中内容填充至新文件中
SRC多个文件
DEST必须存在,且为目录,其它情形均会出错;
如果DEST不存在:则创建指定目录,复制SRC目录中所有文件至DEST中;
如果DEST存在:
如果DEST是文件:报错
如果DEST是目录:
-r, -R: 递归复制目录及内部的所有内容
-a: 归档,相当于-dR --preserv=all
-d:--no-dereference --preserv=links 不复制原文件,只复制链接名
--preserv[=ATTR_LIST]
mode: 权限
ownership: 属主属组
timestamp:
links
xattr
context
all
-v: --verbose
-f: --force
-u:--update 只复制源比目标更新文件或目标不存在的文件
--backup=numbered 目标存在,覆盖前先备份加数字后缀
mv 移动
-i: 交互式
-f: 强制 rm 删除,(慎用删除,数据珍贵)
-i: 交互式
-f: 强制删除
-r: 递归 --no-preserve-root eg:rm -rf / 删库。。。
tree 树形表示目录
-d: 只显示目录
-L level:指定显示的层级数目
-P pattern: 只显示由指定pattern匹配到的路径 mkdir 创建目录
-p: 存在于不报错,且可自动创建所需的各目录
-v: 显示详细信息
-m MODE: 创建目录时直接指定权限
-P:无父目录先创建父目录
rmdir 删除空目录
-p: 递归删除父空目录
-v: 显示详细信息
-r 递归删除目录树
ln filename [linkname ] 硬链接。 原始路径;连接路径
硬链接:创建硬链接会增加额外的记录项以引用文件
对应于同一文件系统上一个物理文件
每个目录引用相同的inode号
创建时链接数递增
删除文件时: rm命令递减计数的链接
文件要存在,至少有一个链接数
当链接数为零时,该文件被删除
不能跨越驱动器或分区
ln -s 软链接
软链接:一个符号链接指向另一个文件
ls - l的 显示链接的名称和引用的文件
一个符号链接的内容是它引用文件的名称
可以对目录进行
可以跨分区 指向的是另一个文件的路径;
其大小为指向的路径字符串的长度;
不增加或减少目标文件inode的引用计数
file [options] <filename>...查看文件类型
-b 列出文件辨识结果时,不显示文件名称
-f filelist 列出文件filelist中文件名的文件类型
-F 使用指定分隔符号替换输出文件名后默认的”:”分隔符
-L 查看对应软链接对应文件的文件类型
--help 显示命令在线帮助
标准输入和输出
Linux给程序提供三种I/O设备
标准输入(STDIN)-0 默认接受来自键盘的输入
标准输出(STDOUT)-1 默认输出到终端窗口
标准错误(STDERR)-2 默认输出到终端窗口
I/O重定向:改变默认位置
命令 操作符号 文件名
支持的操作符号包括:
> 把STDOUT重定向到文件
2> 把STDERR重定向到文件
&> 把所有输出重定向到文件
> 文件内容会被覆盖
>| file 强制覆盖
>> 原有内容基础上,追加内容
2>> 追加重定向错误输出数据流
标准输出和错误输出各自定向至不同位置
COMMAND > /path/to/file.out 2> /path/to/error.out
合并标准输出和错误输出为同一个数据流进行重定向
&> 覆盖重定向
&>> 追加重定向
COMMAND > /path/to/file.out 2>&1 (顺序很重要)
COMMAND >> /path/to/file.out 2>&1
():合并多个程序的STDOUT
( cal 2007 ; cal 2008 ) > all.txt
tr [OPTION]... SET1 [SET2]
-c –C --complement:取字符集的补集
-d --delete:删除所有属于第一字符集的字符
-s --squeeze-repeats:把连续重复的字符以单独一个字符表示
-t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符
一个节点 (索引节点)是在一个表项,包含有关文件的信息( 元数据 ),包括:
文件类型,权限,UID,GID
链接数(指向这个文件名路径名称个数)
该文件的大小和不同的时间戳
指向磁盘上文件的数据块指针
有关文件的其他数据
命令1 | 命令2 | 命令3 | …
将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN
STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现
最后一个命令会在当前shell进程的子shell进程中执行用来
组合多种工具的功能
ls | tr 'a-z' 'A-Z'
有时被称为就地文本(heretext)