面向Web开发人员的Linux实用入门(转)

news2024/12/23 8:28:59

从 web 开发的视角说一下在使用 Linux 时遇到的问题,主要是针对操作本身,因为指令在网上都可以查到,不会深入原理,但尽量实用。

基础认知

为什么使用 Linux

最初我使用 Linux 是因为我需要的应用在教程里只提供了 Linux 版本,于是我就按步骤把它部署起来,就这样顺其自然地用了下去,期间也解决了一些问题,在这个过程中,我逐渐产生了一些疑问:为什么使用 Linux 作为服务端,而不是我们日常使用更加熟悉的 Windows 系统,二者在服务端有什么区别?

1. 操作性

在这点上,毋庸置疑是 Windows 更胜一筹,图形化界面操作友好,Windows Server 版相对于面向大众的版本在操作上也没有特别大的差别,大部分人应该还是对于微软这种一以贯之的风格更加习惯。

Linux 也有带图形界面的发行版,但作为服务器使用时这样反而丧失了一部分优势,图形壳程序会占用服务器宝贵的硬件资源,通常不做考虑。

2. 价格成本

客观来说,Linux 开源免费,而 Windows Server 则需要付费授权。实际上多数情况我们购买云服务器的时候,这部分成本已经平摊了。

腾讯云选择 Windows Server 时的提示:

3. 稳定性

Linux 是开源的,它的代码由全世界最优秀的程序员维护更新,如果有漏洞被发现也会被迅速修复。而 Windows 方面,由于我使用 Windows Server 的经验并没有多少,不做过多评价,但对于面向普通用户的版本,大家都有发言权,尽管微软的程序员非常优秀,但是 Windows 仍然会频繁地向你推送漏洞修复补丁,并且偶尔蓝屏、死机

Linux 对于用户是完全开放的,因为它假定用户知道自己在做什么,你可以操作系统中所有的文件,但 Linux 不会对你的操作负责,这就如同我们在安卓手机中获取 root 权限一样,你获取了底层文件的操作权限,可以按你自己的想法去修改系统,但这样手机的服务商就不再提供保修服务,因为你做出了超出他们预期的行为。

在 Windows 这边,不知道是不是大家都经历过被提示没有操作权限的情况,或者想设置权限却被告知没有权限的情况,我还遇到过微软自家的软件没有权限读取文件而无法识别已安装的应用程序的问题,这都是因为 Windows 较为复杂的权限系统。

为什么将权限系统放在稳定性这一节,因为在用户可以自由修改权限的情况下,系统的稳定性当然会受影响,在 Linux 操作中,我们可以很轻松的给文件设置 777 权限(最高的权限,在后面会说到),或者开放防火墙所有端口,而这无疑增加了系统运行的风险,所以在设计这部分的操作时,应该更加谨慎,先看看有没有其他的方法再进行操作。

选择不同的发行版

严格来说,Linux 是内核而不是操作系统,借助于不同的发行版提供的操作系统相关组件才变成了操作系统,平常我们会简称为 Linux 系统,而实际上由于开源的特性,不同的分支会存在不小的差距。这部分涉及很多我不懂的专业知识,而且可以在网上查到很多说明比较,所以不在这里赘述,我想要说明的是在查找指令和资料时要注意先决条件,区分不同系统的操作。

这里借用一下菜鸟教程的图:

由于云服务商的问题,国内使用 CentOS 较多,总体是个很好上手的版本,这个版本是基于免费的 RHEL 的源代码重新编译成的,这两种都属于 Red Hat 公司。而其他的比如 Debian、Ubuntu 都是同样使用很广泛的系统,每一种发行版都有它所属于的社群在使用,并且还有大量自行编译的定制化版本。

但要注意的是 CentOS 8 已于 2021 年 12 月 31 日停止维护,Cent OS 7 将于 2024 年 6 月 30 日停止维护,这可能会成为一个隐患,在选择发行版时需要将其纳入考量。

腾讯云中选择系统时的镜像介绍:

Debian 是一款稳定、便捷、快速的 Linux 发行版,它拥有比大多数 Linux 发行版更为强大的软件包管理工具,是目前用于建站的首选服务器操作系统之一。

Ubuntu 是最热门的 Linux 发行版之一,是一款开放源代码的免费软件,基于 Debian Linux 操作系统,其易用性和稳定性均非常出色,并且拥有非常强大成熟的社区资源。

CentOS 是一款流行的开源 Linux 发行版,是 RHEL(Red Hat Enterprise Linux)源代码经过再编译而成。(注意:CentOS 社区将于 2024 年 6 月 30 日停止维护 CentOS 7,推荐您选用兼容 CentOS 8 的 OpenCloudOS 8 镜像替代。)

远程操作

说了那么多,不如实际进入系统操作一下,使用云服务器时,虽然 web 端都会提供控制台,但是操作和功能都不能完全满足我们日常开发的需要,只要能支持 SSH 协议(默认端口 22)的软件都可以用于远程连接 Linux,也支持 Telnet 协议,但是由于 Telnet 协议本身并不安全,所以很多发行版都关闭了这一连接方式。

软件方面有很多选择,最简单直接的是 PuTTY,也可以使用 SecureCRT,我自己用得比较多的是 XShell,可以在官网申请免费的家庭/学校版本,完全可以满足日常的开发使用需求。

上传软件使用的是配套 XFTP,其他还可以选择 WinSCP 等。

目录结构

默认文件目录如下:

有箭头指向的文件夹代表是软连接,可以理解为 Windows 的快捷方式,在 ftp 中可以看到图标左下角有个快捷方式的标志。

可以将一些常用的文件夹或文件链接到外层的目录方便日常使用。

通常我会在根目录再创建一个“app”文件夹,用来存放我们的 web 应用。

如果一个目录或文件名是以一个点开始,就表示这个目录或文件是一个隐藏目录或文件。即以默认方式査找(ls)时,不显示该目录或文件。可以使用ls -a查看。

安装软件

包安装工具

在 Windows 中我们要安装一个新软件通常又两种情况,一种是打开 exe 文件或其他什么格式的安装程序,然后它会把文件安装到我们指定的目录下,同时也会在在注册表中添加信息或在系统盘中创建一些配置文件之类的,具体有很多情况,另一种是解压一个压缩包,打开即用,通常是一些相对简易的工具类软件。

在 Linux 中也是类似的,一方面你可以通过包管理工具来安装文件,它会自动将文件放置到固定的目录或者你指定的目录下,另一方面,你也可以下载压缩包,解压后再按照软件的具体用法去使用。

不过即使是安装包,在 Linux 中也是有区别的,在查资料的时候我们会看到 rpm、yum、apt 等各种各样格式的文件,它们都可以安装软件,但是却有着区别。

对比项rpmyumdpkgapt
系列RedHat 系RedHat 系Debian 系Debian 系
区别包安装工具依赖管理工具包安装工具依赖管理工具

其中,包安装工具就是简单的安装工具,如果某个软件需要一个依赖库,你要先手动安装好才能继续,类似在 Windows 系统中运行一些软件需要先安装.Net Framework XX 这种依赖库,而依赖管理工具与前端的 npm 类似,会自动帮你安装所依赖的库,就是所谓的一键安装升级卸载工具。

从上面的表格中可以看出 RedHat 系和 Debian 系的安装工具有所区别,这也就是为什么我前面要强调先区分发行版系统再执行命令,在 Debian 中执行 yum 是不可行的,虽然我们可以把 yum 安装到 Debian 中,但这显然违反了设计的初衷,因为 Debian 已经有 apt 了,另外需要注意的是,即使是同样功能的依赖库,软件包的名字可能也是不一样的,可能是因为由不同的人开发了相同功能的软件,例如编译 Nginx 所需要的 5 个依赖:

RPM 包默认安装路径:

安装路径含 义
/etc/配置文件安装目录
/usr/bin/可执行的命令安装目录
/usr/lib/程序所使用的函数库保存位置
/usr/share/doc/基本的软件使用手册保存位置
/usr/share/man/帮助文件保存位置

环境变量

另外需要注意的是,指令文件通常不会作用到全局,需要我们自己去修改环境变量。如果有在 Windows 中安装过 Java 可能会有印象,我们安装完成后并不能在 cmd 中直接使用 Java 指令,而是要到对应的目录中才可以执行,但是通过设置环境变量,将指令文件映射到全局,就可以在任意文件夹目录使用 Java 指令,Linux 也是一样的,上文目录结构那张图中有个名为“sbin”的文件,其中存储的就是指令。有些人提供的安装脚本会帮你添加好全局指令,具体操作需要自己斟酌。

一些常用软件的安装流程我之前写过,可以参考下面两篇:

在 Linux 上从零开始部署前后端分离的 Vue+Spring boot 项目

前端 Linux 部署命令与流程记录

守护进程

守护进程这部分因为方法很多,而且都很容易查到,我没有写具体步骤,但是对于 web 开发来说很重要,一定要提一下。

当我第一次开发好应用,上传服务器,(中间略去一大堆步骤),启动使用也 OK 以后,以为一切万事大吉就把远程工具关掉了,然后发现应用就不能访问了,了解了之后才知道我只是创建了一个前台的任务,就像 Windows 系统中你当前打开的窗口,你关闭窗口程序自然不再运行,然而还是有很多程序不依赖于窗口运行,这些后台任务默默地在执行着工作,就像我们的网站 24 小时在线一样,所以我们也要通过守护进程这一形式把我们的应用也变成后台任务,方法有很多,可以参考下面这篇:

Linux 守护进程的启动方法

权限

权限问题我们都会说很重要,但是在网上查资料的时候发现很多人改权限一点都不手软,这里以 Nginx 创建自定义日志为例,Nginx 默认配置第一行如下:

#user  nobody;

意思是 Nginx 是通过 nobody 这个用户来启动的,所以 Nginx 的最大权限就是 nobody 的权限,虽然这里注释掉了,但是默认值就是 nobody,这个可以在系统中查到。

Nginx 的默认日志文件为/usr/local/nginx/logs/access.log,通过下图可以看到它的权限 rwxrwxrwx,可以简单来说就是完全权限,任何人都可以读、写或删除,如果我们想让 Nginx 在 /usr/local/nginx/logs这个目录中写自定义日志会得到没有权限的错误,因为 nobody 这个用户没有对这个目录的读写权限。

我查到一种很常见的解决方法:如果 nobody 没有读写权限,那么哪个用户有读写权限呢?root 肯定有,所以就把 Nginx 的用户改成了 root,这种思路看起来合理,但是这种权限操作却并不必要,回过头来思考一下,如果没有目录的读写权限,给目录设置相应用户的读写权限就可以了。

现在我们回到权限的设置上,rwx 其实很容易就能猜到分别代表读(用 r 表示)、写(用 w 表示)和执行(用 x 表示,针对可执行文件或目录),为什么有三个,看下图:

至于为什么最开始提到 777 权限,并且很多文章会让你执行 chmod 777,这里面:

  • r:表示读取,对应的数字为 4;
  • w:表示写入,对应的数字为 2;
  • x:表示执行,对应的数字为 1

通过 4、2、1 的组合,我们可以得到以下几种权限

  • 0:没有权限,用 - 表示
  • 4:读取权限,用 w 表示
  • 5:读取和执行权限,用 rx 表示
  • 6:读取和写入权限,用 rw 表示
  • 7:读取、写入和执行权限,用 rwx 表示

所以 777 就表示不应该被滥用的最高权限。

注意

还有很多零散的点需要注意一下不单独分章节了。

大小写

这点很容易被忽视,但是遇到这个问题后很让人头疼,我们习惯使用的 Windows 系统文件名是大小写不敏感的,也就是说一个名字叫 a.txt 的文件,和一个名字叫 A.txt 是同名的,然而在 Linux 中是对大小写敏感的,这一点需要留意。

端口开放(防火墙)

我们的 web 应用经常要暴露一些端口给外部访问,除了要在系统内部的防火墙中开放所需要的端口,还要在云服务器平台上开放相应的端口。另外,不要图省事把防火墙整个关掉。

编码格式及行尾格式

  • Linux 的换行,在每一行的末尾只有一个换行符(LF) \n, 行尾以 \n 来标识
  • Windows 的换行,在每一行的末尾是 一个回车(CR) \r 和一个换行符(LF) \n 和,行尾以 \r\n 来标识

所以两边文件互相转移时可能会有多余字符。

sudo

在很多文章中,会有以sudo开头的命令,它的作用是临时提升命令的权限,让它获得最高权限,也许能提高一些命令的成功率,但如果你已经是 root 用户了,加上sudo也没用。

文本处理

如果想在 Linux 中直接编辑文本会比想象中复杂,但是多操作几遍就能理解,条件允许的情况下我会在 ftp 中编辑文件。

编辑指令可以参考这篇

Linux文件编辑命令详细整理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/751429.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一、Dell服务器的iDRAC管理卡连接

Dell服务器的iDRAC管理卡图文教程 1、网线连接idrac口2、查看idrac地址3、匹配IP地址4、web登录idrac页面5、登录成功页面 带有集成戴尔远程访问控制器 (idrac)的系统具有默认用户名和密码,但您也可以使用安全密码对其进行配置。默认使用web浏…

【设计模式】简易俄罗斯转盘实现JAVA

大家好哇,我是梦辛工作室的灵,最近有些无聊,没得什么事情做,所以想再熟悉熟悉设计模式吧,然后就写了个俄罗斯转盘玩,还是老样子先看结果: 看上去还是不错的吧,最后那个只是打印&…

数学建模 插值算法

有问题 牛顿差值也有问题它们都有龙格现象,一般用分段插值。 插值预测要比灰色关联预测更加准确,灰色预测只有2次 拟合样本点要非常多,样本点少差值合适

Qt 桌面系统设计

文章目录 前言一、项目介绍二、界面布局三、按键图标四、桌面背景五、实现led功能总结 前言 这篇文章介绍 一个Qt 桌面系统的项目,大家可以在此基础上加以改进,实现更多的功能。 一、项目介绍 可以看到 这个桌面系统上分为两部分,左边是 三个…

在Linux上 USRP RIO 2944 使用 PCIe

支持的硬件 USRP-2900USRP-2901USRP-2920USRP-2921USRP-2922USRP-2930USRP-2932USRP-2940 40 MHzUSRP-2940 120 MHzUSRP-2942 40 MHzUSRP-2942 120 MHzUSRP-2943 40 MHzUSRP-2943 120 MHzUSRP-2944USRP-2945USRP-2950 40 MHzUSRP-2950 120 MHzUSRP-2952 40 MHzUSRP-2952 120 MH…

【Unity面试篇】Unity 面试题总结甄选 |算法相关 | ❤️持续更新❤️

前言 之前整理了一篇关于Unity面试题相关的所有知识点:2022年Unity 面试题 |五萬字 二佰道| Unity面试题大全,面试题总结【全网最全,收藏一篇足够面试】为了方便大家可以重点复习某个模块,所以将各方面的知识点进行了拆分并更新整…

山西电力市场日前价格预测【2023-07-14】

日前价格预测 预测明日(2023-07-14)山西电力市场全天平均日前电价为315.29元/MWh。其中,最高日前价格为386.08元/MWh,预计出现在21: 45。最低日前电价为232.93元/MWh,预计出现在14: 45。 价差方向预测 1:实…

利用windows恶意软件获取windows主机shell

实验目的: 模拟黑客利用windows恶意软件获取windows主机shell权限的过程 熟悉操作使用的命令实验准备: kali 同网段的windows主机(关闭防火墙) msfvenom是一个Metasploit独立的有效负载生成器,也是msfpayload和msfenco…

【大数据之Hive】二十二、HQL语法优化之Join优化

主要控制优化使用哪种join算法。 1 Common Join Common Join是Hive中最稳定的join算法也是默认的join算法,其通过一个MapReduce Job完成一个join操作。Map端负责读取join操作所需表的数据,并按照关联字段进行分区,通过Shuffle,将…

【动手学深度学习】--01.线性回归

文章目录 线性回归1.原理1.1线性模型1.2衡量预估质量——平方损失1.3训练数据1.4参数学习1.5优化算法 2.从零开始实现线性回归2.1生成数据集2.2批量读取数据集——Mini-batch思想2.3初始化模型参数2.4定义模型2.5定义损失函数2.6定义优化算法2.7训练模型 3.借助深度学习框架实现…

关于nginx学习记录(一)

系列文章目录 第一章 Nginx 学习入门——Nginx的概述及安装 系列文章目录 一、Nginx 概述 二、安装步骤 1.下载pcre安装包,并放入linux中,进行解压: 2.pcre解压完成后,进入解压后的文件,执行./configure命令 3.在当前目录执行命令:make && make install 4.由于到…

【并发编程的艺术读书笔记】创建线程的四种方式

创建线程的四种方式 继承Thread类 public class MyThread extends Thread {Overridepublic void run() {System.out.println("MyThread...run...");}public static void main(String[] args) {// 创建MyThread对象MyThread t1 new MyThread() ;MyThread t2 new M…

神经网络模型在深度学习中的作用

神经网络模型是一种模拟人脑神经元之间连接和相互作用的数学模型。它由多个神经元(节点)以层次结构相互连接而成,每个神经元通过学习权重和偏置,根据输入数据产生相应的输出。 在深度学习中,神经网络模型被广泛应用于…

基于ZYNQ阵列涡流检测系统硬件设计(一)

为实现阵列涡流检测系统总体功能,需研制一套多通道信号采集硬件系统,以搭配 软件编程实现分时激励和分时采集。基于以上要求,本章介绍了阵列涡流检测系统的硬 件模块设计。 3.1 阵列涡流检测系统总体设计 阵列涡流检测系统需要利用 DA …

PADS Logic元件库创建的管脚如何快速复制

在绘制原器件封装的时候,如果对管脚一个一个去进行放置会影响效率,因此可以通过对管脚进行复制来实现快速放置管脚。 第一步:在元件界面点击添加端点图标,先进行一个管脚的放置,如图1所示 图1 放置管脚示意图 第二步&…

2.Vue3中Cesium地图初始化及地图控件配置

前言 本文中,我们主要介绍 Cesium 在 Vue 3运行环境的配置,以及 Cesium 实例中控件的显隐设置,本文是后续文章内容的基础,项目代码在此查看;通过本文,我们可以得到一个纯净的 cesium 项目,后续的…

ptrace修改进程数据

ptrace可以修改和读取一个进程的数据 long ptrace(enum __ptrace_request request,pid_t pid,void *addr,void *data); PTRACE_TRACEME, 本进程被其父进程所跟踪。其父进程应该希望跟踪子进程 PTRACE_PEEKTEXT, 从内存地址中读取一个字节,内存地址由addr给出 PT…

基于docker搭建gitea私服仓库,并开启https访问、ssh访问和邮箱验证通知功能

系列文章目录 git常用命令大锦囊 文章目录 系列文章目录前言一、gitea安装1. 安装docker compose2. 安装gitea 二、给gitea配置https访问三、gitea配置ssh方式拉取代码四、给gitea配置可发送的邮箱五、gitea注册开启邮箱验证和邮箱通知六、限制所有仓库只有登录后才能访问七、…

Windows git bash输入vim报错,不能使用vim-plug插件管理器

Windows系统下的git bash在安装时自带了默认的vim&#xff0c;我自己也下了个gvim&#xff0c;并且配置了.vimrc&#xff0c;其中使用了vim-plug管理nerdtree这些插件。但是在bash中vim <file>时&#xff0c;就会蹦出来几行报错&#xff1a; 处理 /c/Users/<username…

pyqt 实现计算器

1.由designer设计实现的计算器类 文件名为&#xff1a;untitled.py # -*- coding: utf-8 -*-# Form implementation generated from reading ui file untitled.ui # # Created by: PyQt5 UI code generator 5.15.9 # # WARNING: Any manual changes made to this file will b…