「Linux」- 区分 console、terminal、shell、tty 含义

问题描述
经常听见人们提起 shell、terminal、console、tty 这些术语,但是界限非常模糊,心中不免疑惑:它们只是同种东西的不同名称么?如果不是,那么它们分别指的是什么呢?还有在命令 ps(1) 的输出中的 TTY 列代表着什么?而 pts 又是什么东西呢?我们将带着这些问题,从最易理解、最常用的开始,逐步梳理这些概念并进行区分。
在这个行当里,很多东西(概念)都有一段演变历史。当你知道了这段历史,你就知道了这个东西的由来。有些东西不是直接创造出来的,它们是演变来的。
Shell
Shell 是最容易理解的,之所以这么说是因为我们日常接触的最多、使用的最多。Shell 个程序(简单地说),命令行解释器,它获得键盘输入的命令并交由操作系统来执行。在 Linux 中,类似的程序有 bash,zsh,csh 等等,它们都是 Shell 程序。在 Windows 中,我们熟知的 CMD 程序就属于 Shell 程序。
在维基百科的描述中,Shell 是指访问计算机服务的用户接口,可以是命令行接口(CLI),也可以是图形化接口(GUI),这取决于计算机的用途与角色。之所以称之为 Shell 是因为它是操作系统的最外层。我们常说的 Shell 并不是它的标准定义,而是指命令行接口(CLI)。在过去里,这是用户可与操作系统交互的仅有方式。
但是注意 XTerm,GNOME Terminal,konsole,rxvt 这些并不是 Shell 程序,它们是终端仿真器(后面会介绍)。
TTY, Console and Terminal
它们是文本输入/输出环境。
计算机的早期……
在 1869 年发明 证券报价机,机电设备,由 打字机、很长的电线对、纸带打印机 组成,目的是为了在长距离内实时传送股票价格。这个概念渐渐地进化出更快的、基于 ASCII 码的 电传打字机。
通过大型网络(Telex Network),电传打字机 被连接到世界各地,用于传送商业电报,但是此时的 电传打字机 还没有被链接到计算机上。
与此同时,计算机虽然体积庞大、价格昂贵,但是可以执行多任务、功能强大足以与用户实时交互。
当命令行模式替代旧时的批处理模式时,电传打字机被用作输入输出设备(因为因为它在市面上随处可见)。命令行属于交互模式,自然需要输入输出设备。
在市面上有很多类型的电传打字机,只是存在微小差异,因此需要引入软件兼容性层。在 Unix 中,由操作系统处理低层细节,诸如字长,波特率,流量控制,奇偶校验,基本行编辑的控制代码等。在 1970 年代后期,通过诸如 VT-100 之类的固态视频终端使花式光标移动、色彩输出、其他高级功能成为现实。
终端的使用案例(早期)
终[……]

READ MORE

「TTY」- 在系统启动时,保留控制台输出

在systemd中,如何进行配置?

#!/bin/bash

mkdir /etc/systemd/system/getty@.service.d

cat >/etc/systemd/system/getty@.service.d/noclear.conf <<EOF
[Service]
TTYVTDisallocate=no
EOF

systemctl daemon-reload

参考文献
Stop Clearing My God Damned Console Prevent the console from clearing the screen?[……]

READ MORE

「Llinux」- 修改控制台的字体(TTY,Console)

问题描述
大多数 PC,当启动时,默认使用 8×16 字体,不管屏幕多大。
我们尝试修改终端字体,如图为默认控制台字体(注:该截图来自 Debian 虚拟机,而非终端程序)::
注意,这里的字体指的是控制台字体,与 X Window System 的字体不同的概念。
我们现在目前使用的控制台的字体

修改控制台的显示字体
使用setfont命令修改控制台的字体,该命令属于KBD软件包,可用的字体文件位于/usr/share/consolefonts,如下示例:

shell> setfont drdos8x16

加载448-glyph drdos字体。
持久化字体修改
注意:这里的系统环境为:Debain及其衍生版。
可以修改/etc/default/console-setup文件。有关console-setup文件配置的细节可以参考man 5 console-setup。
或者可以使用dpkg-reconfigure console-setup进行配置,本质上还是修改/etc/default/console-setup文件。
然而,……
有时根本无效,为什么?因为这个文件不像/boot/grub/grub.cfg之类文件,该文件不会在启动流程中自动加载。在/etc/init.d/下有个启动脚本console-setup.sh,通过将这个脚本加入开机启动才行,该脚本会执行setupcon命令(属于console-setup软件包)来解析console-setup文件来设置控制台。所以一定要保证将启动脚本加入了开机启动项:

shell> systemctl enable console-setup.service # 对于使用systemd的系统。

或者

shell> update-rc.d console-setup.sh defaults # 对于使用System V风格启动脚本的系统。

在 Debian 中

# dpkg-reconfigure console-setup

Terminuss

参考文献
How do I permanently change the console TTY font type so it holds after reboot? BLFS/About Console Fonts[……]

READ MORE

「terminal-colors.d」

与终端彩色输出有关
参考文献
terminal-colors.d(5) Karel Zak’s blog/terminal-colors.d[……]

READ MORE

「LINUX-KERNEL」- 存储栈

问题描述
该笔记将记录:Linux Storage 相关的内容,以及相关问题的解决办法。
解决方案
按照 Linux_Storage_Stack_Diagram 描述,我们将围绕该层次展开 Linux Kernel Storage 相关的学习;
文件系统层(VFS)
包括虚拟文件系统和其他各种文件系统的具体实现。对上,为应用程序提供标准的文件访问接口;对下,会通过通用块层,来存储和管理磁盘数据。
通用块层(Block Layer)
包括块设备 I/O 队列和 I/O 调度器。它会对文件系统的 I/O 请求进行排队,再通过重新排序和请求合并,然后才要发送给下一级的设备层。
设备层
包括存储设备和相应的驱动程序,负责最终物理设备的 I/O 操作。[……]

READ MORE

「LINUX-KERNEL」- VFS Overview

目录项、索引节点、逻辑块、超级块,构成 Linux FS 的四大基本要素;
不过,为了支持各种不同的文件系统,Linux Kernel 又在用户进程和文件系统的中间引入抽象层 —— VFS(虚拟文件系统,Virtual File System)
VFS, Virtual File System
VFS 是对具体文件系统的抽象,负责为应用程序提供所有文件系统的统一访问接口,应用程序通过 VFS 提供的接口来访问文件。用户进程和内核的其他子系统,只需要跟 VFS 提供的统一接口进行交互即可,而不需要再关心底层各种文件系统的实现细节:Userspace ⇒ VFS ⇒ (tmpfs/nfs/fs)
VFS 定义了一组所有文件系统都支持的数据结构和标准接口,所有 Linux FS 都必须按照 VFS 定义的方式来实现;
VFS 仅存在于内存中,需要将硬盘文件系统与 VFS 关联,才能完成对文件系统的管理(最终目的)。方法是:VFS 定义 super_block、dentry、inode 结构,应用程序对 VFS 的这些结构进行操作,进而实现应用对硬盘文件系统的操作;
VFS 定义了一组所有文件系统都支持的数据结构和标准接口。这样,用户进程和内核中的其他子系统,只需要跟 VFS 提供的统一接口进行交互就可以了,而不需要再关心底层各种文件系统的实现细节;
System call, VFS, Cache, FS, Block Storage
系统调用、VFS、缓存、文件系统以及块存储之间的关系:

在 VFS 下,Linux 支持各种各样的文件系统,如 Ext4、XFS、NFS 等等。按照存储位置的不同,这些文件系统可以分为三类。
第一类,基于磁盘的文件系统,也就是把数据直接存储在计算机本地挂载的磁盘中。常见的 Ext4、XFS、OverlayFS 等,都是这类文件系统。
第二类,基于内存的文件系统,也就是我们常说的虚拟文件系统。这类文件系统,不需要任何磁盘分配存储空间,但会占用内存。我们经常用到的 /proc 文件系统,其实就是一种最常见的虚拟文件系统。此外,/sys 文件系统也属于这一类,主要向用户空间导出层次化的内核对象。
第三类,网络文件系统,也就是用来访问其他计算机数据的文件系统,比如 NFS、SMB、iSCSI 等。
应用程序
把文件系统挂载到挂载点后,通过挂载点,再去访问它管理的文件。在底层,VFS 提供了一组标准的文件访问接口,这些接口以系统调用的方式,提供给应用程序使用,应用程序将通过 System Call 来访问 VFS,而不与底层的文件系统直接交互;
例如,常用 cat 命令:它首先调用 open(),打开一个文件。然后调用 read[……]

READ MORE

「Linux」- inode 与 dentry

问题描述
今天有人在问 inode 有关的问题:对于存放大量小文件的磁盘,磁盘空间占用不多,但是 inode 占用比较多,问有没有什么好的处理方法?
该笔记将记录:在 Linux 中,与 inode 的内容,以及常见问题的解决方案;
解决方案
为了方便管理,Linux FS 为每个文件都分配两个数据结构: 1)index node(索引节点,inode):记录文件的元信息 2)directory entry(目录项,dentry):记录目录结构;
索引节点(inode)
索引节点,简称为 inode,
作用
1)inode 用来记录文件的元数据,比如 inode Number、文件大小、访问权限、修改日期、数据的位置等;但其并不存储文件名; 2)inode 与文件一一对应,每个文件对应一个 inode,即 inode 是每个文件的唯一标志;
形态
1)inode 是存储在磁盘中的数据。虽然 inode 也有内存缓存,其为加速访问,但是 inode 最终是存放在磁盘中的。
2)它跟文件内容一样,都会被持久化存储到磁盘中,所以 inode 同样占用磁盘空间;每个 inode 节点的大小,一般是 128 Byte 或 256 Byte,而 inode 的总数,在格式化时就已给定;
索引编号(inumber)
每个「inode」都有一个号码,操作系统用「索引编号」来识别不同的文件;
这里值得重复一遍,在 Unix/Linux 系统的内部,并不使用文件名,而使用「索引编号」来识别文件。对于系统来说,「文件名」只是「索引编号」便于识别的别称;
查看文件的「索引编号」:ls -i .bashrc
命令操作
查看 inode 的使用情况:df -i
查看 inode 的大小:dumpe2fs -h /dev/hda | grep “Inode size”
调整 inode 的数量: 1)在格式化时,需要提前确定,通常命令有相应的选项,参考文档即可。 2)在使用过程中,若出现 inode 数量不足:如果无法扩容磁盘,则要备份数据,重新格式化磁盘,并指定 inode 的数量;
目录项(dentry)
目录项,简称为 dentry;
作用
1)dentry 用来记录文件的名字、inode 指针; 2)记录其与其他 dentry 的关联关系:多个关联的目录项,就构成文件系统的目录结构。即 dentry 维护的正是文件系统的树状结构;
形态
其与 inode 不同,dentry 是由内核维护的一个内存数据结构,所以通常也被叫做 dentry cache(目录项缓存)。dentry 只是内存中的一个数据结构,一个内存缓存,是通[……]

READ MORE

「Linux」- 文件系统 I/O

问题描述
VFS 提供一组标准的文件访问接口。这些接口以系统调用的方式,提供给应用程序使用。比如 open() 打开文件,read() 读取文件,write() 写入文件。也就是说,我们操作的是 VFS 而不是实际的文件系统(ext4、xfs、……)
文件读写方式的各种差异,导致 I/O 的分类多种多样。接下来,我们就将进一步学习文件系统的 IO 类型;
解决方案
最常见的有,缓冲与非缓冲 I/O、直接与非直接 I/O、阻塞与非阻塞 I/O、同步与异步 I/O 等;
补充说明:部分概念也经常出现在网络编程中。比如非阻塞 I/O,通常会跟 select/poll 配合,用在网络套接字的 I/O 中;
缓冲与非缓冲(是否利用标准库缓存)
缓冲 I/O
是指利用标准库缓存来加速文件的访问,而标准库内部再通过系统调度访问文件;
注意,这里的缓冲是由标准库内部实现的缓冲。比如,有些程序遇到换行时才真正输出,而换行前的内容,其实就是被标准库暂时缓存; 但是,它们最终还是要经过系统调用来访问文件。当系统调用后,还会通过页缓存,来减少磁盘的 I/O 操作;
非缓冲 I/O
是指直接通过系统调用来访问文件,不再经过标准库缓存;
直接与非直接(是否利用操作系统的页缓存)
直接 I/O,是指跳过操作系统的页缓存,直接跟文件系统交互来访问文件。比如,指定 O_DIRECT 标志;
非直接 I/O,当文件读写时,先要经过系统的页缓存,然后再由内核或额外的系统调用,真正写入磁盘;
直接 I/O、非直接 I/O,本质上还是和文件系统交互。但是,在某些数据库等场景中,会跳过文件系统直接读写磁盘,也就是我们通常所说的裸 I/O;
阻塞与非阻塞(应用程序是否阻塞自身运行)
Blocking I/O
阻塞 I/O,是指应用程序执行 I/O 操作后,如果没有获得响应,就会阻塞当前线程,自然就不能执行其他任务;
Non-blocking I/O
非阻塞 I/O,是指: 1)应用程序执行 I/O 操作后,不会阻塞当前的线程,并继续执行其他的任务; 2)随后再通过 轮询 或 事件通知 的形式,获取调用的结果。比如访问管道或者网络套接字时,设置 O_NONBLOCK 标志,就表示用非阻塞方式访问;
同步与异步(是否等待响应结果,即通知方式)
Synchronous I/O
是指应用程序执行 I/O 操作后,要一直等到整个 I/O 完成后,才能获得 I/O 响应;
在操作文件时,如果设置 O_SYNC 或 O_DSYNC 标志,就代表同步 I/O; 1)如果设置 O_DSYNC,就要等文件数据写入磁盘后,才能返回; 2)而 O_SYNC,则是在 O_DSYNC[……]

READ MORE

「操作系统」- 文件截断

这个问题是由群里的一个问题引发的:如何截断日志文件?后来有人说,使用>>写入的文件,可以直接截断。
相关关键字
清空文件
> 与 >>>
O_APPEND 与 O_WRONLY
lsof -nP +f g | grep ,AP
相关连接
# 下面的几篇帖子要好好读一下 Emptying a file without disrupting the pipe writing to it Linux Programmer’s Manual/open, openat, creat – open and possibly create a file What happens when I truncate a file that is in use?
# 这些文章也需要读一下 how to empty or truncate a file in linux
# 这几篇帖子看看就好了 Truncating a file while it’s being used (Linux) Bash: Difference between > and >> operator?[……]

READ MORE

「Linux」- 文件系统(学习笔记)

磁盘,为系统提供了最基本的持久化存储;
在格式化硬盘时,硬盘被分成三个区域: 1)superblock(超级块): 1)inode table(索引节点区):存放所有 inode; 2)数据区:存放文件数据;
文件系统,则在磁盘的基础上,提供了一个用来管理文件的树状结构。
super_block
简单说,VFS 负责提供架构,而具体文件系统必须按照 VFS 的架构去实现 —— super_block(超级块)是对该观点的体现。
解释说明
VFS super_block,对应着具体文件系统的控制块结构(超级块),就是说每个具体的文件系统都要实现超级块。VFS super_block 通过读取具体文件系统的控制块接口,来填充其内容,即 VFS super_block 是具体文件系统的控制块的内存抽象(内存表示)。
VFS super_block,用以记录当前文件系统整体的状态。例如:inode 和逻辑块的使用情况;super_block 操作函数;当前文件系统的特有信息;
struct super_block {}
1)该结构包含重要当前文件系统的全局信息:

struct super_block {
unsigned long s_blocksize; // 文件系统块大小
unsigned char s_blocksize_bits;
… // 省略超级块的链表、设备号等代码
unsigned long long s_maxbytes; // 最大文件的大小

struct file_system_type *s_type; // 指向 struct file_system_type 指针
struct super_operations *s_op;

unsigned long s_magic; // 每个文件系统都由的魔数数字
struct dentry *s_root; // 指向文件系统的 root dentry 指针

struct list_head[……]

READ MORE

「Linux」- 磁盘 IO

按 存储介质 分类:机械磁盘、固态硬盘
磁盘是可以持久化存储的设备,根据存储介质的不同,常见磁盘可以分为两类:机械磁盘和固态磁盘:
机械磁盘(Hard Disk Driver),HDD
在读写数据前,需要移动读写磁头,定位到数据所在的磁道,然后才能访问数据。
如果 I/O 请求刚好连续,那就不需要磁道寻址,自然可以获得最佳性能。这其实就是我们熟悉的,连续 I/O 的工作原理
随机 I/O,它需要不停地移动磁头,来定位数据位置,所以读写速度就会比较慢。
固态硬盘(Solid State Disk),SSD
固态磁盘不需要磁道寻址,所以,不管是连续 I/O,还是随机 I/O 的性能,都比机械磁盘要好得多。
随机 I/O vs. 连续 I/O
无论机械磁盘,还是固态磁盘,相同磁盘的随机 I/O 都要比连续 I/O 慢很多,原因也很明显:
1)对机械磁盘来说,我们刚刚提到过的,由于随机 I/O 需要更多的磁头寻道和盘片旋转,它的性能自然要比连续 I/O 慢
2)对固态磁盘来说,虽然随机性能优于 HDD,但同样存在“先擦除再写入”的限制(需要了解 SSD 原理)。随机读写会导致大量的垃圾回收,所以相对应的随机 I/O 的性能弱于连续 I/O
3)连续 I/O 还可以通过预读的方式,来减少 I/O 请求的次数,这也是其性能优异的原因。很多性能优化的方案,也都会从这个角度出发,来优化 I/O 性能;
磁盘的最小读写单位
机械磁盘的最小读写单位,扇区,一般大小为 512 字节。
固态磁盘的最小读写单位,页,通常大小是 4KB、8KB 等。
如果每次都读写 512 字节这么小的单位的话,效率很低。所以文件系统会把连续的扇区或页组成逻辑块,然后以逻辑块作为最小单元来管理数据。常见的逻辑块的大小是 4KB,也就是说,连续 8 个扇区,或者单独的一个页,都可以组成一个逻辑块。
按 接口类型 分类:IDE、SCSI、SAS、SATA、FC
按照接口来分类,比如可以把硬盘分为 1)IDE(Integrated Drive Electronics),在系统中磁盘前缀 hd 2)SCSI(Small Computer System Interface),在系统中磁盘前缀 sd 3)SAS(Serial Attached SCSI) 4)SATA(Serial ATA) 5)FC(Fibre Channel)
按 使用方式 分类:RAID
RAID(Redundant Array of Independent Disks)
把多块磁盘组合成一个逻辑磁盘,构成冗余独立磁盘阵列,从而可以提高数据访问的性能,并且增强数据存储的可靠性。
RAID 一般可以[……]

READ MORE

「Linux Stroage Stack」- 常见问题(FAQ)

TODO !!! Linux I/O Depth 的具体含义?异步 IO 中的 I/O Detph 的含义?同步 I/O 的 I/O Depth 是没有意义的,为什么?
File Allocation Table
File Allocation Table – Wikipedia
在 1977 中,开发 FAT 文件系统,用于软盘。它还适用于硬盘和其他设备
随着磁盘驱动器容量的增加,需要扩展 FAT 结构,出现三个主要的变体:FAT12、FAT16、FAT32
向镜像文件中写入文件
WIP
fallocate
Quickly create a large file on a Linux system – Stack Overflow
通过 fallocate 命令,我们能够快速创建大文件:

fallocate -l 10G gentoo_root.img

# 注意事项:
# 并非所有文件系统都支持 fallocate 系统调用

TODO ! fallocate 工作原理
当删除文件时,文件系统的操作
When I delete a file on my computer, where does it go? What happens to an open file handle on Linux if the pointed file gets moved, delete[……]

READ MORE

「Microsoft Windows」- 系统管理维护:杂记

问题描述
该笔记将记录:与 Windows 操作系统维护相关的内容,也包含 Windwos Server 服务器;
History of Microsoft Windows
History of Microsoft Windows
最近在玩 FVWM,突然喜欢上了那些很历史、很经典的 ICON,比如 Windows 2000;[……]

READ MORE

「Windows」- 系统安装与升级

问题描述
该笔记将记录:如何安装 Windows 操作系统,以及相关问题的解决方法。
Windows 10
安装操作系统
1)镜像下载:下载地址:https://msdn.itellyou.cn 2)系统安装:(装机技巧系列(二):系统安装之Windows 10启动盘制作)有如下方法 —- 2.1)使用官方 MediaCreationTool 工具; —- 2.2)使用 Refus 工具。我们推荐后者,因为前者会从官网自动下载镜像; —- 2.3)直接解压 ISO 文件,并执行 setup.exe 文件; 3)激活系统:输入购买的激活码,以激活系统;
操作系统升级
Windows 10 version 1607 => Windows 10 version 1909: 1)我们直接解压 Windows 10 version 1909 ISO 文件,并执行 setup.exe 程序 ⇒ 能够保留个人数据和应用程序;
Windows 10 version 1909 ⇒ Windows 10 version 20h2: 1)我们试图解压 Windows 10 version 20h2 ISO 文件,并执行 setup.exe 程序 ⇒ 但是无法保留应用程序(无法选择,仅能保留个人数据); 2)然后,我们尝试以 Windows 10 Update Assistant 升级 ⇒ 个人数据与应用程序能够保留;
更改系统版本
Windows 10 家庭版不支持很多功能,我们需要升级到 Widonws 10 专业版:

0)断开网络,整个过程无需链接网络,便可完成;
1)我的电脑 => 属性 => 更改产品密钥;
2)输入密钥:J7QT3-3GCPG-9GVWT-CH2XR-GMRJM / VK7JG-NPHTM-C97JM-9MPGT-3V66T

Windows Server 2008
系统安装: 1)插入U盘,格式化成FAT文件系统。 2)用UltraISO软件打开Windows server 2008光盘镜像。 3)点击菜单「启动」-「写入硬盘映像」 4)将「硬盘驱动器」选择U盘;将「写入方式」改成「USB-HDD」;点击「便捷启动」-「写入新硬盘主引导记录(MBR)」-「USB-HDD」。 5)点击「写入」等待完成。
Windows 2000 Professional
下载地址:https://file.wiki/direct-download-windows-2000-iso-free
操作系统激活
Windows 10
比较 Windows 10 的不同版本 请问政府部门购买并使用Windows7 中文家庭普通版(盒装)是否[……]

READ MORE

「Windows」- PE,WinPE

我们参考如下文档来完成 WinPE 的安装: Boot to WinPE | Microsoft Docs Download WinPE (Windows PE) | Microsoft Docs WinPE: Create bootable media | Microsoft Docs Boot to UEFI Mode or Legacy BIOS mode | Microsoft Docs
解决方案
第一步、下载 PE 组件
针对我们的系统版本(Windows 10 19.42),我们下载如下两个组件: 1)适用于 Windows 10 版本 1903 的 ADK | 适用于 Windows 10 版本 1903 的 ADK 中的新增功能。还可以使用此版本部署 Windows 10 版本 1909。 2)适用于 ADK 版本 1903 的 Windows PE 加载项 | 适用于 Windows 10 版本 1903 的 Windows 预安装环境 (PE)
第二步、制作启动设备
在开始菜单中,运行 Deployment and Imaging Tools Environment 工具(部署和映像工具环境)

C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools>

C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools>copype amd64 C:\WinPE_amd64

Success

C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools>MakeWinPEMedia /UFD C:\WinPE_amd64 I:

Success

参考文献
Boot to WinPE | Microsoft Docs Download WinPE (Windows PE) | Microsoft Docs WinPE: Create bootable media | Microsoft Docs[……]

READ MORE

「Windows」- 磁盘管理

问题描述
该笔记将记录:与 Windows 磁盘管理有关的内容,偏向于 Windows Server 磁盘管理;
解决方案
WIP
打开磁盘管理工具
百度经验/Windows Server 2012 修改光驱盘符
Win + R => diskmgmt.msc
修改启动器盘符
百度经验/Windows Server 2012 修改光驱盘符
在磁盘管理界面中,右键分区,选择「更改驱动器号和路径」菜单项目,在新窗口中,选择分区,然后单击「更改」按钮;
常见问题处理
[WIP] Please insert the last disk of the multi-volume set and click OK to continue
Fix: Please Insert the Last Disk of the Multi-Volume Set

This issue this issue is not restricted to Windows 10 and is also commonly reported on Windows 8 and Windows 7.
Affected users report that clicking the OK button will only make the error return in a short amount of time. Upon investigation the issue, it’s clear that the error message is signaling a corrupted .zip folder in the root folder of one of the drives currently active on your computer.
This is a common occurence on drives that were previously inserted into a Mac system. This happens because the Mac OSX creates a bunch of hidden files on FAT32 formatted drives that are wrongfully interpreted as corrupted by Windows. In reality, these files are not corrupted or harmful and are used to store indexing data and icon data for the Finder application. It’s the[……]

READ MORE

「Windows and Windows Server」- Network Configuration

问题描述
该笔记将记录:与 Windows 网络连接有关内容,以及相关问题的解决方法。
解决方案
Lots of TIME_WAIT connections in netstat (Windows Server 2008) All the TCP/IP ports that are in a TIME_WAIT status are not closed after 497 days from system startup in Windows Vista, in Windows 7, in Windows Server 2008 and in Windows Server 2008 R2

章节列表
「Windows and Windows Server」- 远程桌面连接 「Windows」- 创建 Loopback 接口(eNSP) 「Windows 10」- 常用网络设置记录 「Windows」- 无线网络配置 「Windows」- 网络地址分配[……]

READ MORE

「Windows」- 网络地址分配

DHCP(Assign,Release,Renew)
How to release and renew IP address in Windows

ipconfig /release # 释放地址

ipconfig /renew # 重新获取

禁用 IPv6 设置
脚本之家/Win10如何关闭IPV6?Win10禁用IPv6的方法
在 Windows 10 中,当某次自动更新结束后,主机无法联网,我们发现是 IPv6 导致的。
在网络设置中,取消「Inernet协议6 (TCP/IPv6)」勾选。
Windows 10,未使用 DHCP 返回的 DNS 服务器
networking – Windows 10 Wifi Sets Wrong DNS Server When Connecting to Wifi Networks
# 10/30/2021 问题描述:Windows 10 21H3,当配置 DHCP 获取时,DNS 是错误的,而非 DHCP 返回的 DNS 服务器 原因分析:正如参考链接所述,因为曾经手动配置过 DNS 服务器,导致注册表缓存。 解决方案:删除注册表 ProfileNameServer 便能解决问题;[……]

READ MORE

「Windows」- 创建 Loopback 接口(eNSP)

问题描述
在进行华为网络实验时,我们需要创建 Loopback 接口,以实现模拟器设备与主机进行通信。
该笔记将记录:如何创建 Loopback 接口,以及相关问题的解决方法。
解决方案
Windows 10
How to install Microsoft Loopback Adapter on Windows 10 – NIL – Network Information Library
right click on window start menu icon and select Device manager. click on Action, and select Add legacy hardware (该菜单项或许不会立即显示,要稍后才会显示) click Next on welcome screen choose “Install the hardware that i manually select from a list” and click on Next scroll down and select Network adapters from offered common hardware types and click on Next select Microsoft as the manufacturer, and then select Microsoft KM-TEST Loopback adapter card model, click on Next click on Next click on Finish
Windows 7 的添加过程与 Windows 10 类似,不再赘述;[……]

READ MORE

「Windows and Windows Server」- 远程桌面连接

问题描述
该笔记将记录:与远程桌面配置相关的内容,以及常见问题的解决方案。
开启远程桌面(Windows Server 2008 R2)
我的电脑 ⇒ 属性 ⇒ 远程设置 ⇒ 远程 ⇒ 远程桌面 ⇒ 允许运行任意版本远程桌面的计算机连接(较不安全)(L)
修改单用户的最大连接数(Windows Server 2008 R2)
Windows Server 2008允许多用户登录远程桌面 windows server 2008 远程桌面连接数修改–无限连接
在Windows Server 2008中,默认每用户远程桌面连接数为“1”,即同时刻只能有一人使用该账户。最大为“2”,但需要修改配置。
开始/控制面板 ⇒ 管理工具 ⇒ 远程桌面服务 ⇒ 远程桌面会话主机配置 ⇒ 编辑设置 ⇒ 限制每个用户只能进行一个会话 ⇒ 属性 ⇒ 取消“限制每个用户只能进行一个会话”勾选
不限制连接数量(Windows Server 2008 R2)
windows server 2008 远程桌面连接数修改–无限连接
运行 ⇒ gpedit.msc ⇒ 本地组策略编辑器 ⇒ 计算机配置 ⇒ 管理模板 ⇒ windows 组件 ⇒ 远程桌面服务 ⇒ 远程桌面会话主机 ⇒ 连接 ⇒ 限制连接的数量 ⇒ 选择 “已启用” ⇒ 允许的 RD 最大连接数:999999
Windows 7:允许多系统用户,同时远程桌面登录
Win7如何设置多用户同时远程登录
首先,要已经创建多个不同用户,并且这些用户已经设置能够远程桌面访问;(这里不再叙述细节)
然后,进行组策略设置(gpedit.msc),计算机配置 ⇒ 管理模板 ⇒ Windows组件 ⇒ 远程桌面服务 ⇒ 远程桌面会话主机 ⇒ 连接 1)限制连接的数量 ⇒ 已启用 ⇒ 允许的RD最大连接数 ⇒ 2 ⇒ 确定 2)远程桌面服务用户限制到单独的远程桌面服务会话 ⇒ 已禁用 ⇒ 确定
最后,下载 Universal Termsrv.dll Patch 工具,移除系统限制:
发生身份验证错误,要求的函数不受支持
身份验证错误 要求的函数不受支持 Windows远程桌面连接 win server 2012系统远程桌面 出现身份验证错误 要求的函数不受支持 怎么办?
问题描述
当使用客户端远程 Windows Server 2012 R2 时,产生如下错误提示:
问题原因
由于 CredSSP 加密 Oracle 修正导致的。
解决办法
Win + R => gpedit.msc => 计算机配置 => 管理模板 => 系统 => 凭据分配 => 加密[……]

READ MORE

「Windows」- 无线网络配置

显示当前无线网络连接信息
windows 10 – how to see what frequency the wireless network is using – Super User
=> Settings / Network & Internet => click on the SSID name and scroll down to Properties.

SSID: k4nz.com
Protocol: Wi-Fi 5 (802.11ac)
Security type: WPA2-Personal
Network band: 5 GHz
Network channel: 149
Link speed (Receive/Transmit): 156/156 (Mbps)
Link-local IPv6 address: fe80::f852:9d2e:8261:589e%20
IPv4 address: 192.168.12.232
IPv4 DNS servers: 223.6.6.6
223.5.5.5
Manufacturer: Intel Corporation
Description: Intel(R) Wi-Fi 6 AX201 160MHz
Driver version: 22.140.0.3
Physical address (MAC): 68-54-5A-69-FC-6C

当前连接 Wi-Fi 5G 频段;
配置优先选择的频段
How to Switch from 2.4GHz to 5GHz in Windows 10
Network adapters / Advanced / Property / Preferred band[……]

READ MORE

「Windows」- 电源管理,杂记

禁止鼠标唤醒休眠
Windows 10 — Cannot disable the mouse from waking computer from sleep
在笔记本休眠之后,如果触碰鼠标,此时笔记本将被从休眠中唤醒。
但是,我们不希望鼠标唤醒笔记本。例如,当无线鼠标放在包里时,如果鼠标没有关闭,那就会唤醒设备,然后笔记本就会闷在包里运转。
在 Windows 10 Pro 21H1 中: 1)Device Manager ⇒ Keyboards ⇒ HID Keyboard Device; 2)Properties ⇒ Power Managerment ⇒ Allow this device to wake the computer,取消勾选; 3)注意,禁用 Mice and other pointing devices ⇒ HID-compliant mouse 并未解决我们的问题;
无法成功进入休眠
An audio stream is currently in use? Here’s How to Fix – Appuals.com Fix Windows 10 Sleep Mode Not Working [Solved] High Definition Audio Device — Audio Stream is currently in use preventing Sleep
查看是否存在设备被占用,而导致无法休眠:

# powercfg -requests
DISPLAY:
None.

SYSTEM:
[DRIVER] Realtek High Definition Audio(SST) (INTELAUDIO\FUNC_01&VEN_10EC&DEV_0257&SUBSYS_17AA22A4&REV_1000\5&2a7b71b7&0&0001)
An audio stream is currently in use.
[DRIVER] 英特尔(R) 显示器音频 (INTELAUDIO\FUNC_01&VEN_8086&DEV_280B&SUBSYS_80860101&REV_1000\5&2a7b71b7&0&0201)
An audio stream is currently in use.

AWAYMODE:
None.

EXECUTION:
None.

PERFBOOST:
None.

ACTIVELOCKSCREEN:
None.

针对如上输出,表示系统资源被占用,无法进入休眠。
通过命令能够忽略这些设备,以保证休眠[……]

READ MORE

「Windows」- Shell、CMD

修改 PATH 变量
Windows 10 and Windows 8
How do I set or change the PATH system variable?
In Search, search for and then select: System (Control Panel) Click the Advanced system settings link. Click Environment Variables. In the section System Variables find the PATH environment variable and select it. Click Edit. If the PATH environment variable does not exist, click New. In the Edit System Variable (or New System Variable) window, specify the value of the PATH environment variable. Click OK. Close all remaining windows by clicking OK. Reopen Command prompt window, and run your command.[……]

READ MORE

「Windows」- 用户、用户组,权限

[……]

READ MORE

「Windows」- 域控

五大角色及作用
架构主机,域命名主机 defult由林根域内的第一台域控制器扮演 而每一个域拥有自己的RID主机,PDC模拟主机和基础结构主机 这三个角色defult由该域内的第一台域控制器扮演
架构主机(找出架构主机 运行 regsvr32 schmmgmt.dll)
负责更新与修改schema内的对象与属性数据。只有Schema Admins组内的成员,才有权利修改schema内的数据。 同一个时间内,整个林中只能有一台架构主机 如果架构主机出现故障或离线,可能会影响某些软件的运作。例如某些服务器级的软件在安装时,会在schema内添加对象, 如果架构主机出现故障或离线,将无法安装这些软件。
域命名主机
负责管理林内域的添加与删除工作。同一个时间内,整个林中只能有一台域命名主机 如果域命名主机出现故障或离线,将无法在林内添加或删除域。 林功能级别win2000 域命名主机与全局编录设为同一台 林功能级别win server 2003 域命名主机与全局编录可以不设在一台机器上
RID主机
每一个域内只能有一台域控制器扮演RID主机的角色 负责工作有: 发放RID,移动对象, 如果RID主机出现故障或离线,可能无法添加对象,也无法将对象转移到其他域。
PDC模拟主机
每一个域内只能有一台域控制器扮演PDC主机的角色 负责工作有: 支持旧客户端计算机(win NT), 减少因为密码复制延迟所造成的问题,整个域时间的同步 利用net time /querysntp命令查看 利用net time /setsntp来改变这台PDC时间服务器 未入域win ser 2003 winxp 会自动设定time.windows.com同步 可以在计算机上利用 开始 – 控制面板 – 日期与时间 – internet时间或利用w32tm /resync命令来手动同步。
基础结构主机(需要针对不同域来进行参考)
每一个域内只能有一台域控制器扮演基础结构主机的角色 负责工作有:对域内对象参考到其他域对象时,负责更新这些参考对象数据。当域用户账户有变动,就更新这个组的内容,并将复制到同一域内的其他域控制器。 基础结构主机是通过全程编录来得到参考数据的最新版本,因为全局编录会收到由每一个所复制来的最新变动资料。 如果所有域控制器同时都是全局编录,则由哪台域控扮演都无所谓。除非整个域内只有一台域控,否贼不要让基础结构主机与全局编录由同一台域控制器来扮演。 架构主机 MMC active directory架构 域命名主机 MMC active directory域及信任 RID主机,PDC模拟主机,基础结构主机 active directory用户和计算机
查看角色命令
netdom query fsmo 如[……]

READ MORE

「Linux」- 系统组成

章节列表
这里的「章节」并不是实际的章节,而是对「系统管理」的各方面的一个分类。
Hardware, Devices, and Tools
Backups Task Automation –To Be Added Keeping Time System Updates –To Be Added The Linux Kernel Source Finding Help
File / Folder Management Quota Management Resource Mgmt with systemctl Resource Mgmt with crgoups Process Management Firewall Setup
Configure PHP in CentOS Linux Set Up Python with CentOS Linux Configure Ruby on CentOS Linux Set Up Perl for CentOS Linux
Install and Configure Open LDAP Create SSL Certificates Install Apache Web Server CentOS 7 MySQL Setup On CentOS 7 Set Up Postfix MTA and IMAP/POP3 Install Anonymous FTP Remote Management Traffic Monitoring in CentOS System Updates Shell Scripting Package Management Volume Management
The core component of Linux
软件层面: Boot loader、Kernel、Daemons、Shell、X Window Server、Window Manager、Desktop Environment
系统层面: Kernel、Shell、File System、Application
参考文献
Linux Guide/How Linux Works 带你真正认识Linux 系统结构 Linux文件系统结构[……]

READ MORE

「Operating System」- 操作系统、安装、升级

比较特别的操作系统
linux-remote-desktop https://github.com/nubosoftware/linux-remote-desktop

章节列表
「ubuntu-18.04-desktop-amd64」 「Ubuntu」- 安装 「cloud-init」- 网络配置(NoCloud) 「grub.cfg」- modified 「Android」- 小米线刷包 「SYSLINUX」[……]

READ MORE

「CentOS」- 安装与升级

版本命名
CentOS Wiki/FAQ/General/How does CentOS versioning work? Wikipedia/CentOS
Since minor versions of CentOS are point in time releases of a major branch, starting with CentOS-7, we are now using a date code in our minor versions. So you will see CentOS-7 (1406) or CentOS-7 (1503) as a version. This way anyone can know, from the release, when it happened. In the above examples, the minor versions 1406 means June 2014 and 1503 means March 2015. In older major branches of CentOS, such as CentOS-6, we numbered things differently.
7.0-1406 7.1-1503 7.2-1511 7.3-1611 7.4-1708 7.5-1804 7.6-1810 7.7-1908 7.8-2003 7.9-2009
相关链接
Instructions for installing CentOS 7.6.1810 on various architectures
升级 CentOS 6.5 到 CentOS 7 版本
Upgrade Centos 6 to Centos 7 Index of /centos/6/upg/old/x86_64/Packages Upgrading CentOS 6 to 7 Pre Upgrade Assistant fails to generate a results.html Upgrade from CentOS 6 to CentOS 7 Upgrading CentOS 6.5 to CentOS 7.2 Upgrading CentOS 6 to CentOS 7
以前升级系统的时候,只能通过重新安装。但是经过社区不断的努力,现在可以通过命令行直接升级当前系统。
注意事项
目前CentOS尚未发布任何有关升级CentOS 6的官方文件,因此不建议在生产环境中进行此升级。如果你想尝试开发,可以按照如下简单的步骤操作。
这是从别的博文中收到的警告:不要使用此方法升级「CentOS 6.7」或更高版本的系统。因为在「CentOS 6.7[……]

READ MORE

「Debian」- 操作系统,安装,升级(通用方法)

版本历史
Debian version history – Wikipedia

Debian 6.0 (Squeeze)
Debian 7 (Wheezy)
Debian 8 (Jessie)
Debian 9 (Stretch)
Debian 10 (Buster)
Debian 11 (Bullseye)
Debian 12 (Bookworm)

相关链接
debian/support Debian GNU/Linux Installation Guide (amd64)
Debian 8.3 ⇒ Debian 10
How to Upgrade Debian 8 Jessie to Debian Linux 9 Stretch {safely} How to upgrade Debian 9 to Debian 10 Buster using the CLI
问题描述
我们需要升级操作系统,对于跨版本升级,需要逐步进行。升级 Debian 8.3 到 Debian 9.13 版本,后来我们又升级到 Debian 10 版本。
该文档将记录:我们升级 Debian 8.3 到 Debian 9.13 到 Debian 10 版本的过程,并展示出通用的升级方法。
注意事项
1)在升级前,请先进行数据备份,防止系统升级失败或其他原因,而带来损失; 2)如果没有必要,不建议升级操作系统; 3)需要注意的事项及经验教训,参考 Updating your Operating System 笔记;
第一步、Debian 8.3 => Debian 9.13

# 更新系统,以使其为当前版本最新
apt-get update
apt-get upgrade
apt-get dist-upgrade
reboot

# 设置新的软件源
cat > /etc/apt/sources.list.d/debian-9.list
deb http://mirrors.tencentyun.com/debian stretch main contrib non-free
deb http://mirrors.tencentyun.com/debian stretch-updates main contrib non-free
deb http://mirrors.tencentyun.com/debian-security stretch/updates main
EOF

# 更新系统,以更新到新版本
apt-get update
apt-get upgrade
apt-get dist-upgrade
reboot

# 验证升级成功
lsb_release -[……]

READ MORE

「Kali」- 安装与升级

内容简介
本文整理Kali安装相关的内容。
Kali Linux
Category: 03. Installing Kali Linux
Kali Linux Installation Requirements

Making a Kali Bootable USB Drive

# dd if=/path/to/iso of=/path/to/device bs=512k

相关链接
# http://tools.kali.org/tools-listing[……]

READ MORE