linux基础

一、操作系统基础

1.1 概念

OS: Operating System,通用目的的软件程序
OS分类:
桌面OS:Windows 10,Windows 7,Mac OS,Fedora
移动设备OS:Andriod,IOS,YunOS
服务器OS:RHEL,CentOS,Windows Server,AIX

1.2 Linux哲学思想

一切都是一个文件(包括硬件)
小型,单一用途的程序
链接程序,共同完成复杂的任务
避免令人困惑的用户界面
配置数据存储在文本中

1.3 开源协议

世界上的开源许可证,大概有上百种
GPLv2, GPLv3, LGPL(lesser) :通用公共许可 copyleft
Apache: apache
BSD: bsd
Mozilla
Apache
MIT

1.4用户登录

root 用户

一个特殊的管理帐户
也被称为超级用户
root已接近完整的系统控制
对系统损害几乎有无限的能力
除非必要,不要登录为root

普通( 非特权 )用户

权限有限
造成损害的能力比较有限

1.5什么是shell

Shell 是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的 命令并把它送入内核去执行
shell也被称为LINUX的命令解释器(command interpreter)
shell是一种高级程序设计语言

1.6文件系统结构

/boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录
/bin:供所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的 程序
/sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
/lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
/lib64:专用于x86_64系统上的辅助共享库文件存放位置
/etc:配置文件目录
/home/USERNAME:普通用户家目录
/root:管理员的家目录
/media:便携式移动设备挂载点

1.7Linux下的文件类型

-:普通文件
d: 目录文件
b: 块设备
c: 字符设备
l: 符号链接文件
p: 管道文件pipe
s: 套接字文件socket

二 文件管理

2.1 linux获取帮助

2.1.1显示当前工作目录

pwd: printing working directory
-P 显示真实物理路径
-L 显示链接路径(默认)

2.1.2绝对和相对路径

绝对路径

以正斜杠开始
完整的文件的位置路径
可用于任何想指定一个文件名的时候

相对路径名

不以斜线开始
指定相对于当前工作目录或某目录的位置
可以作为一个简短的形式指定一个文件名

2.1.3 切换目录

cd
切换至父目录: cd …
切换至当前用户主目录: cd
切换至以前的工作目录: cd -

2.1.4 查看文件状态

stat
文件:metadata, data
三个时间戳:
access time:访问时间,
atime,读取文件内容
modify time: 修改时间, mtime,改变文件内容(数据)

2.1.5 列出目录内容

列出当前目录的内容或指定目录
用法:ls [options] [ files_or_dirs ]
示例: ls -a 包含隐藏文件
ls -l 显示额外的信息
ls -R 目录递归通过
ls -ld 目录和符号链接信息

2.1.6 文件通配符

*匹配零个或多个字符
? 匹配任何单个字符
~ 当前用户家目录
~mage 用户mage家目录
~+ 当前工作目录
~- 前一个工作目录
[0-9] 匹配数字范围
[a-z]:字母 [A-Z]:字母
[wang] 匹配列表中的任何的一个字符
[^wang] 匹配列表中的所有字符以外的字符

2.1.7 创建空文件和刷新时间

touch命令: touch [OPTION]… FILE…

2.2 重定向和管道

2.2.1 复制文件和目录cp

cp常用选项
-i:覆盖前提示
–n:不覆盖,注意两者顺序
-r, -R: 递归复制目录及内部的所有内容
-a: 归档,相当于-dR --preserv=all

2.2.2 移动和重命名文件

mv [OPTION]… [-T] SOURCE DEST
mv [OPTION]… SOURCE… DIRECTORY
mv [OPTION]… -t DIRECTORY SOURCE…
常用选项: -i: 交互式 -f: 强制

2.2.3 删除

rm [OPTION]… FILE…
常用选项:
-i: 交互式
-f: 强制删除
-r: 递归 --no-preserve-root
示例: rm -rf /

2.2.4 目录操作

tree 显示目录树

-d: 只显示目录
-L level:指定显示的层级数目
-P pattern: 只显示由指定pattern匹配到的路径

mkdir 创建目录

-p: 存在于不报错,且可自动创建所需的各目录 -v: 显示详细信息
-m MODE: 创建目录时直接指定权限

rmdir 删除空目录

-p: 递归删除父空目录
-v: 显示详细信息
rm -r 递归删除目录树

2.2.5 索引节点

inode(index node)表中包含文件系统所有文件列表 一个节点 (索引节点)是在一个表项,包含有关文件的信息( 元数据 ),包 括: 文件类型,权限,UID,GID 链接数(指向这个文件名路径名称个数) 该文件的大小和不同的时间戳 指向磁盘上文件的数据块指针 有关文件的其他数据

硬链接

创建硬链接会增加额外的记录项以引用文件 对应于同一文件系统上一个物理文件
每个目录引用相同的inode号
创建时链接数递增
删除文件时:
rm命令递减计数的链接
文件要存在,至少有一个链接数
当链接数为零时,该文件被删除
不能跨越驱动器或分区
语法: ln filename [linkname ]

符号(或软)链接

一个符号链接指向另一个文件
ls - l的 显示链接的名称和引用的文件
一个符号链接的内容是它引用文件的名称
可以对目录进行
可以跨分区
指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减 少目标文件inode的引用计数
语法: ln -s filename ​​[linkname]

2.2.6 I/O重定向

把输出和错误重新定向到文件
">把STDOUT重定向到文件
2> 把STDERR重定向到文件
&> 把所有输出重定向到文件
> 文件内容会被覆盖
>> 原有内容基础上,追加内容
2> 覆盖重定向错误输出数据流
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

2.2.7 管道

less :一页一页地查看输入 ls -l /etc | less mail: 通过电子邮件发送输入 echo “test email” | mail -s “test”
bc:算术运算 echo “2^3" | bc
使用: 保存不同阶段的输出
复杂管道的故障排除
同时查看和记录输出

2.3 用户组和权限管理

2.3.1 用户和组的配置文件

Linux用户和组的主要配置文件:
/etc/passwd:用户及其属性信息(名称、UID、主组ID等)
/etc/group:组及其属性信息
/etc/shadow:用户密码及其相关属性
/etc/gshadow:组密码及其相关属性

passwd文件格式

login name:登录用名(wang)
passwd:密码 (x)
UID:用户身份编号 (1000)
GID:登录默认所在组编号 (1000)
GECOS:用户全名或注释
home directory:用户主目录 (/home/wang) shell:用户默认使用shell (/bin/bash)

shadow文件格式

登录用名 用户密码,一般用sha512加密

group文件格式

群组名称:就是群组名称
群组密码:通常不需要设定,密码是被记录在 /etc/gshadow
GID:就是群组的 ID
以当前组为附加组的用户列表(分隔符为逗号)

group用户和组管理命令

用户管理命令
useradd
usermod
userdel
组帐号维护命令
groupadd
groupmod
groupdel

2.3.2 用户创建:useradd

useradd [options] LOGIN

-u UID
-o 配合-u 选项,不检查UID的唯一性
-g GID:指明用户所属基本组,可为组名,也可以GID
-c “COMMENT”:用户的注释信息
-d HOME_DIR: 以指定的路径(不存在)为家目录
-s SHELL: 指明用户的默认shell程序 可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,…]:为用户指明附加组,组须事先存在
-N 不创建私用组做主组,使用users组做主组 -
r: 创建系统用户 CentOS 6: ID<500,CentOS 7: ID<1000
-m 创建家目录,用于系统用户
-M 不创建家目录,用于非系统用户
用户属性修改

usermod [OPTION] login

-u UID: 新UID
-g GID: 新主组 -G GROUP1[,GROUP2,…[,GROUPN]]]:新附加组,

删除用户

userdel [OPTION]… login -r: 删除用户家目录

修改文件权限

chmod [OPTION]… MODE[,MODE]… FILE… MODE:
修改一类用户的所有权限: u= g= o= ug= a= u=,g=

三文本处理

3.1按列抽取文本cut和合并文件paste

cut [OPTION]… [FILE]…
-d DELIMITER: 指明分隔符,默认tab
-f FILEDS:
#: 第#个字段
#,#[,#]:离散的多个字段,例如1,3,6
#-#:连续的多个字段, 例如1-6 混合使用:1-3,7 -c 按字符切割 --output-delimiter=STRING指定输出分隔符
paste 合并两个文件同行号的列到一行 paste [OPTION]… [FILE]…
-d 分隔符:指定分隔符,默认用TAB
-s : 所有行合成一行显示

3.2收集文本统计数据wc

计数单词总数、行总数、字节总数和字符总数
可以对文件或STDIN中的数据运行
-l 只计数行数

3.3文本排序sort

把整理过的文本显示在STDOUT,不改变原始文件 sort [options] file(s)
常用选项
-r 执行反方向(由上至下)整理
-R 随机排序
-n 执行按数字大小整理

3.4uniq

uniq命令:从输入中删除前后相接的重复的行
uniq [OPTION]… [FILE]…
-c: 显示每行重复出现的次数
-d: 仅显示重复过的行

3.5 Linux文本处理三剑客

3.5.1grep:文本过滤(模式:pattern)工具 grep, egrep, fgrep(不支持正则表达式搜索)

-o 仅显示匹配到的字符串
扩展正则表达式:ERE grep -E, egrep

5.5.2 sed:stream editor,文本编辑工具

s///:查找替换,支持使用其它分隔符, s@@@,s### 替换标记:
g: 行内全局替换
p: 显示替换成功的行
w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中

3.6 正则表达式

字符匹配:
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z [:lower:] 小写字母
[:upper:] 大写字母

  • 匹配前面的字符任意次,包括0次 贪婪模式:尽可能长的匹配
    .* 任意长度的任意字符
    ? 匹配其前面的字符0或1次
    + 匹配其前面的字符至少1次
    {n} 匹配前面的字符n次
    {m,n} 匹配前面的字符至少m次,至多n次
    {,n} 匹配前面的字符至多n次
    {n,} 匹配前面的字符至少n次

3.7 vim模式转换

插入模式 --------> 命令模式 ESC
命令模式 --------> 扩展命令模式 :
扩展命令模式 --------> 命令模式 ESC,enter

四.软件包管理

4.1rpm包

命名方式: name-VERSION-release.arch.rpm
rpm {-i|–install} [install-options] PACKAGE_FILE…
-v: verbose
-vv:
-h: 以#显示程序包管理执行进度
rpm -ivh PACKAGE_FILE …

4.2YUM

Yellowdog Update Modifier,rpm的前端程序,可解决软件包相关依 赖性,可在多个库之间定位软件包,up2date的替代工具
安装程序包: yum install package1 [package2] […]
升级程序包: yum update [package1] [package2] […] yum downgrade package1 [package2] […] (降级)
检查可用升级: yum check-update
卸载程序包: yum remove | erase package1 [package2] […]

五.shell编程入门

格式要求:首行shebang机制
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl

脚本的基本结构

#!SHEBANG
CONFIGURATION_VARIABLES
FUNCTION_DEFINITIONS
MAIN_CODE

5.1 算术运算

bash中的算术运算:help let +, -, *, /, %取模(取余), **(乘方)
实现算术运算:
(1) let var=算术表达式
(2) var= [ 算 术 表 达 式 ] ( 3 ) v a r = [算术表达式] (3) var= [](3)var=((算术表达式))
(4) var=$(expr arg1 arg2 arg3 …)
(5) declare –i var = 数值
(6) echo ‘算术表达式’ | bc

5.2逻辑运算

非:! ! 1 = 0 ! 0 = 1
短路运算
短路与 第一个为0,结果必定为0 第一个为1,第二个必须要参与运算
短路或 第一个为1,结果必定为1 第一个为0,第二个必须要参与运算
异或:^ 异或的两个值,相同为假,不同为真

5.3条件测试

判断某需求是否满足,需要由测试机制来实现 专用的测试表达式需要由测试命令辅助完成测试过程
评估布尔声明,以便用在条件性执行中
• 若真,则返回0
• 若假,则返回1
测试命令: • test EXPRESSION • [ EXPRESSION ]

5.4逻辑组合

• && 代表条件性的AND THEN
• || 代表条件性的OR ELSE

5.4.1 条件选择if语句

选择执行: 注意:if语句可嵌套

单分支
if 判断条件;then
条件为真的分支代码
fi
双分支
if
判断条件; then
条件为真的分支代码
else
条件为假的分支代码
fi

5.4.2 for循环

列表生成方式:
(1) 直接给出列表
(2) 整数列表:
(a) {start…end}
(b) $(seq [start [step]] end)
(3) 返回列表的命令 $(COMMAND)
(4) 使用glob,如:.sh
(5) 变量引用; $@, $

5.4.3 while循环

while CONDITION; do
循环体
done
CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后 会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为 “false”终止循环
因此:CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地 被修正
进入条件:CONDITION为true
退出条件:CONDITION为false

5.4.4 until循环

until CONDITION; do
循环体
done

进入条件: CONDITION 为false
退出条件: CONDITION 为true

5.4.4 函数变量

变量作用域:
环境变量:当前shell和子shell有效 本地变量:只在当前shell进程有效,为执行脚本会启动专用子shell进程; 因此,本地变量的作用范围是当前shell脚本程序文件,包括脚本中的函数
局部变量:函数的生命周期;函数结束时变量被自动销毁
注意:如果函数中有局部变量,如果其名称同本地变量,使用局部变量
在函数中定义局部变量的方法 local NAME=VALUE

函数递归示例
函数递归: 函数直接或间接调用自身 注意递归层数

5.4.5 fork炸弹

fork炸弹是一种恶意程序,它的内部是一个不断在fork进程的无限循环,实质是 一个简单的递归程序。由于程序是递归的,如果没有任何限制,这会导致这个 简单的程序迅速耗尽系统里面的所有资源

函数实现 : (){ : |:& };: bomb() { bomb | bomb & }; bomb
脚本实现 cat Bomb.sh #!/bin/bash ./$0|./$0&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值