星期六, 十二月 30, 2023

windows与Linux互传文件编码转换和换行符处理

星期六, 十二月 30, 2023 0 Comments


编码转换

将windows文件转换成支持Linux文件的换行符号,使用Unix2dos,那么如何装换文件编码呢?

举例子

有一个文件使用Big5 编码,如何装换成UTF-8 编码呢?

iconv

sboxes@osboxes ~/D/vmware-tools-distrib> iconv --help
Usage: iconv [OPTION...] [FILE...]
Convert encoding of given files from one encoding to another.

Input/Output format specification:
 -f, --from-code=NAME       encoding of original text
 -t, --to-code=NAME         encoding for output

Information:
 -l, --list                 list all known coded character sets

Output control:
 -c                         omit invalid characters from output
 -o, --output=FILE         output file
 -s, --silent               suppress warnings
     --verbose             print progress information

 -?, --help                 Give this help list
     --usage               Give a short usage message
 -V, --version             Print program version

Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.

For bug reporting instructions, please see:
<https://bugs.launchpad.net/ubuntu/+source/eglibc/+bugs>

常用语法

iconv -f [原来编码] -t [新编码] file -o newfile

查看字符编码

file  filename

换行符转换

当把DOS文件在Linux 上打开的时候,比如:使用命令 cat -A file 我们会发现DOS换行符 ^M$ ,也被称为CR和LF两个符号。

但是在linux 上仅有LF($)一个符号表示换行符

DOS

这里为什么要提及DOS,因为DOS是微软的早期系统,并且没有图形界面,但是与 Windows系统一样,有很多相似支持,比如这里换行符,因为全是微软的出品的系统。Windows在某种程度上支持DOS。Windows操作系统的后续版本(如Windows XP、Windows 7、Windows 10等)保留了对DOS的一定程度的兼容性支持。

因此,你可以理解为这里的DOS指的是windows系统。

windows的换行符和Linux的换行符是不一样的

转换

Linux系统中,提供了命令支持两者之间的转换

dos2unix -kn file newfile 
unix2dos -kn file newfile
#含义:保留修改时间,保留源文件,转换成newfile

这里的unix,就是Linux的前身,所以这里是一脉想成的,linux发展都深受到unixminix 的影响,所以有大量相似之处。

使用

在不同系统windows和Linux 中,复制纯文本,就需要使用unix2dos 或者dos2unix 进行转换。

注意:不建议在windows上编辑好了文件后,上传到linux上,会容易发生错误。

总结日常vi、vim常用使用方式

星期六, 十二月 30, 2023 0 Comments

代表Linux的企鹅图标

vim常见用法

移动

  • 1.使用上下左右键,进行移动
  • 2.pagedown/pageup 进行页面移动
  • 3.nG移动到指定行,set nu 显示行号,G 移动到最后一行

查找

/word 向下查找

?word 向上查找

n下一个

N 上一个

一般不常用替换,这里不提及

复制

yy 复制一行

nyy 复制光标后面几行

yG复制光标所在行到最后一行

y1G 复制光标所在行到第一行数据

将y 改为d ,就变车删除命令

撤销操作

u

粘贴

p:光标所在行下一行处进行粘贴(如果粘贴内容没有换行符,会在本身支持进行粘贴)

我们更常用的粘贴复制方式

常用命令

set nuset nonu 显示和取消行号

w filename 是保存的意思,这里是保存为新文件

wq 保存退出

q! 放弃修改退出

.swp 文件

当编辑文件出现意外情况的时候,比如宕机或者,vim会保留缓存文件 .swp文件。

或者其他用户在处理此文件的时候,都会出现swp文件,并且打开文件会有警告信息

E325: ATTENTION  &lt;==错误代码
Found a swap file by the name ".man_db.conf.swp" &lt;==下面数列说明有暂存盘的存在
        owned by: dmtsai   dated: Mon Jul 6 23:54:16 2015
        file name: /tmp/vitest/man_db.conf &lt;==这个暂存盘属于哪个实际的文件?
        modified: no
        user name: dmtsai   host name: study.centos.vbird
      process ID: 31851
While opening file "man_db.conf"
            dated: Mon Jul 6 23:47:21 2015

如何处理

如果是其他人在使用,那么找到用户进行协商,对方退出,你再来接手。

或者依旧情况来判断处理

通常会有

  • 1.输入O,表示只读打开看看,不进行处理
  • 2.E 依旧打开文件,因为存在swp ,如果你依旧打开编辑,两者之间容易造成冲突
  • 3.R 恢复缓存,进行处理。将缓存恢复后用户接着处理文件。用户处理完文件后,记得删除.swp 文件,因为此时已经没有用了
  • 4.D 缓存无用,不管他,删除掉
  • 5.Q 不处理,退出
  • 6.A 中断

利用可是区块来指定复制和删除

复制文本

  1. 移动光标到要复制的文本首部。
  2. 按下 v 进入可视模式。
  3. 使用方向键(或 hjkl)选择要复制的文本区域。
  4. 按下 y 复制选定的文本。

粘贴文本

  1. 移动光标到要粘贴的位置。
  2. 按下 p 将之前复制的文本粘贴到光标位置的后面(粘贴到光标前使用 P)。

同样的删除也使用此操作

vim 打开多个文件

:files 查看打开多个文件

:n/N 文件两个之间切换

vim 多窗口功能

sp filename 打开另外文件,在同一个窗口

ctrl+w +上下 同一个窗口进行切换

总结

这是题主根据日常使用的习惯总结的所必须的命令用法,

相信学会了这些就足够了

其他命令:比如说:替换,题主认为一般用不到,所以并不提倡使用。

Linux文件系统详解:常见文件系统概述与常见命令操作

星期六, 十二月 30, 2023 0 Comments

代表Linux的企鹅图标

概述

本文接着上一篇文章,ext2文件系统的分析,概述了其他类别文件系统,以及描述了文件系统常见的命令。

其他文件系统

传统文件系统:ext2、minix、FAT等

日志类文件系统:ext3/4、NTFS(windows)、JFS(IBM)、 XFS(SGI)、ZFS

网络文件系统:NFS、SMBFS

查看Linux 支持的文件系统

Linux 支持的文件系统

ls -l /lib/modules/$(uname -r)/kernel/fs/

Linux 加载到内存的文件系统

cat /proc/filesystems

Linux VFS

Linux 中使用VFS来管理所有的文件系统

vfs 文件系统结构图

文件系统的操作

列出磁盘使用率

df 

这是 df 命令的帮助信息,它描述了 df 命令的用法和选项。根据这些选项,它提供有关文件系统的信息。

df 命令用于显示每个文件所在文件系统的磁盘空间使用情况,或默认情况下显示所有文件系统的空间信息。

df 命令的选项包括:

-a, --all: 包括虚拟文件系统

-B, --block-size=SIZE: 按 SIZE 缩放大小后显示。例如,-BM 以 1,048,576 字节为单位显示大小。

-h, --human-readable: 以人类可读的格式显示大小(如 1K、234M、2G)

-H, --si: 同样显示大小,但使用 1000 的幂而不是 1024

-i, --inodes: 列出 inode 信息而不是块使用情况

-k: 等同于 --block-size=1K

-l, --local: 限制列表到本地文件系统

--no-sync: 获取使用信息之前不调用同步(默认)

--output[=FIELD_LIST]: 使用由 FIELD_LIST 定义的输出格式,如果省略 FIELD_LIST,则打印所有字段

-P, --portability: 使用 POSIX 输出格式

--sync: 获取使用信息之前调用同步

--total: 省略对可用空间无关的所有条目,并生成总计

-t, --type=TYPE: 限制列表到指定类型的文件系统

-T, --print-type: 打印文件系统类型

-x, --exclude-type=TYPE: 限制列表到非指定类型的文件系统

--help: 显示帮助信息并退出

--version: 输出版本信息并退出

显示的值采用 --block-sizeDF_BLOCK_SIZEBLOCK_SIZEBLOCKSIZE 环境变量中首先可用的 SIZE 为单位。如果这些环境变量都没有设置,则默认单位为 1024 字节(如果设置了 POSIXLY_CORRECT,则为 512 字节)。

SIZE 是一个整数,可选的单位(例如:10M 表示 1010241024)。单位包括 K、M、G、T、P、E、Z、Y(1024 的幂)或 KB、MB 等(1000 的幂)。

FIELD_LIST 是一个逗号分隔的列列表,用于包含在输出中。有效的字段名包括:'source'、'fstype'、'itotal'、'iused'、'iavail'、'ipcent'、'size'、'used'、'avail'、'pcent' 和 'target'。

如果需要更多详细信息,可以运行命令 info coreutils 'df invocation' 查看完整文档。报告 df 的错误可以发送至 bug-coreutils@gnu.org,或访问 GNU coreutils 主页获取更多帮助:http://www.gnu.org/software/coreutils/

常见用法

df -ah 

列出文件所占空间

du

du 命令用于递归地统计文件(或目录)的磁盘空间使用情况。

使用方式

du [OPTION]... [FILE]...: 统计每个文件的磁盘空间使用情况,对目录进行递归处理。

选项

-0, --null: 每行末尾以 0 字节而不是换行符结束。

-a, --all: 显示所有文件的计数,而不仅仅是目录。

--apparent-size: 打印表面大小而不是磁盘使用情况;虽然表面大小通常更小,但可能由于文件中的空洞、内部碎片、间接块等而更大。

-B, --block-size=SIZE: 在打印之前按 SIZE 缩放大小。例如,-BM 以 1,048,576 字节为单位显示大小。

-b, --bytes: 等同于 --apparent-size --block-size=1

-c, --total: 显示总计。

-D, --dereference-args: 仅解引用列出在命令行上的符号链接。

-d, --max-depth=N: 仅在目录的 N 级或更少级别下显示总计;--max-depth=0--summarize 相同。

--files0-from=F: 对文件 F 中指定的以 NUL 结尾的文件名进行磁盘使用情况汇总。

-H: 等同于 --dereference-args (-D)

-h, --human-readable: 以人类可读的格式显示大小(例如,1K、234M、2G)。

-k: 等同于 --block-size=1K

-L, --dereference: 解引用所有符号链接。

-l, --count-links: 如果硬链接,则多次计算大小。

-m: 等同于 --block-size=1M

-P, --no-dereference: 不跟随任何符号链接(默认)。

-S, --separate-dirs: 不包括子目录的大小。

--si: 类似于 -h,但使用 1000 的幂而不是 1024。

-s, --summarize: 仅显示每个参数的总计。

-t, --threshold=SIZE: 排除小于正数 SIZE 的条目,或大于负数 SIZE 的条目。

--time: 显示目录中任何文件的最后修改时间,或其子目录中任何文件的最后修改时间。

--time=WORD: 以 WORD 而不是修改时间显示时间:atime、access、use、ctime 或 status。

--time-style=STYLE: 使用 STYLE 显示时间:full-iso、long-iso、iso、+FORMAT(FORMAT 解释类似于 'date')。

-X, --exclude-from=FILE: 排除与 FILE 中的任何模式匹配的文件。

--exclude=PATTERN: 排除与模式 PATTERN 匹配的文件。

-x, --one-file-system: 跳过位于不同文件系统上的目录。

--help: 显示帮助信息并退出。

--version: 输出版本信息并退出。

单位显示

显示的值采用 --block-sizeDU_BLOCK_SIZEBLOCK_SIZEBLOCKSIZE 环境变量中首先可用的 SIZE 为单位。如果这些环境变量都没有设置,则默认单位为 1024 字节(如果设置了 POSIXLY_CORRECT,则为 512 字节)。

SIZE 是一个整数,可选的单位(例如:10M 表示 1010241024)。单位包括 K、M、G、T、P、E、Z、Y(1024 的幂)或 KB、MB 等(1000 的幂)。

报告问题

报告 du 的问题至 bug-coreutils@gnu.org,或访问 GNU coreutils 主页获取帮助:http://www.gnu.org/software/coreutils/。若需完整文档,运行命令 info coreutils 'du invocation'

du -ah|sort -rh |head -n N # 按照文件大小展示N行
du -sh # 展示当前文件的总和

链接

ln

硬链接:硬链接的本质是在目录下添加一个文件名,链接到已有的inode号码。因此:不能链接目录

软链接: 建立新文件,文件内容指向已有的文件名(注意不是iNode)

ln 命令用于创建链接到文件或目录的连接。以下是 ln 命令的用法和选项:

使用方式

ln [OPTION]... [-T] TARGET LINK_NAME: 创建名为 LINK_NAME 的链接到 TARGET。

ln [OPTION]... TARGET: 在当前目录创建名为 TARGET 的链接。

ln [OPTION]... TARGET... DIRECTORY: 在 DIRECTORY 中为每个 TARGET 创建链接。

ln [OPTION]... -t DIRECTORY TARGET...: 在 DIRECTORY 中为每个 TARGET 创建链接。

选项

--backup[=CONTROL]: 对每个现有目标文件创建备份。

-b: 类似于 --backup,但不接受参数。

-d, -F, --directory: 允许超级用户尝试硬链接目录。

-f, --force: 移除现有目标文件。

-i, --interactive: 提示是否移除目标。

-L, --logical: 解引用作为符号链接的 TARGET。

-n, --no-dereference: 如果 LINK_NAME 是指向目录的符号链接,则将其视为普通文件。

-P, --physical: 直接创建指向符号链接的硬链接。

-r, --relative: 相对于链接位置创建符号链接。

-s, --symbolic: 创建符号链接而不是硬链接。

-S, --suffix=SUFFIX: 覆盖通常的备份后缀。

-t DIRECTORY, --target-directory=DIRECTORY: 指定创建链接的目录。

-T, --no-target-directory: 将 LINK_NAME 视为始终是一个普通文件。

-v, --verbose: 打印每个链接文件的名称。

--help: 显示帮助信息并退出。

--version: 输出版本信息并退出。

备份后缀

备份后缀默认为 ~,除非使用 --suffixSIMPLE_BACKUP_SUFFIX 进行设置。可以通过 --backup 选项或 VERSION_CONTROL 环境变量来选择版本控制方法。

none, off: 从不进行备份(即使给出了 --backup)。

numbered, t: 进行编号备份。

existing, nil: 如果存在编号备份,则进行编号备份,否则进行简单备份。

simple, never: 总是进行简单备份。

使用 -s 会忽略 -L-P。否则,指定的最后一个选项控制了当 TARGET 是符号链接时的行为,默认为 -P

报告问题

报告 ln 的问题至 bug-coreutils@gnu.org,或访问 GNU coreutils 主页获取帮助:http://www.gnu.org/software/coreutils/。若需完整文档,运行命令 info coreutils 'ln invocation'

常见用法

ln -sf [target] [目标文件] # 创建软连接,硬连接直接没有的s 即可,f表示force 连接如果存在则删除,重新创建

列出所有磁盘列表

lsblk -a #输出基本信息
lsblk -o NAME,UUID,LABEL# 更具定制输出多行信息

列出UUID等参数

blkid

UUID 全局唯一的标识符

列出分区表类型和分区信息

parted -l # 打印分区表信息

通知内核分区表被更改

partprobe

当我们更改分区表后,都需要重启,但是使用此命令会通知内核,重新加载分区表。

查看内核分区表信息

cat /etc/partitions

其他命令工具

创建分区和创建文件系统工具

MBR:fdisk 来创建文件系统

GPT:gfisk来创建分区

或者使用parted进行分区

使用的mkfs系列命令来创建文件系统

系统的挂载和卸载:mount /umount启动挂载

自动挂载方式

我们使用的mount挂载命令,实际上修改的mtab/proc/mounts这两个文件中,但是当文件重启以后,我们会发现文件系统没有被自动挂载

修改fstab 配置启动配置文件,使得文件系统被自动挂载

这里也很简单,我们修改对饮的fstab 表 即可!

cat /etc/fstab

具体的命令使用,请用用户参考实践用法。