Linux 常见必备


一、学习Linux须知常识


1、Linux 是什么?

Linux 是一个操作系统。

我们的 Linux 主要是系统调用和内核那两层。

当然直观地看,我们使用的操作系统还包含一些在其上运行的应用程序,比如文本编辑器、浏览器、电子邮件等。

Linux 本身只是操作系统的内核。

内核是使其它程序能够运行的基础。它实现了多任务和硬件管理,用户或者系统管理员交互运行的所有程序实际上都运行在内核之上。

其中有些程序是必需的,比如说,命令行解释器(shell),它用于用户交互和编写 shell 脚本。

Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX(可移植操作系统接口) 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。

Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。


Linux之父 Linus 没有自己去开发这些应用程序,而是使用已有的自由软件。这减少了搭建开发环境所需花费的工作量。实际上,他经常改写内核,使得那些程序能够更容易地在 Linux 上运行。许多重要的软件,包括 C 编译器,都来自于自由软件基金 GNU 项目。GNU 项目开始于 1984 年,目的是为了开发一个完全类似于 UNIX 的免费操作系统。为了表扬 GNU 对 Linux 的贡献,许多人把 Linux 称为 GNU/Linux(GNU 有自己的内核)。

Linux之父 芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写linux的内核。他还独自开发了git版本控制工具。



2、shell(壳)

Shell 是指“提供给使用者使用界面”的软件(命令解析器),类似于 DOS 下的 command(命令行)和后来的 cmd.exe 。它之所以被称作 Shell 是因为它隐藏了操作系统底层的细节。

有壳就有核,这里的核就是指 UNIX/Linux 内核,Shell 是指“提供给使用者使用界面”的软件(命令解析器)

shell 既是用户交互的界面,也是控制系统的脚本语言。



3、Unix 和 Linux:

Linux产品成功的模仿了UNIX系统和功能。



4、Linux系统分为两种:

1.RedHat系列:Redhat、Centos、Fedora等

2.Debian系列:Debian、Ubuntu等

  • RedHat系列的包管理工具是yum

  • Debian系列的包管理工具是apt-get



5、查看系统版本信息

1、步骤1:cat /etc/os-release

2、步骤2:分别对于redhat、debain版本:

  • 查看 redhat 版本命令:

    cat /etc/redhat-release
    
  • 查看 debain 版本命令:

    cat /etc/debian_version
    



6、远程服务器是 centos7.6,通过xshell 连接远程,使用命令cat /etc/redhat-release 发现:

[root@iZwz9535z41cmgcpkm7i81Z ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
  • 原因:是因为升级了,通过yum 升级了,yum update



7、后缀是.rpm

1、rpm 是Linux软件扩展名,是Red Hat Linux提供的一种包封装格式。现在许多Linux发行版本都使用。

2、后缀为.deb是Debain Linux提供的一种包封装格式。

3、后缀为.tar.gz、tar.Z、tar.bz2或.tgz是使用Unix系统打包工具tar打包的。

4、后缀为.bin 的一般是一些商业软件

  • 通过扩展名可以了解软件格式,进而了解软件安装。

■ RPM软件包管理器,通常也被称为红帽软件包管理器

与直接从源代码安装相比,软件包管理易于安装和卸载;易于更新已安装的软件包;易于保护配置文件;易于跟踪已安装文件。

几乎所有的Linux发行版本都使用某种形式的软件包管理安装、更新和卸载软件。

● rpm 命令:

rpm 最初是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,现在许多Linux发行版本都使用。

□ 使用举例:

  • 查询安装的yum依赖包:rpm -qa|grep yum
  • 查看epel依赖包:rpm -qa|grep epel

● 命令语法:rpm [选项] [参数]

  • RPM命令主要参数:

    -a 查询所有套件

    -q 使用询问模式,当遇到任何问题时,rpm指令会先询问用户

    -l 显示套件的文件列表

    -i 安装软件
    -t 测试安装,不是真的安装

    -p 显示安装进度
    -f 忽略任何错误
    -U 升级安装
    -v 检测套件是否正确安装



8、yum 或者 apt

(1) yum 或 apt:

  • RedHat系列的包管理工具是yum

  • Debian系列的包管理工具是apt-get

(2) yum 详细介绍:

■ yum 是什么?

Yellow dog Updater Modified的简称,起初是由yellow dog这一发行版的开发者研发,用python写成,最初叫做yup(yellow dog updater),

后来被改名为 yum。

yum 特点

  • 可以同时配置多个资源库(Repository)
  • 简洁的配置文件(/etc/yum.conf,/etc/yum.repos.d 下的文件)
  • 自动解决增加或删除rpm包时遇到的倚赖性问题
  • 使用方便
  • 保持与RPM数据库的一致性

■ yum 的作用

  • 更加方便地 添加/删除/更新RPM包.

  • 自动解决包的倚赖性问题.

  • 更加方便地管理大量系统的更新问题.

(3) yum 的核心是仓库

yum的关键之处是要有可靠的repository(软件仓库)

软件仓库,它可以是http或ftp站点, 也可以是本地软件池,但必须包含rpm的header

header包括了rpm包的各种信息,包括描述,功能,提供的文件,依赖性等

正是收集了这些 header并加以分析,才能自动化地完成余下的任务。

(4) yum配置文件介绍[yum.conf 和 CentOS-Base.repo]:

  • yum主配置文件:/etc/yum.conf

[root@iZwz9535z41cmgcpkm7i81Z etc]# cat yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever  # yum缓存的目录,yum在此存储下载的rpm包和数据库,一般是/var/cache/yum
keepcache=0    # 是否保存缓存,为0,让缓存一直为空
debuglevel=2   # debuglevel:除错级别,0-10,默认是2
logfile=/var/log/yum.log    # yum的日志文件,默认是/var/log/yum.log
exactarch=1    #  准确匹配,精确匹配硬件平台,只有完全相同才更新。有两个选项1和0,代表是否只升级和你安装软件包cpu体系一致的包
obsoletes=1	   # 当使用升级模式时,一些包没有用了,可以删除(取值1)
gpgcheck=1     # 安装时是否检查RPM包的PGP签名
plugins=1      # Yum插件是否可用
installonly_limit=5   # 安装限制           # bugtracker_url:bug 跟踪路径
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?   category=yum   # 目录
distroverpkg=centos-release   # 定从哪里获取系统版本相关的信息


#  This is the default, if you make this bigger yum won't see if the metadata
# is newer on the remote and so you'll "gain" the bandwidth of not having to
# download the new metadata and "pay" for it by yum not having correct
# information.
#  It is esp. important, to have correct metadata, for distributions like
# Fedora which don't keep old packages around. If you don't like this checking
# interupting your command line usage, it's much better to have something
# manually check the metadata once an hour (yum-updatesd will do this).
# metadata_expire=90m

# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
  • yum源的默认配置文件:/etc/yum.repos.d/CentOS-Base.repo

    • mirrorlist 镜像站点

    • baseurl 仓库路径(固定路径)

    • enabled=1 是否打开仓库,为1则是打开仓库,为0则是关闭仓库

    • gpgcheck 是否需要查阅RPM文件内数字证书,0表示不检查,1表示检查 (GPG是加密和数字签名的免费工具)

    • gpgkey 数字证书公钥文件所在位置,使用默认值

    [root@iZwz9535z41cmgcpkm7i81Z yum.repos.d]# cat CentOS-Base.repo
    [base]
    name=CentOS-$releasever - Base
    failovermethod=priority
    baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
    gpgcheck=1
    gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7
     
    #released updates 
    [updates]
    name=CentOS-$releasever - Updates
    failovermethod=priority
    baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
    gpgcheck=1
    gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7
     
    #additional packages that may be useful
    [extras]
    name=CentOS-$releasever - Extras
    failovermethod=priority
    baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
    gpgcheck=1
    gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7
     
    #additional packages that extend functionality of existing packages
    [centosplus]
    name=CentOS-$releasever - Plus
    failovermethod=priority
    baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7
     
    #contrib - packages by Centos Users
    [contrib]
    name=CentOS-$releasever - Contrib
    failovermethod=priority
    baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7
    

(5) yum 包管理工具

  • 作用:添加/删除/更新RPM包.自动解决包的倚赖性问题.
  • 核心是repository 仓库
和maven、npm一样,凡是看到,涉及到自动管理包,必须考虑的是下载速度的提速。

■ 配置一下阿里云镜像加速:

1)系统是 debain:

  • 记得先备份,可以选择创建一个文件夹,然后拷贝一份放进去

    root@f1cfb81dedfd:/etc/apt# mkdir cat sources.list.backup
    root@f1cfb81dedfd:/etc/apt# cp sources.list ./sources.list.backup
    root@f1cfb81dedfd:/etc/apt/sources.list.backup# cd ../
    
  • 使用命令 echo 覆盖+追加方式 [若是没有vim工具,则使用bash命令]

    deb https://mirrors.aliyun.com/debian bullseye main
    deb https://mirrors.aliyun.com/debian-security bullseye-security main
    deb https://mirrors.aliyun.com/debian bullseye-updates main
    
  • 执行一下更新命令:

     apt-get update -y
    

2)系统是 redhat:

  • 记得先备份,可以选择创建一个文件夹,然后拷贝一份放进去

    root@f1cfb81dedfd:/etc/yum.repos.d# mv /etc/yum.repos.d /etc/yum.repos.d.backup
    root@f1cfb81dedfd:/etc/yum.repos.d# 
    
  • 在阿里云镜像官网下载文件 CentOS-Base.repo [下载对应你的系统版本的Centos-Base.repo,下载的名字不是这个,可以自己改一下哦]

  • 使用工具xftp,删除掉原先的CentOS-Base.repo,然后将下载下来的CentOS-Base.repo,传输到/etc/yum.repos.d目录下

(6) yum的常用命令:

-y(当安装/卸载/更新过程提示选择全部为"yes")

  • 安装:yum install xxx

  • 删除:yum remove xxx

  • 升级: yum update xxx

    • 升级所有软件(相当于升级系统):yum update
  • 查询:yum list 列出yum服务器上面所有的软件名称

    • yum list h* #找出以h开头的软件名称
    • yum list installed #查找所有已安装的列表
  • 清除缓存:

    • yum clean packages 清除缓存目录下的软件包
    • yum clean oldheaders 清除缓存目录下旧的 headers
    • yum clean headers 清除缓存目录下的 headers
    • yum all = yum clean packages + yum clean oldheaders 清除缓存目录下的软件包及旧的header
  • 生成缓存:yum makecache

■ yum源改变了(例如修改了yum的配置文件),需要清除下数据再重新建立缓存

  • yum clean all # 清除一下之前的配置等数据
  • yum makecache # 生成新的缓存



9、centos 安装的vim 编译器的常用快捷键:

● vim的常用模式有分为命令模式,插入模式,正常模式,可视模式。

  • 正常模式:主要用来浏览文本内容。一开始打开vim都是正常模式。按 Esc键 任何情况,都可以返回正常模式

  • 插入编辑模式:用来向文本中添加内容的。在正常模式下,按 Insert 键,即可进入插入编辑模式

  • 注意:退出vim,如果使用vim修改任何文本后需要保存并退出,需要在正常模式下(Esc键),输入 shift+zz

(或者在正常模式,进入命令模式后,按 :wq )进行保存,然后再退出vim。

1)vim 文件名

  • 编辑文件,文件存在则直接编辑,不存在,则会创建文件,然后编辑文件

2)Insert 键,处于插入状态模式

  • 可以输入,修改内容

3)Esc 键,处于正常状态模式

  • 在任何状态模式,只要按Esc 键,都可以退回到正常模式

4)shift + zz (按住shift,点击两次z),在正常状态模式下,实现保存并退出操作

  • 在正常模式下,按w,进入命令模式,然后输入 :wq 回车,即可实现保存并退出操作

保存并退出 卡了,就再次切换模式为插入模式,然后再切回来正常模式,shift+zz



10、echo 命令的作用,除了打印作用,还可以实现覆盖或者追加内容到文件

(1)echo 的打印作用:

[root@iZwz9535z41cmgcpkm7i81Z shan]# echo 'hello'
hello

(2)echo的覆盖作用:

[root@iZwz9535z41cmgcpkm7i81Z shan]# touch test.txt
[root@iZwz9535z41cmgcpkm7i81Z shan]# vim test.txt

# test.txt 的内容:
# name
my name is kangkang
# age
18
# love
my love is i believe.

[root@iZwz9535z41cmgcpkm7i81Z shan]# echo 'ru guo ni shuo yes,jiu keyi la'>test.txt
[root@iZwz9535z41cmgcpkm7i81Z shan]# cat test.txt
ru guo ni shuo yes,jiu keyi la

(3)echo 的追加作用:

[root@iZwz9535z41cmgcpkm7i81Z shan]# touch test2.txt
[root@iZwz9535z41cmgcpkm7i81Z shan]# vim test2.txt

# test2.txt 的内容:
# subjectName
tomorrow i need to study english.
# class
3
# score
just-so-so.

[root@iZwz9535z41cmgcpkm7i81Z shan]# echo 'time is today'>> test2.txt
[root@iZwz9535z41cmgcpkm7i81Z shan]# cat test2.txt
#subjectName
tomorrow i need to study english.
# class
3
# score
just-so-so.
time is today



11、功能相似的命令的联系与区别

1、su 命令 和 sudo命令

su和sudo是两个常用的切换到root超级用户命令。功能上类似,但使用上还是有不少差异。

2、bash 命令 和 sh 命令






二、Linux 命令的学习

(一)学习Linux 的准备工作

1、在线学习linux

2、连接远程服务器学习【下文的案例就是使用xshell连接远程服务器】

自己购买一台云服务器,通过xshell 连接远程服务器,然后动手使用linux命令,例如使用linux部署一个项目。

  • 文章下文的掌握使用Linux命令部署项目,使用的就是方式2连接远程服务器学习

3、本地安装虚拟机,然后通过虚拟机安装Linux的发行版软件(centos或ubuntu)



(二) Linux 学习建议

1、 建议:命令多动手敲,不熟悉命令不建议复制粘贴的懒惰行为。

2、 动手敲一遍使用linux命令部署一个项目,到这里,就具备了linux的基本命令的掌握,足够学习docker等其他板块啦,遇到不会的动手百度或翻看手册。

3、linux手册:https://www.linuxcool.com/



(三) 使用Linux命令部署项目(方式2:使用xshell连接远程服务器)

● ssh 命令,连接远程的服务器

ssh ip地址

  • ip地址,是你购买的远程服务器的公网ip地址,举例:ssh 121.5.151.236,若是使用虚拟机运行centos,则ssh命令不用执行,这个ssh命令跳过。

● pwd 命令,查看所在目录的位置

pwd

● ifconfig 命令,查看网络设备信息

ifconfig

◇ 看到有网卡在工作中即可up、running

[root@mysql ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.111  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::8c18:4c0c:35b:f89c  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:bf:7a:4b  txqueuelen 1000  (Ethernet)
        RX packets 396  bytes 43132 (42.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 189  bytes 25028 (24.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        ......
        
# eth0:网卡名称
# UP:表示网卡是开启状态
# BROADCAST:表示网卡支持广播
# RUNNING:表示网卡的网线已经被接上,在工作中
# MULTICAST:表示网卡支持组播
# Link encap:网卡的接口类型,这里是以太网
# HWaddr:网卡的硬件地址,俗称的MAC地址
# inet addr:IPv4地址,如果是IPv6会写成inet6 addr
# Bcast:广播地址
# Mask:子网掩码
# MTU:网络最大传输单元
# Metric:到达网关的度量值,参考:http://m.chinabyte.com/network/191/12287691_gfh.shtml
# RX packets:网络从启动到现在为止接收的数据包大小,单位是字节,error 发生错误的数据包,dropped 被丢弃的数据包
# TX packets:网络从启动到现在为止发送的数据包大小,单位是字节,error 发生错误的数据包,dropped 被丢弃的数据包
# collisions:发生碰撞的数据包,如果发生太多次,表明网络状况不太好
# txqueuelen:传输数据的缓冲区的储存长度
# RX bytes:总接收字节总量
# TX bytes:总发送字节总量
# Memory:网卡硬件的内存地址      

● free 命令,检查服务器的内存(是否足够)

free -h

参数详解
-h  以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值

# total: 内存总数
# used: 已经使用内存数
# free: 完全空闲内存
# shared: 多个进程共享的内存
# buffers: 用于块设备数据缓冲,记录文件系统metadata(目录,权限,属性等)
# cached: 用于文件内容的缓冲
# available:真正剩余的可被程序应用的内存数

● df 命令,查看磁盘空间(是否足够)

df -lh

# 参数详解
# Used:已经使用的空间
# Avail:可以使用的空间
# Mounted on:挂载的目录

● mkdir 命令,新建目录

mkdir code

● cd 命令,切换目录

cd code/

● git 命令,拉取项目代码

git clone https://gitee.com/yushanstar/code-shan-mp-server.git

问题:-bash: git: command not found

  • 解决:给远程Linux系统(远程服务器)安装上git,命令:yum install -y git
  • 然后继续执行拉取项目代码的命令,拉取完成之后,使用ls命令查看
  • cd code-shan-mp-server/cd code-shan-mp-server 进入项目目录 【cd 目录的/,可以加或不加】

● ls 命令,查看所有文件

ls

● du 命令,查看目录占用空间

du -sh *

● cat 命令,查看文本文件

cat README.md

# 看到时一个java的springboot框架的项目---需要安装jdk

● 查看系统版本

cat /etc/os-release
# 是rehat发行版的命令                  # 看到时centos版本,那直接使用系统自带的软件管理器 yum
cat /etc/redhat-release
# 是debain发行版的命令 
cat /etc/debian_version

● yum 命令,系统自带的软件管理器 yum

yum install java-1.8.0-openjdk* -y 使用yum 安装jdk

● java -version 命令,查看java环境(jdk 版本)

java -version

● which 命令,查看文件位置

which java

# Linux which命令用于查找文件。
# which指令会在环境变量$PATH设置的目录里查找符合条件的文件。

● wget 命令,下载安装包

wget https://dlcdn.apache.org/maven/maven-3/3.8.5/binaries/apache-maven-3.8.5-bin.tar.gz 下载maven

问题:ERROR: cannot verify dlcdn.apache.org's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’:
Issued certificate has expired.
To connect to dlcdn.apache.org insecurely, use `--no-check-certificate'.

  • 解决:报错证书问题,则安装证书: yum install -y ca-certificates
  • 然后执行执行wget命令下载maven的安装包
  • ls 查看所有文件

● tar 命令,解压

tar -zxvf apache-maven-3.8.5-bin.tar.gz

./apache-maven-3.8.5/bin/mvn 解压后得到maven的二进制可执行文件

● help 命令,帮助手册,查看相关的命令

./apache-maven-3.8.5/bin/mvn --help

./apache-maven-3.8.5/bin/mvn install 构建maven项目

问题:[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE

  • 解决:

  • 更改maven镜像为阿里云镜像:

    cd apache-maven-3.8.5/conf/
    vim settings.xml
    
    # 更改maven镜像为阿里云镜像,找到<mirrors>,将原来的镜像<mirror> 注释掉,然后添加阿里云镜像
    
            <mirror>
                <id>nexus-aliyun</id>
                <mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf>
                <name>Nexus aliyun</name>
                <url>http://maven.aliyun.com/nexus/content/groups/public</url>
            </mirror>
            <mirror>
                <id>alimaven</id>
                <mirrorOf>central</mirrorOf>
                <name>aliyun maven</name>
                <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
            </mirror>
    
  • 然后退出回到目录code-shan-mp-server下【命令是 cd ../../】,重新执行一下maven的构建命令

● find 命令,用来在指定目录下查找文件

find -name '*.jar*' 查找jar包位置

# find 将开始在当前目录(用"."表示)中查找任何扩展名为"java"的文件:
find . -name  "*.java"

● cp 命令,复制

cp ./target/code-shan-mp-server-1.0.0.jar ./ 将jar包复制到外面

● mv 命令,修改文件名称

mv code-shan-mp-server-1.0.0.jar code-shan.jar

ls 查看改名后情况

● java -jar 命令,执行jar包

java -jar code-shan.jar 启动java的maven项目

# 浏览器查看项目运行情况
地址:服务器的ip:8080/hello
# 看到 hello,shan,则部署运行项目成功啦

不过此时咱的界面卡住了----使用后台启动项目

● nohup 命令,后台启动程序

nohup java -jar code-shan.jar &

问题:命令:nohup java -jar code-nav.jar & 没能让项目跑起来【nohup java -jar 命令启动jar包,项目仍然会莫名其妙挂掉的解决方法】

出现:nohup: ignoring input and appending output to ‘nohup.out’

  • 不是问题,这是一个提示信息,提示证明运行成功,同时把程序运行的输出信息放到当前目录的 nohup.out 文件中去。

# 查看程序是否跑起来

● jobs 命令,查看当前终端放入后台的任务

jobs

● ps 命令,查看所有进程,这里是为了查看是否有(java)进程

ps -ef

● ps -ef|grep 命令,筛选出目标进程

ps -ef|grep 'java'

# 从文件内容查找匹配指定字符串的行:
 grep "被查找的字符串" 文件名

● netstat 命令,查看端口占用

netstat -ntlp

● curl 命令,访问相应的 Web 服务器

curl localhost:8080/dog

# 看到hello,shan 则运行部署成功
[root@iZwz9535z41cmgcpkm7i81Z code-shan-mp-server]# curl localhost:8080/hello
hello,shan[root@iZwz9535z41cmgcpkm7i81Z code-shan-mp-server]#

● clear 命令,清除一下

clear

● history 命令,查看历史

history

☺ 其他命令,不会就到手册或者百度查找



如果本文对你有帮助的话记得给一乐点个赞哦,感谢!

posted @ 2022-05-05 20:31  一乐乐  阅读(86)  评论(0编辑  收藏  举报