Linux

简介

1、Linux认知

1.1、创始人

Unix:肯·汤普森 —— 图灵奖

Linux:林纳斯·托瓦兹

Java:詹姆斯·高斯林

1.2、认知

1.2.1、Windows、虚拟机、Linux、Ubuntu 的关系

Windows 就是我们的操作系统,我们在我们的 PC机上安装虚拟机,

虚拟机是一个软件,可以安装各种操作系统,例如安装 Linux,

Ubuntu 是 Linux操作系统的一种发行版本

1.2.2、Unix 和 Linux 的关系

Unix 是由肯·汤普森创建的商业软件,是闭源的,Unix 多与硬件配套;

Linux 是由林纳斯创建的开源软件,可以运行在多种硬件平台上。

1.2.3、Linux 的标志和其含义

企鹅,据说是因为企鹅是南极洲的标志性动物,根据国际公约,南极洲为全人类共同所有,不属于当今世界上的任何国家,当今任何国家无权将南极洲纳入其版图。

Linux 选择企鹅图案作标志,其含意也是表明:开源的 Linux,为全人类共同所有,任何公司无权将其私有。

2、下载安装配置

2.1、下载安装

Ubuntu服务器版:https://cn.ubuntu.com/download/server/step1

VMware(收费):VMware Desktop Hypervisors for Windows, Linux, and Mac

XShell:家庭/学校免费 - NetSarang Website

Xftp:家庭/学校免费 - NetSarang Website

  • 安装 VMware 时,到那个用户体验设置,全部取消勾选

  • 因为 VMware 是收费的,可以去网上搜 vmware16最新密钥 类似关键字,打开程序后复制进去就行了

  • 通过 iso文件创建虚拟机,将虚拟磁盘拆分成多个文件,其他的自己修改。还可以在虚拟机设置中把网络改成桥接模式,这个看你是否有这个需求,一般默认就是 NAT模式。

  • 创建虚拟机完成之后,记得断开光驱,也可以去设置中 CD/DVD 取消勾选启动时连接,选择使用物理驱动器

2.2、配置

使用 SSH终端进行连接

2.2.1、什么是 SSH

SSH 是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用 SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。

最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者 TatuYlonen 设计了 SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。

云服务器上安装的 Ubuntu 默认都是自带了 OpenSSH服务端的,我们可以直接连接,如果你的 Ubuntu服务器上没有安装 OpenSSH服务器端,那么可以输入命令进行安装:

// 一般都安装在用户目录下,而不是 /根目录
sudo apt install openssh-server
​
// 如果 ifconfig 查看不到 IP地址,再安装一个 net-tools
sudo apt install net-tools

2.2.2、SFTP 和 Xftp

Ubuntu 一般是默认安装了 SFTP服务器的,然后我们在 Windows 中使用 Xftp 来对虚拟机中的文件进行管理。

我们一般传文件到虚拟机去,都是传到 /home/你的用户名 即用户文件夹下,

3、Linux基础

> more xxx.log  查看日记信息
> netstat -naop | grep 5672 查看端口是否被占用
> ps -ef | grep 5672  查看进程
> systemctl stop 服务

sudo 临时提升到 root权限 任何命令都可以跟文件路径

用 ; 隔开,可以一行依次运行多个命令

-abcd 可以一起使用,你需要的命令就可以跟在后面
-i:information的意思,产生提示信息
-r:递归
-a:all的意思,所有的文件,包括隐藏文件和隐藏目录
-l:list的意思,变成列表形式

3.1、Linux知识点

3.1.1、目录介绍

/bin:用户二进制文件 /sbin:系统二进制文件 /etc:配置文件 /dev:设备文件

/proc:进程信息 /var:变量文件 /tmp:临时文件 /usr:用户程序

/home:HOME目录 /boot:引导加载程序文件 /lib:系统库 /opt:可选的附加应用程序

/mnt:挂载目录 /media:可移动媒体设备 /srv:服务数据

3.1.2、文件介绍

ls 可以看到一个文件的展示信息,

drwxrwxrwx  2  user1  user1  4030  10月  21  11:54   aa
  • 最前面的字符代表文件的类型,不同用户对文件的操作权限

    • -:普通文件、d:目录文件、l:链接文件、s:套接字文件、p:管道文件、c:字符设备文件、b:块设备文件

    • 后面有三个 rwx,分别代表了:文件主人 u、同组用户 g、其他用户 对该文件的操作权限,读、写、执行。

    • uid 分为 ruid(当前真实id)和 euid(有效id,执行文件时的权力就是文件主人id),这三位为扩展位,他们会修改文件对应的 rwx:

      • SUID:用户执行的期间可以获得文件主人的权限,若有执行权限也有,SUID 也有,则第三个 x 变成 s,若只有 SUID 则是 S

      • SGID:用户执行期间的组就是主人的同组,这里规矩一样,改变的是第六个 x

      • STICKY:粘滞位,若有 w权限,可修改但不能删除,改变的是第九个 x,s 变成 t,S 变成 T。例如:chmod  5764  则-rwsrw-r--会变成  -rwsrwxr-T

  • 第二个位置的数字代表了对此 inode 的链接数,即有几个对此文件的链接,一般是 1

  • 第三个位置的字符代表了此文件的主人名称

  • 第四个位置的字符是此文件所在的组的名称

  • 第五个位置的数字代表了该文件的字节数

  • 后面就是此文件最后一次修改的时间

  • 最后一个位置的字符就是该文件的名称

3.1.3、用户和用户组以及权限

当前用户只能在用户目录下才有相关的文件权限,即 /home/test1 目录下。

~ 就默认代表了用户目录。

在控制台可以看见 aa@bb:~$,aa 就是当前用户的名称,bb 是服务器的名称,~ 是当前所在目录。$ 是用户权限,# 代表了最高权限,

sudo -s 可以转变为 root用户,拥有最高权限。 exit 可以退出。命令前加 sudo 是临时使用 root用户的权限。若不在 sudo 所在组,就无法使用这个命令。

// 可以使用这个命令为指定用户添加 sudo用户组
sudo usermod user2 -G sudo
// 查看用户和用户组信息
id
// 改变密码
passwd
// 创建用户 useradd 也行,还可以加上很多参数
adduser user2
// 删除用户 userdel
userdel user2
// 切换用户
su - user2
3.1.3.1、权限修改
  • umask:显示当前的权限掩码 File mask,例如0022,那么当创建文件时会给文件分配默认的权限 7755,分配的权限为7777-0022=7755

  • 数字是三位二进制的值,然后其实 rwx 有四组,第一组一般都是 rwx 都有,即 111 = 7,那么 7755 = (111)111 101 101 = (rwx)rwxr-xr-x

// 修改文件权限
chmod 640 ./test1.txt
chmod ug-w ./test1.txt  // 减去指定权限
// 修改文件的组
chgrp user1 11
// 修改文件的主人和所在组
chown -R chw01:chw01 ./text1.txt

3.1.4、三种进程

  • Interactive  process:交互进程,根据命令启动交互进程,无法自动启动

  • Automatic  process:自动进程,

    • 定时自动进程: vi  a1.sh   进入命令模式,  

    • date>at_test.dat  ls -l>>at_test.dat (这两个你想执行的命令,Ctrl+Z退出)

    • at -f a1.sh now+1 minutes  (是在后台执行的,我们看不见,但可以cat  at_test.dat这个文件)

    • 在总系统负载足够低以接受额外工作的时候 batch   然后输入想要使用的命令

  • Daemons:服务进程,系统初始化的时候就启动了,一直运行的服务进程,等待服务被请求

3.1.5、init 可运行级别

有 0-6,一共七种,

用户一般是 5,服务器一般是 3,

3.1.6、延时任务 sleep

使用 sleep命令,使进程等一段时间后(系统负载不高时)运行命令

3.1.7、编写程序

3.1.7.1、写一个 C语言程序
// 去编写一个 C语言的程序
vim a.c
// 写入的内容
#include <stdio.h>
int main() {
  printf("Hello World!");
}
​
// 编译
gcc a.c -o test
// 直接运行 
./test
3.1.7.2、写一个 Java语言程序
vim Main.java
// 内容
public class Main {
  public static void main(String[] args) {
    System.out.println("Hello World!");
  }
}
​
javac Main.java
java Main

3.1.8、系统管理

  • top:就相当于 Windows 的任务管理器,

  • free:查看内存使用情况,-m 以 mb 为单位, -g 就是 gb

  • lsblk:查看所有块设备信息,包括硬盘和光驱

  • df:当前磁盘使用情况

  • ps:查看当前前台的进程,类似 top,但不是实时的,ps -ef 查看所有

3.1.9、vim编辑器

  • vim hello.txt:对指定文件进行编辑,如果文件不存在则会帮你创建

  • a、i、o、A、I:从命令模式进入编辑模式,i 是在光标之前继续写,a 是在光标之后,o 是直接跳到下一行,A 是当前行的最后继续写,I 是当前行的最前继续写。

  • :wq 或 :x:保存并退出,

  • :q!:强制退出

  • :447,就是跳到指定行

  • :set number:开启行号

  • / 或 ?:末行模式中,输入字符,进行查找

  • :s/it/he/g:末行模式下,全局替换 it 成 he

3.1.9.1、三种模式

3.2、基础命令

3.2.1、ls

显示指定目录下的内容

ls -a:显示隐藏文件和隐藏目录
ls -d:查看自身
ls -R:递归显示目录中的内容
ls -l:以列表形式显示内容的详细信息
ls -t:显示目录中的内容列表,并使用时间排序,默认是按着名字排序
ls -r:按名称逆序排序

3.2.2、创建文件(夹) touch、mkdir

不是说有后缀的就是文件,文件夹也可以叫 a.txt

不能在不存在的目录下创建,除非使用 -p,则会级联创建

touch:创建文件
mkdir:创建文件夹
​
touch -p test1/test2/a.txt
mkidir -p t1/t2/t3.txt
​
// 连续创建不加 , 而是空格
touch a.txt b.txt c.txt
mkdir game1 game2

3.2.3、查找文件 ls、find

ls:查找文件

find:查找文件或文件夹

grep:查找对应名字

ls ?b*.txt
find /test1/test2 -name "?[a-k]*.txt"
ls -l | grep *font*

3.2.4、cp

先创建目标文件,再将源文件的内容复制到目标文件中,若复制的是文件夹时,要用上-r,递归 cp

cp不能用在不存在的目录上,例如:t2 不存在,则 cp -r t3 t1/t2 会出错

cp -i:若目标文件不存在,不产生提示信息;若目标文件已存在,无论目标文件是否为空,都会产生覆盖提示

复制多个文件时,是最后一个文件接收前面所有的文件内容

即 d 文件夹接收前面的三个文件
cp -ri a.txt b c.txt d

3.2.5、mv

先将文件复制一份到目标文件,然后删除源文件。

若目标文件不存在,且文件名与源文件名一致,那就是移动;文件名与源文件名不一致,那就是改名。

若目标文件已存在,则 -i 的话会问你是否要覆盖目标文件

可以移动多个文件

mv  ./test2/[A-Z]*  ./big  

3.2.6、rm

删除文件

rmdir:只可删除空文件夹
rm -ri:删除非空目录
rm -rf

3.2.7、重定向

>:输出重定向,会产生覆盖
>>:输出重定向,追加 cat a.txt >> b.txt
<:输入重定向,cat < a.txt,输出到屏幕上

3.2.8、清空文件

两种方式都可以

cat /dev/null > c.txt
: > c.txt

3.2.9、which

查看某个命令所在的路径

3.2.10、管道

|:无名管道,将上一个命令的输出结果作为下一个命令的输入

cat  /home/test2 | wc -l

3.2.11、链接 ln

3.2.11.1、硬链接

创建硬链接,不可跨区,inode 相同

ln  /var/tmp  ./tmplink
3.2.11.2、软链接

创建软链接,可以跨区,不必在同一个文件夹下,inode 不同

ln  -s  /var/tmp

3.2.12、转向

3.2.12.1、输出转向
// 会覆盖,不是追加
cat ls -a > a.txt
​
// 是追加,不会覆盖
cat ls -a >> a.txt
3.2.12.2、输入转向
< 是输入转向

3.2.13、查看信息的各种相关命令

  • ps:显示进程,PID 是进程号,TTY 是运行终端,TIME 是允许时间,CMD 是命令。比如 ps -ef、ps -af

  • top:动态显示进程,3s 刷新一次,PR 是优先级(rt 是实时进程,最高),NI 是 nice值,默认是 0

    • nice 数字为 -20~19,越高代表你友好程度越高,为别人让位,负的则是不友好

  • kill -信号数字 进程号:杀死进程

    • SIGHUP  1 对于守护进程:重新读取配置文件。

    • SIGINT  2  中断进程。 进程可以忽略这个信号。

    • SIGKILL  9   中断进程。 进程不能忽略这个信号。

  • pstree:展示进程树形关系图,

  • 命令 &:在后台运行此命令

  • jobs:显示被挂起的进程

  • bg:在后台激活暂停的进程

  • fg:将进程放到前台

  • ctrl + z:挂起当前线程

  • ctrl + c:中断当前线程

  • pwd:查看当前所在目录

  • cat:将文件的文本内容输出到屏幕

  • more:类似cat,但是会将内容一页一页显示,不能后退

  • less:功能和 more一样,但是能后退,因为不用读取整个文件,所以加载速度比 more快,用上下键进行上下翻

  • tail:只显示 10行末尾的文本

  • fdisk:查看磁盘信息

  • df :用于显示目前在 Linux系统上的文件系统磁盘使用情况统计

  • free:显示系统内存使用情况

  • uptime:显示机器启动多久了

3.2.14、write

// 给指定用户写消息
write user2

3.3、临时环境变量、永久环境变量

打开终端窗口默认使用的 bash 是父shell,再次打开的 sh 才是子shell

在终端窗口输入 sh 进入子shell,输入 export 环境变量名,才可以在子shell 中使用你在父shell 中设置的永久环境变量

如果想设置全局的环境变量,就是让所有用户都可以访问到环境变量,那么就需要在 /etc/profile 中进行配置环境变量,但是需要使用 root权限才能修改,或者使用 sudo命令。

3.3.1、临时环境变量

临时环境变量,关闭终端就没了

3.3.1.1、设置临时环境变量
name = jack
​
export  PATH=/bin
3.3.1.2、使用临时环境变量 echo
echo $name
​
echo  $PATH

3.3.2、永久环境变量

3.3.2.1、进入 .bahsrc 设置永久环境变量
vi .bashrc
name=java
3.3.2.2、保存修改
source .bashrc

3.4、归档、解档,压缩、解压

归档:把若干个文件或目录简单地合并在一起,它并不对文件进行压缩,就是将多个文件前后连接在一起,形成一个大文件。

另外归档还会额外的添加一些信息,所以归档后的总文件的大小,反而往往比之前文件之和还要大些

解档:将 tar文件解除归档到指定文件夹

压缩:将 tar文件压缩成tar.gz文件

解压:将 tar.gz文件解压成tar文件

3.4.1、归档、解档,压缩、解压,一步到位

3.4.1.1、归档、解档

-z 是使用 gzip格式进行压缩,-c 是进行归档,-x 是解档,-v 是处理过程中输出日志,-f 是对普通文件进行操作。

将 a、b、c 三个文件夹归档到 work.tar,work.tar 是自动创建的,不需要已存在。

将 work.tar 解档到 dir1文件夹,若直接解压到当前文件夹,则不需要 -C 文件路径 这句话

tar -cvf work.tar a b c
​
tar -xvf work.tar -C dir1
3.4.1.2、压缩、解压

压缩已归档的 tar文件到当前目录下

解压 tar.gz文件到当前目录下

gzip work.tar
gunzip work.tar.gz
3.4.1.3、一步到位
tar -zcvf work.tar.gz a b c
tar -zxvf work.tar.gz -C dir1

3.5、挂载、卸载

根文件系统之外的其他文件要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”,此目录即为“挂载点”,解除此关联关系的过程称之为“卸载”。挂载点下的所有文件会被隐藏,直至卸载;所以挂载点目录一般使用空目录。

  • 挂载:根文件系统外,通过关联至根文件系统上的某个目录,来实现访问。就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录,访问此目录就相当于访问设备文件。

  • 挂载点:mount_point,用于作为另一个文件系统的访问入口

// 将 /dev/hda1 挂在 /mnt 之下
mount /dev/hda1 /mnt   

3.5.1、挂载点

我们通过 iso 创建 linux系统环境,

但是要修改这个系统环境很麻烦,所以我们把这个 iso 放进文件夹,做一个挂载,

这样的话要修改这个系统,只需要修改这个挂在点下的 iso 就好了,系统会同步做修改

3.5.2、挂载实例

3.5.2.1、U盘挂载

U盘最好格式化为 exFAT,但是这样的挂载是临时挂载。

mkdir u-test    // 创建一个文件夹,以后用这个文件夹来挂载 U盘
// 注意,/dev/sad1 是你 U盘在虚拟机中的名称,可用 sudo fdisk -l 来查看硬盘情况
sudo mount /dev/sad1 u-test
// 解除挂载
sudo umount /dev/sad1

4、环境安装和项目部署

我们可以直接使用 apt 进行软件的安装,它是一个 高级的安装包管理工具,我们可以直接寻找对应的软件进行安装,无需再去官网进行下载,非常方便,软件仓库中默认已经帮助我们存放了大量实用软件的安装包,只需要一个安装命令就可以进行安装了。

如果 apt 无法使用,就去使用 yum。

// 安装 C语言的编译工具 GCC
sudo apt install gcc
​
// 安装 JDK
sudo apt install openjdk-8-jdk 
​
// 安装 Redis,redis-cli 即可直接使用
sudo apt install redis
​
// 安装 MySQL服务器,sudo mysql -u root -p
// sudo vim mysql.conf.d/mysqld.cnf 注释掉 bind-address 这行代码
sudo apt install mysql-server-8.0
​
// 安装 Nginx
sudo apt install nginx
​

5、实践

5.1、端口占用处理

// 先用 ps -ef 命令,查看相关进程占用的端口
ps -ef | grep 'java'
// 然后用 kill -9 强制中断进程,使端口可用
kill -9 2074

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值