archlinux

时间:2024-11-28 01:00:10编辑:阿奇

linux中%什么意思

在linux系统中在命令行中Bash中特有的字符串替换方式。

其中%是linux中shell中一般代表变量,其中linux系统中有系统变量和自定义变量。
其中有些事系统自带的变量如使用env命令显示所有的环境变量,还有一些是自己编写的变量,具体含义需要提前赋值。
其中系统变量如系统提供的参数称为位置参数。参数的值可以用$N得到,N是一个数字,如果为1,即$1。如果是%表示则为%1.
我举一个列子帮助理解:
假设一个变量:
x=abcdabcd
那么:
echo ${x/a/b} # 只替换第一个a为b,结果:
bbcdabcd
%echo ${x//a/b} # 将所有a替换为b,结果:
bbcdbbcd
其中不可以使用正则表达式, 只能用 * ? 等通配符。


Linux中的 /#和#的区别

Linux中的 /#和#的区别为:执行路径不同、使用用户不同、切换不同。一、执行路径不同1、/#:/#的路径目录是根目录,在绝对路径根目录下执行操作。2、#:#的路径目录是家目录,在相对路径家目录下执行操作。二、使用用户不同1、/#:/#针对的使用用户为系统默认创建的用户,即root用户。2、#:#针对的使用用户为于非系统默认创建的该用户。三、切换不同1、/#:/#可以直接切换到其他路径目录下,不需要退回到上级路径目录。2、#:#不可以直接切换到其他路径目录下,需要退回到上级路径目录。

为什么 Archlinux 不适合服务器使用?

  Archlinux 也并非完全没有测试,它也有自己的 testing 分支和完善的 tracking system 。然而由于 Archlinux 的哲学,更新速度非常之快,甚至 GNOME 2 到 3 这样的大型更新它都只用了不到一个月就正式发布了。而 Archlinux 毕竟不算是一个大型发行版,工作人员有限,这么短的时间之内很难进行彻底的测试。发布之后再遇到大小 bug 都是再常见不过的事情,除了一般软件 bug 甚至还有内核和硬件之间的兼容问题……比如我的上一篇博客就提到了两个相当严重的 bug 。想看更多的例子?去 官方论坛 看看就知道了。

  由于 Archlinux 的特点和哲学,其实这不是什么大问题。折腾 Archlinux 的都不是小白,在社区的配合之下一般最后都能顺利找到问题根源(大多数时候是上游 bug ……)然后找到 workaround 并向上游反馈。包括我在内的不少用户其实是乐在其中的(虽然嘴上抱怨不断)。 Archlinux 的“用户”在一些大型发行版里其实应该是“志愿者”之类的存在……

  但这在生产环境之下是不能容忍的。你让一个生产服务器更新之后遇到 bug 然后运维顶着上司压力满头大汗地找问题、提 issue ?对这一点抱有疑问的人一定没有在商业公司做过运维。不要和我说什么你的个人博客 VPS 用的是 Archlinux 。

  更新内核后竟一定要重启?

  这应该是 Archlinux 最大的问题了。很多 Linux 用户都不理解为何 Debian 和红帽系都要把每个内核版本分开打包,然后再做一个虚包指向最新版内核,更新内核时不会自动删掉旧版本,还得之后手动删除……

  这其实是有非常重要的理由,而且不限于是“保险起见”,新内核启动不起来的时候可以选择旧内核。更重要的原因是—— Linux Kernel 是模块式的、动态加载的,而 /usr/lib/modules/LINUX-KERNEL 是属于内核软件包的。如果在更新内核的时候删掉了旧版内核的软件包(也就删掉了模块目录),就会使得还未加载的模块无法再被加载了。觉得没有影响?那么我告诉你——硬件驱动都是以内核模块形式存在的。举个例子,如果你使用 Archlinux ,在某此启动之后都没有插过 U 盘,然后更新了内核,你就发现 U 盘插进去以后怎么都认不出来(USB EHCI 模块和 vfat 文件系统模块都没挂载……)。你说服务器上不会有硬件变动?那么你一定是忘记了 OpenVPN 之类的软件,在启动之后需要建立一个虚拟设备(比如 OpenVPN 的 TAP 或者 TUN ),如此一来也就无法使用了。

  最终的结果就是,使用 Archlinux ,要么你就别更新内核,要么更新了内核以后就立即重启以免遇到奇怪的问题。这种粗暴的更新方式难道不是比 Windows Update 还要糟糕么?(用过 Windows Server 的人一定遇到过更新以后要求你重启,甚至如果你正好处于一个活跃会话,那么如果你不立即取消掉那个对话框, 15 分钟后就直接给你重启了……)

  糟糕的 Pacman

  比起复杂甚至臃肿的 yum/rpm 和 apt-get/dkpg , Archlinux 的包管理器要简单许多,一个 pacman 就搞定了“源”和“包”两头,完成了别的发行版两个软件才能做到的事情。

  可如果真要是这么简单的一个程序就能做好的事情,为什么别的发行版都要这么“笨”地开发如此复杂的工具?答案其实很简单——软件包管理本来就是非常复杂的事情。我不是一个包管理者,在这方面没有什么发言权,但单从一个用户角度来看也足够意识到其存在的不足了。依赖、推荐不够灵活,只有 depends opt-depends suggestions 三种,缺乏“虚包”的支持。一些常见的需求比较难以优雅地实现,比如:一个软件有多个不同的实现时,只能通过设置相同的 provides 然后再互相 conflicts 实现,这样一来每加一个新的实现就要修改之前所有的相同 provides 的包,而且也缺乏 dpkg-reconfigure 之类的工具来选择一个虚包到底使用哪一个实包从而实现灵活地在不同实现之间切换的功能(比如 Oracle JDK 和 OpenJDK 之间的切换,在 Archlinux 里只能安装一个然后删除掉另一个)。

  另外, Archlinux 的打包粒度太大(比如一个 php 包就包括了大量非必须模块,得靠修改配置文件来启用或禁用,而在 Debian 和红帽里则是被拆成了很多个包)。当然,也有人认为 Debian 的粒度太细就是了。不过就我两年的使用经历看来 Archlinux 的包的确偏大,对于桌面版没有什么问题,这年头大家的硬盘也都挺大,但在服务器上一般都是希望安装尽可能少的软件以尽可能减少漏洞和 bug 。

  当然,比较简单的包管理器也有一个好处,就是降低了打包的门槛。这也是 AUR 能够这么方便易用、内容丰富的部分原因。

  最后,吐槽一下 pacman 不会自动清理包缓存,哪怕是很早以前的。我在用了两年之后包缓存有30多个G,直接把我的根分区都占满了……


为什么Arch Linux不适合作为服务器操作系统

1、过分激进的滚动更新
滚动更新是Arch Linux最大的优势,但同时也是最大的劣势之一。
2、激进的内核更新机制
这种立即删除旧内核的更新机制也是Arch作为服务器的劣势之一。
3、软件包管理体系
Arch Linux被推崇很大一部分的原因是便于使用的软件包管理体系。
4、打包粒度
虽然最近几年有所改善,但是Arch Linux的打包粒度对于服务器来说还是过分大了。


上一篇:任言恺

下一篇:没有了