Linux基础

Linux系统


1、Linux系统简介

  • Linux是一个系统,类似Windows:免费、可靠、安全、稳定、多平台
  • Linux系统主要在企业服务器中用的多
  • Linux最初由芬兰程序员:林纳斯·托瓦兹 (Linux之父)开发出来的
  • Linux分为Linux内核与Linux发行版
  • 常见的Linux发行版(几十种):centos、ubuntu、redhat

Linux内核:内核指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件,是Linux操作系统最基础的部分

Linux发行版:在内核的基础上增加一些终端操作程序、常用应用软件、图形操作界面,一般用的都是发行版

2、安装Linux

有条件的可以购买一台云服务器用于学习,腾讯云新用户一台1c2g的服务器一年也就50块,适合用于学习。

如果没有条件的话,也可以在自己电脑上岸一个虚拟机软件vmware ,使用此软件虚拟出一台设备,用此设备安装Linux。

安装vm和Linux的教程网上很多,建议安装vm15

网络模式:在安装VMWare软件时,会多出两个网络连接设置(VMnet1 | VMnet8)

在安装虚拟机时,需要设置网络连接方式:

  • 仅主机:虚拟机只能与缩主计算机进行通信,不能连接外网,虚拟机与主机的通信使用的是VMnet1这块网卡
  • NAT模式 :虚拟机可以与主机通信,虚拟机也可以上网,同时与其它虚拟机也可以通信。需要使用VMnet8虚拟网卡与主机通信
  • 桥接模式 :虚拟机与主机是平等关系,也就是网络中一台电脑,需要一个独立的IP地址,此模式也会生成一块虚拟网卡VMnet0

一般用NAT模式。

3、Linux相关配制

3.1 配制静态IP

这里是用于配置通过vm安装Linux网络环境的,配置之后Linux可以与主机通信并且联网,云服务器不需要配置。

# 查看设备网络状态
nmcli  #提示 ens33 disconnected

#进入目录配制静态的IP地址:
cd /etc/sysconfig/network-scripts/
# 使用vi命令在命令模式修改:ifcfg-ens33文件
vi  ./ifcfg-ens33  

-------------------------------------------
输入 i / a  进入编辑模式(此模式下可以对文件进行编辑 --INSERT)

BOOTPROTO=static # 默认为dhcp -- 动态分配IP地址
ONBOOT=yes # 开机自动连接
IPADDR=192.168.223.131 # C类地址网段为223,可能会不一样),通过vm的编辑 -- 虚拟网络编辑器修改
GATEWAY=192.168.223.2 # 本机网关地址
NETMASK=255.255.255.0 # C类地址的子网掩码,是固定的
DNS1=114.114.114.114  #国内DNS服务器
DNS2=8.8.8.8 # 谷歌DNS服务器

# 保存修改: 第1步:按ESC退出编辑模式;第2步:再输入:wq(保存并退出)
# 修改后,不会立刻有效,需要重启网卡服务(centos6,7与8都不一样)
nmcli connection (c) reload # centos8: 
service network restart # centos6
systemctl network restart # centos7

# 如果可以ping通,则证明IP地址配制正确,可以联网
ping www.baidu.com 

3.2 连接Linux终端

连接Linux终端的软件有很多,推荐使用国产的finalshell,不仅免费,而且还可以传输文件,省去了安装ftp。

当然也可以使用其他软件,例如xshell,如果想要传输文件的话,需要安装配套软件xftp

3.3 Linux传输文件

方法一:通过 FTP软件实现上传

FTP :文件传协议,所有FTP软件都遵循此协议,实现文件上传

推荐软件:xftp,winscp等

方法二:通过xshell上传的插件实现

xshell有一个上传的插件,安装后,可以直接通过xshell实现上传

# 在线安装软件命令:
yum -y intall 程序名 # 例如yum -y intall vim

# xshell的上传插件:lrzsz
yum -y install lrzsz

# 安装完毕后,输入rz + 回车,直接拖动文件到xshell实现上传

3.4、Linux目录结构

Linux系统没有window系统磁盘分区的概念,Linux系统有一个根目录 " / "表示,Linux 系统中一切都是文件

Linux目录结构

各目录的作用:

目录描述
/整个系统的根目录
/bin作为基础系统所需要的最基础的命令都放在这里,例如cat、ls、cp等,面向所有用户
/sbin和bin类似,是一些可执行文件,只有管理员用户才能使用
/bootLinux的内核及引导系统程序需要的文件,一般是一个独立的分区
/dev设备文件存储的位置,如sda1,sda2
/home用户工作目录和个人配置文件,如个人环境变量等,每个账号在该目录下都有一个自己的目录
/lib库文件的存放地,bin和sbin需要的库文件,类似Windows的dll文件
/media可拆卸的媒介挂载点,如CD-ROMs、U盘等,系统默认会挂载到这里来
/mnt临时挂载的文件系统。比如cdrom,U盘等,直接插入光驱无法使用,要先挂载后才能使用
/opt安装第三方软件的目录
/proc一个虚拟的文件系统,操作系统运行时,进程状态及内核信息(比如CPU、硬盘分区、内存信息等)归档为文本存储正在该目录下。该目录只能看不能改,包括管理员
/rootroot用户的工作目录
/tmp系统的临时文件,一般系统重启时会删除
/usr不是user的简称,其实是Unix System Resource,存储软件程序的,类似Windows的ProgramFiles,包含绝大多数的用户工具和应用程序
/etc系统的配置文件存放地,一些服务器的配置文件也在这里
/var变量文件,唉正常运行的系统中其内容不断变化的文件,如日志,脱机文件和临时电子邮件文件,有时是一个单独的分区,如果不单独分区,有可能会把整个分区充满
/srvsrv可以视为service的缩写,一些网络服务启动之后,这些服务所需要取用的资料目录

小结:

  • /root:目录为超级管理员(root)的家目录,每一个账号登录系统默认进入的就是当前用户的家目录
  • /home:普通用户的家目录
  • /opt 与 /usr :此2个目录下主要放安装程序
  • /bin:放linux基础命令,普通用户与管理员都可以访问
  • /sbin:超级管理员使用的命令放在此目录
  • /etc:linux系统或者相关程序的配制文件放在此目录下
  • /boot:Linux系统启动引导程序
  • /lib与/lib64:bin或 sbin命令程序依赖的类库
  • /dev:系统设置所存放的路径,linux系统一切都是文件
  • /mnt:设备临时挂载目录
  • /media:外接设置默认挂载目录

4、Linux基本命令

4.1、关机与重启

# 关机
shutdown -h now
poweroff
init 0
# 重启
reboot
shutdown -r now 
init 6
# 注销账号
logout
exit 

4.2、文件与目录

目录

# 当前目录
.
# 上一级目录
..
# 根目录
/
# 打印当前路径
pwd

查看文件与目录

# 查看简要(详细)文件与目录
ls [-l]
ll
# 示所有目录和文件,包含隐藏,在linux系统中隐藏文件以"." 开始
ls [-a]

切换目录

# 回到指定目录
cd 目录名
# 回到当前用户的家目录
cd ~

创建目录

mkdir [-p] 目录名

删除目录(文件)

rm [-rf] 目录名(文件名)

创建文件

touch 文件名

复制文件

cp 源文件 目录位置

移动文件、文件命名

mv 源文件路径 目标路径

查看文件

cat 文件名
head [-n] 文件名
less 文件名 # 查看大文件,按q退出

输出重定向和追加

ll  > ./1.txt # 如果再次运行,会替换原内容
ll >> ./1.txt # 追加模式

echo:输出语句

# 将语句输出到指定文件
echo "hello:echo" >> ./2.txt
# 直接输出到控制台
echo "hello,world"
echo $PATH

快捷方式(软链接)

快捷方式只是对源文件的一个引用,删除快捷方式并不会删除源文件

在Linux系统中,快捷方式称为软链接

ln -s 源文件 快捷方式

history

# 输出指定行数的历史命令
history [-n]
history 10

4.3、日期与日历

date
cal
cal 2020
cal 3 2020

4.4、帮助指令

man 需要帮助的命令
需要帮助的命令 --help

4.5、vi、vim

vim三种工作模式:

命令模式、编辑模式、底行模式

命令模式:

yy # 复制行
p # 粘贴
dd # 删除行
x # 删除光标所在位置字符
u # 撤销
h # 前移光标
l # 后移光标
k # 向上移
j # 向下移
gg # 光标移到第一行
$ # 行尾(shift+4)
^ # 行首 (shift+6)

编辑模式:

命令模式进入编辑模式:i a o

底行模式:

# 编辑模式进入底行模式:ESC键
:w # 写入文件
:q # 退出
:wq # 写入并退出
:q! # 强行退出
:set nu # 显示行号

4.6、账号管理

root:超级管理员,可以创建普通账号,账号与密码的相关信息是存放在文件中的

账号信息文件:/etc/passwd

密码文件:/etc/shadow

cat /etc/passwd
# 用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
root:x:0:0:this is administractor user:/root:/bin/bash
# 用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
root:$6$9HIJ20EvEfenjuAk$epvtFJQj.SmFJoSjIsMn3bz8qJHrBNOEkyG/8/1RT05hZ/4/zdLpdJ/n/hlrcGMUoGRNkSKskcZy5eYR0wDOn1::0:99999:7:::

组文件:/etc/group

组密码文件: /etc/gshadow

cat /etc/group
# 组名:密码:GID
user02:x:1002:
# 组名:加密密码:组管理员:组附加用户列
user02:!::

创建用户的默认设置文件:/etc/login.defs

添加账号

useradd 账号名

设置密码

passwd 账号

删除账号

userdel [-r] 账号

修改账号信息

# usermod [-参数] 内容 账号  
usermod -d "/home/user01desk" user01
usermod -c "this is user01 desc" user01

查看账号

id [账号名]
whoami
who am i
w
users

切换账号

注:从普通用户切换到管理员,需要输入密码,反之,不需要

su 账号

退出账号

exit

4.7、账号组管理

Linux系统中的账号是属于某一个组的,是基于组管理的。

默认在创建账号时,会自动创建一个组,组名与账号名称相同,在实际维护中,应该先有组,再给组添加账号

添加组

groupadd 组名

删除组

groupdel 组名

修改组

groupmod [参数] 组名
-g GID # 修改组ID
-n 新组名 # 修改组名

添加账号指定组

useradd -g 组名 账号名称

向组中添加账号

注:在 Linux系统中,一个账号可以属于多个组

gpasswd –a 账号 组名

从组中删除账号

gpasswd –d 账号 组名

改变文件所属用户与组

chown 用户 [-R] 文件|目录
chgrp 组名 文件名

4.8、压缩与解压

Linux系统中支持多种压缩格式,其中最常用的压缩格式:gz、tar和zip

tar
-c: 建立压缩档案
-x: 解压
-z:是否同时具有有gzip属性
-j: 是否同时具有bzip2属性
-v:显示所有过程
-f: 使用档案名字,切记,这个参数是最后一个参数
tar -cvf etc.tar /user01  -- 打包
tar -czvf etc.tar.gz /user01 -- 打包并压缩
tar -zxvf ./etc.tar.gz -- 解压

4.9、文件权限

输入ll后,会显示如下信息

-rw-r--r--. 1 user01 user01  110 4月  25 05:43 1.txt
drwxr-xr-x. 6 root root         67 12月  6 13:57 data
lrwxr-xr-x. 9 root root        145 12月  6 14:05 server

开头第一位:

  • -:表示该文件是一个文件
  • d:表示该文件是一个目录
  • l:表示该文件是一个软链接

2-10位:每三个为一组,分别表示拥有者、所属组和其他组的权限

其中:

  • r:read,拥有读的权限
  • w:write,拥有写的权限
  • x:execute,拥有执行的权限

我们经常可以看到说给某某某文件加上777的权限,那这777又是什么意思呢?

r可以用4来表示,w可以用2来表示,x可以用1来表示,那4+2+1=7,也就是说,一个7代表的就是rwx权限,777就是rwxrwxrwx权限。

更改文件权限

chmod命令可以用来更改文件权限

chmod [-cfvR] [--help] [--version] mode file...

其中,mode为权限设定字符串,格式如下:

[ugoa...][[+-=][rwxX]...][,...]

其中:

  • u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
  • + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
  • r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。

其他参数说明:

  • -c : 若该文件权限确实已经更改,才显示其更改动作
  • -f : 若该文件权限无法被更改也不要显示错误讯息
  • -v : 显示权限变更的详细资料
  • -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
  • –help : 显示辅助说明
  • –version : 显示版本

4.10、文本搜索

在文件中基于关键字查找:grep (支持正则表达式)

grep "linux" ./1.txt
grep -i "linux" ./1.txt
grep -i -o  "linux" ./1.txt
grep -i -o -n  "linux" ./1.txt

4.11、防火墙

# 查看防火墙
systemctl status firewalld
firewall-cmd --state
# 防火墙版本
firewall-cmd --version
# 关闭防火墙,重启系统,防火墙仍会打开
systemctl stop firewalld 
# 启动防火墙
systemctl 
start firewalld
# 开机禁用防火墙
systemctl disable firewalld
# 开机启用防火墙
systemctl enable firewalld
------------------------------------------------------------
# 下载防火墙命令
apt install firewalld
# 列出当前开放的端口
firewall-cmd --list-ports
# 列出当前zones
firewall-cmd --get-zones
# 列出当前包含eth0的Zone
firewall-cmd --get-zone-of-interface=eth0
# 开放1191端口
firewall-cmd --add-port 1191/tcp
# 重新启动后,发出以下命令以打开端口1191进行TCP通信。 使用此命令可以使更改持久化
firewall-cmd --permanent --add-port 1191/tcp
# 开放多个端口
firewall-cmd --permanent --add-port 60000-61000/tcp
# 停止或开启防火墙
systemctl stop firewalld 
systemctl start firewalld

4.12、杀死进程

kill -9 进程号

5、Linux运行级别

linux运行有6个级别,定义在:/etc/inittab

#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)

运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动

运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆

运行级别2:多用户状态(没有NFS)

运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式

运行级别4:系统未使用,保留

运行级别5:X11控制台,登陆后进入图形GUI模式

运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

在centos8版本中,通过:systemctl get-default 可以查看系统运行的级别

6、安装软件

6.1、安装 JDK

可以直接一键安装:

yum install -y java-1.8.0-openjdk-devel.x86_64

6.2、安装mysql

  • 第一步:下载mysql
https://dev.mysql.com/downloads/mysql/5.7.html#downloads
  • 第二步:解压
# 改解压后的文件夹名称为:mysql(可以不改)
tar -zxvf ./mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz
  • 第三步:创建mysql组及mysql账号
groupadd mysql
useradd -r -g mysql mysql
  • 第四步:创建mysql数据目录并赋予权限
mkdir -p  /data/mysql              #创建目录
chown mysql:mysql -R /data/mysql   #将目录及子目录拥有者改为mysql
  • 第五步:编写mysql配置my.cnf
vim /etc/my.cnf
--------------------------------------------------------------------------------------
[mysqld]
bind-address=192.168.223.131 # 虚拟机ip
port=3306
user=mysql
basedir=/opt/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8
symbolic-links=0
explicit_defaults_for_timestamp=true
  • 第六步:初使化mysql
./mysqld --defaults-file=/etc/my.cnf --basedir=/opt/mysql/ --datadir=/data/mysql/ --user=mysql --initialize
  • 第七步:查看mysql root账号密码
 cat /data/mysql/mysql.err
 ---------------------------------------------------------------------------------------
2020-05-09T21:34:21.882105Z 0 [Warning] InnoDB: New log files created, LSN=45790
2020-05-09T21:34:21.998486Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2020-05-09T21:34:22.067781Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: d8c499ff-923c-11ea-b3d8-000c29648ef8.
2020-05-09T21:34:22.068825Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2020-05-09T21:34:23.364092Z 0 [Warning] CA certificate ca.pem is self signed.
2020-05-09T21:34:23.817345Z 1 [Note] A temporary password is generated for root@localhost: fGnlOdT>o6Mt
  • 第八步:启动mysql
service mysql start
# 抛出错误:Failed to start mysql.service: Unit mysql.service not found.
# 解决方法:cp /opt/mysql/support-files/mysql.server /etc/init.d/mysql

ps -ef|grep mysql
  • 第九步:修改root账号密码
./mysql -uroot -pfGnlOdT>o6Mt  #以默认密码,登录mysql(fGnlOdT>o6Mt)

SET PASSWORD = PASSWORD('root'); #设置密码为root
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER; #密码永不过期
FLUSH PRIVILEGES; #刷新
  • 第十步:远程连接
use mysql                                            #访问mysql库
update user set host = '%' where user = 'root';      #使root能再任何host访问
FLUSH PRIVILEGES; 
  • 问题
./mysql -uroot -p
# 在本机出现以下问题:
# ./mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory -- 系统确少libncurses.so.5...相关库
yum  install -y  libncurses*

6.3、安装Tomcat

​ Tomcat web服务器的运行,需要系统安装好JDK

​ www的端口默认为80,所以在正常访问网页时,不需要加上80端口

  • 下载Tomcat
http://tomcat.apache.org/
  • 解压Tomcat
 tar -zxvf ./apache-tomcat-8.5.54.tar.gz 
  • 启动Tomcat
 ./startup.sh
  • 测试
http://192.168.223.132:8080/

7、SHELL脚本编程

脚本(script) :是嵌入到某一个环境中一段程程序(实现特定的业务),脚本程序也是需要用语言写的,在Linux中,shell脚本可以支持多种语言

脚本语言相对面向对象的语言来说,没有严格的语法,同时提供的语言功能很简单

都有基本相同的一些语法常量、变量、运算符、函数、数组、流程控制…

7.1、helloworld

#第一行:指定脚本的解释器
#!/bin/bash
echo "hello,world"

运行shell脚本程序

chmod +x ./s1.sh
sh ./s1.sh

7.2、注释(#)

在shell中,注释与java的不一样,java的是用//,shell里面是用#

7.3、常量与变量

变量:在定义时,直接赋值即可,不需要指定类型,在访问变量时,需要通过$变量名或者${变量名}

常量:与变量类似,不过一般常量用大写,而且定义后一般不会改动

  • 单引号与双引号区别:单引号中的任何字符都会原样输出,在单引号中引用 变量是无效的
  • 变量分类:shell中有三种类型的变量:局部变量(local)、全局变量、环境变量(o)
  • 特殊变量
变量含义
$0当前脚本的文件名
$n传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第1个参数是$1,第2个是$2。
$#传递给脚本或函数的参数个数。
$*传递给脚本或函数的所有参数。
$@传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$?上个命令的退出状态,或函数的返回值。
$$当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

7.4、运算符

表达式语法:

# 语法一:
`expr $a + $b`
# 语法二:
$((a+b))
a=10
b=10
d=$((a+b))
# 语法三:let 表达式
let d=a+b
  • 算术运算符
  • 关系运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试运算符
path=/root/s3.sh
if [ -w $path ]
then
      echo "可写"
  else
      echo "不可写"
fi
# 该文件的权限
-r -x -w -e -f -d .............

7.5、数组

数组的思想与JAVA语言是一样的,语法不一样,操作基本一样的

# 声明
nameArray=(tom jack marry)
echo ${nameArray[0]}
#获取所有元素
echo "${nameArray[*]} -- ${nameArray[@]}"
#获取数组长度
echo "${#nameArray[*]} -- ${#nameArray[@]}"
#遍历数组元素
for((i=0;i<${#nameArray[*]};i++))
do
   echo "nameArray[$i]=${nameArray[$i]}"
done

7.6、函数

与C语言中函数很相似,与java的方法也差不多

在 shell脚本中,接收用户通过控制输入的信息:read指令

语法:read [-t 10 ] -p 提示信息 变量名

read -p "请输入名称:" name

7.7、流程序控制

  • 选择结构

    IF语句

    CASE语句(等效于SWITCH)

  • 循环结构

    FOR循环

    WHILE循环
    表达式语法:

# 语法一:
`expr $a + $b`
# 语法二:
$((a+b))
a=10
b=10
d=$((a+b))
# 语法三:let 表达式
let d=a+b
  • 算术运算符
  • 关系运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试运算符
path=/root/s3.sh
if [ -w $path ]
then
      echo "可写"
  else
      echo "不可写"
fi
# 该文件的权限
-r -x -w -e -f -d .............

7.5、数组

数组的思想与JAVA语言是一样的,语法不一样,操作基本一样的

# 声明
nameArray=(tom jack marry)
echo ${nameArray[0]}
#获取所有元素
echo "${nameArray[*]} -- ${nameArray[@]}"
#获取数组长度
echo "${#nameArray[*]} -- ${#nameArray[@]}"
#遍历数组元素
for((i=0;i<${#nameArray[*]};i++))
do
   echo "nameArray[$i]=${nameArray[$i]}"
done

7.6、函数

与C语言中函数很相似,与java的方法也差不多

在 shell脚本中,接收用户通过控制输入的信息:read指令

语法:read [-t 10 ] -p 提示信息 变量名

read -p "请输入名称:" name

7.7、流程序控制

  • 选择结构

    IF语句

    CASE语句(等效于SWITCH)

  • 循环结构

    FOR循环

    WHILE循环

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值