Linux学习

Linux学习

Linux入门

基础介绍

Linux系统以文件的存储方式,文件系统由3部分组成:与文件管理有关的软件、被管理的文件、实施文件管理所需数据结构。

Linux分区:Boot分区、根分区、swap分区

swap分区:从硬盘上划出一定空间作为虚拟内存,用于当物理内存不够后使用。大小一般是物理内存的两倍,但硬盘速度远慢于内存所以当内存不够时应当加内存,所以swap分区设置1G即可。

硬盘分区:主磁盘分区、拓展磁盘分区、逻辑分区

硬盘的容量=主分区容量+拓展分区容量(最多4个分区);拓展分区容量=各逻辑分区容量之和

在Linux中第一块硬盘分区为hda分区(或者是sda分区),主分区编号为hda1-4,逻辑分区从5开始。第二块硬盘分区为hdb分区。

系统安装

虚拟机:VMware workstation 官网:https://www.vmware.com/

镜像:CentOS 7.2x86_64 官网:https://www.centos.org/

下载地址:

http://download3.vmware.com/software/wkst/file/VMware-workstation-full-10.0.1-1379776.exe

http://mirrors.aliyun.com/centos/7.2.1511/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso

虚拟机新增、操作系统安装步骤可参考:https://blog.csdn.net/babyxue/article/details/80970526

ps:设置固定IP,网络适配器需选择NTA模式

服务器网卡/DNS等关键配置文件位置:/etc/sysconfig/network-scripts/ifcfg-eno16777736,/etc/resolv.conf

重新启动网络配置:service network restart

查看ip命令:ip addr list, ifconfig

访问网页命令:curl xxxx

附:安装配置JDK,tomcat。安装两台虚拟机并实现两台机器间互相访问

ps:防火墙

#停止firewall
systemctl stop firewalld.service 
#开启firewall
systemctl start firewalld.service
#禁止firewall开机启动
systemctl disable firewalld.service 
#查看默认防火墙状态(关闭后显示not running,开启后显示running)
firewall-cmd --state

目录介绍

/ 根目录

/bin 存放必要的命令

/boot 存放内核以及启动所需的文件

/dev 存放硬盘设备文件

/etc 存放系统配置文件

/home 普通用户的主目录,用户数据存放在其主目录中

/lib 存放必要的运行库

/mnt 存放临时的映射文件系统,通常用来挂载光盘使用

/proc 存放存储进程和系统信息

/root 超级用户的主目录(与/home相对)

/sbin 存放系统管理程序

/tmp 存放临时文件

/usr 存放应用程序、命令程序文件、程序库、手册和其他文档

/var 系统默认日志存放目录

常用命令

#代表是管理员,$代表是普通用户

进入目录:cd 当前路径:pwd

查看:ls, ll -a

创建/删除目录:mkdir -p, rmdir

创建/删除文件:touch, rm -rf

复制/移动/重命名:cp, mv

清屏:clear

硬链接:ln --相当于备份; 软链接:ln -s --相当于快捷方式

查看文件:cat查看全部;more分页查看;less逐行查看;tail查看尾部n行;head查看头部n行

日志查看常用命令:tail -200f xx.log,grep -n '匹配字符串' xx.log,

查看匹配字符串日志:less +99p xx.log 操作:/匹配字符串;走:n/N/上键/下键

查看指定时间段日志并打印:sed -n '/2018-07-17 13:02:29/,/2018-07-17 13:02:29/p' xx.log > /root/yy.log

回显、覆盖/追加:echo ok > xx.txt,echo ok >> xx.txt

vi命令:

三种模式:命令行模式、录入模式、末行模式

命令行模式:可以复制、黏贴、删除、撤销,转换为录入模式

yy:复制光标所在整行; p:黏贴

dd:删除整行; delete键/x:删除一个字符

u/U:撤销

G:跳到末尾行; gg:跳回首行

$:跳到行尾; ^:调回行首

i:转换为录入模式(从光标所在字符)

Esc键:从录入模式转至命令模式

末行模式:查找、替换、末行保存命令

:w -->保存 :q --> 退出

:wq --> 保存退出 :wq! --> 强制保存退出

:q! --> 强制退出(不保存)

:%d --> 清空

正向查找 --> /xx 走:n下一个/N上一个

全局替换 --> :%s/原文本/替换文本/g

用户及权限

用户分为三类 :root 用户(ID 为0);系统用户(1-499);普通用户(500 以上)

显示当前用户的信息:id 修改当前用户密码:passwd

新建/修改/删除用户:useradd, usermod, userdel

创建/修改/删除组:groupadd, groupmod, groupdel

权限管理

drwxrwxr-x 2 root root 4096 Dec 10 01:36 dirAbc
-rw-rw-r-- 2 root root 4096 Dec 10 01:36 test.txt
  U  G  O 所属用户 所属组 大小      时间    文件/目录名
d:目录,-:文件
U=user;G=group;O=other
r(read)=4;  w(write)=2; x(execute)=1

修改文件/目录权限:chmod -R 777 xxxx

修改拥有者/组:chown -R 用户:用户 xxxx

附:权限掩码

每一个终端都拥有一个 umask 属性(普通用户umask=002,root 用户umask=022)

用于确定新建文件、目录的默认权限(新建目录权限=777-umask,新建文件权限=666-umask)

软件包管理

RPM命令详解:

安装:rpm -ivh xx 升级:-Uvh

卸载:rpm -e xx

查看已装包:rpm -qa

查看是否已安装:rpm -q xx 或者 rpm -qa|grep xx

查看安装路径:rpm -ql xx

附:grep 查找文件内容 | 管道符

去除'#号行及空行',并记录到新文件:grep -v "#" xx.txt | grep -v "^$" >> xx.txt.bak

YUM命令详解

安装:yum install soft_name

卸载:yum remove soft_name

升级:yum update soft_name

查看:yum list

注:rpm与yum的区别

rpm适用于所有环境,是底层管理工具;

yum要搭建本地yum源(/etc/yum.repos.d)才可以使用!是上层管理工具,会自动解决依赖性。

安装包分rpm包及源码包(.tar/.tar.gz/.zip)

安装方法有rpm安装、yum安装、源码安装(需先下载安装包)

从服务器下载包:wget xxxx

安装3步骤(解压后):

  1. ./configure --prefix=/usr/local/nginx/ 预编译

  2.  make 编译

  3.  make install 安装

tar命令详解:

-c:建立压缩档案 -x:解压

-z:有gzip属性的 -j:有bz2属性的

-v:显示所有过程 -f:使用档案名字(此参数必须最后一个,后面只能接档案名)

压缩:tar -cvf a.tar a        tar -zcvf a.tar.gz a        zip -r a.zip a

解压:tar -xvf a.tar           tar -zxvf a.tar.gz           unzip a.zip                  jar -xvf a.war

上传:rz 下载:sz

磁盘管理

Linux 硬件设备一般都是存放在/dev/下,硬盘格式一般为/dev/sda /dev/sdb ,光盘格式为/dev/cdrom

查看硬盘容量/分区信息:fdisk -l

磁盘分区:fdisk /dev/sdb 按n为新增,按p为创建主分区,w为写入分区

格式化分区:mkfs.ext3 /dev/sdb1 (格式可选,分区逐个格式化)

挂载分区:mount /dev/sdb1 /data --将sdb1分区挂载到data目录下

挂载光盘:mount /dev/cdrom /mnt --将光盘挂载到mnt目录下

挂载移动硬盘:mount -t ntfs-3g /dev/sdc /data1

远程传送:scp xx.txt root@ip:/pathName

附:系统资源相关命令

查看文件/目录磁盘使用空间大小:du -sh *

查看文件系统整体磁盘空间使用情况:df -h, df -ih

查看内存/cpu使用率:top 附:可用内存=4free+4buffers+5cached

查看系统使用内存:free -h

查看xx进程:ps -ef |grep xx

杀掉进程:kill -9 进程号

其他命令:w、who、uptime、iostat -x 1 5 、vmstat

监控java线程数:ps -eLf | grep java | wc -l

监控网络客户连接数:netstat -n | grep tcp | grep 侦听端口 | wc -l

查看端口对应进程号:netstat -nlp|grep 端口

 

Linux进阶提升

学习软件及服务配置的步骤

  1. 搞清楚软件、服务是做什么用的,及为什么要用它?

  2. 这个软件的安装方式是什么?是在服务端还是客户端安装

  3. 该软件安装完后,路径在哪?配置文件、启动文件在哪?

  4. 配置文件的内容是什么?参数含义是什么?

  5. 如何启动服务?怎么查看服务是否已启动?端口号是多少?

  6. 软件、服务部署好后,怎么验证、怎么使用?

NTP

客户端获取和同步时间

NTP(Network Time Protocol,网络时间协议),主要用于同步网络中各个计算机的时间。

附:crontab服务--计划任务服务

DHCP

客户端动态获取IP地址

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用 UDP 协议工作,主要用途:给内部网络或网络服务供应商自动分配 IP 地址。

Samba、NFS、FTP

Samba--Windows与Linux之间文件共享

SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。

NFS--Linux与Linux之间文件共享

NFS (Network File System ,网络文件系统)是一种用于分散式文件系统的协议,主要功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据。附:NFS在信息传送过程中依赖于RPC协议 (Remote Procedure Call 即远程过程调用,是能使客户端执行其他系统中程序的一种机制)

FTP--文件共享与传输服务。支持Windows、Linux

FTP 是文件传输协议。FTP先使用TCP生成一个虚拟连接用于控制信息,再生成一个单独TCP连接用于数据传输。 VSFTPD 是一款在 Linux 发行版中最主流的FTP服务器程序;特点是小巧轻快,安全易用。

附:VSFTPD 虚拟用户配置

Apache WEB

Apache WEB 服务器入门简介

Apache HTTP Server(简称 Apache)是 Apache 软件基金会的一个开放源码的网页服务器,是最流行的 Web 服务器端软件之一。特点是简单、速度快、性能稳定,并可做代理服务器来使用。

yum安装:yum install httpd -y

*源码安装(下载、解压后):

0. yum install apr apr-util apr-devel apr-util-devel -y

1. ./configure --prefix=/usr/local/apache2 2. make 3. make install

启动命令:/usr/local/apache2/bin/apachectl start

配置文件:/usr/local/apache2/conf/httpd.conf

Apache 虚拟主机企业应用

通俗理解:1个服务器,部署2套服务在不同目录(对应两个初始页面),使用2个域名分别访问对应服务

  1. 修改虚拟主机配置文件:/usr/local/apache2/conf/extra/httpd-vhosts.conf

  2. 在httpd.conf引入拓展配置

prefork/worker 工作模式

prefork模式:master进程生成多个子进程,每个进程处理一个连接,以多个进程的方式工作。特点:稳定,但吃内存,不适用于高并发的场景。

worker模式:master进程生成多个子进程,子进程再生成多个线程,每个线程处理一个连接。支持多线程和多进程混合模式,内存使用比Prefork要低很多,更适用于高并发场景。但如果一个线程崩溃,所属进程就会连同其所有线程一起down掉。

配置路径:/usr/local/apache2/conf/extra/httpd-mpm.conf

StartServers        8       #启动Apache的时候,唤醒几个PID来处理服务的
MinSpareServers     25      #最小预备使用的空闲PID数量 
MaxSpareServers     75      #最大预备使用的空闲PID数量 
MaxClients          4096    #最多可以有多少个客户端同时连接到Apache
ServerLimit         4096    #服务器的限制
MaxRequestsPerChild 10000   #每个进程能够提供的最大传输次数,完成后自行kill掉
ThreadsPerChlid     500     #worker模式属性。进程所支持的线程数

Apache Rewrite 规则

Rewrite URL 重定向就是实现URL的跳转和隐藏真实地址,可以把复杂的URL变成简洁直观的URL

eg.可以把所有配置的域名都跳转到一个域名:

RewriteEngine on                        //启用 rewrite 引擎 
RewriteCond %{HTTP_HOST} ^wugk1.com     //匹配以 wugk1.com 开头的域名
RewriteRule ^/(.*)$ http://www.xxxx.com/$1 [R] //匹配上面条件,然后跳转到 http://www.xxxx.com

 

Shell编程

Shell简介

Shell 是操作系统的最外层,Shell 可以合并编程语言以控制进程和文件,以及启动和控制其它程序。shell 通过提示用户输入,向操作系统解释该输入,然后处理来自操作系统的任何结果输出来管理用户与操作系统之间的交互。简单来说 Shell 就是一个用户跟操作系统之间的一个命令解释器

Shell 是用户与Linux操作系统之间沟通的桥梁用户可输入Shell命令执行,也可使用Shell脚本编程去运行。最常用的 shell 是 Bash(Bourne Again Shell),因为易用和免费所以在日常工作中被广泛使用,是大多数 Linux 系统默认的 Shell。(附:shell 脚本一般文件名以.sh 结尾,同时文件第一行定义该脚本为 shell 脚本)

#!/bin/bash                 //表示定义该脚本是一个 shell 脚本(固定格式)
#This is my First shell     //#号属于注解,SHELL不会解析
echo “Hello World !”        //shell 脚本主命令

直接执行:./xx.sh

调试执行:/bin/bash -x doSomething.sh

Shell 编程之变量详解

A=xxx
echo “Printf variables equal is $A”

常见系统变量:

$0 当前脚本的名称

$n 当前脚本的第 n 个参数,n=1,2,…9

$* 当前脚本的所有参数(不包括程序本身)

$# 当前脚本的参数个数(不包括程序本身)

$$ 当前脚本的进程ID

$? 命令或程序执行完后的状态,一般返回 0 表示执行成功

$UID 当前用户的 ID

$PWD 当前所在的目录

条件流程控制语句

条件语句 if

NUM=100
if (( $NUM > 4 )) ;then
    echo “this num is $NUM greater 4 !”
else
    echo “this num is $NUM greater 4 !”
fi
​
if [ ! -d /data/20140515 ];then
    mkdir -p /data/20140515
fi

逻辑运算符解析:

-f 判断文件是否存在 eg: if [ -f filename ]     -d 判断目录是否存在 eg: if [ -d dir ]

-eq 等于 应用于:整型比较 equal               -ne 不等于 应用于:整型比较 not equal

-lt 小于 应用于:整型比较 letter                  -gt 大于 应用于:整型比较 greate

-le 小于或等于 应用于:整型比较               -ge 大于或等于 应用于:整型比较

-a 双方都成立(and) 逻辑表达式             -o 单方成立(or) 逻辑表达式

-z 空字符串

附:根据用户输入做处理

read -p "请输入字符串:" str
if [ "$str" = "hello" ]; then
        echo "world"
fi

循环语句 for

for var in 字符串      #或 for ((i=1;i<=100;i++))
do
    echo $var
done

循环语句 while

while 条件
do
    doSomething
done

循环语句 until

until 条件
do
    doSomething
done

选择语句 case

case i in
    pattern1)
        语句 1
    ;;
    pattern2)
        语句 2
    ;;
    *)
        语句 3
    ;;
esac

选择语句 select

#Select 一般用于选择菜单的创建,可以配合 PS3 来做菜单的打印输出信息
PS3="What you like most of the open source system?"
select i in CentOS RedHat Ubuntu
do
    echo "Your Select System: "$i
done

其他常用常用命令

expr:可以实现数值运算、数值或字符串比较、字符串匹配、字符串提取、字符串长度计算等功能

seq:用于输出序列化的内容。eg.连续/增量输出,指定分隔符输出,补位操作等

sed:主要用于文本替换操作,选项很多见文档。eg. sed -i ‘s/old/new/g’ file

awk:逐行处理文件中的数据,awk 'pattern + {action}'

grep:文本搜索工具,功能十分强大

ssh:远程连接 ssh ip,ssh -l root ip "命令"

 

其他

DNS

DNS(Domain Name service)-- 域名服务,主要用于因特网上 域名和 IP 地址相互映射。

MongoDB

MongodDB 是NoSQL(非关系型数据库)里面非常有代表性的数据库。它是一个基于分布式文件存储的数据库。

特点:可扩展,高性能,易使用,模式自由,存储数据非常方便等。

Redis

Redis 是一种高级 key-value 数据库。它跟 memcached 类似,而且支持的数据类型很丰富,包括 string(字符串)、list(链表)、set(集合)、zset(sorted set有序集合) 和 hash(哈希类型)。

附:Redis+Keepalived主从架构

MySQL

Linux安装教程参考:https://www.cnblogs.com/dengshihuang/p/8029092.html

启动:/etc/init.d/mysql start

--查看mysql状态:service mysql status

--启动mysql: service mysql start 或 /etc/init.d/mysql start

--停止mysql: service mysql stop 或 /etc/init.d/mysql stop

登陆:mysql -hlocalhost -uroot -p

附配置文件路径:/etc/my.cnf

常用命令

查看数据库:show databases;

创建数据库:create database $database_name;

进入数据库:use $database_name;

查看库表:show tables;

创建库表:create table $table_name (id varchar(20),name varchar(20));

插入数据:insert into $table_name values ("001","xxx");

查看数据:select * from $table_name;

索引创建:ALTER TABLE table_name ADD INDEX/UNIQUE/PRIMARY KEY index_name (name)

CREATE INDEX/UNIQUE/PRIMARY KEY index_name ON table_name (name)

...

导出:mysqldump -uroot -p123456 db_name >/tmp/xx.sql

导入:mysql -uroot -p123456 db_name

授权:grant select,insert,update,delete/all on db_name.* to username@”x.x.x.x” identified by ‘password’

flush privileges;

执行脚本:source xx.sql

慢查询解析

1) 查看当前mysql慢查询:show variables like "%slow%"

2) 开启慢查询日志方法:set global slow_query_log=on;

在 my.cnf 中添加,如下:

log-slow-queries = /data/mysql/var/db-Test2-slow.log #日志目录

long_query_time = 0.1 #记录下查询时间查过1秒

log-queries-not-using-indexes #表示记录下没有使用索引的查询

3) 日志分析eg. mysqldumpslow -s r -t 10 /data/mysql/var/db-Test2-slow.log

数据库主从架构

Mysql 主从同步其实是一个异步复制的过程,要实现复制首先需要在 master 上开启 bin-log 日志功能,整个过程需要开启 3 个线程,分别是 Master 开启 IO 线程,slave 开启 IO 线程和 SQL 线程。

a) 在从服务器执行 slave start,从服务器上 IO 线程会通过授权的用户连接上 master, 并请求 master 从指定的文件和位置之后发送 bin-log 日志内容。

b) Master 服务器接收到来自 slave 服务器的 IO 线程的请求后,master 服务器上的 IO 线程根据 slave 服务器发送的指定 bin-log 日志之后的内容,然后返回给 slave 端的 IO 线程。(返回的信息中除了 bin-log 日志内容外,还有本次返回日志内容后在 master 服务器端的新的 binlog 文件名以及在 binlog 中的下一个指定更新位置)

c) Slave 的 IO 线程接收到信息后,将接收到的日志内容依次添加到 Slave 端的 relay-log 文件的最末端,并将读取到的 Master 端的 bin-log 的文件名和位置记录到master-info 文件中,以便在下一次读取的时候能够清楚的告诉 Master“我需要从某 个 bin-log 的哪 个位置开始往后的日志内容,请发给我”;

d) Slave 的 sql 线程检测到 relay-log 中新增加了内容后,会马上解析 relay-log 的内容 成为在 Master 端真实执行时候的那些可执行的内容,并在自身执行。

@搭建流程:

主服务器上修改/etc/my.cnf、设置访问权限、重启服务

从服务器上修改/etc/my.cnf、指定master IP和同步的pos点、重启服务

查看 Mysql 主从状态:show slave status\G

注:开发配置

在配置文件中配的是域名,然后在服务器host文件中指定数据库ip

数据库服务安装(Linux或者Window),日常使用客户端连接(Navicat或Datagrip)

For开发:慢查询SQL语句优化、表结构的优化、索引的优化

你可能感兴趣的:(原创,linux,服务器,运维)