Linux学习笔记(学习环境 centerOS 7)
1、RPM(红帽软件包管理器):RPM 有点像 Windows 系统中的控制面板,会建
立统一的数据库文件,详细记录软件信息并能够自动分析依赖关系。
2、Yum :Yum 软件仓库可以根据用户的要求分析出所需软件包及其相关的依赖关系,然后自动从服务器下载软件包并安装到系统。
这两款软件发布之前,在Linux上安装软件完全依靠程序员自己分析软件之间的依赖关系,版本差异等,额,想想就可怕。
总结:RPM 是为了简化安装的复杂度,而 Yum软件仓库是为了解决软件包之间的依赖关系。
基础:
1)Linux命令基本格式:命令名称 [命令参数] [命令对象]
注意命令参数有两种格式 长格式( --help ) 短格式 ( -h )
命令对象一般是指要处理的文件、目录、用户等资源
常用命令
- echo “ XXX” 输出命令,uname -r 查看系统内核
- date "+%Y-%m-%d %H:%M:%S" 格式化输出系统当前时间
常用:修改系统时间:date -s "20190404 8:30:00" (此命令将系统时间修改为 2019-04-04 8:30:00)
4)reboot重启系统,poweroff关机
5)wget + 下载地址 (下载命令)
6)ps -a(查看所有进程)
7)top命令相当于windows上的任务管理器
根据服务名称查看所用的pid:pidof 服务名称
根据端口号查看pid:lsof -i:80(查看80端口对应的pid)//也可用于查看80端口是否被占用
- kill +进程pid killall+服务名称(杀死该服务的所有进程)
常用系统状态检测命令
- ifconfig(查看系统ip地址)
- uname -a(查看系统内核信息)
- uptime(查看系统负载信息)
它可以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近 1 分钟、 5 分钟、 15 分钟内的压力情况(下面加粗的信息部分);负载值越低越好,尽量不要长期超过 1,在生产环境中不要超过 5
- free -h (查看系统内存使用量)
- last(查看所有登录系统的记录),history(查看所有执行过的命令)
文本文件编辑命令
- cat(查看文本,显示所有的信息,适合短文本,-n参数显示行号);more(查看文本,适合长文本,百分比显示)
15)head -n 20(查看文本前20行) tail -n 20(查看后20行) tail -f(查看最新文本信息)
16)tr a b(替换文本信息,将a全部换成b,相当于ctrl+f)
17)stat(查看文本具体存储,修改等时间)
18)diff --brief A.txt B.txt(对比A B文本内容是否相同) diff -c A.txt B.txt(显示具体哪里不相同)
文件目录管理命令
- touch(创建空白文件) -d修改修改和读取时间 touch -d “ 2019-04 -04 12:00:00”
- mkdir(创建文件夹) mkdir -p a/b/c/d/e (创建层叠关系的文件目录)
- cp(复制)mv(剪切)rm(删除 -rf删除文件夹或文件,不再确认提示)
- file查看文本类型
打包压缩与搜索命令
- tar -czvf test.tar.gz /test (打包test文件夹 )
tar -xzvf test.tar.gz -C /test (将test.tar.gz压缩包解压到test文件夹)
参数:-c 打包 -z 用 Gzip 压缩或解压 -v 显示打包或解压过程 -f 目标文件
- grep(搜索命令 用于在文本中执行关键词搜索 ) -n 显示行号 -v反向选择 -i 忽略大小写
- find(用于按照指定条件来查找文件 ) find /etc -name "host*" -print (查找etc文件夹下的所有以host开头的文件或文件夹)
管道符、重定向与环境变量
- 输入重定向:命令 < 文件 将文件作为命令的标准输入 ;
- 标准输出:命令 > 文件 将标准输出到文件,并清空原有信息。
命令 >> 文件 将标准输出到文件,追加到原有信息后面
命令 2> 文件 将错误信息输出到文件,清空原有信息
命令 2>> 文件 将错误信息输出到文件,追加到原有信息后面
命令 &>> 文件 将正常和错误信息都输出到文件并追加到原有信息后
echo “hello” > /dev/null 输出到无底洞
- 管道命令符 其执行格式为“命令 A | 命令 B”
- 命令行的通配符、
常用通配符:
星号(*)代表匹配零个或多个字符
问号(?)代表匹配单个字符
中括号内加上数字[0-9]代表匹配 0~9 之间的单个数字的字符
中括号内加上字母[abc]则是代表匹配 a、 b、 c 三个字符中的任意一个字符。
例:find /etc/sda*
- 常用的转义字符
➢ 反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。
➢ 单引号(''):转义其中所有的变量为单纯的字符串。
➢ 双引号(""):保留其中的变量属性,不进行转义处理。
➢ 反引号(``):把其中的命令执行后返回结果。
环境变量
- 用户在执行一条命令后,简单来说linux会做4个步骤:
1:判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是的话则接执行
2:Linux 系统检查用户输入的命令是否为“别名命令”,即用一个自定义的命令名称来替换原本的命令名称。(给命令起别名:alias 例:>alias (显示所有别名)
>alias rm1='rm -i'
在执行rm1时相当于执行 rm -i。unalias rm1 取消别名 )
3、Bash 解释器判断用户输入的是内部命令还是外部命令
4、系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作 PATH, 作用是告诉 Bash 解释器待执行的命令可能存放的位置,然后 Bash 解释器就会在这些位置中逐个查找。
可以通过设置PATH这个变量修改命令查找的目录 PATH=$PATH:/test/bin
- export +变量(将变量升级为系统变量,所有用户都可使用)
Vim 编辑器与 Shell 命令脚本
Vim编辑器
- vim编辑器有三种模式:
1:命令模式:控制光标移动,可进行文本的复制,剪切,删除,查找(esc切换此模式)
yy复制,5yy复制5行;dd剪切,5dd剪切5行;u退回更改
2:输入模式:文本输入(i切换模式,o光标下一行进入此模式)
3:末行模式:退出或保存。(:切换,q退出,w保存,!强制) :set nu (显示行号) :
:set nonu (取消行号)
:%s/a/b/g(将全文中的a换成b) /a(从上到下搜索a) ?a(从下到上搜索a)
编写shell脚本
- shell脚本分为两种工作模式:交互式;批处理;linux默认命令行终端解释器为bash
- 脚本名:xxx.sh 。.sh为脚本的后缀,第一行 #!/bin/bash 意思是告诉系统使用bash解释器。第二行 #注释
脚本未付执行权限时应使用 bash xxx.sh执行 ,给脚本最高权限 chmod 777 xxx.sh 后可以 ./xxx.sh 执行
- 脚本接收用户参数
# ./ xxx.sh one two three(执行xxx.sh,并传入三个参数)
在脚本里可以用以下形式接收参数:$*(所有参数,为一个参数) $@(所有参数,分为多个参数) $#(参数个数) $1(接收第一个参数 即 one;其它类似) $$显示本shell的pid 此外 $? 用来结束上一个命令执行后的返回值。
- 脚本表达式
条件表达式基本格式 [ 条件表达式 ] ,注意两边都要有空格
文件类判断
例: [ -d /test ] test是否为目录 [ -f /test ] test是否为文件 [ -e /test ] test是否存在
-r / -w / -x当前用户是否有权限读 ,写,执行
字符串类判断
例:[ $name= “test” ] 判断name变量是否等于test; [ -z $name ]判段name是否为空
数字类判断
例:[ $num -eq 3 ] num是否等于3 ;[ $num -gt 3 ] 是否大于3; [ $num -ge 3 ] 是否大于等于3
[ $num -lt 3 ]是否小于3; -le小于等于;-ne不等于
所有的判断结果使用 $?来接收,当结果正确返回 0 ;否则返回其它随机数值
37)表达式的逻辑运算符
&&标识且,当前面的命令执行成功后才会执行后面的 如:[ $num -lt 3 ]&& echo ”success”
||标识或,当前面命令执行错误后才会执行 如:[ $num -lt 4 ]||echo “error”
! 逻辑非;[ ! $num -lt 4 ]
38)流程控制语句
if基本格式: for循环格式 while循环格式
If [ 条件表达式 ] for 变量 in 变量列表 while [ 条件表达式 ]
then do do
...... echo “ $变量” do something
elif [ 条件表达式 ] done done
then
.......
else
......
fi
case基本格式
case $a in
[ a-z ] |[ A-Z ])
echo “ ------”
;;
[ 1-9 ])
echo “=====”
;;
*)
Exit 0
esac
- shell函数
变量作用域
变量分为 全局变量,局部变量,环境变量
函数格式
function name(){
name1 = ”李四” #全局变量
loacl name2 = “张三” #局部变量
local namecat =”$name1 : $name2” #拼接字符串
${#namecat} #获取字符串长度
${string: start :length} #截取字符串
local array(1,2,3,4) #定义一个数组并初始化
${#array[*]} #获取数组长度
${array[0]} #获取数组里第一个值
If [[ -z $str1 || -z $str2 ]] #表达式推荐使用[[ ]] 格式,忽略很多细节,更简洁
then
declare -i a #定义一个整数变量a
a=$((1+1)) #数字计算格式 (())
fi
}
详细shell脚本知识 http://c.biancheng.net/view/706.html