本文已参与「新人创作礼」活动,一起开启掘金创作之路。
目录
一.了解Linux操作系统
操作系统的分类
什么是操作系统
操作系统(operating system OS),如果一台电脑只有硬件没有操作系统,称之为裸机,用户无法与硬件进行交互。操作系统来管理一些硬件和维护一些软件的资源。
操作系统的分类
桌面操作系统
有Windows,mac,Linux
服务器操作系统
编辑
开发游戏用Windows Server比较多,大数据应用服务用Linux比较多
嵌入式操作系统
比如单片机,汽车上的控制器,电梯上的控制程序的操作系统都是嵌入式操作系统。
编辑
移动设备操作系统
编辑
Linux的历史
Unix是由贝尔实验室实现的早期使用的操作系统,但是不开源。
Linus torvalds便研发了Linux并开源免费,Linux是类似Unix的操作系统,指的是外观上和操作方式上相似,但源码并不是抄袭。便于更好的推广和降低人们学习成本。
Linux内核与发行版本
内核
操作系统的核心部分称为内核,Linus torvalds公开内核代码允许他人来一起完善Linux操作系统。
Linux操作系统 = linux内核+GUN软件及系统软件+必要的应用程序软件。
发行版本
发行版本就是由Linux内核与各种常用软件的集合产品。
编辑
使用Linux操作系统
安装vmware虚拟机下载centos,便可在自己的电脑上使用Linux的操作系统。
同时vmware还可以实现搭建大数据的学习环境
大数据需要分布式的应用,就需要多个主机。用vmware来创建多个虚拟机便可以实现。
编辑
在虚拟机上安装多个操作系统就构成了一个局域网。
自己的笔记本处理两个网络的中间,主机和这些虚拟机组成一个局域网,同时主机还可以去访问外网。
一些系统操作
查看系统日期和时间
date "+%T"
%T 以HH::MM:SS的格式显示时间 %y 显示年份 %m 显示月份 %d 显示日期 %D 以mm/dd/yy显示日期 %H 显示小时 %M 显示分钟 %S 显示秒 %a 显示星期几 %h 显示月份 %r 以AM/PM格式显示时间 修改屏幕
clear 清空 tput clear tput cup 15 20 将光标定位到15行20列 tput smso 屏幕反白 tput rmso 正常显示 tput blink 闪烁输出 tput reset 屏幕设置恢复默认值 系统的当前用户
who
whoami
确定系统的正常运行时间
uptime
SSH协议
SSH 安全外壳
在本机上去访问服务器时,可以使用xshell软件,服务器不一定在本机的虚拟机上,实际工作中服务器是在机房,你也不能操作服务器时蹲在机房,所以需要通过远程登录会话访问。
登录是还需要用户名和密码,避免被拦截,该软件还实现了加密解密的功能。
编辑
编辑
用户管理
用户的标识
通过id
创建新用户
useradd
还需要通过passwd 设置密码
授予/撤销用户的root访问权限
useradd
usermod
/etc/passwd
删除用户
userdel
修改密码
passwd
要求:不能与账号密码相同,与原先密码至少有3个位置不同,至少有6个字符。
Linux进程
什么是进程
进程的类型
监视和执行进程
停止和终止进程
二.了解Linux文件系统
Linux的文件系统
编辑
root是老板
/root是老板的办公室
/home是员工宿舍
对比Linux和Windows的文件系统
编辑
编辑
Windows下:C:\Users\zhou
Linux下:/root/
两个系统的斜杠不同
文件系统的属性
- 所有的文件和目录都包含在根目录(/)中
- 每个文件或目录由名称,所在目录,inode唯一标识符来唯一标识
- 各个文件系统之间没有依赖关系
三.了解Linux中的文件
1.文件的命名
- 文件名最多255字节长度
- 可包含除了/之外的特殊字符
- 区分大小写
- 不能有空格或制表符
2.文件的位置
绝对路径
从根目录开始
相对路径
不从根目录开始,路径中不以/开头,以./或者直接目录名或文件名开头
HOME目录路径
用
表示家目录,比如当前登录用户为Emily,则代表/home/Emily
3.文件的类型
目录文件
在界面中显示为蓝色。Linux在创建目录时自动创建目录文件,此文件与目录同名,用户不能修改目录文件。
普通文件
在界面中显示为白色。用户创建的文件都视为普通文件,包括数据文件,程序文件,目标文件,可执行文件。
特殊文件
大多是系统文件都是特殊文件,常与IO设备关联,用户不能修改特殊文件。
标准输入文件
键盘被称为标准输入文件。
比如当使用cat指令时,如果cat后面没有跟文件名,则该命令从标准输入文件中获取输入。
输入完成按CTRL+d结束。
标准输入文件的文件描述符为0。
标准输出文件
显示器被称为标准输出设备。
发出ls命令时,将内容输出发送到标准输出文件。
标准输出文件的文件描述符为1。
标准错误文件
显示器也是标准错误文件
cat后面跟一个不存在的文件名会在显示器上生成错误消息。
标准错误文件的文件描述符为2。
标准输入后,要么标准输出,要么标准错误。
Linux系统中文件的后缀名不影响文件的类型,只是为了方便阅读。
编辑
4.文件的访问权限/用户类型
Linux可以根据用户类型限制对文件的访问
用户类型
- 系统管理者
- 文件所有者
- 组所有者
- 其他用户
其他用户是相对于组用户来说的
文件类型
- 普通文件
d 目录
b 块特殊文件
c 字符特殊文件
l 符号链接
s 套接字
p 命名管道
文件的访问权限
文件访问权限是给文件所有者,组所有者,其他用户来设置。
- 读 R 4
- 写 W 2
- 执行 X 1
对文件授予执行权限时,必须要有读权限。
更改用户对文件的权限
使用chmod (change mode)
符号格式(使用字母)
- u 文件或目录所有者
- g 同一组的成员 group
- o 其他所有用户 other
- a 所有用户 all
chmod u+x x.c 给文件所有者授予对x.c文件的执行权限
chmod g-r x.c 给组所有者撤销对于对于x.c文件的读权限
chmod o-r x.c 给其他用户撤销对于x.c文件的读权限
chmod a+x x.c 文件所有者给所有用户授予对x.c文件的执行权限
chmod a=rwx x.c 所有用户对该文件都有读写执行权限
绝对格式(使用数字)
chmod 400 x.c 给文件所有者添加读权限
chmod 6 x.c 给其他用户授予读写权限
chmod 61 x.c 给其他用户授予执行权限,给组用户授予读写权限
chmod 741 x.c 所有者授予读写执行权限,组成员授予写权限,其他用户授予执行权限
5.文件的管理
定位文件
find
locate
xargs
跟find中的-exec选项和-ok选项的功能类似,但xarg是命令,结合find使用管道来实现功能。
操作多个文件
ln
paste
比较文件
cmp
comm
uniq
type
exec
了解特殊字符
文件扩展字符
命令终止符
插入注释
四.操作Linux的目录和文件
1.命令语法
当用root账号登陆并进入root目录时,在命令行最开头显示的是【root@localhost /root】#
root表示登录的用户
@是占位符
当前机器的名字是localhost
空格
/root表示当前你所在的工作目录
#是提示符,普通用户的提示符是$
如何显示这些信息?
whoami 显示当前用户
hostname 显示主机名
pwd 显示当前路径
编辑
输入命令行的语法格式
命令 空格 参数 空格 文件/文件夹
ls -a /root
- 空格可以是一个,也可以是多个
- 参数和文件/文件夹是可选的
2.操作Linux的目录
创建目录
mkdir make directory
mkdir file 在当前目录创建file文件夹。
mkdir /home/Emily/file 在特定目录创建文件夹 如果该文件的父目录不存在则创建不了,需要添加-p属性。
列出目录内容
ls list
ls 列出当前目录内容
ls file 列出当前目录file目录的内容
ls /home/Emily 列出home下Emily目录内容
-l 列出详细信息
-a 所有文件,包括隐藏文件
-A 除了.和..之外的所有文件
-F
编辑
编辑
-r
-R
-S
确定当前目录路径
pwd print work directory
更改当前目录
cd change directory
编辑
cd和cd~效果相同
删除目录
rmdir remove directory
删除的条件:
该目录是空的,并且当前所在位置不是该目录,也就是只能删除所在目录下的其他目录。
rmdir file 删除当前目录下的file目录
3.操作Linux的文件
创建文件
touch
复制文件
cp copy
cp data1 data2 将data1 复制到data2 如果data2有数据则内容重写,没有则创建data2文件
cp -r file1 file2 将file1的内容递归复制到文件夹file2
-i interactive 重写前进行提示
-l link
-s symbolic-link 创建符号链接
-v verbose 详细说明正在执行的操作
显示文件内容
cat
cat data1 显示当前目录下data1文件的内容
cat data1 data2 显示当前目录下data1和data2文件的内容
more
回车键:向上滚动一行
空格键:向上滚动一个屏幕
缺点:下滚后无法上滚
less
可以使用方向键上下移屏幕
可以指定数字指定移动行数
还可以上滚
移动和重命名文件
mv move mv source destination
如果destination是一个路径,则视为移动文件,如果是文件名并且当前目录不存在这个目录,则视为改名。
mv file1 file2 如果当前路径中只有file1没有file2,则视为改名,如果有file2则视为将file1移动到file2中
-f
-i
-v
删除文件
rm remove 也可以删除目录
rm file 删除当前路径下的文件
rm /home/Emily 删除Emily
-I
-f
-r/-R
-v
通配符
用通配符来代替文件的名称
匹配任意个字符
?
匹配一个字符
【】
匹配指定字符中的一个
六.对文件的内容进行操作
1.基础篇
打开或创建文件
vi filename
三种模式
命令模式:可以执行控制光标在文件中移动。
输入模式:将内容添加到文件中。
退出模式:可以保存,退出,替换文件。
命令模式的命令
h
l
k
j
x
dd
w/W word
b/B behind
e/E end
输入模式的命令
a append
A
i insert
I
o open
O
rx
Rtext
退出模式的命令
:e filename
:w filename
:w! filename
:! command name
d delete
c change
y yank
ctrl + f front
CTRL +b back
编辑
编辑
2.高级篇
重定向
输入重定向
cat < test1 或 cat 0< test1
将test1作为标准输入。如果<后面没有文件名,则从标准输入文件中读内容,有的话就从该文件读内容。
输出重定向
cat file1 > file2 或 cat file1 1> file2
将file1的内容输入到file2,并且覆盖。
cat file1 >> file2 或 cat file1 1>> file2
将file1的内容追加到file2
cat > file2
从标准文件中输入内容到file2
cat >> file2
从标准文件中追加内容到file2
错误重定向
cat file1 2> file2
如果cat file1 出错,将错误信息输入到file2
过滤器
过滤器用来处理加工文件的内容
grep global regular expression print 全局正则表达式打印
wc word count 计算行数,字数,字符数
cut 从特定命令的输出抽取特定列
tr translate 将一组字符翻译成另一组字符
sort 排序
管道
七.shell
1.shell基础
什么是shell?
编辑
编辑
具体实现了shell变成的软件称为bash,也有其他编程语言;
如果ls命令,首先发给shell,shell将命令解释成内核认识的语言,再让机器配件执行。
从我们登录Linux,所有的操作都是交给shell来执行的。
bash可以理解成shell的不同的版本。就像有各种各样的编程语言一样,对于centos而言使用的是bash。
其实一个命令对应的是调用一个c语言编写的脚本。
编辑
编辑
shell的类型
Unix Shell
Bourne Shell
C Shell
Korn Shell
Restricted Shell
Linux Shell
Bash
Ash
Shell的功能
父子shell
进入一个新的shell bash
退出当前shell exit
更改登录时的默认shell chsh
检查进程树 pstree
使用shell脚本
除了交互式的操作还有非交互式的操作,那就是使用shell脚本。 编辑
shebang
编辑
shebang
运行shell脚本文件时,可以使用相对路径直接运行。./hello.sh
也可以直接指定解释器来执行shell脚本,/bin/sh ./hello.sh 或/bin/bash ./hello.sh
使用第一个方法需要有执行权限。
变量的介绍
变量的介绍
Linux中的变量都被视为是字符串
声明变量
name=周 注意:等号两边不能有空格
name="zhou zhou" 如果值中有空格,需要用引号括起来,如果值不含空格,引号可不加
变量命名规则
编辑
引用变量
${变量名}
echo name 或 echo {name}
当进行字符串拼接时,则必须要有括号
echo ${day}th
括号内不能有多余空格,除非包含在变量名中
变量的赋值
方式1:name2=name
方式2:read name
变量的作用域
编辑
本地shell变量
当前shell中创建的变量对于当前shell来说是本地变量
全局shell变量/环境变量
通过export命令,将当前shell中的变量传递到子shell中,那么该变量就是全局变量了。
但是在子shell中修改变量的值在父shell中不会改变,因为传递的是副本。全局/环境变量在每个shell中都能找到。
其他环境变量:
HOME
PATH
PS1
PS2
LOGNAME
SHLVL
SHELL
执行
编辑
需要赋予权限
显示
- 单引号变量,不识别特殊语法
- 双引号变量,能识别特殊语法
my=zhou
name='${my}'
echo name
输出的是'${my}
name="${my}"
输出zhou
source命令
编辑
在make.sh的shell脚本中有一行代码 name=zhou
在当前bash中创建name=zhouzhou
如果用bash来执行make.sh脚本,那么echo ${name}输出zhouzhou,因为会创建子shell,将变量加载到子shell中
如果用source make.sh 来执行脚本,则会将变量加载到当前shell中
反引号
反引号可以识别命令
先执行反引号里面括起来的命令,在将命令的输出原地替换,最后执行整个命令。
name=
lsecho ${name}
则输出当前命令的内容
2.shell高级
命令替换
expr 算数运算
不支持小数点
*号为了与通配符区别,前面要加\
test 评估表达式
test expression 等价于【expression】返回真(0)或假(1)
test $username = "an" 等号两边需要有空格
[ $username = "an" ] 等号和括号都需要空格
评估文件状态
评估算数式
评估字符串
使用编程构造
if
if fi
case
case esac
while
while do done
until
until do done
for
for in
do done
exit
退出shell脚本,还可以退出当前shell。
break
continue
函数
处理shell脚本中的参数
调试shell脚本
使用shell脚本的Linux服务管理
八.实用程序
压缩和解压文件
gzip
tar
打包:将一堆文件或目录汇总成一个整体
压缩:将大文件压缩成小文件,需要先打包再压缩。
用作计算器
bc
显示用户状态
finger
对文件内容进行拼写检查
ispell
更改用户的finger信息
chfn
显示文件指定的行数
head
tail
九.指令总和
<或0< 输入重定向
1>或> 输出重定向覆盖
1>>或>> 输出重定向追加
2> 错误输出重定向
grep 查询某个字符或字符串
[abc]
[a-c]
^New[abc] Newa或Newb或Newc必须出现在行首
New[^abc] New后不能出现a或b或c
New.[abc] 忽略符号含义
-n 打印匹配到的每行及行号
-c 打印行数
-v 打印不匹配的行
wc 计算文件行数,字数,字符数
-l 显示行数
-w 显示词数
-c 显示字符数
cut 获取某列(需要分割)或获取每行的某些列的字符
-f 指定列
-c 指定字符的列序号
-d 指定列定界符
tr 将字符翻译
-s 压缩某个字符为一个
"str1" "str2 " 将str1替换为str2
sort 排序
-r 降序排
-f 忽略大小写
-n 不再用ASCII码顺序排列数字,而是按数字本身大小
+num1 -num2 忽略num1个分隔符,在num2个分隔符处停下
-t 指定分隔符
-o 将排序输出到文件中
+b 忽略前导空格和制表符
tee 读取标准输入将其写到标准输出或文件
echo 在屏幕显示消息
= 创建变量
${} 引用变量
read 将变量的值从键盘输入
export 传递变量给其他shell
$HOME 显示当前用户目录
$PATH 以冒号分割目录列表
$PS1 提示符
$PS2 次级提示符
$LOGNAME 用户登录名
$SHLVL 当前shell层
$SHELL 存储用户默认shell
$env 查看所有导出的环境变量和值的列表
`` 重音符,先执行重音符内的内容,再原地替换
expr 计算算数表达式
typeset -i 变量名 直接定义一个整数变量,可以直接用于计算
test 评估表达式
$? 内置变量,存储命令、函数或脚本本身的退出状态
test -e 测试文件是否存在
test -f 文件存在并且是普通文件
test -d 文件存在并且是目录
test -r 文件存在并且可读
test -w 文件存在并且可写
test -x 文件存在并且可执行
test -s 文件存在并且不为空
test -b 文件存在并且是块特殊文件
test -L 文件存在并且是一个符号链接
test -O 文件存在并且由当前用户拥有
test -G 文件存在并且由当前用户组拥有
file1 -nt file2 文件1比文件2新
file1 -ot file2 文件1比文件2旧
-eq 等于
-ne 不等于
-gt 大于
-ge 大于或等于
-lt 小于
-le 小于或等于
test string string不为空
test -z string 字符串长度为0
test -n string 字符串长度不为0
test string1 = string2 字符串相同
test string1 1= string2 字符串不同
if then elif then else fi
case value in
value1)
value2)
esac
while
do
done
until
do
done
for value in value1 value2
do
done
exit
break
continue
function function_name
{
}
function_name 【 arg1 arg2 ...】
2 第二个参数
source 脚本名 将脚本中所有函数导入环境中
$0 命令名
$1-9 参数1-9
$* 整串参数
$# 命令的参数个数
shift 忽略第一个参数
命令 << pattern: 语句 :pattern 将语句作为命令的输入
set -x
set -v
sh -v 执行脚本前显示脚本的内容
sh -x 执行脚本时,显示脚本的内容,并且显示赋值后的内容
file 文件名 检查文件是否存在
service 服务名 命令 控制服务
chkconfig --add 脚本名 启动脚本
chkconfig --level 一大堆 启动脚本
chkconfig --list 检查脚本是否启动
find 定位特定目录及其所有子目录中的文件
-name 搜索目录中指定文件
-print 在标准输出设备上显示文件完整路径名
-type 搜索特定类型文件
-mtime 当前日期前特定天数内修改过的所有文件
-exec 指定对文件执行的操作
-ok 与exec唯一不同点是执行前会要求用户确认
locate 定位文件
-c 显示匹配条目计数
-i 在定位输出中忽略大小写
-l 显示一定数量的记录
xargs 对多个文件执行操作
ln 创建链接
-s 创建软链接
paste 水平连接两个文件
cmp 按字节比较两个文件
comm 按行比较两个文件
-1 不显示第一列
-2 不显示第二列
-3 不显示第三列
uniq 比较一个文件中的行,删除重复的行
-u 只显示唯一的行
-d 只显示重复的行
-c 显示所有行,每行前面有它出现的次数
type 解释一个命令
exec 用命令代码代替当前shell并执行该命令,再返回父级Shell
/ 忽略后面紧跟的字符的特殊含义
'' 忽略单引号中所有字符的特殊含义
"" 忽略除$,',\之外的字符的特殊含义
: 终止命令
& 终止命令,该符号之前的命令在后台运行
# 注释
ps 为当前活动的每个进程生成一条信息
pstree 查看完整的进程树
top 与ps类似
kill 向进程发送信号,默认情况下终止进程
killall 向匹配指定名称的所有进程发送SIGTERM和SIGKIL信号
\