本网站相关文章:

Introduction

本文章主要用于了解,汇总平常涉及到对文件的基本命令操作, 对于文件中的数据处理和操作见其他文章.

文件列表

ls

使用 ls 命令, 可以查看文件的创建时间, 文件的大小等信息

1
2
3
4
5
6
7
8
9
10
11
12
13
# 显示目录本身属性
ls -ld

# 查看文件大小
# 以byte方式显示文件大小
ls -l
ll
# 以human readable方式显示文件大小
ls -lh
ll -h

# 显示隐藏
ls -la

tree

使用 tree 来打印当前文件或者目录中各个子文件的层次结构

1
2
3
4
tree -C         # 高亮显示
tree -h # human形式
tree -L LEVEL # 层级, 在多文件的情况下, 用于更快, 更好的进行显示
tree -N # Unicorn显示

例如:

1
2
3
4
5
# a. 当前目录第一个层级
tree -NC -L 1

# b. 第二层级
tree -NC -L 2

增删改

create

创建文件, 创建目录, 创建临时文件等等.

1
2
3
4
5
6
7
8
9
10
# touch
# 指定时间
touch -t 199001011200 file
# 修正所有文件创建时间
touch *
# mkdir
# 递归
mkdir -p /user/dir2/subdir3/
# mktemp
创建临时文件

拷贝文件, 其中命令 cp 会对已经存在相同目录进行合并操作

update

  1. link-创建软连接, 硬链接文件, 格式: ln 【参数】 【源文件或者目录】 【目标文件或者目录】
  • 硬链接:相同 inode 号但是文件名不同的链接,不占用磁盘空间,只有文件的链接引用计数为 0,文件才真正被删除
  • 软连接:拥有自己 inode 节点和用户数据块的普通文件,只不过特殊而已.
1
2
3
4
5
6
7
8
9
10
11
12
13
# 1. 创建
# 创建软连接(目标可以是目录或文件),输出: lrwxr-xr-x 1 bamboounuse staff 4B 12 2 10:52 dst1 -> src1
ln -s src1 dst1
# 创建硬链接, 不允许对目录进行硬链接操作, 输出:
# -rw-r--r-- 2 bamboounuse staff 8B 12 2 11:13 tdst2
# -rw-r--r-- 2 bamboounuse staff 8B 12 2 11:13 tsrc1
ln tsrc1 tdst2

# 2. 更改内容(软连接就不再描述), 输出: 发现tdst2的内容也同步更新了
echo "new line1" >> tsrc1

# 3. 删除, 此时tdst2不影响, 内容也未小时
rm tsrc1
  1. move-移动目录, 其中
  • 普通文件:已存在则替换
  • 目录:已存在,则非法操作
1
2
# 使用{}来备份文件:
mv .vim{, .bak}
  1. rename-批量更改文件的名称
1
2
3
# 批量删除.bak文件
ls *.bak | sed 's/.bak$//' | xargs -n 1 -i mv {}.bak {}
rename 's/.bak//' *.bak
  1. copy 拷贝目录
1
2
3
# 拷贝一个目录下的所有子目录, 子文件到另外一个目录, 并覆盖原文件, 原子目录
# 另外还包括隐藏目录
cp -TR crawler/. /home/visa/repository/crawler/

delete

对文件实体的删除操作

  • rm: remove directory or file entries
  • unlink: unlink directory or file one time
  • rmdir: rmove directories

查找

filename

  1. walk a file hierarchy(层级/层次结构), 见find
  2. find filename quickly, locate
  3. whereis 在 PATH 目录下搜索 app,source,manual-page 等类型的文件
1
2
3
4
5
6
# 仅仅查找二进制
whereis -b bin
# 查找大部分类型文件(linux系统下)
whereis file1
# 帮助文档
whereis -m grep

注意, macos 系统下 whereis 仅仅查找标准可执行文件路径的文件, linux 系统则完全不一样.

  1. which: 在 PATH 指定的路径中, 搜索某个系统命令的位置, 并仅仅返回第一个搜索结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
# a. 可执行文件
# 返回第一个结果
which grep
# 返回所有搜索结果
which -a find

# b. 非可执行文件, 输出: mygo2 not found
echo "test1" > ~/.local/bin/mygo2
which -a mygo2

# c. 改变可执行, 输出: /Users/bamboounuse/.local/bin/mygo2
chmod +x ~/.local/bin/mygo2
which -a mygo2

这里简单的描述下which, where, locate, find四者的区别:

  • which 只能查找可执行文件, 其通过搜索 PATH 来找到所需值
  • whereis 可以找到 PATH 目录下的大部分文件(Macos 仅仅查找标准可执行文件路径下的文件)
  • locate 搜索全部磁盘并提前建立数据进行映射, 查找时瞬间给你返回
  • find 实时搜索目录, 功能比较丰富但是速度比较慢
  1. type: 区分指定的”命令”是否是 shell 自带的
1
2
3
4
# 输出:  cd is a shell builtin
type cd
# 输出: grep is /usr/bin/grep,这是一个外部命令
type grep

content

对于文件内容的操作, 主要命令有: grep, cat, sed, 具体见各个文章.

  • grep: Global Search Regular Expression and Print out the line.
  • cat: Display all content
  • sed: 流式文本编辑器
  • tee: 从标准输入读入并写往标准输出和文件
  1. cat 命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# a:将指定文件中的内容加上行号,重定向到目标文件中
# 如果没有指定目标文件,默认标准输出为目标文件
cat -b src > dst.log

# b:here document
# 一段特殊目的的代码块,使用IO重定向的形式来将一个"command list"传递到"交互程序或者命令"
# interactive-program << LimitString
# command #1
# command #2
# ...
# LimitString

# c: tee命令
# 如果重定向到多个文件中,可以使用tee命令(默认输出到stdout中)
cat aggregate.py | tee a.py b.py c.py >/dev/null
  1. tee
1
2
# 1. 指定输出文件, 直接将标准输入信息放入输出中, 以ctrl +c 结束
tee output.txt

另外, 还有more/less/tail/head, 它们会输出文件部分内容, 一般用于大文件的输出

stat 和 file

  1. stat: Display file or file system status, 例如文件名,大小,类型,硬链接计数,权限,访问时间等
1
2
3
4
# 1. MAC:
stat -x file
# 2. linux
stat file

其输出如下:

1
2
3
4
5
6
7
  File: "record.md"
Size: 65 FileType: Regular File
Mode(权限信息): (0644/-rw-r--r--) Uid: ( 501/bamboounuse) Gid: ( 20/ staff)
Device(设备信息): 1,17 Inode: 77572539 Links: 1
Access(最近访问): Fri Dec 2 10:07:49 2022
Modify(最近修改): Fri Dec 2 10:07:48 2022
Change(最近改动): Fri Dec 2 10:07:48 2022
  1. file: Determine type of FILES(查看文件类型), 用的不多

实战

  1. diff, 比较两个目录的大小: diff -ruNa s1 s2 > s12.diff, 此时 s12.diff 中的输出类似下面:
1
2
Only in network: network-1.md
Only in protocol: protocol-2.md
  1. 文件大小清 0
1
2
3
4
5
# Write Permissions
echo "">filename
cat /dev/null >filename
# UnWrite Permissions
echo "" | sudo tee filename

参考