linux学习笔记一(初识)

Linux操作系统

一、什么是Linux?

Linux是一个开源免费的操作系统,和我们的Window一样,主要用来安装到服务器上,运行各种软件和服务。

Linux之父 - 林纳斯(linus)

Linux是一种自由和开放源码的操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、台式计算机。
有 redhot-红帽linux、centos、乌班图(linux中的windows)等发行版。

1.1 思考 - 既然已经会用Window操作系统,为什么还需要学习Linux?

windows与linux的设计理念有根本性的区别:

1、windows:用户想要做什么,不需要自己知道如何去实现,也不明白自己怎么去实现的,更不打算为自己的行为负责,因为Windows已经将这些功能所封装好了。

​ windows将所有操作都隐藏起来,只给用户提供封装好的功能,用户只能在操作系统限制的范围内操作,如果是普通用户,会觉得很windows很舒服,因为不需要思考。只需要按照指示去操作。但对于开发人员而言,这种设计理念是无法接受的,一旦要做出一些超越封装好的功能之外的事情,就会出现各种难以意料的情况,而且很多情况下,这些问题是无解的。或者只能用极其蹩脚扭曲的方式去勉强处理,然后瑟瑟发抖地期待着程序能正常运行。因为一旦程序崩溃,你也会为之崩溃。在windows下作开发,那种体验就好比在陪伴一个任性的女朋友,虽然长得清秀靓丽,但喜怒无常,她开心时,彼此相安无事,她不开心时,就直接哭闹,你问她:怎么了?她也不说原因,只是一直哭。你只能试着用各种方式去哄她开心,即使这次能哄好她,并不意味着下次同样的方法能奏效。这样的相处方式,很累。不是她不好,而是彼此不适合。即使终日相伴,却依然对其一无所知。

2、 linux:用户知道自己想要什么,也明白自己在做什么,并且会为自己的行为负责。

​ linux将所有操作权都交给了用户,她相信用户是理性的聪明的,忠实地执行用户的指令,向用户暴露所有的细节。用户在拥有自主权的同时也拥有了破坏力,因此普通用户根本无法驾驭,可能一个指令就把操作系统弄崩溃了。对于开发者而言,linux的开放与自由给了我们无限的可能性,我们能看到程序是如何运行的,运行报错也会有友好的提示。根据报错指引往往能将问题解决。与之相处,好比与一个成熟的女性相处,历经风雨,已经不再关注浮夸的外表,而是关注内在的涵养。刚接触时,可能会觉得她高冷,慢慢地,会发现她很善解人意,心情不好时她会跟你说是什么原因造成的,彼此商量如何解决这个问题,而不是无来由地崩溃。与之相处,会感到很舒服,彼此坦诚,无需套路,你在想什么,我都知道。我在念什么,你也明白。

​ 因此,我选择linux的原因在于自由、舒服,简言之:爽!原文地址:

linux学习笔记一(初识)_第1张图片

1.2 什么是发行版?什么是内核?

​ Linux内核是Linux操作系统bai创始人主持的网站du www.kernel.org 上发布的操作系统的最基本的那些东西。Linux发行版则是前述那些东西的基础上添加了一些工具软件的基础上构成的一套庞大复杂的操作系统。虽然内核都是一样的,但添加部分各不相同,这就构成了不同的发行版本。Linux本身指的是一个操作系统内核,只有内核是无法直接使用的。我们需要的,可以使用的操作系统是一个包含了内核和一批有用的程序的的一个集合体,这个就是Linux发行版。其中,Ubuntu、centOS、RedHat就是Linux的不同的发行版。

​ 简单来说,内核就好比汽车的发动机,而发行版就是汽车。

linux学习笔记一(初识)_第2张图片

linux系统的启动过程也并没有想象中的那么复杂,其过程可以分为5个阶段:

  1. 内核的引导;
  2. 运行init;
  3. 系统初始化;
  4. 建立终端;
  5. 用户登录系统。

二、Linux的安装(这里的安装是个人学习所安装的过程)

window系统 -> VMware虚拟管理软件 -> 创建虚拟机(VM) -> 在虚拟机中安装CentOS 7(linux的发行版)

1.1 安装VMware

傻瓜式安装,如何不懂,自行百度。

1.2 安装CentOS7虚拟机

1.2.1 创建虚拟机

linux学习笔记一(初识)_第3张图片
linux学习笔记一(初识)_第4张图片
linux学习笔记一(初识)_第5张图片
linux学习笔记一(初识)_第6张图片
linux学习笔记一(初识)_第7张图片
linux学习笔记一(初识)_第8张图片
linux学习笔记一(初识)_第9张图片
linux学习笔记一(初识)_第10张图片

1.2.2 在虚拟机安装CentOS

linux学习笔记一(初识)_第11张图片
linux学习笔记一(初识)_第12张图片
linux学习笔记一(初识)_第13张图片
linux学习笔记一(初识)_第14张图片
linux学习笔记一(初识)_第15张图片
linux学习笔记一(初识)_第16张图片
linux学习笔记一(初识)_第17张图片
linux学习笔记一(初识)_第18张图片linux学习笔记一(初识)_第19张图片
linux学习笔记一(初识)_第20张图片

1.2.3 思考 - 为什么要远程连接Linux操作系统?

​ 因为我们的开发完成的项目,往往都是部署在远程的服务器中的,所以需要使用远程连接的方法来操作服务器,我们不可能每当需要做一些服务器的更改的时候,跑到机房器操作服务器。
linux学习笔记一(初识)_第21张图片
远程连接工具:xshell、finalshell、ssh…

三、Linux的目录结构

3.1树形目录

linux学习笔记一(初识)_第22张图片
以下是对这些目录的解释:

  • /bin
    bin是Binary的缩写, 这个目录存放着最经常使用的命令。

  • /boot:
    这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。

  • /dev :
    dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。

  • /etc:
    这个目录用来存放所有的系统管理所需要的配置文件和子目录。

  • /home
    用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。

  • /lib
    这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。

  • /lost+found
    这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

  • /media linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。

  • /mnt
    系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。

  • /opt
    这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。

  • /proc
    这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
    这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:

    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
    
  • /root
    该目录为系统管理员,也称作超级权限者的用户主目录。

  • /sbin
    s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。

  • /selinux
    这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。

  • /srv
    该目录存放一些服务启动之后需要提取的数据。

  • /sys
    这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。 该文件系统是内核设备树的一个直观反映。
    当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。

  • /tmp
    这个目录是用来存放一些临时文件的。

  • /usr
    这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录。

  • /usr/bin:
    系统用户使用的应用程序。

  • /usr/sbin:
    超级用户使用的比较高级的管理程序和系统守护程序。

  • **/usr/src:**内核源代码默认的放置目录。

  • /var
    这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
    在linux系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
    /etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
    /bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在/bin/ls 目录下的。
    值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而**/sbin, /usr/sbin** 则是给root使用的指令。
    /var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在/var/log 目录下,另外mail的预设放置也是在这里。

四、Linux的常用命令

4.1 基本命令

ifconfig

ifconfig

注意Windows系统的

ipconfig

查看当前的网络信息(ip地址)

ping ip地址

ping www.baidu.com
ping 14.215.177.38

检测主机网络

who am i

who am i

查看当前的登录用户
su [账号名称]

su jerome

切换用户,如果直接输su,表示切换到root账号

pwd

pwd

打印输出当前的工作路径(打印当前在什么位置)

cd

cd 文件夹名/文件夹名
cd ../       返回上一级目录
cd /   返回跟路径
cd ./  执行当前路径下的文件

进入某一个文件夹
cd后面可以跟绝对路径,也可以跟相对路径,如果是相对路径需要注意命令执行的位置

ll & ls

ls -l |grep 筛选条件
ll -l

打印当前目录下的所有内容(子目录、子文件…)
参数:
-l 打印当前目录的详细信息
-a 打印当前目录的隐藏文件夹

clear

clear

清空命令行

命令的小技巧:
1、通过方向键 上/下 找到曾经输入过的命令
2、通过tab键可以对文件夹/文件进行补全

4.2 文件夹的相关操作

mkdir -p 文件夹名/文件夹名

mkdir -p a/b/c

创建文件夹

参数:
-p 表示级联创建

mv

mv 源文件的路径  目标文件的路径

文件夹/文件的剪切,可以起到改名的效果

cp

cp -r 源文件的路径 目标文件的路径

文件夹/文件的复制
注意:复制文件夹时,需要添加**-r参数**,但是剪切不需要,

rm

rm -r 文件夹名
rm -f 文件名
rm -rf 文件夹名或文件名

删除文件/文件夹;在linux没有回收站,在试用rm命令的时候,一定要小心些,删除之后就无法再恢复了。

参数:
-r 表示删除文件夹
-f 表示强制删除,不用确认

4.3 文件以及文件内容的相关操作

vi & vim

vi 文件名
vim 文件名

创建并且编译文件

touch xxx

touch 文件名

创建文件,但是不打开文件编辑

cat XXX

cat 文件名

查看文件的所有内容,但是不能修改

more xxx

more 文件名

查看文件部分内容,逐步展示

head -n xxx

head -5 文件名

查看文件开头n行

tail -n xxx

tail -5 文件名

参数:

-f

编辑文件
linux学习笔记一(初识)_第23张图片

i - 当前光标前面输入
a - 当前光标后面输入
I - 行首输入
A - 行尾输入
o - 换行输入
O - 上一行输入

:wq - 保存退出
:q! - 不保存强制退出

:set number - 显示文件的行数

:set nonumber - 显示文件的行数

gg - 回到文件头部
G - 回到文件尾部
y[n]y + p - 行复制
dd - 行删除
x - 删除一个字符
u - 撤销
ctrl + r - 反撤销

/关键词 - 搜索关键词,n往下找,shift + n往上找
:n,$s/旧内容/新内容/g - 文件内容替换

4.4 压缩和解压缩

linux学习笔记一(初识)_第24张图片

打包压缩命令

tar -zcf xxxx.tar.gz 待压缩文件…

tar -zcf 待压缩的文件名 ... 可以多个文件一起打包压缩
tar -zcf file.tar.gz file1.txt file2.txt

解压缩的命令

tar -zxf xxxx.tar.gz

tar -zxf 待解压的文件名 可以解压多个文件
tar -zxf file.tar.gz

4.5 用户和用户组的相关操作

Linux的用户分类

超级用户 - root
普通用户 - id(500 ~ 60000)
伪用户 - id(1~499) :伪用户不能登录系统,也不会在/home下创建响应的文件夹,主要是执行一些系统命令

用户组

一个用户组可以包含多个用户
一个用户必须属于一个用户组

用户相关的配置信息

/etc/passwd 用户信息文件

/etc/shadow 保存密码信息

/etc/group 用户组信息

/etc/gshadow 用户组密码信息

Linux用户组的操作

创建用户组
groupadd 组名

修改用户组名
groupmod -n 新组名  旧组名

删除用户组
groupdel 组名

显示当前用户所在的组
groups

Linux用户的操作

添加用户
useradd -g 组名 用户名

修改用户
usermod [选项] 用户名

删除用户
userdel [选项] 用户名

设置用户密码
passwd 用户名

linux学习笔记一(初识)_第25张图片

4.6 权限控制

文件权限描述符

lrwxrwxrwx
第1位:文件类型,d目录 -文件 l软链接
第2~4位:所属用户权限
第5~7位:同组用户权限
第8~10位:非同组用户权限

r - read可读权限
w - write可修改权限
x - 可执行权限

授权

字符授权法:

chmod {u/g/o}{+/-/=}{r/w/x} xxxxx

数字授权法:

chmod 777 xxxxxx

r - 4
w - 2
x - 1

r - 4
w - 2
x - 1

参数:
-R 递归授权

linux学习笔记一(初识)_第26张图片

4.7 其他命令

poweroff 关机

systemctl poweroff

reboot 重启

systemctl reboot

uname -a 查看linux的内核的版本

uname -a

free 查看内存的使用情况

free  -h

参数:-h ,homan

df 查看硬盘的使用情况

df

top 类似window的任务管理器

top

linux学习笔记一(初识)_第27张图片
ctrl +c 键:退出监控

linux学习笔记一(初识)_第28张图片

4.8 端口号相关

查看哪些端口号已启用

netstat -anp
netstat -anp |grep 3306
netstat -anp |grep 

即可显示当前服务器上所有端口及进程服务,于grep结合可查看某个具体端口及服务情况

netstat -ntlp   //查看当前所有tcp端口
netstat -ntulp |grep 80   //查看所有80端口使用情况
netstat -an | grep 3306   //查看所有3306端口使用情况

查看一台服务器上面哪些服务及端口

netstat  -lanp

查看一个服务有几个端口。比如要查看mysqld

ps -ef |grep mysqld

查看某一端口的连接数量,比如3306端口

netstat -pnt |grep :3306 |wc

查看某一端口的连接客户端IP 比如3306端口

netstat -anp |grep 3306

查看网络端口

netstat -an 

使用lsof -i :port就能看见所指定端口运行的程序,同时还有当前连接。

使用lsof -i:3306需要安装lsof

# yum install lsof
lsof -i :port
nmap 端口扫描
netstat -nupl  (UDP类型的端口)
netstat -ntpl  (TCP类型的端口)
netstat -anp 显示系统端口使用情况 

四、阿里云的申请与使用

自行百度:阿里云申请链接

五、VMware虚拟机的网络设置

网络的概念

IP地址 - 网络中的一个标识(内网ip、外网ip),ip地址本质上是一个int类型的整数
linux学习笔记一(初识)_第29张图片
子网掩码 - 网段的匹配工具(255.255.255.0 和 请求的ip地址,做一个按位与的运算) & | > <
网关 - 真正能够上网设备的ip地址
DNS服务器 - 域名解析服务器
域名 - ip地址的包装

linux学习笔记一(初识)_第30张图片
VMware的网络类型

桥接模式 - 虚拟机和宿主机共用同一个网段

nat模式 - 虚拟机和宿主机形成一个独立的小型局域网

仅主机模式

配置虚拟机的静态ip(重要)

图形化界面的配置方式
linux学习笔记一(初识)_第31张图片
命令行的配置方式

vim /etc/sysconfig/network-scripts/ifcfg-网卡名称

进行如下图配置
linux学习笔记一(初识)_第32张图片

六、Linux的进程和服务管理

linux学习笔记一(初识)_第33张图片

相关命令
ps -aux [| grep xxxx] -查看当前进程信息(瞬间状态)

ps -aux |grep mysql

kill [-9] 进程pid - 杀死对应的pid进程

kill -9  进程的PID

top - 实时监控进程的状态信息

top 

什么是服务?

服务往往指的是后台进程,sshd(远程连接)就是一个后台进程(服务)
linux学习笔记一(初识)_第34张图片

服务的相关命令
systemctl start/stop/restart/status/reload 服务器的名称 - 操作相关的服务

systemctl start/stop/restart/status/reload mysqld
systemctl start/stop/restart/status/reload firewall

systemctl enable/disable 服务器的名称 - 开启/关闭服务的开机自启动

systemctl enable/disable 服务的名称

setup - 图形化界面操作服务

setup

F12退出服务监控页面,再利用方位键退出图形化界面

系统防火墙

操作防火墙状态

systemctl start/stop/restart/status firewalld  

设置防火墙的端口
修改配置文件:

vim /usr/lib/firewalld/services/ssh.xml

开放端口:在ssh.xml文件中设置(虚拟机上)

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>SSH</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  <port protocol="tcp" port="22"/>
  <port protocol="tcp" port="3306"/>
  <port protocol="tcp" port="8080"/>
</service>

阿里云配置防火墙
linux学习笔记一(初识)_第35张图片

七、Linux的软件管理(RPM & YUM)

什么是RPM?

rpm全称为RedHat Package Manager(RedHat软件包管理工具),是一种软件包的打包及安装工具,能够使用与大部分Linux发行版中
linux学习笔记一(初识)_第36张图片

RPM的相关命令
rpm -qa | grep xxx - 搜索本地安装过什么软件

rpm -qa |grep mysql

rpm -e [–nodeps] xxxx - 卸载指定软件

rpm -e --nodeps mysql

rpm -ivh xxxxxx - 安装指定的rpm软件包

rpm -ivh mysql的rpm包名

什么是YUM?

yum是一个软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,而且可以自动处理依赖性关系,并且一次性安装所有依赖的软件包
linux学习笔记一(初识)_第37张图片

YUM的相关命令
yum list | grep xxxx - 查看远程服务器的指定软件安装版本

yum list |grep mysql

yum install -y xxxxx - yum安装某个软件

yum install -y 软件安装包的名称

yum remove -y xxxxx - yum卸载某个软件

yum remove -y 软件安装的名称

-y 表示同意,不必再询问

八、软件安装

linux学习笔记一(初识)_第38张图片

可能遇到的问题

#下载安装源
wget http://repo.mysql.com/mysql57-community-release-el6-8.noarch.rpm
#安装rpm包
rpm -ivh mysql57-community-release-el6-8.noarch.rpm 
#修改安装源
vim /etc/yum.repos.d/mysql-community.repo
将[mysql55-community]的enabled设置为1,[mysql57-community]的enabled设置为0
#安装mysql:
yum -y install mysql-server mysql
#-----解决yum锁问题------
rm -f /var/run/yum.pid

安装jdk

1)源码安装(将源码包放到/usr/local/software目录下)
解压缩源码

tar -zvxf jdk-8u171-linux-x64.tar.gz

改名(相当于剪切,原文件将不再存在)

mv jdk1.8.0_171 jdk8

配置环境变量,在/etc路径下的profile文件中
​ 编辑环境变量

vim /etc/profile

内容如下:

#jdk8
export JAVA_HOME=/usr/local/software/jdk8
export PATH=$PATH:$JAVA_HOME/bin

#环境变量生效

source /etc/profile

2)rpm包安装(无需配置JAVA_HOME等环境变量,如果之前配置了环境变量,需要注意路径问题)

rpm -ivh jdk-8u191-linux-x64.rpm

安装tomcat

同上安装JDK,但是必须先安装JDK

安装mysql

yum安装(这种安装方式比较方便)
1)检查yum源,是否有mysql-server 5.7的版本

yum list | grep mysql

2)安装修改yum源

#下载安装源
wget http://repo.mysql.com/mysql57-community-release-el6-8.noarch.rpm

#安装yum源

rpm -ivh mysql57-community-release-el6-8.noarch.rpm

#修改yum源

vim /etc/yum.repos.d/mysql-community.repo

#将5.7的源路径/etc/yum.repos.d/mysql-community.repo中的6改成7

33 baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/

3)执行命令安装MySQL

yum install -y mysql-community-server.x86_64

4)启动MySQL服务

systemctl start mysqld

5)查看第一次随机密码,并且重置密码

#查看随机密码
grep 'password' /var/log/mysqld.log |head -n 1
    
#进入数据库
mysql -uroot -p随机密码

#修改密码
set password = password('新密码');

6)开放远程连接权限

#连接mysql
mysql -uroot -pxxxx

#定位到mysql系统库
use mysql

#查看用户信息
select User,Host, xxxxxxx from user;

#修改root账号的权限
update user set Host='%' where User='root';

#退出mysql
exit

#重启mysql
systemctl restart mysqld

7)修改字符集(进入数据库之后)

#mysql查看字符集
show variables like '%char%'

#修改mysql配置文件
vim /etc/my.cnf

#设置属性
[mysqld]
character-set-server=utf8

#重启服务
systemctl restart mysqld

#卸载数据库,卸载之前注意将数据库中的备份,数据来之不易
yum -y remove mysql

8)使用sqlyum远程连接项目中连接服务器中数据库的配置

#程序怎么连接虚拟机中的mysql
jdbc.properties
jdbc.url=jdbc:mysql://192.168.195.188:3306/xxx
jdbc.username=root
jdbc.password=root
jdbc.driver=xxxxxxxxx

可能会出现的问题

1、在启动虚拟机的时候,可能会碰到一个VT-x的错误,这个错误的意思是因为CPU没有开启虚拟化。
解决方案:重启笔记本,进入BIOS系统,打开VT。

2、更多linux的基础知识:传送门:https://www.w3cschool.cn/linux/7l3tjf21.html

你可能感兴趣的:(linux,linux,rpm,yum)