2024年1月

by emanjusaka from
https://www.emanjusaka.top/2024/01/linux-directory-role
彼岸花开可奈何
本文欢迎分享与聚合,全文转载请留下原文地址。

Linux 是一个严谨的操作系统,每个目录存放什么文件是有明确的要求和规范的。我们应该去了解这些目录的作用,然后按照目录要求去操作。

常见目录

  • /bin/
    存放系统命令的目录,普通用户和 root 都可以执行,不过放在 /bin 下的命令在单用户模式下也可以执行
  • /sbin/
    保存与系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但是有些命令可以允许普通用户查看
  • /usr/bin/
    存放系统命令的目录,普通用户和超级用户都可以执行,这些命令和系统启动无关,在单用户模式下不能执行
  • /usr/sbin/
    存放根文件系统不必要的系统管理命令,如多数服务程序,只有 root 可以使用。Linux 系统的命令规律,所有 “sbin” 目录中保存的命令只有 root 可以使用,“bin” 目录中保存的命令所有用户都可以使用
  • /boot/
    系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等
  • /dev/
    设备文件保存位置
  • /etc/
    配置文件保存位置,系统内所有采用默认安装方式(rpm 安装)的服务配置文件全都保存在此目录中,如用户信息,服务的启动脚本,常用服务的配置文件等
  • /home/
    普通用户的宿主目录,在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的宿主目录,所有普通用户的宿主目录是在
    /home/
    下建立一个和用户名相同的目录。如用户 liming 的宿主目录就是
    /home/liming
  • /lib/
    系统调用的函数库保存位置
  • /lost+found/
    当系统意外崩溃或意外关机时,产生的一些文件碎片会存放在这里,在系统启动的过程中,fsck 工具会检查这里,并修复已经损坏的文件系统,这个目录只在每个分区中出现,例如,
    /lost+found
    就是根分区的备份恢复目录,
    /boot/lost+found
    就是
    /boot
    分区的备份恢复目录
  • /media/
    挂载目录,系统建议是用来挂载媒体设备的,如软盘和光盘
  • /mnt/
    挂载目录,早期 Linux 中只有这一个挂载目录,并没有细分。现在系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区
  • /misc/
    挂载目录,系统建议用来挂载 NFS 服务的共享目录,虽然系统准备了三个默认挂载目录
    /midia/

    /mnt/

    /misc/
    ,但是到底在哪个目录中挂载什么设置可以由管理员自己决定。
  • /opt/
    第三方安装的软件保存位置,这个目录是放置和安装其他软件的位置 ,手工安装的源码包软件都可以安装到这个目录中。
  • /proc/
    虚拟文件系统,该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态等。如
    /proc/cpuinfo
    是保存 CPU 信息的,
    /proc/devices
    是保存设备驱动的列表的,
    /proc/filesystems
    是保存文件系统列表的,
    /proc/net
    是保存网络协议信息的
  • /sys/
    虚拟文件系统。和
    /proc/
    目录相似,该目录中的数据都保存在内存中,主要保存于内核相关的信息
  • /root/
    root 的宿主目录,普通用户宿主目录在
    /home/
    下,root 的宿主目录直接在 “/” 下
  • /srv/
    服务数据目录,一些系统服务启动之后,可以在这个目录中保存所需要的数据
  • /tmp/
    临时目录,系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。我们建议此目录中不能保存重要数据,最好每次开机都把该目录清空
  • /usr/
    系统软件资源目录,注意usr不是 user 的缩写,而是“UNX Software Resource” 的缩写,所以不是存放用户数据的目录,而是存放系统软件资源的目录,系统中安装的软件大多数保存在这里
  • /usr/lib/
    应用程序调用的函数库保存位置
  • /usr/X11R6/
    图形界面系统保存位置
  • /usr/local
    手工安装的软件保存位置,我们一般建议源码包软件安装在这个位置
  • /usr/share/
    应用程序的资源文件保存位置,如帮助文档、说明文档和字体目录
  • /usr/src/
    源码包保存位置,我们手工下载的源码包和内核源码包都可以保存到这里。不过习惯把手工下载的源码包保存到
    /usr/local/src/
    目录中,把内核源码保存到
    /usr/src/linux/
    目录中
  • /var/
    动态数据保存位置,主要保存缓存、日志以及软件运行所产生的文件
  • /var/www/
    RPM 包安装的 Apache 的网页主目录
  • /var/lib/
    程序运行中需要调用或改变的数据保存位置,如 MySQL 的数据库保存在
    /var/lib/mysql/
    目录中
  • /var/log/
    系统日志保存位置
  • /var/run/
    一些服务和程序运行后,它们的 PID(进程 ID)保存位置
  • /var/spool/
    放置队列数据的目录。就是排队等待其他程序使用的数据,比如邮件队列和打印队列
  • /var/spool/mail/
    新收到的邮件队列保存位置,系统新收到的邮件会保存在此目录中
  • /var/spool/cron/
    系统的定时任务队列保存位置,系统的计划任务会保存在这里

本文原创,才疏学浅,如有纰漏,欢迎指正。如果本文对您有所帮助,欢迎点赞,并期待您的反馈交流,共同成长。
原文地址:
https://www.emanjusaka.top/2024/01/linux-directory-role
微信公众号:emanjusaka的编程栈

博主是21年入职橙厂的,任职前端开发,一晃三年了,合同快到期了,上周三领导找我谈话,说公司大概率不会跟我续签合同,说是橙厂这几年都在降本增效,这次裁人无关个人能力和个人绩效问题,简单点说,就是公司不想跟你续签了,走合法流程,给你补偿然后走人。叫我做好准备,说是跟我争取了自己1月底主动离职可以拿到N+1赔偿,等公司通知的话,只有N。我回家想了下,这个时间节点,快过年了,自己主动离职也不好找工作,而且要出去面试的话,也得复习准备一下,不能就这样光溜溜的就出去面试,再说到我这个年纪了,很多公司的HR可能都不太会看我的简历。所以我第二天和领导说了,我还是等公司通知吧,尽管很无奈,但还是得接受。。。

对于大龄程序员来说,30岁真的是一道坎,现在大多数公司基础开发程序员都是清一色的30岁以下的,30岁以上还在敲代码的可能就比较少了,管理岗位就那么多,所谓僧多粥少,所以好多公司都会以各种名义不跟你续签或者直接把你裁了,或许有人会说,博主你31了,怎么还在做基础开发,橙厂不是大厂吗,你咋不是领导呢,那我只能说,我只是一个普通的程序员,跟那些个大佬还是有差距的,再说就算是领导岗位,也逃脱不了被裁的命运,简单来说,就是公司这几年效益不好,要缩减机构,降本增效,即使你是领导,也会被裁的。

这几天网上看了下前端开发招聘的岗位,跟疫情前比,这几年的行情确实不如之前了,招聘的岗位少了,然后招聘要求还高的要死,这个行业真的是太卷了。话说回来,工作还是要找的,好好复习下前端基础知识,背下面试题,好好准备下。

互勉吧,加油打工人!

Gradle 在进行 sync 的时候会出现

Caused by: org.gradle.internal.resolve.ModuleVersionResolveException: Could not resolve gradle:gradle:8.2.

查看异常信息发现 Gradle 无法下载
https://services.gradle.org/distributions/gradle-8.2-src.zip
,这个链接重定向到
https://github.com/gradle/gradle-distributions/releases/download/v8.2.0/gradle-8.2-src.zip
,Github 很难连上。


gradle-wrapper.properties

distributionUrl
设置为
https\://mirror.nju.edu.cn/gradle/gradle-8.2-bin.zip
,Gradle 仍然会下载
https://services.gradle.org/distributions/gradle-8.2-src.zip
。为什么 Gradle 不使用镜像源呢?翻了一下 Gradle 的源码,发现这个链接是写死的。

private
fun createSourceRepository() = ivy {
    val repoName = repositoryNameFor(gradleVersion)
    name = "Gradle $repoName"
    setUrl("https://services.gradle.org/$repoName")
    metadataSources {
        artifact()
    }
    patternLayout {
        if (isSnapshot(gradleVersion)) {
            ivy("/dummy") // avoids a lookup that interferes with version listing
        }
        artifact("[module]-[revision](-[classifier])(.[ext])")
    }
}

没有任何方法可以直接修改这个链接。

要解决这个问题,可以直接为 Gradle 设置代理进行网络加速。但是这样会导致之前设置的 Maven 镜像链接也会经过代理。

继续翻看 Gradle 源码发现有这样一段代码

    private
    fun sourceRootsOf(gradleInstallation: File, sourceDistributionResolver: SourceDistributionProvider): Collection<File> =
        gradleInstallationSources(gradleInstallation) ?: downloadedSources(sourceDistributionResolver)


    private
    fun gradleInstallationSources(gradleInstallation: File) =
        File(gradleInstallation, "src").takeIf { it.exists() }?.let { subDirsOf(it) }

gradleInstallation
存在
src
目录的时候就不会继续下载
gradle-8.2-src.zip
。继续往上翻,发现这个值就是
project.gradle.gradleHomeDir

直接把这个变量在
build.gradle.kts
中打印出来就是
%USERPROFILE%\.gradle\wrapper\dists\gradle-8.2-bin\4zwrvmkltlrdjhbk3gu6ax49g\gradle-8.2
。这个文件夹就是
gradle-8.2-bin.zip
解压后的。

于是直接把
gradle-wrapper.properties

distributionUrl

bin
改为
all
,再把
distributionSha256Sum
修改为对应的值。也就是

distributionSha256Sum=5022b0b25fe182b0e50867e77f484501dba44feeea88f5c1f13b6b4660463640
distributionUrl=https\://mirror.nju.edu.cn/gradle/gradle-8.2-all.zip

直接 Build 通过,没有任何问题。

gradle-8.2-all.zip
里面已经包含了
src
目录,Gradle 不会继续下载
src

可以查询
https://gradle.org/release-checksums
找到对应版本的
distributionSha256Sum
。如果本来就没用它,可以不改这个值。

钢铁知识库,一个学习python爬虫、数据分析的知识库。人生苦短,快用python。

xshell是什么

通俗点说就是一款强大ssh远程软件,可以方便运维人员对服务器进行管理操作,功能很多朋友们自行探索,今天只聊其中一个功能点那就是隧道转发。

隧道转移是什么

xshell隧道转移到底是干嘛的,有什么作用呢?隧道是一种技术,它允许你通过一个加密连接发送原本不安全的流量。这就像在不安全的网络上建立了一个安全的“隧道”。主要用于在不安全的网络中安全地传输数据。这种技术通过在客户端和服务器之间建立一个加密的网络连接,来保护数据的安全性和隐私性。

xshell隧道转发的三种类型:

Xshell的隧道转发功能有三种主要类型:本地端口转发(Local Port Forwarding)、远程端口转发(Remote Port Forwarding)和动态端口转发(Dynamic Port Forwarding)。下面是每种类型的详细解释:

  1. 本地拨出 Local(Outgoing)

    • 作用
      :将本地计算机的一个端口连接到远程服务器的一个指定端口上。
    • 应用场景
      :当你想从本地机器安全地访问位于远程服务器上的服务(如数据库、web服务等)时使用。
    • 工作原理
      :通过SSH连接,用户在本地机器上指定一个端口,Xshell会创建一个隧道,把这个本地端口上的所有数据发送到远程服务器的指定端口。
  2. 远程传入Remote(Incoming)

    • 作用
      :将远程服务器的一个端口连接到本地计算机的一个指定端口上。
    • 应用场景
      :当远程服务器需要访问你的本地机器上的服务(例如,你在本地运行的web应用)时使用。
    • 工作原理
      :通过SSH连接,用户在远程服务器上指定一个端口,Xshell会创建一个隧道,把这个远程端口上的所有数据发送到本地计算机的指定端口。
  3. Dynamic(SOCKS4/5)

    • 作用
      :建立一个SOCKS代理服务器,通过这个代理服务器转发网络流量。
    • 应用场景
      :常用于访问通过常规网络无法直接访问的服务,比如绕过网络审查或访问局域网内的资源。
    • 工作原理
      :用户指定一个本地端口用作SOCKS代理,Xshell会将通过这个端口的数据通过SSH隧道转发到任意目的地。这种方式提供了更多的灵活性,可以转发到多个远程服务。

使用场景

​ 网上有很多使用场景,有通过隧道访问内网服务器的;有通过转发访问某个web页面的;还有通过隧道代理绕过无法访问的网络资源。

​ 今天我说一个目前自己经常在用的使用场景,借助远程传入功能实现远程服务器某些网络资源无法访问的问题。

通过转发绕过限制网络

​ 原理大概是这样:我在阿里云有一台深圳节点的ECS,工作原因需要下载k8s集群中某些资源,因为网络限制会导致下载超时,而我本地PC刚好没有网络限制可以直接下载,这时可以通过xshell远程传入功能将服务器http_proxy转发到本地计算机,从而实现网络资源下载。


image-20240121121851603

1.开始转发前

image-20240121122854223

​ 可以看到在没有配置转移规则前,curl连接访问是超时的。

2.配置转移规则

​ 先在服务器上执行export http_proxy将请求代理转发到9999,

export http_proxy=http://127.0.0.1:9999/ https_proxy=http://127.0.0.1:9999/

​ 然后在xshell会话中,转移规则空白处点击添加,转移规则如下:

类型(方向):远程(传入)
源主机:localhost(服务器代理传入的ip)
侦听端口:9999(服务器传入的端口)
目标主机:localhost(本机fiddler)
目标端口:8888(fiddler监听的端口)

image-20240121123240902

​ 同时在本机打开fiddler准备好接受请求

image-20240121123917598

3.完成转发配置后

​ 完成配置后再次访问可以看到不再超时,可以正常获取到头信息。

image-20240121132747394

---- 钢铁 648403020@qq.com 2024.01.21

​ 到此使用场景演示就结束了,隧道转发功能还有很多使用技巧,朋友们可以慢慢挖掘。

​ 除了xshell有隧道转发功能外,securecrt也有这个功能,操作原理是一样,这里就不再做另外演示。

​ 今天先分享到这里。

说起质量管理,那一定少不了 SPC,SPC中文名叫统计过程控制,对生产过程中记录的数据进行分析,及时了解不良情况出现的几率,并采取必要的措施达到消除影响的目的,这其中有几个关键术语,比如 UCL等.

为了方便检验人员操作, SPC 模块运行在 Android 平板电脑上面,检验人员在生产过程中进行巡检,及时记录检验内容及结果,并支持现场对实物拍照上传。

系统支持两种方式录入数据:

  1. 每一个产品上面有唯一的条形码或二维码,系统可直接扫描条形码或二维码。

  2. 如果没有启用条码化管理,则可直接输入生产工单。

检验人员在记录数据的过程中,如果发现不良现象需要拍照上传,可自定义位置标签,选择位置标签之后再进行拍照,将位置与图片进行绑定,方便分类查看不良图片。

所有拍摄的图片均可在线预览,方便检验人员进行核对!

下一篇文章将介绍如下内容:

  1. 连续两小时超过 UCL 触发警告单。

  2. 一小时内超过 UCL 并且坏点数量达到预设值 触发警告单。

  3. 针对警告单给出短期改善方案与长期改善方案。

  4. QA 验证改善方案的有效性。