Linux就该这么学-笔记

第二章 新手必须掌握的linux命令

1.ls命令,格式:ls [选项] [文件],用于查看目录中有哪些文件

-a 查看全部文件
-d 仅看目录本身
-l 文件详细信息

2.wc命令,格式:wc [选项] 文本,用于统计指定文本的行数

-l 只显示行数

3.dd命令,格式:dd [参数],用于指定大小的拷贝的文件或指定转换文件

if 输入的文件名称
of 输出的文件名称
bs 设置每个“块”的大小
count 设置要拷贝“块”的个数

4.useradd命令,格式:useradd [选项] 用户名,用于创建新的用户

-d 指定用户的家目录(默认为/home/username)
-u 指定用户的UID
-s 指定默认的shell

5.passwd命令,格式:passwd [选项] [用户名]
修改当前用户的密码:“passwd”
修改其他用户的密码:“passwd 其他用户名”

-l 锁定用户禁止其登陆
-u 解除锁定,允许用户登陆
–stdin 允许从标准输入修改用户密码,如(echo “NewPassword” | passwd –stdin Username)
-d 使账号无密码
-e 强制用户下次登陆时修改密码

6.userdel命令,格式:userdel [选项] 用户名,用于删除用户的所有表格

-f 强制删除用户,家目录与其相关文件
-r 同时删除用户,家目录与其相关文件

7.usermod命令,格式:usermod [选项] 用户名,用于修改用户的属性

-d -m -m与-d连用,可重新指定用户的家目录并自动旧的数据转移过去
-g 变更所属用户组
-s 变更默认终端
-u 修改用户的UID

8.groupadd命令,格式:groupadd [选项] 群组名,用于创建群组

9.tar命令,格式:tar [选项] [文件],用于对文件打包压缩或解压
打包并压缩文件:“tar -czvf 压缩包名.tar.gz 文件名”
解压并展开压缩包:“tar -xzvf 压缩包名.tar.gz”

-c 创建压缩文件
-x 解开压缩文件
-z 用Gzip压缩或解压
-j 用bzip2压缩或解压
-v 显示压缩或解压过程
-f 目标文件名
-C 指定解压到的目录

10.grep命令,格式:grep [选项] [文件],用于对文本进行搜索
搜索某个关键字:“grep 关键字 文本文件”

-b 将可执行文件(binary)当作文本文件(text)来搜索
-c 仅显示找到的次数
-i 忽略大小写
-n 显示行号

11.find命令,格式:find [查找路径] 寻找条件 操作,用于查找文件

-name 匹配名称,如(find /etc -name “host*” -print)
-perm 匹配权限,如(find / -perm -4000 -print)
-user 匹配所有者,如(find / -user linuxprobe)

12.uname命令,格式:uname [-a],用于查看系统内核版本等信息

13.uptime命令,格式:uptime,用于查看系统的负载情况

14.free命令,格式:free [-m/-g],用于显示当前系统中内存的使用量情况

15.who命令,格式:who [参数],用于查看当前登入主机的用户情况

16.last命令,格式:last [参数],用于查看所有系统的登入情况

17.history命令,格式:history [-c],用于显示历史执行过的命令

18.sosreport命令,格式:sosreport,用于收集系统配置并诊断信息后输出结论文档

19.diff命令,格式:diff [参数] 文件,用于比较多个文本文件的差异

-b 忽略空格引起的差异
-B 忽略空行引起的差异
–brief或-q 仅报告是否存在差异
-c 使用上下文输出格式

20.touch命令,格式:touch [选项] [文件],用于创建空白文件与修改文件时间

-a 近修改“访问时间”(atime)
-m 近修改“更改时间”(mtime)
-d 同时修改atime与mtime
-t 要修改成的时间[YYMMDDhhmm]

21.mkdir命令,格式:mkdir [选项] 目录,用于创建空白的文件夹

-m=MODE 默认的文件目录权限,如“-m 755”
-p 连续创建多层目录(若文件夹已存在则忽略)
-v 显示创建的过程

22.cp命令,格式:cp [选项] 源文件 目标文件,用于复制文件或目录
复制命令的三种情况:
目标文件是一个目录,会将源文件复制到该目录中
目标文件是一个文件,会将源文件覆盖该文件
目标文件不存在,将会复制源文件并修改为目标文件的名称(重命名)

-p 保留原始文件的属性
-d 若对象为“链接文件”,则保留该“链接文件”的属性
-r 递归持续复制(用于目录)
-i 若目标文件存在则询问是否覆盖
-a 相当于-pdr(p,d,r为上述的参数)

23.mv命令,格式:mv [选项] 文件名 [目标路径|目标文件名],用于移动文件或改名

24.rm命令,格式:rm [选项] 文件,用于删除文件或目录

-f 忽略警告信息
-i 删除前先询问
-r 删除文件夹

第三章 管道符、重定向与环境变量

1.管道命令符

“|”的作用是将前一个命令的标准输出当作后一个命令的标准输入,格式为“命令A|命令B”

2.输入输出重定向

标准输入(STDIN,文件描述符为0):默认从键盘输入,为0时表示是从其它文件或命令的输出
标准输出(STDOUT,文件描述符为1):默认输出到屏幕,为1时表示是文件
错误输出(STDERR,文件描述符为2):默认输出到屏幕,为2时表示是文件

命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件 将错误输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件 将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2>> 文件 将错误输出重定向到一个文件中(追加到原有内容的后面)
命令 >> 文件 2>$1 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)

命令 < 文件 将文件作为命令的标准输入
命令 << 分界符 从标准输入中读入,直到遇见“分界符”才停止
命令 < 文件1 > 文件2 将文件1作为命令的标准输入并将标准输出到文件2

3.命令行通配符

* 匹配零个或多个字符
? 匹配任意单个字符
[0-9] 匹配范围内的数字
[abc] 匹配已出的任意字符
\ 转义后面单个字符
‘’ 转义所有的字符
“” 变量依然生效
`` 执行命令语句

4.alias命令,格式:alias 别名=命令,用于设置命令的格式,如(alias cp=” cp -i”)
unalias命令,格式:unalias 别名,用于取消命令的格式

5.实用的PATH变量

查看$PATH变量的方法:echo $PATH。$PATH变量是“解释器的助手”,它负责告诉bash用户要执行的命令可能存放在那里,然后bash就会在这些目录里寻找。
谨慎而有经验的运维人员在接手一台Linux系统后一定会在执行命令前查看$PATH变量中是否有可疑的目录

6.type命令,格式:type 命令名字,通过解释器来知道某个命令是“内部命令”还是“外部命令”

7.重要的环境变量

变量名称 作用
HOME 用户的主目录
SHELL 当前shell是哪个程序
HISTSIZE 历史命令记录条数
MAIL 邮件邮箱文件
LANG 语系数据
RANDOM 随机数字
PS1 bash提示符
HISTFILESIZE history命令存储数量
PATH 在路径中的目录查找执行文件
EDITOR 默认文本编辑器

8.export命令,格式:export 变量名[=变量值],用于将局部变量提升为全局变量

第四章 Vim编辑器和Shell命令脚本

1.Shell脚本组成

脚本声明(#!):告知系统用何种shell来做解释器
注释信息(#):对可执行语句或程序功能做介绍
可执行语句:执行具体的命令

2.脚本执行的三种方法

脚本文件路径:./Example.sh
sh 脚本文件路径:sh Example.sh
source 脚本文件路:source Example.sh

3.Shell预定义变量

$0 当前执行Shell脚本的程序名
$1-9,${10},${11}…… 参数的位置变量
$# 一共有多少个参数
$* 所有位置变量的值
$? 判断上一条命令是否执行成功,0为成功,非0为失败

4.条件测试语句

条件测试语句能够测试特定的表达式是否成立,当条件成立时返回值为0,否则返回其它值。
测试语句格式:[ 条件表达式 ]

细分测试语句有:文件测试、逻辑测试、整数值比较、字符串比较

5.文件测试

格式:[ 操作符 文件或目录名 ]

操作符 作用
-d 测试是否为目录
-e 测试文件或目录是否存在
-f 判断是否为文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行

6.逻辑测试

格式:[ 表达式1 ] 操作符 [ 表达式2 ]

|操作符|作用|
|&&|逻辑与|
||||逻辑或|
|!|逻辑否|

7.整数比较

格式:[ 整数1 操作符 整数2 ]

操作符 作用
-eq 判断是否等于
-ne 判断是否不等于
-gt 判断是否大于
-lt 判断是否小于
-le 判断是否小于等于
-ge 判断是否大于等于

8.字符串比较

格式:[ 字符串1 操作符 字符串2 ]

操作符 作用
= 比较字符串内容是否相同
!= 比较字符串内容是否不同
-z 判断字符串内容是否为空

9.read命令,格式:read -p [提示语句] 变量名,用于将用户的输入参数赋值给指定变量

10.计划任务服务

参数 作用
at <时间> 安排一次任务
atq或者at -l 查看任务列表
at -c 序号 预览任务与设置环境
atrm 删除任务

11.crontab命令,格式:crontab [选项] [-u 用户名]
其中在创建、编辑计划任务时有个固定的格式,
分钟 小时 日期 月份 星期 命令

-e 创建、编辑计划任务
-l 查看计划任务
-r 删除计划任务

第五章 用户身份与文件权限

1.UID

root用户是存在于所有类Unix系统中的“超级用户”,拥有极高的系统所有权,能够管理系统的各项功能,如添加/删除用户,启动/关闭进程,开启/禁用硬件设备等权限。
其实“root”只是个名字,真正让它成为“超级用户”的是UID值:
UID(即User IDentification的缩写):每个用户都有对应的UID值。
超级用户UID0:root用户默认为0
系统用户UID1-999:系统中系统服务由不同用户运行,更加安全,默认被限制登陆系统
普通用户UID1000~:即管理员创建的用于日常工作而不能管理系统的普通用户
注意UID一定是不能冲突的,管理员创建的普通用户UID从1000开始(即便前面有闲置的号码)
账户名称与UID保存在/etc/passwd文件中,而账户密码则保存在/etc/shadow文件中

2.GID

GID(即Group IDentification的缩写):可将多个用户加入某个组中,方便指派任务或工作
每个用户在被创建时均会创建一个默认组(其GID与UID相同,俗称基本组),而后加入的则叫扩展组。用户组名称与GID保存在/etc/group文件中

3.文件权限与归属

Linux系统中一切都是文件,文件和目录的所属与权限,来分别规定所有者、所有组、其余人的读,写,执行权限
读(read),写(write),执行(execute),简写即为(r,w,x),亦可用数字(4,2,1)表示
普通文件即实际保存数据的地方,其并不具备删除自身的权限:
r:可读取文件的实际内容
w:可编辑/新增/修改该文件的实际内容
x:可被执行
目录文件即保存有目录结构和文件权限:
r:可读取目录结构和权限
w:可更改目录结构列表、新建/删除/重命名/转移子文件/目录
x:表示用户可以进入到该目录中

4.SUID

让执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)

5.SGID

让执行者临时拥有属组的权限(对拥有执行权限的二进制程序设置)

6.chmod命令,格式:chmod [参数] 权限 文件或目录名称,用于修改文件或目录的权限

对于文件不加参数,遇到目录加大写-R(递归,修改目录内所有文件的属性)

7.chown命令,格式:chown [参数] 所属主:所属组 文件或目录的名称

对于文件不加参数,遇到目录加大写-R(递归,修改目录内所有文件的属性)

8.SBIT(Sticky Bit)

只可管理自己的数据而不能删除他人文件(仅对目录有效),也可以叫做特殊权限位之粘滞位

9.chattr命令,格式:chattr [参数] 文件,用于设置文件的隐藏权限

10.lsattr命令,格式:lsattr [参数] 文件,用于显示文件的隐藏权限

-a 显示所有文件和目录
-l 显示隐藏属性的全称(默认简写成一个单词)
-R 递归处理,将指定目录下的所有文件及子目录一并处理
-d 若目标文件为目录,加此参数

11.su命令,格式:su [-] 用户名,用于变更使用者的身份(切换登陆者)

12.sudo命令,格式:sudo [参数] 命令名称,用于给普通用户提供额外权利来完成原本超级用户才能完成的任务

sudo的特色功能有:
(1)限制用户执行指定的命令
(2)记录用户执行的每一条命令
(3)配置文件(/etc/sudoers)提供集中的管理用户、权限与主机等参数
(4)验证过密码后5分钟(默认值)内无须再让用户验证密码,更加的方便

13.setfacl命令,格式:setfacl [参数] 文件,用于增加或修改ACL规则。
通俗来讲ACL(文件访问控制列表)就是设置指定的特定用户或用户组对某个文件的操作权限。并且如果对某个目录设置了访问控制策略,那么子文件则继承其访问策略。

-R 递归(对目录使用)
-m 设置文件的acl规则
-b 删除acl规则

14.getfacl命令,格式:getfacl 文件,用于显示文件的ACL规则

第六章 存储结构与磁盘划分

1.物理设备的命名规则

硬盘设备是由大量的“扇区”组成的,其中第一个扇区保存着主引导记录与分区表信息。单个扇区的容量为512bytes,主引导记录(Master Boot Record)MBR需要占446bytes,分区表为64bytes,而每记录一个分区信息需要16bytes。所以运维人员一般会选择用3个主分区加1个扩展分区的方法,扩展分区中能够创建无限个逻辑分区,这样就可以用逻辑分区来满足多分区的需求了。记住,主分区不能超过4个

2.系统内核设备管理器(Udev)
Udev会自动将硬件名称规范起来,并且会一直以守护进程的形式运行并侦听来自内核发出的uevent来管理/dev目录下的设备文件

常见的硬件命名如下:
| 硬件设备 | 文件名称 |
| ———— | ———————— |
| IDE设备 | /dev/hd[a-d] |
| SCSI/SATA/U盘 | /dev/sd[a-p] |
| 软驱 | /dev/fd[0-1] |
| 打印机 | /dev/lp[0-15] |
| 光驱 | /dev/cdrom |
| 鼠标 | /dev/mouse |
| 磁带机 | /dev/st0或/dev/ht0(IDE设备) |

3.文件管理系统
文件管理系统的作用是将硬盘合理的规划,使得用户能够在上面正常建立文件、写入,读取,修改,转存文件与控制文件

常见的文件管理系统有:Ex3,Ex4,XFS

4.mount命令,格式:mount 文件系统 挂载目录,用于挂载文件系统

-a 挂载所有在/etc/fstab中定义的文件系统
-t 指定文件系统的类型

5.umount命令,格式:umount [挂载点/设备文件],用于撤销已经挂载的设备文件

6.fdisk命令,格式:fdisk [磁盘名称],用于管理磁盘分区

m 查看全部可用参数
n 添加新分区
d 删除某个分区信息
l 列出所有可用的分区类型
t 改变某个分区的类型
p 查看分区表信息
w 保存并退出
q 不保存直接退出

7.df命令,格式:df [选项] [文件]

-a 显示所有的文件系统(包括虚拟的)
-total 展示出总体使用量
-h 更易读的容量格式
-l 展示出Inode的信息(默认是磁盘使用情况)
-T 显示出文件系统的类型

8.du命令,格式:du [选项] [文件]

-a 评估每个文件而非目录整体占用量
-c 评估每个文件并计算出总量总和
-h 更易读的容量格式,如1K,234M,2G
-s 仅显示占用量总和

9.磁盘冗余阵列

RAID的早先设计理念为“redundant array of Inexpensive disks”,即不贵的磁盘组,而现在的定义是“Redundant Array of Independant Disks”,即独立的磁盘组,作用是防止硬盘物理损坏以及增加存储设备的吞吐量。RAID常见的组合有0、1、5、10

10.RAID0

需要至少两块(含)硬盘,可以有效地提高硬盘的性能和吞吐量,但没有数据冗余和错误修复能力,若任意一块硬盘故障则整个系统的数据都会受到破坏

11.RAID1

需要至少两块(含)硬盘,可以有效地提高数据资料的安全性和可修复性,但成本却提高了,磁盘利用率仅为50%

12.RAID5

需要至少三块(含)硬盘,兼顾性能、安全和储存成本,可以看作是RAID0和RAID1的折中方案

13.RAID10

需要至少四块(含)硬盘,兼具速度和安全性,但成本很高,一般用于存放要求速度与差错控制的数据

14.mdadm命令,格式:mdadm [模式] [选项] [成员设备名称],用于管理系统软件RAID磁盘阵列

15.xfs_quota命令,格式:quota [参数] 配额 文件系统,用于管理XFS文件系统的quota硬盘配额

16.edquota命令,格式:edquota [参数] [用户],用于超级用户编辑其他用户的quota配额限制

17.虚拟文件系统

Linux内核中的软件层为用户程序提供了一个文件系统接口(VFS,Virtual File System),这样就转而统一对这个虚拟文件系统进行操作。实际文件系统在VFS下隐藏了自己的特性和细节,使得我们在日常使用时觉得“文件系统都是一样的”

18.软硬方式链接

在Linux系统中的ln命令能够让用户创建出两种不同类型的文件快捷方式,硬链接(hard link)和软链接也叫符号链接(symbolic link)。
硬链接可以理解为一个“指向原始文件inode的指针”,即便原文件被删除依然可以通过链接文件访问,但是不能跨文件系统也不能链接目录文件。实际上,硬链接文件与原始文件其实是同一个文件,只是名字不同。
软链接也称为符号链接(symbolic link),即“仅仅包含它索要链接文件的路径名”。因此能做目录链接也可以跨越文件系统,但原始文件被删除后链接文件也将失效,如同桌面快捷方式

19.ln命令,格式:ln [选项] 目标,用于创建链接文件

avatar

chilihotpot

You Are The JavaScript In My HTML