一、Linux基础
计算机体系结构:
存储器(内存 + 编址) + CPU(控制器 + 运算器 + 寄存器) + 输入设备 + 输出设备。
操作系统(内核)功能:
进程管理、内存管理、文件系统、网络功能、硬件功能、安全机制。
Linux的基本原则:
1、由目的单一的小程序组成,组合小程序完成复杂任务;
2、一切皆文件;
3、尽量避免捕获用户接口;
4、配置文件保存为纯文本格式。
Linux基本命令:
命令类型:
内置命令(shell内置),内部,内建
外部命令:在文件系统的某个路径下有一个与命令名称相应的可执行文件
命令格式:命令 + 选项 + 参数
选项:
1、 短选项: -
多个选项可以组合:-a -b = -ab
2、长选项: --
参数:命令的作用对象
文件类型:
-:普通文件 (f)
d: 目录文件
b: 块设备文件 (block)
c: 字符设备文件 (character)
l: 符号链接文件(symbolic link file)
p: 命令管道文件(pipe)
s: 套接字文件(socket)
文件权限:9位,每3位一组,每一组:rwx(读,写,执行), r--
文件硬链接的次数
文件的属主(owner)
文件的属组(group)
文件大小(size),单位是字节
时间戳(timestamp):最近一次被修改的时间
访问:access
修改:modify,文件内容发生了改变
改变:change,metadata,元数据
1、su: switch user # su [-l] 用户名
2、ls:list #列出,列表
-l:长格式
-h:做单位转换
-a: 显示以.开头的隐藏文件
. 表示当前目录
.. 表示父目录
-A
-d: 显示目录自身属性
-i: index node, inode
-r: 逆序显示
-R: 递归(recursive)显示
3、pwd: Printing Working directory #打印当前工作目录
4、cd: change directory
cd ~USERNAME: 进入指定用户的家目录
cd -:在当前目录和前一次所在的目录之间来回切换
5、type: 显示指定命令属于哪种类型(内部命令还是外部命令)
6、date:时间管理 (硬件时钟、系统时钟)
clock、cal:calendar、date、hwclock
hwclock -w/-s 硬件时间和系统时间同步
7、获取命令的使用帮助
内部命令:help COMMAND
外部命令:COMMAND --help
8、命令手册:manual (man COMMAND/ whatis COMMAND)
man:
分章节:
1:用户命令(/bin, /usr/bin, /usr/local/bin)
2:系统调用
3:库用户
4:特殊文件(设备文件)
5:文件格式(配置文件的语法)
6:游戏
7:杂项(Miscellaneous)
8: 管理命令(/sbin, /usr/sbin, /usr/local/sbin)
<>:必选
[]:可选
...:可以出现多次
|:多选一
{}:分组
NAME:命令名称及功能简要说明
SYNOPSIS:用法说明,包括可用的选项
DESCRIPTION:命令功能的详尽说明,可能包括每一个选项的意义
OPTIONS:说明每一个选项的意义
FILES:此命令相关的配置文件
BUGS:
EXAMPLES:使用示例
SEE ALSO:另外参照
翻屏:
向后翻一屏:SPACE
向前翻一屏:b
向后翻一行:ENTER
向前翻一行:k
查找:
/KEYWORD: 向后
n: 下一个
N:前一个
?KEYWORD:向前
n: 下一个
N:前一个
q: 退出
9、file命令及其用法
file 文件名/文件夹 查看文件类型
文件系统:
以下是Linux自带目录的文件夹列表及对应的作用功能:
/boot: 系统启动相关的文件,如内核、initrd,以及grub(bootloader)
/dev: 设备文件
设备文件:
块设备:随机访问,数据块
字符设备:线性访问,按字符为单位
设备号:主设备号(major)和次设备号(minor)
/etc:配置文件
/home:用户的家目录,每一个用户的家目录通常默认为/home/USERNAME
/root:管理员的家目录;
/lib:库文件
静态库, .a
动态库, .dll, .so (shared object)
/lib/modules:内核模块文件
/media:挂载点目录,移动设备
/mnt:挂载点目录,额外的临时文件系统
/opt:可选目录,第三方程序的安装目录
/proc:伪文件系统,内核映射文件
/sys:伪文件系统,跟硬件设备相关的属性映射文件
/tmp:临时文件, /var/tmp
/var:可变化的文件
/bin: 可执行文件, 用户命令
/sbin:管理命令
/usr:shared, read-only 系统运行程序执行的文件
/usr/bin
/usr/sbin
/usr/lib
/usr/local: 用户安装软件执行的文件
/usr/local/bin
/usr/local/sbin
/usr/local/lib
文件管理(touch、stat、file、rm、cp、mv、nano)
touch:修改文件的时间信息
touch file(不存在的文件):创建一个文件
使用文件编译器创建:nano 、 vim 等
stat:查看文件/文件夹 的相关信息
stat filename/direcory
cp:copy(复制文件)
一个文件到一个文件
多个文件到一个目录
mv:move(移动文件)
文本相关的命令:
查看:cat, tac, more, less, head, tail
统计:wc
处理:tr, cut, join
排序:sort
uniq
查看文本:(cat、tac、more、less、head、tail)
区别:大文档cat查看不全,more只能向后查看不能向前查看,less没限制,head -n 查看前n行,tail -n 查看后n行,tail -f 查看文件尾部,不退出,等待显示后续追加至此文件的新内容。
文本处理:(cut、join、sed、awk)
目录管理(ls、cd、pwd、mkdir、rmdir、tree)
mkdir:创建空目录
mkdir -pv (可创建深层目录)
mkdir -pv /mnt/test/{x/m,y} (可创建深层分支目录,{}是关键)
tree:查看目录树
tree 目录:查看目录的树结构
rmdir:删除目录(只能删除空目录)
bash详解:
bash主要用到下面8部分的内容:
1、命令历史、命令补全
2、管道、重定向
3、命令别名
4、命令行编辑
5、命令行展开
6、文件名通配
7、变量
8、编程
命令行编辑:
光标跳转:
Ctrl+a:跳到命令行首
Ctrl+e:跳到命令行尾
Ctrl+u: 删除光标至命令行首的内容
Ctrl+k: 删除光标至命令行尾的内容
Ctrl+l: 清屏
命令历史:
查看命令历史:history
-c:清空命令历史
-d OFFSET [n]: 删除指定位置的命令
-w:保存命令历史至历史文件中
命令历史的使用技巧:
!n:执行命令历史中的第n条命令;
!-n:执行命令历史中的倒数第n条命令;
!!: 执行上一条命令;
!string:执行命令历史中最近一个以指定字符串开头的命令
!$:引用前一个命令的最后一个参数;
Esc, .
命令别名:
alias CMDALIAS='COMMAND [options] [arguments]'
在shell中定义的别名仅在当前shell生命周期中有效;别名的有效范围仅为当前shell进程;
命令替换: $(COMMAND), 反引号:`COMMAND`
把命令中某个子命令替换为其执行结果的过程
file-2013-02-28-14-53-31.txt
bash支持的引号:
``: 命令替换
"": 弱引用,可以实现变量替换
' ': 强引用,不完成变量替换
文件名通配, globbing
*: 任意长度的任意字符
?:任意单个字符
[]:匹配指定范围内的任意单个字符
[abc], [a-m], [a-z], [A-Z], [0-9], [a-zA-Z], [0-9a-zA-Z]
[:space:]:空白字符
[:punct:]:标点符号
[:lower:]:小写字母
[:upper:]: 大写字母
[:alpha:]: 大小写字母
[:digit:]: 数字
[:alnum:]: 数字和大小写字母
用户、组、权限
用户和组相关信息存放的文件:
用户:UID, /etc/passwd
组:GID, /etc/group
影子口令(密码):
用户:/etc/shadow
组:/etc/gshadow
用户及组的相关命令
useradd [options] USERNAME
-u UID
-g GID(基本组)
-G GID,... (附加组)
-c "COMMENT" (备注信息)
-d /path/to/directory (家目录,默认创建与用户名同名的组)
-s SHELL (指定base脚本,默认是/etc/bash)
-m -k
-M
-r: 添加系统用户
/etc/login.defs
/etc/shells:指定了当前系统可用的安全shell
userdel:
userdel [option] USERNAME
-r: 同时删除用户的家目录
id:查看用户的帐号属性信息
-u
-g
-G
-n
finger: 查看用户帐号信息
finger USERNAME
修改用户帐号属性:
usermod
-u UID
-g GID
-a -G GID:不使用-a选项,会覆盖此前的附加组;
-c
-d -m:
-s
-l
-L:锁定帐号
-U:解锁帐号
chsh: 修改用户的默认shell
chfn:修改注释信息
密码管理:
passwd [USERNAME]
--stdin
-l
-u
-d: 删除用户密码
pwck:检查用户帐号完整性
组管理:
创建组:groupadd
groupadd
-g GID
-r:添加为系统组
groupmod
-g GID
-n GRPNAME
groupdel
gpasswd:为组设定密码
bash的配置文件:
全局配置
/etc/profile, /etc/profile.d/*.sh, /etc/bashrc
个人配置
~/.bash_profile, ~/.bashrc
profile类的文件:
设定环境变量
运行命令或脚本
bashrc类的文件:
设定本地变量
定义命令别名
登录式shell如何读取配置文件?
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非登录式shell如何读取配置文件?
~/.bashrc --> /etc/basrc --> /etc/profile.d/*.sh
管道和重定向:> < >> << |
>: 覆盖输出
>>:追加输出
set -C: 禁止对已经存在文件使用覆盖重定向;
强制覆盖输出,则使用 >|
set +C: 关闭上述功能
2>: 重定向错误输出
2>>: 追加方式
&>: 重定向标准输出或错误输出至同一个文件
<:输入重定向
<<:Here Document
管道:前一个命令的输出,作为后一个命令的输入
命令1 | 命令2 | 命令3 | ...
grep 使用规则
grep, egrep, fgrep
grep: 根据模式搜索文本,并将符合模式的文本行显示出来。
Pattern: 文本字符和正则表达式的元字符组合而成匹配条件
grep [options] PATTERN [FILE...]
-i
--color
-v: 显示没有被模式匹配到的行
-o:只显示被模式匹配到的字符串
*: 任意长度的任意字符
?: 任意单个字符
[]:
[^]:
正则表达式:REGular EXPression, REGEXP
元字符:
.: 匹配任意单个字符
[]: 匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
字符集合:[:digit:], [:lower:], [:upper:], [:punct:], [:space:], [:alpha:], [:alnum:]
次数匹配:
*: 任意多
\?: 0或1次
\{m,n\}:至少m次,至多n次;
.*: 任何字符任意个数
匹配次数(贪婪模式):
*: 匹配其前面的字符任意次
a, b, ab, aab, acb, adb, amnb
a*b, a?b
a.*b
位置锚定:
^: 锚定行首,此字符后面的任意内容必须出现在行首
$: 锚定行尾,此字符前面的任意内容必须出现在行尾
^$: 空白行
\<或\b: 锚定词首,其后面的任意字符必须作为单词首部出现
\>或\b: 锚定词尾,其前面的任意字符必须作为单词的尾部出现
分组:
\(\)
\(ab\)*
后向引用
\1: 引用第一个左括号以及与之对应的右括号所包括的所有内容
\2:
egrep:增强grep,使用时无需加\符号来进行转译
fgrep: 不支持正则表达式