国家住房和城乡建设网站,互联网公司排名全球,淘宝联盟怎样建设网站,贵阳网站建设hsyunsoLinux 一、基础01- 执行环境准备02- linux的版本分类02.1 内核版本02.2 发行版本02.3 内核和发行版本的区别: 03- 虚拟机安装04- 启动linux 二、系统操作05- 帮助命令05.1 man 帮助05.2 help 帮助05.2.1 内部命令05.2.2 外部命令 05.3 info 帮助 06- ls命令06.1 -r06.2 -rt06.3… Linux 一、基础01- 执行环境准备02- linux的版本分类02.1 内核版本02.2 发行版本02.3 内核和发行版本的区别: 03- 虚拟机安装04- 启动linux 二、系统操作05- 帮助命令05.1 man 帮助05.2 help 帮助05.2.1 内部命令05.2.2 外部命令 05.3 info 帮助 06- ls命令06.1 -r06.2 -rt06.3 -R06.4 -a 07- cp08- 文本查看命令08.1 cat08.2 head08.3 tail08.4 wc 09- 打包压缩 和 解压缩09.1 打包压缩09.1.1 先打包,后压缩09.1.2 直接打包并压缩 09.2 解压缩 10- 文本编译器vi10.1 正常模式 normal mode10.2 插入模式 insert mode10.3 命令模式 command mode10.3.1 复制10.3.2 删除10.3.3 光标移动 10.4 可视模式 visual mode10.4.1 v 字符可视模式10.4.2 V 行可视模式10.4.2 ctrl V 块可视模式 11- 用户和用户组管理及密码管理11.1 用户11.2 用户组 12- su12.1 普通用户 切换到 root12.1.1 su12.1.2 su - 12.2 root 切换到 普通用户tester12.2.1 su12.2.2 su - 13- sudo14- 文件与目录权限的表示方法14.1 类型14.2 权限14.2.1 对于文件14.2.2 对于目录 14.2 chmod14.3 chown 三、Shell15- 什么是shell16- 执行脚本的不同方式16.1 bash filename.sh16.2 ./filename.sh16.3 source ./filename.sh16.4 . filename.sh 17- 管道18- 重定向18.1 输入重定向18.2 输出重定向18.3 错误输出重定向18.4 输出(不管错误还是正确)重定向 19- 变量19.1 定义19.2 变量赋值19.3 变量的引用19.4 取变量值19.5 变量的作用范围19.6 环境变量19.7 预定义变量19.8 位置变量 20- 数组21- 运算符21.1 expr 用于整数值计算21.2 let 22- 特殊字符之 括号22.1 圆括号 () 和 (())22.2 方括号 [] 和 [[]]22.3 尖括号 重定向符号 22.4 花括号 {} 23- expr23.1 用expr计算一个整数运算23.2 用 (两个反引号) 将计算的结果赋值给新的变量23.3 用 $() 将计算的结果赋值给新的变量 24- for的使用25- 使用循环处理未知参数26- 脚本优先级控制27- 一次性计划任务28- 周期性计划任务29- 如果数据不能按照预期时间运行29.1 延迟计划任务29.2 flock 锁文件 三、文本操作篇30- find30.1 find 目录 -name 文件名30.2 find 目录 -regex 文件名30.3 find 目录 -type x -regex 名字30.4 find 目录 -xtime xxx 一、基础
01- 执行环境准备
常见的有三种:
1、云主机 (阿里云腾讯云) 2、无数据的PC(不推荐多系统混跑) 3、虚拟机(推荐) (在windows/mac上安装虚拟机) (可以随时让虚拟机停下来)
02- linux的版本分类
02.1 内核版本
版本号 由 主版本号、次版本号、末版本号 组成
如 5.0.15
(次版本号是奇数为开发版,偶数为稳定版)
https://www.kernel.org02.2 发行版本
开源的,经常见到的发行版本有5种
02.2.1 RedHat Enterprise Linux 软件经过专业人员测试,有部分要收费
02.2.2 Fedora 通过组建社区来免费提供操作系统,没有专业测试,不稳定
02.2.3 CentOS 基于RedHat Enterprise 源代码编译的, 免费 (结合上面两个操作系统)
02.2.4 Debian 为linux定制了华丽的界面
02.2.5 Ubuntu 为linux定制了华丽的界面
02.3 内核和发行版本的区别:
内核版本安装完成后没有用户界面和软件,是提供硬件抽象层、硬盘以及文件系统控制的核心程序 (linux核心只有内核部分安装完后用户界面/软件都没有。内核是系统的心脏是linux中最基层的代码)
发行版本是在内核的基础上加入了用户界面和各种软件的支持 (linux发行版就是在内核的基础上加入用户界面各种软件的支持。比如CentOS、小红帽等等。在内核的基础上开发不同应用程序组成的一个完整的操作系统)
03- 虚拟机安装
推荐 安装VirtualBox虚拟机,然后在虚拟机中安装linux系统
04- 启动linux
登录的shell(终端)
图形终端 命令行终端 远程终端(SSH、VNC)
二、系统操作
05- 帮助命令
05.1 man 帮助
man 命令名称
man ls05.2 help 帮助
1、首先用type来检测命令是内部还是外部命令
type 命令名称如果显示 xx is a shell builtin , 这说明是内部命令
如果显示 xx is aliased to ls --colorauto , 这说明是外部命令
比如type cd
cd is a shell builtin
说明 cd 是 内部 命令type ls
ls is aliased to ls --colorauto
说明 ls 是 外部 命令05.2.1 内部命令
help 命令名称
help cd05.2.2 外部命令
命令名称 --help
ls --help05.3 info 帮助
info 命令名称
info lslinux基本操作命令是命令行
06- ls命令
06.1 -r
r(reverse) 意为逆向(配合-l使用)
06.2 -rt
ls -l -r 默认是按照文件名逆向显示的
ls -l -r -t 按照时间逆向显示06.3 -R
06.4 -a
ls -R 递归显示文件以及文件夹
ls -a 显示隐藏文件07- cp
cp -v 显示复制的进度条
cp -p 复制时保留原有时间
cp -a 复制时保留原有所有属性 时间 属组属主 权限08- 文本查看命令
08.1 cat
08.2 head
08.3 tail
cat 文件名 # 显示文件内容head -行数 文件名 # head -5 fileA 显示文件前5行内容tail -行数 文件名 # tail -5 fileA 显示文件最后5行内容tail -f 文件名 # 当文件内容发生变化,同步更新 比如会实时刷新的日志文件08.4 wc
wc -l 文件名 # 用来 查看文件行数09- 打包压缩 和 解压缩
09.1 打包压缩
压缩--- 打包压缩
打包是指将一大堆文件或目录变成一个总的文件 压缩则是将一个大的文件通过一些压缩算法变成一个小文件
09.1.1 先打包,后压缩
1). 打包命令 cvf
将dirA 打包为 dirA.tar
tar -cvf dirA.tar dirA2). 压缩 分两种 gzip 或 bzip gzip xxx.tar
gzip dirA.tar09.1.2 直接打包并压缩
将dirA 压缩为dirA.tgz (tar.gz是tgz的简称)
tar -czvf dirA.tgz dirA/
tar -czvf dirA.tar.gz dirA/将两个文件夹压缩成一个tgz
tar -czvf dirAB.tgz dirA/ dirB/bzip打包压缩 tar -cjvf dirA.tbz2 dirA tar -cjvf dirA.tar.bz2 dirA
09.2 解压缩
解包
tar -xvf dirB.tar -C ./dir # -C 后面的./dir为 执行解的包放的位置解压缩
tar -xzvf dirB.tgz -C ./B
tar -xjvf dirB.tar.bz2 ./B10- 文本编译器vi
vim 是一个同vi向上兼容的文本编辑器
10.1 正常模式 normal mode
10.2 插入模式 insert mode
有以下从正常模式到插入模式的 进入方式
i # 光标处的前一个字符进入
I # 光标处的当行某个字符前进入a # 光标处的下一个字符进入
A # 光标处的当行末尾字符后进入o # 光标处的下一行进入
O # 光标处的上一行进入10.3 命令模式 command mode
10.3.1 复制
yy 复制当前行
5yy 复制从当前开始的5行
y$ 复制该行中从当前光标开始到结尾的字符10.3.2 删除
dd 删除当前行
5dd 删除从当前开始的5行
d$ 删除该行中从当前光标开始到结尾的字符x 删除光标所在的字符
r 按r后输入要替代的字符10.3.3 光标移动
g 移动到文本第一行
G 移动到文本最后一行^ 移动到当前行最开头
$ 移动到当前行最末尾10.4 可视模式 visual mode
10.4.1 v 字符可视模式
以字符来选择
10.4.2 V 行可视模式
以行来选择
10.4.2 ctrl V 块可视模式
选的是上下对齐的块 适用于删除或增加一整块字符
1. 删除
按ctrl v
键盘上下左右选择要删的字符块
按 d
被选中的字符块就被删掉了2. 增加
ctrl v
键盘上下移动光标 选择要添加字符块的行
按 I (也就是shift i)(光标指向被选字符块的首行首字符)
输入要增加的字符 (比如 output:)
按两次esc
被选中的字符块的每行前面就会加上刚才新增的字符11- 用户和用户组管理及密码管理
11.1 用户
新建用户 useradd
删除用户 userdel
修改用户密码 passwd
修改用户属性 usermodusermod -d /new/work/directory username 将username用户的家目录改为 /new/work/directory chage 更改用户密码过期信息 id username 查看用户的 uid gid group
11.2 用户组
usermod -g 用户组1 用户1
将 用户1 的 组 改为 用户组1su - 当前用户为root, 但要临时切换到普通用户下测试某功能,测试完成后恢复到原来的root用户
12- su
su 命令用来做 root和普通用户的相互切换 切换用户
切换到root : su 后面 可加 可不加 root 切换到tester : su 后面 必须加 tester
tester是举的一个普通用户的例子
12.1 普通用户 切换到 root
12.1.1 su
$ pwd 查看当前目录为 /home/tester$ su 输入root用户密码显示
# pwd # 井号说明已经进入root用户了 查看当前目录为 /home/tester
用 su 切换到了root 身份,但shell环境仍然是普通用户的shell 工作目录仍然是普通用户的工作目录
12.1.2 su -
$ pwd 查看当前目录为 /home/tester$ su - 输入密码显示
# pwd # 井号说明已经进入root用户了 查看当前目录为 /root用 su - 切换到了root 身份,shell环境也切换到root的shell 工作目录变成了root的工作目录
12.2 root 切换到 普通用户tester
12.2.1 su
12.2.2 su -
# pwd # 井号说明当前是root用户 查看当前目录为 /root# su tester shell环境仍然是root, 查看当前目录为 /root# su - tester shell环境也切换到普通用户, 查看当前目录为 /home/tester13- sudo
sudo 将某些只有root用户可以执行的命令授权给普通用户,普通用户就可以在不知道root密码时执行root指定的命令 sudo 是 以自己的身份执行其他用户的指令, 如以普通用户身份执行root用户的指令
比如 只有root用户才能执行关机操作,但如果希望普通用户也可以执行关机,两种方法
方法一: 告诉普通用户root的密码(不安全,不推荐)
方法二: 使用sudo 命令(推荐)使用sudo 命令的操作方法
首先在root下配置哪些命令可以被哪些用户执行 root用户下 执行visudo 添加如下内容 来 赋予 普通用户1 的shutdown 命令
普通用户1 ALL/sbin/shutdown
执行sudo 命令来 做被配置的root下的shutdown 命令 sudo shutdown -h
14- 文件与目录权限的表示方法
0 123 456 789 xxxx xxxxxx xxxxxxxx 类型 –权限– 大小 时间 文件名
14.1 类型
普通文件 d 目录 b 块特殊文件 c 字符特殊文件 l 符号链接 f 命名管道 s 套接字文件
14.2 权限
-rw-r-xr--. 1 tester tester 11 Jul 6 17:19 test.sh
权限一共占9个位数,所以用了1-9来表示位数123 456 789 abc def ghi 权限
abc 文件属主的权限(用户的权限) def 文件属组的权限(用户组的权限) ghi 其他用户的权限(其他人的权限)
14.2.1 对于文件
r 读 r4
w 写 w2
x 执行 r1-rw-r-xr–. 1 tester tester 11 Jul 6 17:19 test.sh 即表示 属主权限为rw- ,数字表示为6, 属主有读和写权限 属组权限为r-x ,数字表示为5, 属组有读和执行权限 属主权限为r-- ,数字表示为4, 其他用户有读权限
notes
对于test.sh 文件,表示属主没有执行权限,属组有执行权限
经测试,属主不能执行14.2.2 对于目录
x 进入目录
rx 显示目录内的文件名
wx 修改目录内的文件名14.2 chmod
原文件 -rw-r-xr–. 1 tester tester 11 Jul 6 17:19 test.sh
chmod 修改文件、目录 权限 可以对权限进行 增加 减少 或 直接设置
用字符表示方法
u 对属主设置
g 对属组设置
o 对其他设置对属主 增加执行权限 chmod ux test.sh 对属组 减少执行权限 chmod g-x test.sh 对其他 设置为执行权限 chmod ox test.sh 对属主 属组 其他 都增加读取权限 chmod ar test.sh 对属主 属组 其他 都增加读写执行权限 chmod arwx test.sh 用数字表示方法 为所有属性 都增加读写执行权限 chmod 777 test.sh14.3 chown
chown 来 修改属主(owner)、属组(group)
Examples: chown root /u Change the owner of /u to root. 将/u的 属主 更改为“root”chown :staff /u Change the group of /u to staff. 将/u的 属组 更改为“staff”chown root:staff /u Likewise, but also change its group to staff. 将/u的 属主 更改为“root”, 也将其属组更改为“staff”chown -hR root /u Change the owner of /u and subfiles to root. 将/u和子文件的 属主更改为“root”三、Shell
15- 什么是shell
shell是命令解释器,用于解释用户对操作系统的操作
shell把用户执行的命令翻译给内核, 内核根据命令执行的结果,再把结果反馈给用户
CentOS 7 默认使用的shell是bash
16- 执行脚本的不同方式
有一个内容如下的文件 /home_local/tester/testMethods.sh 来检测不同的执行方式的异同
#!/bin/sh
pwdcd /home16.1 bash filename.sh
在当前的终端上产生一个bash的子进程, 在子进程里执行脚本,执行完成后回到父进程 使用这种方式执行, 发现虽然没有执行权限, 但也可以执行
脚本中显示cd到了/home目录, 但是执行完成后又回到了原来的目录
执行
bash testMethods.sh结果
/home_local/tester
/home查看 pwd
/home_local/tester16.2 ./filename.sh
产生子进程用#! (Sha-Bang)来解释脚本 使用这种方式执行, 没有执行权限时是不能执行的
脚本中显示cd到了/home目录, 但是执行完成后又回到了原来的目录
先给脚本添加可执行的权限
chmod 777 testMethods.sh执行
./testMethods.sh结果
/home_local/tester
/home查看 pwd
/home_local/tester16.3 source ./filename.sh
在当前的进程中执行 虽然没有执行权限, 但也可以执行 脚本中显示cd到了/home目录, 最终当前目录是/home 会对当前环境造成影响
执行
source ./testMethods.sh结果
/home_local/tester
/home查看 pwd
/home16.4 . filename.sh
在当前的进程中执行 虽然没有执行权限, 但也可以执行 脚本中显示cd到了/home目录, 最终当前目录是/home 会对当前环境造成影响
执行
. testMethods.sh结果
/home_local/tester
/home查看 pwd
/home17- 管道
管道用于进程通信
管道符 | 将前一个命令执行的结果传递给后面的命令
(将前一个命令的输出作为后一个命令的输入) 同时会为两个命令创建子进程
18- 重定向
将输出到 标准输出中的内容 输出到 文件
18.1 输入重定向
wc -l filename.sh 显示文件行数
wc -l 然后在页面中输入任意几行信息,按ctrl D 停止输入, 结果显示输入信息的行数
wc -l filename.sh 显示文件行数, 用文件代替用户输入输入
wc -l testMethods.sh显示
6 testMethods.sh输入
wc -l testMethods.sh显示
618.2 输出重定向
echo xxx filename.sh 覆盖
echo xxx filename.sh 追加18.3 错误输出重定向
18.3.1 输入一条不存在的命令 nocmd 控制行下方显示错误 bash: nocmd: command not found…
18.3.2 将错误输出重定向到 err.txt nocmd 2 err.txt
查看err.txt cat err.txt bash: nocmd: command not found…
18.4 输出(不管错误还是正确)重定向
nocommand all.txt
输出到标准输出的输出到文件
19- 变量
19.1 定义
有意义的变量名 不区分类型
19.2 变量赋值
为变量赋值的过程,称为变量替换
1) 变量名变量值 [等号左右不能出现空格]
value2332) 使用let为变量赋值 [通常let用来计算]
let value10333) 将命令赋值给变量
通常是把命令的值赋给变量
lls4) 将命令结果赋值给变量,使用$() 或
let c$(ls -l /etc)
let cls -l /etcnewed_filels *.html -t | head -1 # 取当前目录下最新的一个 *.html文件
bak_file${newed_file%.*}_date %y%m%d%H%M # 名字后加时间戳5) 变量值有空格等特殊字符可以包含在 或 中
string1hello world
string2hello world19.3 变量的引用
${变量名} 也可以 $变量名
19.4 取变量值
echo ${变量名} echo $变量名
19.5 变量的作用范围
变量的默认作用范围 只针对当前的shell(终端)有效
如果在当前的shell产生新的子shell,或者是当前shell的平行shell或父shell,都是无效的
step1: 举个例子 命令行中给一个变量赋值
demo_var333step2: 然后在一个脚本中调用该变量,并打印值 文件名 testDemo.sh
#!/bin/sh
echo demo_var$demo_varstep3: 用两种在当前shell执行的执行方式来执行
source test07.sh #执行结果 demo_var333
. test07.sh #执行结果 demo_var333可以获取到该变量的值
step4: 用两种会创建子进程的执行方式来执行
bash test07.sh #执行结果 demo_var
./test07.sh #执行结果 demo_var发现并不能获取到该变量的值
改变变量的默认作用范围 用 export export: 希望在子进程父进程以及其他shell中可以读到当前shell中定义的变量时, 使用export
在命令行中加上
export demo_varstep5: 加上export后 然后用两种会创建子进程的执行方式来执行
bash test07.sh #执行结果 demo_var333
./test07.sh #执行结果 demo_var333可以获取到该变量的值
step6:当不使用变量了,可以对变量删除, 使用unset
unset demo_var19.6 环境变量
把变量保存在系统中,使它成为环境变量
环境变量:每个shell打开都可以获取到的变量
1)现有的环境变量有哪些 用 env 查看
env
用echo $xxx 来输出值2) 当前目录的搜索路径
echo $PATH我们在执行 ls echo 这类命令时, 前面是没有带路径的,这些命令都没有在当前路径, linux就是通过 $PATH 这个搜索路径来找的
输入
echo $PATH显示
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin3) 在原来的PATH路径上加上我们的当前目录 /home/tester
PATH$PATH:/home/tester就有当期的目录了,可以直接执行
test0717.sh19.7 预定义变量
echo $? # 上一条命令的执行结果(是否成功)
echo $$ # 显示进程的id号
echo $0 # 显示当前的进程名称19.8 位置变量
为shell脚本添加参数
test0717.sh 如果第二个参数有值, 则用传来的值 如果第二个参数没有值, 则用_来代替
#/bin/sh
echo para1$1
echo para2${2-_}输入
./test0717.sh a结果
para1a
para2_输入
./test0717.sh a bbb结果
para1a
para2bbb20- 数组
定义一个名为IPTS的数组
Array( 10.0.0.1 10.0.0.2 10.0.0.3)1)第一个元素
输入
echo ${Array}显示 第一个元素
10.0.0.12)所有元素的列表
输入
echo ${Array[]}显示 所有元素的列表
10.0.0.1 10.0.0.2 10.0.0.33)元素个数
输入
echo ${#IPTS[]}显示 元素个数
34)下标值为1的元素
输入
echo ${IPTS[1]}显示 下标值为1的元素
10.0.0.221- 运算符
21.1 expr 用于整数值计算
1,输入
expr 42 #(错,要数字与运算符中间要加空格)显示
422,输入
expr 4 2显示
63, 输入
expr 4 9.0 #(错, 数字必须是整数)显示
expr: non-integer argumentexpr算得的值如何赋给变量4, 输入
add_valueexpr 4 2
echo add_value$add_value显示
add_value621.2 let
let 变量名变量值
1, 输入
let b3*4
echo $b显示
12值以0开头为八进制 值以0x开头为十六进制
双圆括号是let命令的简化
((a10))((a))echo $((1022))22- 特殊字符之 括号
22.1 圆括号 () 和 (())
() 产生子shell 使用圆括号会产生一个子shell,如(xyz223)数组初始化
(()) 做算术运算 (()) 是 let 命令的简化 ((a82))22.2 方括号 [] 和 [[]]
[] 做测试 [ 4 -gt 2 ]
[[]] 测试扩展[[ 4 2 ]] 做真正的测试22.3 尖括号 重定向符号 和 做输入输出重定向 比较大小22.4 花括号 {}
{ } 输出范围 ehco {0..9} 输出0-9的数字let 变量名变量值
23- expr
expr (evaluate expressions的缩写)。“表达式求值”。 Shell expr是一个功能强大。并且比较复杂的命令它除了可以实现整数计算还可以结合一些选项对字符串进行处理例如计算字符串长度、字符串比较、字符串匹配、字符串提取等。
23.1 用expr计算一个整数运算
expr \( 4 2 \) \* 2
1223.2 用 (两个反引号) 将计算的结果赋值给新的变量
value1expr \( 4 2 \) \* 2
echo $value11223.3 用 $() 将计算的结果赋值给新的变量
value2$(expr \( 4 2 \) \* 2)
echo $value21224- for的使用
for 参数 in 参数列表
do操作命令
done参数列表的产生: 使用 命令 / 文本文件
{0..9} --- 产生1-9的列表
/home/*.shfor filename in ls /home/*.shsh
domv $filename $(basename $filename *.shsh).sh #将后缀为shsh改为sh
done25- 使用循环处理未知参数
while [ $# -ge 1 ];
doecho total paras $#if [ $1 help ] ; thenecho $1 $1fishift
done26- 脚本优先级控制
使用nice renice 调整脚本优先级 避免出现 不可控的死循环
27- 一次性计划任务 设置at 时间 命令查看atq28- 周期性计划任务 配置crontab -e查看crontab -l29- 如果数据不能按照预期时间运行
29.1 延迟计划任务
anacontab29.2 flock 锁文件
三、文本操作篇
30- find
30.1 find 目录 -name 文件名
find /etc -name passwd 查找 /etc 目录下文件名为passwd的文件
find . -name *bin 查找 当前目录下后缀名为 bin的文件名30.2 find 目录 -regex 文件名
find /etc -regex .*wd 查找 /etc 目录下以wd结尾的文件
find /etc -regex .etc.*wd 查找 /etc 目录下含 etc且wd结尾的文件30.3 find 目录 -type x -regex 名字
find 目录 -type d -regex 目录名
find 目录 -type f -regex 文件名30.4 find 目录 -xtime xxx
find 目录 -atime xxx atime access 访问时间
find 目录 -ctime xxx ctime change 改变时间
find 目录 -mtime xxx mtime modify 修改时间