V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
solider245
V2EX  ›  Linux

不懂就问: Linux 默认创建的文件是什么后缀格式的?

  •  
  •   solider245 · 2020-11-09 06:51:55 +08:00 · 13264 次点击
    这是一个创建于 1509 天前的主题,其中的信息可能已经有所发展或是发生改变。
    网上找了半天都找不到,这回连英文内容都没有了。
    如果可以的话,顺便问问 windows 下的文件默认是什么格式的后缀好了。
    128 条回复    2020-11-17 10:55:21 +08:00
    1  2  
    hello2060
        1
    hello2060  
       2020-11-09 06:59:39 +08:00   ❤️ 1
    什么叫默认创建? linux 上有成千上万的程序都会创建文件,为啥会有统一的后缀?
    kokutou
        2
    kokutou  
       2020-11-09 07:04:51 +08:00 via Android
    都没有默认后缀
    msg7086
        3
    msg7086  
       2020-11-09 07:05:19 +08:00
    Linux 默认不会瞎基尔创建文件。
    wjm2038
        4
    wjm2038  
       2020-11-09 07:10:04 +08:00 via Android
    windows 也没有默认创建的文件类型啊。。都是你自己选的
    solider245
        5
    solider245  
    OP
       2020-11-09 07:21:02 +08:00
    @hello2060 比如我 touch 一个文件。 这个文件没有后缀,那他是什么后缀的文件呢?
    @kokutou 没有后缀也是后缀啊,总归是有一个后缀的吧?
    @msg7086 我是说我自己创建的
    @wjm2038 我的意思是我不选,系统默认你创建了一个文件,就给你一个格式
    hello2060
        6
    hello2060  
       2020-11-09 07:24:24 +08:00   ❤️ 1
    @solider245 你可以给他.txt 也可以给他.mp4 .mp3, 但是音乐播放器打开不了他,视频播放器打开不了他,文本编辑器可以打开。文件格式并不取决于文件名里的.xxx
    vk42
        7
    vk42  
       2020-11-09 07:25:59 +08:00   ❤️ 4
    @solider245 没有后缀就是没有后缀啊,啥叫“没有后缀也是后缀”……
    AmrtaShiva
        8
    AmrtaShiva  
       2020-11-09 07:26:07 +08:00 via iPhone   ❤️ 1
    Linux 是根据文件内容判断所谓的“格式” 比如一个 mp4 视频在 win 系统后缀是.mp4 才能播放 Linux 系统对这种后缀没要求 他看的是文件内容
    raaaaaar
        9
    raaaaaar  
       2020-11-09 07:26:08 +08:00 via Android   ❤️ 2
    Linux 下后缀名是没有意义的,只是方便人的,不像 win 用后缀识别类型,Linux 下文件分为几类,有三种权限。。。
    msg7086
        10
    msg7086  
       2020-11-09 07:26:38 +08:00 via Android
    @solider245 没有后缀就是没有后缀。你一开始的假设就错了。

    后缀指的是文件名中最后一个句点之后的内容。文件名里没有句点,就没有后缀。这就是一个无后缀文件。
    hello2060
        11
    hello2060  
       2020-11-09 07:27:25 +08:00
    @solider245 文件格式不是由后缀决定的,那你就不用纠结后缀了啊。你 vi 保存也可以不给任何后缀名,一样可以用文本编辑器打开啊。win 上的后缀名只是给一种提示,是什么格式的,这样能关联到默认的程序来打开,但是到底是不是后缀名提示的格式,那不一定的啊。
    ho121
        12
    ho121  
       2020-11-09 07:28:54 +08:00 via Android
    楼主对格式是不是有什么误解?所有文件都是二进制储存的,某些特定二进制排列的文件具有某些特定的格式。
    比如写文章,文章都是文字组成的,有的是诗歌,有的是散文,有的文章可能既是诗歌也是散文,有的随便瞎写的可能就不属于任何文体。

    而扩展名完全是属于文件名的一部分,只是为了人容易识别,不代表文件的真实格式。相当于文章的标题,不能说我标题中带有“诗歌”两个字,我的正文就一定是诗歌。
    TStealer
        13
    TStealer  
       2020-11-09 07:29:52 +08:00 via Android   ❤️ 1
    任何系统都不存在什么默认后缀名。
    首先你要理解后缀名是个什么东西。后缀名终究只是一个文件名,它的存在只是方便操作系统选择处理这个文件的应用程序,后缀和你文件自身属性完全没有关系,一个 Microsoft Office 文件你删除后缀名一样能打开,不是 Office 的文件你加上.doc 也照样打不开。
    所以后缀名只是一个文件名中的一部分,你这个问题相当于在问操作系统有没有默认的文件名后缀,那你觉得有吗?
    msg7086
        14
    msg7086  
       2020-11-09 07:35:51 +08:00
    后缀名这个概念,原本是 DOS 时代 FAT 文件系统上的东西,后来 ISO9660 上也有用到类似的规范。
    但是这些东西早在十几年前就淘汰了。
    现在后缀名仅仅是文件名中的一部分。

    比如说你可以创建
    a.
    .a
    a
    这三个不同的文件,Linux 上也是,Windows 上也是。后缀名早就不是必须的东西了。
    holulu
        15
    holulu  
       2020-11-09 07:41:48 +08:00
    后缀只是名字的一部分,跟格式没有关系。即使是 Windows 一样可以给一个 mp4 文件写上.txt 后缀。
    无论是哪个操作系统也不会在创建文件的时候给默认格式的,格式属于文件内容的范畴,和文件名一点关系也没有。你往文件写入什么格式的内容,文件就是什么格式。
    xuanbg
        16
    xuanbg  
       2020-11-09 07:57:36 +08:00   ❤️ 1
    @raaaaaar windows 也不靠扩展名识别文件类型,只不过 windows 可以按扩展名来给你一个默认的打开方式罢了。这一点上面不仅是 Windows,macOS 这些图形界面文件管理器也都是这样干的。
    loading
        17
    loading  
       2020-11-09 07:58:38 +08:00 via Android
    可以试一下这个命令:
    touch helloworld
    seers
        18
    seers  
       2020-11-09 08:16:02 +08:00
    VeryZero
        19
    VeryZero  
       2020-11-09 08:21:58 +08:00
    不要把 windows 那一套思维带到 Linux 里,否则会举步维艰...
    1KN6sAqR0a57no6s
        20
    1KN6sAqR0a57no6s  
       2020-11-09 08:39:02 +08:00
    文件本没有后缀,用的人多了,也就有了后缀。
    nutting
        21
    nutting  
       2020-11-09 08:41:34 +08:00
    后缀的标准叫法应该是扩展名,这是 dos 提出的概念吧,为了区分内容
    babyfive
        22
    babyfive  
       2020-11-09 08:44:06 +08:00
    linux 后缀有和没有是一样的,有后缀只是为了使用者(也就是我们)可以区分。机器是不识别后缀的。
    nvkou
        23
    nvkou  
       2020-11-09 08:47:44 +08:00   ❤️ 2
    扩展名只是在文件名的层次上归类文件类型而已. 和实际文件类型没有关系的
    xxx.jpg 是在文件名层次声明这是 JPEG 图像.双击时会以.jpg 关联的程序打开该文件. 但是这到底是不是合法的 jpg 文件只有程序自己读取的时候才知道
    另外 linux 上的文件不一定代表磁盘上的一段扇区. 可以是网络 socket,可以设备 io,万物皆文件
    int64ago
        24
    int64ago  
       2020-11-09 08:51:26 +08:00
    你还是用 Windows 吧
    qinyusen
        25
    qinyusen  
       2020-11-09 09:01:13 +08:00   ❤️ 2
    @solider245 后缀的目的是人为表述规则,也就是人为规定就行,但是 linux 的文件管理不是强依赖后缀名。
    用过 git 吧? .gitignore 这文件类型是啥? 前面的. 就是表示这是个隐藏文件,linux 规定以.为开头的是隐藏文件, 那么请问后缀是啥? 因为文件名本身已经是规则了,那后缀就没啥意义。

    或者你看一下 Makefile,请问后缀名是啥? 又一个文件名本身就是规则的。

    windows 里表述可执行的后缀是 exe 么? 那 linux 里可执行是怎么表示的? ls -l 看一下,有没有可执行权限就好。

    综上,个人观点:“后缀名只是文件用来表述规则的一种方法而已, 而不是后缀名就是一切的规则。”

    ===========================================

    以下是一些可能是错误的认知经验:

    愿你能理解我的表述。另外,理解系统的设计哲学之后再对比映射就好。
    比如 linux 的设计哲学之一就是“一切皆文件”, 设备也是文件( cat /dev/ttyusb0 就可以读取 usb 串口,而不是 windows 那种打开一个程序-比如串口大师什么的,然后再解析),属性也是文件("cat /proc/cpuinfo" 就是查看 cpu 属性)
    诸如此类的还有流这个概念,引发出管道,也就是 UNIX 设计哲学里一切都是精简的可服用的小的模块,这个看看《 UNIX 设计哲学》还有一些相关的材料,愿你可以很快理解

    windows 设计哲学比较复杂,但是有一个是“所见即所得”,一个是窗口化,所以有了常见文件类型映射固定图标,以完成这件事儿,即见到这图标,就知道这是个什么类型的文件。 (这是一种感知 /交互的 规则)

    如果这个事儿,换到 ios 上,你会发现,又不一样了。。。。

    操作系统是门设计艺术。 套用不同体系下的规则去相互理解,有很多时候百害而无一利。
    cdafsd
        26
    cdafsd  
       2020-11-09 09:02:41 +08:00
    是想说文件头吧
    RickyC
        27
    RickyC  
       2020-11-09 09:11:09 +08:00
    windows 下的文件默认是什么格式的后缀?
    默认是没有后缀的.
    我想 linux 也是如此
    natashahollyz
        28
    natashahollyz  
       2020-11-09 09:12:26 +08:00
    touch abc
    随便写点
    再 cat abc
    不需要后缀
    natashahollyz
        29
    natashahollyz  
       2020-11-09 09:13:15 +08:00
    另外 windows 新建文件不是让你选文件格式的么?选啥就是啥
    brader
        30
    brader  
       2020-11-09 09:14:19 +08:00
    Linux 并不以文件后缀来判别文件类型,文件后缀是给人看的,方便管理员管理文件,并不是给机器识别的。
    现在主流的 Linux 文件类型,一般就两种:ASCII 文件、二进制文件。
    kiracyan
        31
    kiracyan  
       2020-11-09 09:18:07 +08:00
    ...linux 哪有后缀
    yanue
        32
    yanue  
       2020-11-09 09:22:10 +08:00
    还是先去系统学习一下吧
    kevinwkxw
        33
    kevinwkxw  
       2020-11-09 09:30:00 +08:00
    所谓的后缀名加上“.”都是文件名的一部分,可以根据文件的用途随便写或不写,后缀名对于人的意义是便于区分文件类型,对于程序一般来说没有特殊含义,程序在识别文件时一般按文件前几个字节( magic number )来检验,当然也有程序先按文件名特征进行下过滤,如名字中必需包含特定后缀。
    gunpowderfans
        34
    gunpowderfans  
       2020-11-09 09:32:21 +08:00 via Android
    默认就可以创建没有扩展名的文件,Windows 也一样
    ShallowAi
        35
    ShallowAi  
       2020-11-09 09:34:56 +08:00 via Android
    后缀并不代表文件类型.
    你想它是什么就是什么,who cares
    no1xsyzy
        36
    no1xsyzy  
       2020-11-09 09:39:48 +08:00   ❤️ 1
    难道 .gitignore 文件的后缀名是 .gitignore 吗?
    虽然 windows 确实傻到这么认为的,并且在 win10 某个 build 以前包括 win8.1 以前都不允许在资源管理器里直接改名字到 .gitignore,必须在命令行 ren 或者保存对话框才行……

    @msg7086 见上,a. 和 .a 在 windows 下需要点技术…… 当然这不是本质问题

    说来我想起来 win98 (还是因为 FAT32 ?)下 mkdir a../ 会造成一个巨大的问题,会产生一个资源管理器无法遍历到,但可以访问的隐藏文件夹。
    …… 然后看了下,Win10 2004 Build 19041.508 仍然有这个 bug,但命令行下屏蔽了 mkdir a../ 的操作,拒绝了新建这样的文件夹…… 但可以从 WSL 里
    $ mkdir a
    $ mkdir a.
    $ mkdir a..
    $ touch a/zero
    $ touch a./one
    $ touch a../two
    $ tree
    然后从资源管理器里访问,不管点开哪个都只能看到 zero……
    从 “无法遍历到,但可以访问” 变成了 “无法遍历也无法访问”……
    服了,千古 bug 。
    no1xsyzy
        37
    no1xsyzy  
       2020-11-09 09:41:30 +08:00
    话说月经贴了……
    /t/713957#r_9608004
    laoyur
        38
    laoyur  
       2020-11-09 09:45:20 +08:00
    估计楼主看完这些回复已经凌乱了吧
    newmlp
        39
    newmlp  
       2020-11-09 09:45:43 +08:00
    为啥非得有后缀啊,后缀也是文件名的一部分,可有可无
    JerryCha
        40
    JerryCha  
       2020-11-09 09:48:37 +08:00
    无论是 Windows 还是 Linux 还是 macOS,默认都是没有后缀的。
    在上述三个系统中,后缀对应用都是无意义的。
    在 Windows 与 macOS 中,后缀只是为了方便关联文件类型的默认处理应用
    msg7086
        41
    msg7086  
       2020-11-09 09:55:20 +08:00
    @no1xsyzy 这些算是操作系统下的一些软件上的限制。不说 WSL,其实直接开个 msys2 就能跑了。
    这个主要是因为后缀的点会被自动 strip 掉,所以访问 a.. 会被强行转换成访问 a,所以才有了这个 bug 。
    (其实这说不定算是个 feature,毕竟 strip 点是要手动编码进去的。)
    Pythondr
        42
    Pythondr  
       2020-11-09 09:57:58 +08:00 via iPhone
    后缀是给人看的,而不是机器
    gitopen
        43
    gitopen  
       2020-11-09 10:04:10 +08:00
    建议恶补《计算机组成原理》。。逃。。。
    love
        44
    love  
       2020-11-09 10:26:57 +08:00
    后缀自己手动加呢,后缀只是进一步指示文件的内容格式,基本上所有二进制文件头都有文件格式标记,所以在 linux 下不指定后缀基本也能正常打开文件,比如把视频文件加.txt 后缀双击还是会用播放器打开,不过 windows 不行,那个只看后缀不看内容
    no1xsyzy
        45
    no1xsyzy  
       2020-11-09 10:28:14 +08:00   ❤️ 1
    @no1xsyzy 仔细审视了这个千古 bug……
    mkdir a a. a.. a...
    echo zero | tee a/zero | tee z
    echo one | tee a./one | tee z.
    echo two | tee a../two | tee z..
    echo three | tee a.../three | tee z...

    PyCharm Community 2020.2, CMD, PowerShell 7.0.2, python 3.8.5, Notepad++ v7.8.8
    a == a. != a.. != a...
    z == z. == z.. == z...

    Total Commander 9.22a
    a == a. != a.. != a...
    z != z. != z.. != z...

    explorer[.]exe tree[.]com
    a == a. == a.. == a...
    z == z. == z.. == z... (也许)

    WSL1, VSCodium
    a != a. != a.. != a...
    z != z. != z.. != z...

    顺便,上述中 PyCharm 可能蕴含了 Java 访问文件系统的方式,VSCodium 可能蕴含了 node 访问文件系统的方式。
    shijingshijing
        46
    shijingshijing  
       2020-11-09 10:34:51 +08:00
    可以使用 file 查看文件类型:

    file bash_rc
    file xxx.iso
    boris93
        47
    boris93  
       2020-11-09 10:34:53 +08:00 via Android
    后缀名只是文件名的一部分,只是一个助记符,它什么都代表不了
    也不存在什么系统的默认后缀
    文件类型,由文件头决定
    no1xsyzy
        48
    no1xsyzy  
       2020-11-09 10:39:35 +08:00
    @msg7086 我记得 Git bash 是 MSYS2,试了下确实可以……
    顺便看下 #45 吧…… 各种实在是太诡异了……
    经典框架还缺个 Qt,但我不记得有什么 Qt 的文件查看器了

    当初 win98 explore 的表现为 a == a. != a.. 的时候,我拿来电脑课上藏游戏
    因为电脑教室很多人用,游戏存档会被别人动
    所以我就藏了一份自己的……
    地址栏直接输入 D:\a..\ 就能进隐藏文件夹了,D:\ 下面看不到 a..,只能看到 a.(尽管我并没有新建 a.,但自动产生了)
    onice
        49
    onice  
       2020-11-09 10:42:41 +08:00
    linux 下的文件没有后缀。系统不使用后缀来辨别文件是何种类型。linux 下只有文本文件和二进制文件。
    msg7086
        50
    msg7086  
       2020-11-09 10:46:49 +08:00
    @no1xsyzy Windows 下处理后缀点有毒,没办法了。
    因为 8.3 时代的后缀点加不加是等效的,所以应该会有一定的处理逻辑在里面,解决一些历史遗留问题。
    Xusually
        51
    Xusually  
       2020-11-09 10:54:55 +08:00
    i@mac ~ % uname -a
    Darwin [email protected] 19.6.0 Darwin Kernel Version 19.6.0: Thu Oct 29 22:56:45 PDT 2020; root:xnu-6153.141.2.2~1/RELEASE_X86_64 x86_64
    i@mac ~ % touch 我就是没有后缀
    i@mac ~ % touch 我有.后缀
    i@mac ~ % ls | grep 后缀
    我有.后缀
    我就是没有后缀
    Jooooooooo
        52
    Jooooooooo  
       2020-11-09 11:00:51 +08:00
    没后缀

    linux 没有后缀这个概念
    Mac
        53
    Mac  
       2020-11-09 11:05:26 +08:00
    @Xusually #51 一脸懵逼进来,一脸懵逼出去。。。
    yws112358
        54
    yws112358  
       2020-11-09 11:11:40 +08:00
    你说的后缀 叫做:扩展名 是方便关联(或使用户快速识别)执行程序用的 完全可以没有扩展名,手动选择某程序来打开。
    mtdhllf
        55
    mtdhllf  
       2020-11-09 11:11:47 +08:00
    文件内容的格式,一般在文件的头部,名称只是帮助帮助我们辨别的标记,有没有都可以~
    yolee599
        56
    yolee599  
       2020-11-09 11:28:58 +08:00
    文件类型不是取决于后缀,都是被 win 惯的
    ppphp
        57
    ppphp  
       2020-11-09 11:35:02 +08:00
    桌面程序会看后缀判断文件类型,比如各种文件管理器,比如命令行里 mac 和 windows 的 open,linux 的 xdg-open,当然楼主问得出这个问题估计也不太懂这个。。。
    JeffGe
        58
    JeffGe  
       2020-11-09 11:35:31 +08:00 via Android
    一个人默认的姓名是中文、英文、日文还是其它语言?
    Cielsky
        59
    Cielsky  
       2020-11-09 11:36:45 +08:00 via Android
    后缀是给人看的,有没有都无所谓。
    前段时间才有人问过搜一下也找到了
    solider245
        60
    solider245  
    OP
       2020-11-09 11:50:35 +08:00
    @JeffGe 看完大家回复,感觉还是没理解啊,就用你的取名为例好了 。
    一个孩子出生了,那我们大家给他取名字,有名字的娃娃等于有后缀。现在是,生了一个娃,没名字那叫他什么?
    回到 Linux,我创建了一个文件,可以根据文件的内容来定义他属于哪种文件。那么,当我创建了一个文件,这个文件默认是什么文件呢?或者是 txt 还是啥?

    @ppphp 我知道啊,我的意思是,单纯创建了一个文件,写入几行内容,这个文件叫什么文件?

    @mtdhllf 还是那句话,我创建了一个文件,写了几行内容,这个文件叫什么文件?
    zbl430
        61
    zbl430  
       2020-11-09 11:53:50 +08:00
    ```
    $ file 新建空文件
    新建空文件: ASCII text
    ```
    solider245
        62
    solider245  
    OP
       2020-11-09 11:54:39 +08:00
    @shijingshijing 这么多回答发现你就的靠谱。
    问题解决了,自己回答自己好了。
    1. 单独创建一个文件不写内容,文件类型是 empty
    2. 写入内容后,文件类型是 abb.md: ASCII text
    pepesii
        63
    pepesii  
       2020-11-09 11:58:24 +08:00
    后缀格式只是通过名字让你知道这个文件大概是啥格式的,它只是一个 label,有可能一个文件是 a.pdf,但是实际上它是一个 elf 的文件格式;
    你可以通过 file 命令来查看一个是什么类型的文件
    Lemeng
        64
    Lemeng  
       2020-11-09 11:58:26 +08:00
    linux 没有这么讲究吧,都是 win 里面的概念
    codehz
        65
    codehz  
       2020-11-09 12:00:13 +08:00
    @solider245 #60 就叫 “普通文件”
    就像你写下一个数字 0,请问它代表什么意义?
    你写了几行内容,这说明对于你来说,是当作一个文本文件的,那它就是文本
    也可以把它送到音频设备 /dev/audio 里,然后你得到了一个音乐(虽然不一定好听)
    你也可以把它送到视频缓冲设备 /dev/fb0 里,然后你得到了一个图片(虽然不一定好看)
    问题来了,它到底是什么呢?
    tairan2006
        66
    tairan2006  
       2020-11-09 12:00:29 +08:00
    @solider245 你想问的是默认文件类型是啥…
    mtdhllf
        67
    mtdhllf  
       2020-11-09 12:00:34 +08:00
    JeffGe
        68
    JeffGe  
       2020-11-09 12:01:00 +08:00 via Android
    @solider245 这个文件就叫文件,是什么内容取决于你写入什么内容,名字叫什么取决于你给这个文件起的什么名字,文件是什么后缀取决于你起名给它什么后缀。听起来像废话,可是你问的问题就是这样的……
    hello2060
        69
    hello2060  
       2020-11-09 12:01:49 +08:00
    @solider245 回到 Linux,我创建了一个文件,可以根据文件的内容来定义他属于哪种文件。那么,当我创建了一个文件,这个文件默认是什么文件呢?或者是 txt 还是啥?---- 是什么文件取决于文件的内容,你问默认什么文件等于问默认什么内容,有默认内容吗?

    写了几行内容是啥文件?取决于你写了啥啊,vi 还能二进制编辑呢,完全可以写个 mp4 exe 出来啊
    tairan2006
        70
    tairan2006  
       2020-11-09 12:02:04 +08:00
    然而并没有默认文件类型,file 命令是猜的
    Huelse
        71
    Huelse  
       2020-11-09 12:02:11 +08:00
    后缀只是给用户态看的,内核态只相信文件头

    默认是两者要相统一,虽然有的时候可以不遵守
    solider245
        72
    solider245  
    OP
       2020-11-09 12:07:13 +08:00
    @tairan2006 没有类型也是一种类型啊,不可能凭空创造一种文件。按你的说法,就是创建了一个没有类型的文件
    icyalala
        73
    icyalala  
       2020-11-09 12:08:15 +08:00   ❤️ 7
    大家发现好不容易有个谁都懂的问题,赶紧纠正楼主。
    楼主没有被大家带走,继续用原有思维解释,并且认为问题解决了🤣
    CEBBCAT
        74
    CEBBCAT  
       2020-11-09 12:15:49 +08:00 via Android
    为什么要在这种帖子上浪费时间…完全不值得,这个帖子甚至应该被移到其他节点
    wizardoz
        75
    wizardoz  
       2020-11-09 12:18:37 +08:00
    后缀对 linux 不重要,在 linux 上,文件后缀的唯一用途是给人看。
    codehz
        76
    codehz  
       2020-11-09 12:22:04 +08:00 via Android   ❤️ 1
    我觉得楼主可能是类比 windows 新建文件菜单了
    ( windows 下右键新建文件可以选择多种类型是因为程序预先设定了空文件模板)
    但是模板纯粹是认为设定的,如果认为文件必须要有模板才能创建,那就大错特错了,这只是为了用户体验设计的一个功能,不代表这就是新建文件的唯一方法。
    如果说新建文件存在一个默认类型,那它就是“普通文件”类型
    这是唯一能对应的文件类型,除此之外,还有“文件夹类型”,“设备文件”,“管道文件”等特殊文件类型,但是他们大概不符合新建的语义。。。
    icyalala
        77
    icyalala  
       2020-11-09 12:27:25 +08:00   ❤️ 1
    @solider245 file 命令只是根据文件头猜测一个可能的类型。
    比如你试试 echo "gpch1234" >> test.md
    看看 file 命令输出什么?看看和你想的不一样吧?

    你所说的那个 "类型" 或者 "格式" 不是一个明确的概念或者固有属性。
    k9982874
        78
    k9982874  
       2020-11-09 12:30:01 +08:00
    哈哈哈哈哈哈 嗝~~~~
    solider245
        79
    solider245  
    OP
       2020-11-09 12:32:55 +08:00
    @codehz 普通文件是一个什么文件呢?就叫普通文件吗?
    @icyalala 试了下,果然和你说的一样。那这样说的话,那文件就是文件?
    fiveelementgid
        80
    fiveelementgid  
       2020-11-09 12:35:11 +08:00 via Android
    答:Linux 文件不需要后缀格式,Linux 系统用文件头(file 命令?)来识别文件格式

    我怀疑你在钓鱼
    codingadog
        81
    codingadog  
       2020-11-09 12:38:23 +08:00 via Android
    @solider245 名字是文件名,人种才是后缀
    你可以叫一个白人.黑人也可以叫一个黑人.白人
    但到底是啥人是 dna,也就是文件内容本身决定的。
    GuuJiang
        82
    GuuJiang  
       2020-11-09 12:39:25 +08:00 via iPhone   ❤️ 1
    file 命令输出的“类型”严格说起来应该叫作“文件内容”的类型,而不是文件本身的一个属性,从你上面的回复看显然把它当成文件本身的一个属性了,这就是你无法理解以上所有回复的原因所在,你可以理解为文件本身只是一个容器,你往里写入 mp3 的内容,file 命令就有可能输出 mp3,往里写入 jpg 的内容,file 命令就有可能输出 jpg,之所以说可能,是因为 file 命令只是一种探测,有可能出现误判
    题外话:这个帖子生动地证明了在 XY 问题中说出 X 问题的重要性
    codehz
        83
    codehz  
       2020-11-09 12:41:13 +08:00 via Android
    @fiveelementgid file 其实是猜测,而且也只是用户空间用(而且也可能扫描整个文件),内核是验证可执行文件的头部。

    @solider245 区别与
    目录文件
    字符设备文件
    块设备文件
    本地 socket 文件
    命名管道文件
    符号链接文件

    之所以这么说,是因为创建文件的方法只能创建出普通文件。 。。(文件夹得 mkdir,设备文件 mknod,管道 mkfifo,socket 是 bind,符号链接 symlink,普通文件 open )
    普通文件下的细分系统是不管的,除非文件开头几个字节命中一些特殊的魔法数字
    nthhdy
        84
    nthhdy  
       2020-11-09 12:41:14 +08:00
    操作系统层面,文件名可以没有后缀。后缀是给应用程序和人用的。
    比如编辑器遇见 .c 后缀一般就认为是 c 代码,编写完 c 代码一般也保存为 .c 后缀(但是不论读取还是保存,不用 .c 后缀也没关系)。

    所以楼主看看自己说的是哪个应用程序,操作的是什么文件,用来干什么的。再了解一下那个应用程序对后缀有什么要求,有什么操作。
    codehz
        85
    codehz  
       2020-11-09 12:47:40 +08:00 via Android
    @nthhdy 还是有点关系,常见编译器会根据文件后缀来判断语言,写.c 和.cpp/.mm 是不一样的解析模式( gcc 也可以编译 c++,只是不会链接 stdc++库)
    aqqwiyth
        86
    aqqwiyth  
       2020-11-09 13:04:12 +08:00
    大家上面讨论的 file 命令 其实是取 文件的魔数, 比如 java 编译后的 class 文件的魔数就是 CAFE BABE. linux 上有一个魔数映射表.

    windows 上是一个可视化交互式的操作系统为了把文件跟应用程序绑定弄的一个便捷操作. (应用可以向系统注册表写入 xx 后缀的文件打开)

    场景 1: 你把一个 zip 文件的后缀去掉,再打开操作系统也是会询问你用什么应用打开.
    场景 2: 你下载了一个种子文件,但是你没有装任何解析种子 的应用. 操作系统会询问你用什么应用打开.


    linux 上没有应用程序这一说,所以不存在什么后缀.只是人为的记忆习惯配置后缀.
    12101111
        87
    12101111  
       2020-11-09 13:16:42 +08:00
    no1xsyzy
        88
    no1xsyzy  
       2020-11-09 13:18:28 +08:00   ❤️ 1
    @solider245 再看 https://www.v2ex.com/t/713957#r_9608004

    另外,问这个文件是什么类型:
    ```
    #>>>>>>>>v
    print(1)#>3N.i2
    ```
    它既是一个合理的 python 源文件,也是合理的 Vim ( V 语言)源文件,也是合理的 Minkolang 源文件
    并且,作为 python 源文件,它输出 1,Vim ( V 语言)输出 2,Minkolang 输出 3
    请问它是什么类型?

    更别说古老的隐写术
    “右击本图片另存为,修改后缀名为 rar,即可得到种子文件”
    核心在于,图片基本是文件头定长,RAR 文件依赖于 RAR! 头,所以只要 cat a.jpg b.rar > c.jpg 可以简单方便地内插出一个既是 jpg 又是 rar 的文件。
    solider245
        89
    solider245  
    OP
       2020-11-09 13:36:59 +08:00
    @nthhdy 问题就是那个软件创建的文件就是没有后缀的,类似在 linux 上创建的默认文件
    wdspro
        90
    wdspro  
       2020-11-09 14:02:48 +08:00
    @qinyusen 受益匪浅呀 想追问 ios 下的设计哲学又是什么样子的
    cmdOptionKana
        91
    cmdOptionKana  
       2020-11-09 14:05:26 +08:00
    @solider245 你说 “不可能凭空创造一种文件”,错。

    1. 可以凭空创造一种文件。
    2. Windows 和 Linux 都可以凭空创造一种文件。
    3. 任何人(懂编程的,不懂编程的)都可以凭空创造一种文件。
    4. 事实上一切文件类型都是凭空创造的,包括 word 文件、excel 文件、jpeg 文件等等,都是凭空创造的。
    5. 创造 word 文件、excel 文件、jpeg 文件的过程,与你现在凭空创造另一种全新的文件类型的过程,本质上是一样的,只是复杂度不同,没有本质区别(步骤也是一样的)。
    mtdhllf
        92
    mtdhllf  
       2020-11-09 14:20:27 +08:00
    很多的人回答都有问题,没有 get 到点,回答的也对不上楼主的意思。很多文件数据都是有文件头的,声明了文件类型,还有一些媒体信息等(不同的格式有不同的规范),如 mp4,mkv 等媒体文件,在 windows 下属性--详细信息可以查看时长帧率等数据
    tairan2006
        93
    tairan2006  
       2020-11-09 14:29:20 +08:00
    文件头只是一种约定,就是 Magic Number 。为啥不能凭空创建类型?感觉我在浪费时间,算了 block 这个帖子。
    lingxi27
        94
    lingxi27  
       2020-11-09 14:31:51 +08:00
    考虑你提问的上下文,可以不太严谨地说,文件就是二进制文件,通过某种文件系统保存于某种存储介质,其具体的“类型”是由使用者决定的
    letking
        95
    letking  
       2020-11-09 14:33:03 +08:00
    没有默认后缀名,你起什么名字就是什么名字。touch 1.exe 也不会有任何问题。
    Kagari
        96
    Kagari  
       2020-11-09 14:41:43 +08:00
    简单的说,文件名没有存在文件里面
    hxmg
        97
    hxmg  
       2020-11-09 15:11:15 +08:00 via Android
    这么说吧,后缀其实是文件名的一部分。
    你自己手动 touch 一个文件出来,
    ##有没有后缀取决于你##。

    后缀这玩意主要是方便人的。就好像是你给一个压缩包取名“2020 年我钓到的鱼图集.rar”
    维基百科:
    文件扩展名更重要的作用是让系统决定当用户想打开这个文件的时候用哪种软件运行,如 Windows 系统中 exe 档案是可执行档,doc 档案默认用 Microsoft Word 打开的 Word 文件。

    还有,文件格式取决于其二进制内容符合哪些格式的表达标准,和后缀没关系
    cco
        98
    cco  
       2020-11-09 15:17:05 +08:00
    linux 所有皆文件。和后缀没关系。
    chinvo
        99
    chinvo  
       2020-11-09 15:24:17 +08:00
    生娃的例子不对

    正确的例子是, 有一个生物, 你知道他是个生物, 他就是个生物, 他既可以是人, 也可以是狗子

    你不是生了个娃, 你是神, 你造了个生物
    Alexhex
        100
    Alexhex  
       2020-11-09 16:57:54 +08:00
    呃,或者这么问这个问题呢?

    在 Windows 下或者 Linux 下,当你试图双击某个文件打开的时候,到底发生了什么?系统是以一种什么方式访问某段硬盘数据并调用某个程序打开的?
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4069 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 05:29 · PVG 13:29 · LAX 21:29 · JFK 00:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.