System.map、vmlinuz、initrd.img

System.map、vmlinuz、initrd.img vmlinuz 1.vmlinuz是可引导的、压缩的内核。“vm"代表"Virtual Memory”。Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名"vm"。vmlinuz是可执行 的Linux内核,它位于/boot/vmlinuz,它一般是一个软链接,比如图中是vmlinuz-2.4.7-10的软链接。 vmlinuz的建立有两种方式。一是编译内核时通过"make zImage"创建,然后通过:“cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage/boot/vmlinuz"产生。zImage适用于 小内核的情况,它的存在是为了向后的兼容性。 2.是内核编译时通过命令make bzImage创建,然后通过:“cp/usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz"产生。bzImage是压缩的内核映像,需要注意,bzImage不是用bzip2压缩的,bzImage中的bz容易引起误解,bz表示"big zImage”。 bzImage中的b是"big"意思。 zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有 gzip解压缩代码。所以你不能用gunzip 或 gzip –dc解包vmlinuz。内核文件中包含一个微型的gzip用于解压缩内核并引导它。两者的不同之处在于,老的zImage解压缩内核到低端内存(第一 个640K), bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么可以采用zImage或bzImage之一,两种方式引导的系统运行时是相同的。 大的内核采用bzImage,不能采用zImage。vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件。 二、initrd-x.x.x.img initrd是"initial ramdisk"的简写。initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。图中的initrd-2.4.7- 10.img主要是用于加载ext3等文件系统及scsi设备的驱动。比如,使用的是scsi硬盘,而内核vmlinuz中并没有这个scsi硬件的驱 动,那么在装入scsi模块之前,内核不能加载根文件系统,但 scsi模块存储在根文件系统的/lib/modules下。为了解决这个问题,可以引导一个能够读实际内核的initrd内核并用initrd修正 scsi引导问题。initrd-2.6.20-1.img是用gzip压缩的文件,initrd实现加载一些模块和安装文件系统等功能。 initrd映象文件是使用mkinitrd创建的。mkinitrd实用程序能够创建initrd映象文件。这个命令是RedHat专有的。其它 Linux发行版或许有相应的命令。这是个很方便的实用程序。具体情况请看帮助:man mkinitrd下面的命令创建initrd映象文件。 initrd是linux在系统引导过程中使用的一个临时的根文件系统,用来支持两阶段的引导过程。 直白一点,initrd就是一个带有根文件系统的虚拟RAM盘,里面包含了根目录'/',以及其他的目录,比如: bin,dev,proc,sbin,sys等linux启动时必须的目录,以及在bin目录下加入了一下必须的可执行命令。 PC或者服务器linux内核使用这个initrd来挂载真正的根文件系统,然后将此initrd从内存中 卸掉,这种情况下initrd其实就是一个过渡使用的东西。 在现在的许多简单嵌入式linux中一般是不卸载这个initrd的,而是直接将其作为根文件系统使用,在这之前就需要把所需要的程序,命令还有其它文件 都安装到这个文件系统中。其实现在的大多数嵌入式系统也是有自己的磁盘的,所以,initrd在现在大多数的嵌入式系统中也和一般的linux中的作用一 样只是起过渡使用。 Initrd的引导过程: '第二阶段引导程序',常用的是grub将内核解压缩并拷贝到内存中,然后内 核接管了CPU开始执行,然后内核调用init()函数,注意,此init函数并不是后来的init进程!!!然后内核调用函数 initrd_load()来在内存中加载initrd根文件系统。Initrd_load()函数又调用了一些其他的函数来为RAM磁盘分配空间,并计 算CRC等操作。然后对RAM磁盘进行解压,并将其加载到内存中。现在,内存中就有了initrd的映象。 然后内核会调用mount_root()函数来创建真正的根分区文件系统,然后调用sys_mount()函数来加载真正的根文件系统,然后chdir到这个真正的根文件系统中。 最后,init函数调用run_init_process函数,利用execve来启动init进程,从而进入init的运行过程。 三、System.map 内核符号映射表,顾名思义就是将内核中的符号 (也就是内核中的函数) 和它的地址能联系起来的一个列表。是所有符号及其对应地址的一个列表。之所以这样就使 为了用户编程方便,直接使用函数符号就可以了,而不用去记要使用函数的地址。当你编译一个新内核时,原来的System.map中的符号信息就不正确 了。随着每次内核的编译,就会产生一个新的 System.map文件,并且需要用该文件取代原来的文件 System.map是一个特定内核的内核符号表。它是你当前运行的内核的System.map的链接。 内核符号表是怎么创建的呢? System.map是由"nm vmlinux"产生并且不相关的符号被滤出。 下面是System.map文件的一部分: c0100000 A _text c0100000 t startup_32 c01000a5 t checkCPUtype c0100133 t is486 c0100142 t is386 c010018c t L6 c010018e t ready c010018f t check_x87 c01001b6 t setup_idt c01001d3 t rp_sidt c01001e0 T stack_start c01001e8 t int_msg c01001fc t ignore_int c010021e T idt_descr c0100224 T cpu_gdt_descr c0101000 T swapper_pg_dir c0102000 T pg0 c0103000 T pg1 c0104000 T empty_zero_page c0105000 T _stext 在进行程序设计时,会命名一些变量名或函数名之类的符号。Linux内核是一个很复杂的代码块,有许许多多的全局符号。 Linux内核不使用符号名,而是通过变量或函数的地址来识别变量或函数名。比如不是使用size_t BytesRead这样的符号,而是像c0343f20这样引用这个变量。 对于使用计算机的人来说,更喜欢使用那些像size_t BytesRead这样的名字,而不喜欢像c0343f20这样的名字。内核主要是用c写的,所以编译器/连接器允许我们编码时使用符号名,当内核运行时使用地址。 然而,在有的情况下,我们需要知道符号的地址,或者需要知道地址对应的符号。这由符号表来完成,符号表是所有符号连同它们的地址的列表。上图就是一个内核符号表,由上图可知变量名checkCPUtype在内核地址c01000a5。 Linux 符号表使用到2个文件: /proc/ksyms System.map ...

2012-02-26 · 1 min · 145 words · -

linux 内核, kernel

linux 内核, kernel kernel-devel和kernel-headers都是Linux内核开发和编译过程中需要的软件包,它们包含的内容有一定的区别。 kernel-headers是Linux内核头文件的软件包,它包含了编译内核模块所需的头文件和接口定义,但是不包含内核模块的源代码。这些头文件包括了Linux内核的各种数据结构、系统调用和其他接口的声明,编译内核模块时需要这些头文件来编译并链接内核模块。 kernel-devel则是Linux内核开发包,它不仅包含了内核头文件,还包含了编译内核模块所需的各种库文件、编译器和调试工具等。它还包含了内核模块的源代码,可以让开发人员对内核进行修改和定制。 kernel doc https://www.kernel.org/doc/html/latest/ linux内核版本的分类 Linux内核版本有两种: 稳定版和开发版 ,Linux内核版本号由3组数字组成: 第一个组数字.第二组数字.第三组数字 第一个组数字: 目前发布的内核主版本。 第二个组数字: 偶数表示稳定版本;奇数表示开发中版本。 第三个组数字: 错误修补的次数。 例1: 2.6.18-128.ELsmp , 第一个组数字: 2 , 主版本号 第二个组数字: 6 , 次版本号,表示稳定版本(因为有偶数) 第三个组数字 18 , 修订版本号 , 表示修改的次数,头两个数字合在一齐可以描述内核系列。如稳定版的2.6.0,它是2.6版内核系列。128: 表示这个当前版本的第128次微调patch , 而ELsmp指出了当前内核是为ELsmp特别调校的 EL : Enterprise Linux ; smp : 表示支持多处理器 , 表示该内核版本支持多处理器 linux内核下里的ELsmp与EL与smp 在linux下ELsmp指出了当前内核是为ELsmp特别调校的 EL : Enterprise Linux ; smp : 表示支持多处理器 , 表示该内核版本支持多处理器 例2:Red Hat Linux开机的时候,GRUB的启动菜单会有两个选项,分别是 Red Hat Enterprise Linux ES (版本号.ELsmp) Red Hat Enterprise Linux ES-up (版本号.EL) 其实这个就是系统开机时由GRUB引导启动 - 单处理器与对称多处理器启动核心文件的区别。 Red Hat Enterprise Linux ES (版本号.ELsmp) multiple processor (symmetric multiprocessing ) Red Hat Enterprise Linux ES-up (版本号.EL) uniprocessor ...

2012-02-26 · 1 min · 101 words · -

gz,bz2,xz三种压缩格式的 OpenBSD CVS库容量对比

gz,bz2,xz三种压缩格式的 OpenBSD CVS库容量对比 gz,bz2,xz三种压缩格式的 OpenBSD CVS库容量对比 压缩gz格式速度最快,也是OpenBSD的常用格式,压缩bz2格式时间稍长一些,但似乎在好机器上还可以接受,xz格式的压缩效果确实不错,cvs.tar是打包的全部OpenBSD CVS库,原本大小有5G多,经过xz压缩后只有700多M,不得不说压缩算法确实强悍,不过压缩时间太长——在我的1300MHz主频的老机器上,将5G多的cvs打包文件压缩成xz格式用了两个小时左右,看来这种格式最好不作为日常采用的格式,但是如果作为放在服务器上供长期、大量下载的资源,使用这种压缩格式来进行压缩和解压尚可理解。 代码: ls -la total 14202000 drwxr-xr-x 3 root wheel 512 Mar 25 21:18 . drwxr-xr-x 15 root wheel 512 Mar 25 16:35 .. drwxr-xr-x 10 root wheel 512 Mar 25 17:49 cvs -rw-r–r– 1 root wheel 387 Mar 25 16:40 cvs-supfile -rw-r–r– 1 root wheel 5208381440 Mar 25 21:18 cvs.tar -rw-r–r– 1 root wheel 898476333 Mar 25 21:03 cvs.tar.bz2 -rw-r–r– 1 root wheel 1162675369 Mar 25 21:13 cvs.tar.gz ...

2012-02-26 · 1 min · 77 words · -

GCC

GCC GCC (GNU Compiler Collection ) ,GCC是一系列编译器的集合, 是Linux操作系统的核心组件之一。是一套由 GNU 开发的编程语言编译器。它是一套GNU编译器套装以 GPL 及 LGPL 许可证所发行的自由软件,也是 GNU计划的关键部分,亦是自由的类Unix及苹果电脑 Mac OS X 操作系统的标准编译器。GCC 原名为 GNU C 语言编译器,因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。之后也变得可处理 Fortran、Pascal、Objective-C、Java, 以及 Ada与其他语言。 GCC最初名为GNU C Compiler,当时它只是一款C语言的编译器,不过随着后续迭代,它支持C++、Fortran、Go等语言,GCC也因此成为一个编译器集合。GCC有以下特点: GCC支持的编程语言多。比如,g++ 是 C++ 编译器,gfortran是 Fortran 编译器。 GCC支持的硬件全。GCC可以将源代码编译成x86_64、ARM、PowerPC等硬件架构平台的可执行文件。 GCC支持众多业界标准。GCC能很快支持最新的C++标准,GCC支持OpenMP、OpenACC。 虽然编译器并非只有GCC一种,macOS上有Clang,Windows上有MSVC,但GCC的这些特点让它从众多编译器间脱颖而出,很多开源软件会选择GCC完成编译工作。 刚才提到,软件构建的过程比较复杂,GCC的一些“兄弟”工具提供了很多支持功能: GNU Make:一款自动化编译和构建工具,多文件、多模块的大型软件工程经常需要使用GNU Make。 GDB:GNU Debugger,用于调试。 GNU Binutils:一组二进制工具集,包括链接器ld、汇编器as等,GNU Bintuils可以和GCC、GNU Make一起完成构建过程。我们将在下文使用这些工具。 综上,GCC在Linux操作系统占有举足轻重的地位。 预处理 使用预处理器cpp工具进行预处理。注意,这里的cpp是C Preprocessor的缩写,并不是C-plus-plus的意思。 cpp hello.c -o hello.i 预编译主要处理源代码中以#开始的预编译指令,主要处理规则如下: 处理#include 预编译指令,将被包含的文件插入到该预编译指令的位置。这是一个递归的过程,如果被包含的文件还包含了其他文件,会递归地完成这个过程。 处理条件预编译指令,比如#if、#ifdef、#elif、#else、#endif。 删除#define,展开所有宏定义。 添加行号和文件名标识,以便于在编译过程中产生编译错误或者调试时都能够生成行号信息。 编译 编译的过程主要是进行词法分析、语法分析、语义分析,这背后涉及编译原理等一些内容。这里只进行编译,不汇编,可以生成硬件平台相关的汇编语言。 $ gcc -S hello.i -o hello.s gcc其实已经做了封装,背后是使用一个名为cc1的工具,cc1并没有放在默认的路径里。Ubuntu 16.04系统上,cc1位于:/usr/lib/gcc/x86_64-linux-gnu/5.4.0/cc1: ...

2012-02-26 · 1 min · 121 words · -

VFS

VFS Linux 采用 Virtual Filesystem(VFS)的概念,通过内核在物理存储介质上的文件系统和用户之间建立起一个虚拟文件系统的软件抽象层,使得 Linux 能够支持目前绝大多数的文件系统,不论它是 windows、unix 还是其他一些系统的文件系统,都可以挂载在 Linux 上供用户使用。 VFS 在 Linux 中是一个处理所有 unix 文件系统调用的软件层,同时给不同类型的文件系统提供一个统一的接口。VFS 支持以下归类的三种类型的文件系统: 磁盘文件系统,存储在本地磁盘、U盘、CD等的文件系统,它包含各种不同的文件系统格式,比如 windows NTFS、VFAT,BSD 的 UFS,CD的 CD-ROM 等 网络文件系统,它们存储在网络中的其他主机上,通过网络进行访问,例如 NFS 特殊文件系统,例如 /proc、sysfs 等 VFS 背后的思想就是建立一个通用的文件模型,使得它能兼容所有的文件系统,这个通用的文件模型是以 Linux 的文件系统 EXT 系列为模版构建的。每个特定的文件系统都需要将它物理结构转换为通用文件模型。例如,通用文件模型中,所有的目录都是文件,它包含文件和目录;而在其他的文件类型中,比如 FAT,它的目录就不属于文件,这时,内核就会在内存中生成这样的目录文件,以满足通用文件模型的要求。同时,VFS 在处理实际的文件操作时,通过指针指向特定文件的操作函数。可以认为通用文件模型是面向对象的设计,它实现了几个文件通用模型的对象定义,而具体的文件系统就是对这些对象的实例化。通用文件模型包含下面几个对象: superblock 存储挂载的文件系统的相关信息 inode 存储一个特定文件的相关信息 file 存储进程中一个打开的文件的交互相关的信息 dentry 存储目录和文件的链接信息 https://wushifublog.com/2020/05/22/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3Linux%E5%86%85%E6%A0%B8%E2%80%94%E2%80%94VFS/ VFS并不是一种实际的文件系统,它只存在于内存中,不存在任何外存空间,VFS在系统启动时建立,在系统关闭时消亡。 VFS由超级块、inode、dentry、vfsmount等结构来组成。

2012-02-25 · 1 min · 49 words · -

写放大 Write Amplification

写放大 Write Amplification “写放大”(Write Amplification)在存储系统中是很常见的。但是,即使都是在存储系统中,“写放大”也有很多种,各种的写放大原理并不是很一样。下边根据自己的理解,进行了下总结,如有问题,恳请指正。 读写单元较大导致的写放大 在文件系统中,读写单元固定,比如都是4K,这样,如果write函数写的数据小于4K,则要先把整块读入,再修改,再把新的4K整体写入 (O_DIRECT情况除外)。这个过程可以称为 RMW (Read-Modify-Write),这就是File System的写放大问题。[1][2][5] (注意:Read-Modify-Write被更广泛地用在原子指令[3]和RAID[4]中。) 再如,在DBMS等应用层存储系统中,同样存在自己管理的读写单元,如MySQL的默认读写单元称为页,默认是16KB,所以一次读写只能以页的单位进行,这时,小于页的数据读写同样会带来整页的读写,进而造成了“写放大”,道理和文件系统是一样的。 RAID中的Read-Modify-Write造成的写放大 如前段所述,RAID中更新一个块,需要额外读原始块、校验块,额外写校验块,所以多了两个读,一个写,也称为Read-Modify-Write[4]。 这是由于校验块必须更新,且根据异或运算的可逆性,新校验块=新数据块^旧校验块^旧数据块。 SSD中闪存特性造成的写放大 在SSD中,一个block可以分为多个page,在读的时候,可以以page为单位,但是写的时候,只能以block为单位。因此写的单元比较大。在上层 (比如文件系统)读写单元相同的情况下,同样是读写1个page的大小,读的话直接读就行,写的话却需要先把与要写page同一个block的数据全复制一遍,加上修改的page后,再一起写入block。写入的数据量远比实际的大,这就是SSD的写放大问题。 现在 SSD 逐渐成为主流存储,compaction 带来的写放大问题显得越来越严重: SSD 顺序读写性能比随机读写性能好一些,但是差距并没有 HDD 那么大。所以,顺序写相比随机写带来的好处,能不能抵消写放大带来的开销,这是个问题。 SSD 的使用寿命和其写入量有关,写放大太严重会大大缩短 SSD 的使用寿命。因为 SSD 不支持覆盖写,必须先擦除 (erase)再写入。而每个 SSD block (block 是 SSD 擦除操作的基本单位) 的平均擦除次数是有限的。 存储系统一致性机制造成的同步写放大 在存储系统的很多层次中,都有保证系统crash consistency (一致性)的设计。因此,不管是应用层的存储系统 (如DBMS、KV-store)、虚拟化层中的镜像管理、系统层的文件系统,甚至是硬件层的SSD FTL[7],都要通过强制同步各种元数据的写入顺序,或者利用redo log的思想,用journaling、log-structured或copy-on-write等策略保证元数据写入目的位置生效前先完整地生成日志,来保证系统崩溃或断电时,元数据之间是一致。但是,如果多层存储系统重叠,由于一致性机制导致同步次数增加就会层层放大。 比如,运行在x86虚拟机中的levelDB,其一次更新操作就会 (1)最终导致levelDB写log文件和写数据两次同步写,这两次写就又会 (2)导致2次的Guest文件系统log写和2次Guest文件系统数据写,一共4次同步写,这4次写又会导致 (3)虚拟化镜像管理层的4 x N次写 (N取决于镜像为保证元数据crash consistency的同步次数,若是qcow2格式,N可能有5次之多[6]),最后导致 (4)Host文件系统的4 x N x 2 = 8 x N次同步写。当然这是一种比较极端的情况,但实际应用中也应该存在。 基于LSM树的KV系统的Merge操作造成的写放大 levelDB等KV存储广泛采用了LSM树等结构进行存储组织,其特点就是靠上的level的数据会最终被merge sort到下层,由于多数level在磁盘文件中,这也就导致了同一KV数据的总写放大,放大的倍数就是大约是level的数目。和前边4中写放大不同的是,这种写放大并非写操作时马上就会发生写放大,而是写操作发生时会潜在的导致“未来会发生”写放大,所以这种写放大只会导致整体写代价提升,不会影响实时的延迟性能,只可能会影响磁盘带宽或者在SSD做存储设备时影响闪存耐久。FAST 16上有篇论文也专门分析了这种写放大。[8] http://blog.jcix.top/2018-06-05/write_amplification/ ...

2012-02-19 · 1 min · 78 words · -

netlink

netlink 什么是Netlink通信机制 Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应用程序与内核通信的最常用的接口。 Netlink 是一种特殊的 socket,它是 Linux 所特有的,类似于 BSD 中的AF_ROUTE 但又远比它的功能强大,目前在Linux 内核中 使用netlink 进行应用与内核通信的应用很多; 包括:路由 daemon(NETLINK_ROUTE),用户态 socket 协议(NETLINK_USERSOCK), 防火墙(NETLINK_FIREWALL),netfilter 子系统(NETLINK_NETFILTER),内核事件向用户态通知(NETLINK_KOBJECT_UEVENT), 通用 netlink(NETLINK_GENERIC)等。 Netlink 是一种在内核与用户应用间进行双向数据传输的非常好的方式,用户态应用使用标准的 socket API 就可以使用 netlink 提供的强大功能, 内核态需要使用专门的内核 API 来使用 netlink。 Netlink 相对于系统调用,ioctl 以及 /proc文件系统而言具有以下优点: 1,netlink使用简单,只需要在include/linux/netlink.h中增加一个新类型的 netlink 协议定义即可,(如 #define NETLINK_TEST 20 然后,内核和用户态应用就可以立即通过 socket API 使用该 netlink 协议类型进行数据交换); 2. netlink是一种异步通信机制,在内核与用户态应用之间传递的消息保存在socket缓存队列中,发送消息只是把消息保存在接收者的socket的接收队列,而不需要等待接收者收到消息; 3.使用 netlink 的内核部分可以采用模块的方式实现,使用 netlink 的应用部分和内核部分没有编译时依赖; 4.netlink 支持多播,内核模块或应用可以把消息多播给一个netlink组,属于该neilink 组的任何内核模块或应用都能接收到该消息,内核事件向用户态的通知机制就使用了这一特性; 5.内核可以使用 netlink 首先发起会话; https://www.cnblogs.com/wenqiang/p/6306727.html

2012-02-15 · 1 min · 64 words · -

samba

samba # archlinux 安装 samba sudo pacman -S samba # centos install samba sudo yum install samba samba-client #创建共享目录 sudo mkdir /home/user0/share # 创建 samba 用户,使用已有用户的话,可以跳过,pdbedit是samba的用户管理命令 sudo useradd -m -s /bin/bash user0 sudo pdbedit -a user0 # set password for user,设置密码,使用系统现有的用户时,也要设置密码,samba可以跟linux系统共享用户名,但是密码是独立的。 smbpasswd -a user0 # list user sudo pdbedit -L -v sudo systemctl start smb sudo systemctl enable smb sudo systemctl status smb 创建Samba配置文件 vim /etc/samba/smb.conf [global] workgroup = WORKGROUP security = user # share0: the share folder display name [share0] path = /home/user0/share valid users = user0 public = no writable = yes printable = no create mask = 0644 客户端 file share url: \hostname0\share0 ...

2012-02-13 · 1 min · 115 words · -

seabios

seabios SeaBIOS is an open source implementation of a 16bit X86 BIOS. SeaBIOS can run in an emulator or it can run natively on X86 hardware with the use of coreboot. SeaBIOS is the default BIOS for qemu and kvm.

2012-02-10 · 1 min · 40 words · -

tap0, ERROR while getting interface flags

’tap0, ERROR while getting interface flags' tap0: ERROR while getting interface flags: No such device install uml-utilities and restart the system sudo apt-get install uml-utilities sudo reboot

2012-02-09 · 1 min · 27 words · -

禁止network manager 开机启动.

禁止network manager 开机启动. 安装sysv-rc-conf sudo apt-get install sysv-rc-conf 运行sysv-rc-conf sudo sysv-rc-conf 把network-m对应的xx都点掉.

2012-02-08 · 1 min · 12 words · -

linux version, Linux 查看版本, 发行版, 内核版本, uname

linux version, Linux 查看版本, 发行版, 内核版本, uname uname -srm # -s kernel name, ubuntu 和 archlinux 都输出的是 Linux, 没见过其它输出 # -r kernel release, 内核版本号 # -m machine hardware name, 硬件架构 x86_64 # 查看内核版本 uname -r # 打印所有信息,包括内核版本和系统名称 uname -a # archlinux, debian, ubuntu cat /etc/issue # RedHat,CentOS cat /etc/redhat-release # debian, ubuntu cat /etc/os-release #查看目录"/proc"下version的信息,也可以得到当前系统的内核版本号及系统名称 cat /proc/version file /bin/ls /proc文件系统,它不是普通的文件系统,而是系统内核的映像,也就是说,该目录中的文件是存放在系统内存之中的,它以文件系统的方式为访问系统内核数据的操作提供接口。而我们使用命令"uname -a"的信息就是从该文件获取的,当然用方法二的命令直接查看它的内容也可以达到同等效果.另外,加上参数"a"是获得详细信息,如果不加参数为查看系统名称。 查看发行版本信息 ubuntu lsb_release -a https://my.oschina.net/vshcxl/blog/698656 ...

2012-02-01 · 1 min · 194 words · -

monitor

monitor 分辨率(resolution) 指给定的距离(或面积)内“点”或“像素”的数量。有时被称为“解析度”。可分为显示分辨率、图像分辨率、打印分辨率和扫描分辨率等。分辨率也经常被用来表达一些别的概念,例如谈论显示器分辨率时经常看到“1024×768”这种表示,这个更准确的说应该是屏幕的“像素尺寸”。 作者:Amy 链接:https://www.zhihu.com/question/385596412/answer/1133513546 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 作者:Amy 链接:https://www.zhihu.com/question/385596412/answer/1133513546 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 DPI, dots per inch 常用的描述分辨率的单位有:DPI(点每英寸)和 PPI(像素每英寸)。还有一些其他单位,比如px/cm(像素每厘米, dpcm)、LPI(线每英寸)等,只有LPI是描述光学分辨率的尺度的,感兴趣的自行学习,就不提了。描述分辨率的单位:DPI:dots per inch,表示每英寸(对角线长度)能打印上的墨滴数量。最初应用于打印技术中。打印设备多在 300 至 3600 DPI 之间。PPI:pixels per inch,电子显示设备从打印设备中借鉴了 DPI 的概念,产生了 PPI的概念。即显示器每英寸(对角线长度)上像素点的数量,指像素密度。DPI 和 PPI 经常混用。因为很多行业将“Dot”泛指为所有的图像基本单元。多数情况下,DPI=PPI,后面涉及到视网膜屏幕(retina)时,会提到怎么就不等了。从技术角度说:“像素/pixel” 是数字领域特有,是成像设备(“多值设备”)的最小单元,PPI 只存在于电子显示领域;“点/dot” 是输出设备(“二值设备”)最小成像单元,点非黑即白,DPI 只出现于印刷领域。在实体世界中,屏幕的物理尺寸(physical size)通常用可视画面对角线长度表示,且一般以英寸(inch)为单位,比如 iPad 的大小 10.5"、11"、12.9",都是指的屏幕的对角线长度*。屏幕的大小还可以用物理像素尺寸来表示,如“2224x1668”(iPad Pro 10.5)。指长边上和短边上最多能显示的物理像素点个数。物理像素点是每个设备生产的时候就定好了的,是无法改变的,是设备能控制显示的最小物理单位,和屏幕物理尺寸大小有关。那么勾股定律算出对角线的像素点数,利用公式分辨率=对角线上的像素数/对角线长度,我们就可以计算得到 iPad Pro 10.5 屏幕分辨率(PPI/DPI)为264。 DPI(Dots Per Inch,每英寸点数)是一个量度单位,用于点阵数码影像,指每一英寸长度中,取样、可显示或输出点的数目。此概念主要用于打印输出。 不论是DPI还是PPI,实际都是一种换算的概念,即将图片承载的信息换算为现实中的图片(即人眼能实际看到的图像)。DPI和PPI的区别在于换算的途径不同,DPI面向的是印刷受体,而PPI面向的是显示屏幕。 ubuntu自带的远程桌面是vino-server 1.vino-server vino的好处是你的控制是跟在本地是一样的,你在远程打开的窗口,当你去本地登录时会发现这些窗口都在,如果两台机器离的不远,你甚至可以看见那个桌面上的鼠标跟着你窗口的一起在移动。但缺点就是如果你想远程连上vino,那么你得先在本地登录上账号,换句话说,你远程重启机器后,就没办法在用vino登录上那台机器了。 ubuntu下开启vino的方法倒是很简单: 服务端: 系统->首选项->远程桌面 选上"允许其他人查看您的桌面"“允许其他用户控制您的桌面"愿意的话还有"要求用户输入此密码”,不要选上"请您确认"。 客户端: 直接用ubuntu默认带的"远程桌面查看器"登录就行了。 2.vnc4server vnc4的好处是可以登录多个桌面,彼此不冲突。而且不会象vino一样,必须服务端登录后才能连接。但是vnc的桌面是虚拟的,你在客户端打开的程序,在服务端是看不到的。这样有时也不太方便。 vnc4可以从新立得软件包中安装,顺便在本地把xvncviewer也装了。 安装后设定密码: vncpasswd 启用vnc服务: vncserver 第一次启动后会在用户的主目录下生成.vnc的文件夹,默认的使用的是twm的界面,有点丑,所以打开.vnc下的xstartup把最后一行twm &注释掉。在下面添加一行: gnome-session &。这样就OK了。 ...

2012-01-31 · 1 min · 89 words · -

xrdp

xrdp ubuntu sudo systemctl enable --now xrdp sudo ufw allow from any to any port 3389 proto tcp archlinux yay -S xrdp yay -S xorgxrdp vim /etc/X11/Xwrapper.config # content allowed_users=anybody systemctl start xrdp systemctl enable xrdp vim ~/.xinitrc # content exec startxfce4 remove yay -R xorgxrdp-devel-git yay -R xrdp Install xrdp on CentOS 7 / RHEL 7 By Raj Last updated Mar 29, 2018 88 Share xrdp is an Open Source Remote desktop Protocol server, which allows you to RDP to your Linux server from Windows machine; it is capable of accepting connections from rdesktop, freerdp, and remote desktop clients. ...

2012-01-31 · 4 min · 753 words · -

login as root gives "530 Login incorrect."

login as root gives “530 Login incorrect.” comment out root from both /etc/vsftpd/ftpusers and /etc/vsftpd/user_list

2012-01-30 · 1 min · 15 words · -

RHEL 5 vsftpd

RHEL 5 vsftpd vsftpd安装 [root@linux01 ~]# mkdir /media/cdrom [root@linux01 ~]# mount -t iso9660 /dev/cdrom /media/cdrom # 挂载镜像 mount: block device /dev/cdrom is write-protected, mounting read-only [root@linux01 ~]# cd /media/cdrom/Server # 进入软件包目录 [root@linux01 Server]# [root@linux01 Server]# rpm -qa | grep ^vsftpd # 查询相关已经安装的软件包 [root@linux01 Server]# ls | grep vsftpd* # 查询当前路径下安装包 vsftpd-2.0.5-12.el5.i386.rpm [root@linux01 Server]# rpm -ivh vsftpd-2.0.5-12.el5.i386.rpm # 安装软件包 i安装 v输出详细信息 h进度 warning: vsftpd-2.0.5-12.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186 ...

2012-01-30 · 1 min · 109 words · -

debian, grub2, run level

debian, grub2, run level edit /boot/grub/grub.cfg menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686-bigmem run level 3' -class debian -class gnu-linux -class gnu -class os { insmod part_msdos insmod ext2 set root='(hd0,msdos7)' search -no-floppy -fs-uuid -set ca201e81-b7d4-4cb1-9a68-707dab19738a echo 'Loading Linux 2.6.32-5-686-bigmem ...' linux /vmlinuz-2.6.32-5-686-bigmem root=/dev/sda8 ro quiet 3 echo 'Loading initial ramdisk ...' initrd /initrd.img-2.6.32-5-686-bigmem } menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686-bigmem run level 5' -class debian -class gnu-linux -class gnu -class os { insmod part_msdos insmod ext2 set root='(hd0,msdos7)' search -no-floppy -fs-uuid -set ca201e81-b7d4-4cb1-9a68-707dab19738a echo 'Loading Linux 2.6.32-5-686-bigmem ...' linux /vmlinuz-2.6.32-5-686-bigmem root=/dev/sda8 ro quiet 5 echo 'Loading initial ramdisk ...' initrd /initrd.img-2.6.32-5-686-bigmem }

2012-01-29 · 1 min · 102 words · -

centos basic

centos basic AlmaLinux AlmaLinux 是 CloudLinux 公司搞得 RHEL 下游发行版 sudo dnf --refresh update sudo dnf upgrade # The containerd.io package contains runc too, but does not contain CNI plugins. sudo dnf install containerd.io centos 7 minimal 安装之后 磁盘占用 1.4G yum repo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo dhcp vim /etc/sysconfig/network-scripts/ifcfg-eth0 bootproto=dhcp onboot=yes Linux centos livecd bin netinstall 各版本的区别 CentOS-5.5-x86_64-LiveCD.iso 光盘系统 CentOS-5.5-x86_64-bin-DVD 64位安装盘 CentOS-5.5-x86_64-netinstall 64位网络安装盘 LiveCD一般用来修复系统使用,有容量很小,不用安装,可以自启动等特性,可以直接使用光盘启动的系统。 bin DVD也具有同样的功能,但是体积较大,需要安装到硬盘使用。 netinstall和bin都可以用来安装系统,不同的是,netinstall根据你选择的软件列表从网上下载,然后进行系统安装; bin DVD本身包含了软件,不需要依赖于网络经行安装。 ...

2012-01-25 · 2 min · 324 words · -

ubuntu vnc

ubuntu vnc 第一步,获取安装文件 sudo apt-get install vnc4server 第二步,修改VNC Password,不能太短 # vncpasswd Password: ** Verify:***** 第三步,检查防火墙,这个就不详细说明了 第四步,启动VNC server vncserver 第五步,通过客户端连接 地址后面加:1 启动完vnc4server后在你的主目录下将会产生一个.vnc的目录。 此时就可以通过vnc客户端链接到服务器了。 停止一个vnc4server vnc4server -kill :3 根据你启动时获得的数字替换此处的3。 打开 .vnc/xstartup 文件并编辑: gedit /.vnc/xstartup 文件看起来将是这样的: #!/bin/sh # Uncomment the following two lines for normal desktop: # unset SESSION_MANAGER # exec /etc/X11/xinit/xinitrc [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources xsetroot -solid grey vnccon** -iconic & x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & x-window-manager & 修改 .vnc/xstartup文件并保存 取消unset和exec开始的行的注释,注释以xsetroot,vnccon**,xterm和twm开始的行。执行后看起来像这样: ...

2012-01-20 · 2 min · 397 words · -

ssh

ssh SSH和Session的关系是一对多的关系 SSH连接 (SSH Connection) 定义: 是客户端与服务器之间的底层加密网络连接 协议层: SSH Transport Layer Protocol 作用: 提供加密的通信通道, 作用: 提供加密、认证、完整性保护 生命周期: 从建立连接到断开连接的整个过程 数量: 通常一个客户端到服务器只有一个SSH连接 SSH Channel (SSH通道) 定义: 在SSH连接内部的逻辑通道 协议层: SSH Connection Protocol 作用: 在单个SSH连接上复用多个数据流 类型: session - 用于命令执行、shell direct-tcpip - 用于端口转发 forwarded-tcpip - 用于反向端口转发 x11 - 用于X11转发 SSH会话 (SSH Session) 定义: 运行在特定Channel上的服务, 是在SSH连接之上的逻辑会话 协议层: 应用层服务 作用: 用于执行具体的命令或启动shell 生命周期: 从创建会话到关闭会话 数量: 一个SSH连接可以创建多个会话 类型: exec - 执行单个命令 shell - 启动交互式shell subsystem - 启动子系统(如SFTP) 为什么需要会话管理? 状态隔离 每个会话有独立的环境变量、工作目录 不同命令之间不会相互影响 ...

2012-01-20 · 1 min · 79 words · -