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

centos7 中明明就有文件存在,但操作时却显示 No such file or directory

  •  
  •   Geekgogo · 2018-08-20 11:28:02 +08:00 · 47158 次点击
    这是一个创建于 2319 天前的主题,其中的信息可能已经有所发展或是发生改变。

    搞不懂是什么情况,有大佬帮忙看看嘛? 如图 1

    第 1 条附言  ·  2018-08-21 09:22:22 +08:00

    统一回复一下大家: 非常抱歉我的问题没有描述仔细,问题应该是出在docker容器上面,具体原因最后也没找到,因为急着解决就重新做了一个容器。感谢大家百忙之中抽空回复。

    61 条回复    2022-10-18 10:44:51 +08:00
    zlkent
        1
    zlkent  
       2018-08-20 11:33:07 +08:00   ❤️ 1
    chmod 777 ./92
    Oi0Ydz26h9NkGCIz
        2
    Oi0Ydz26h9NkGCIz  
       2018-08-20 11:33:57 +08:00
    权限
    wenzhoou
        3
    wenzhoou  
       2018-08-20 11:35:40 +08:00 via Android
    大概是有不可见字符吧
    Geekgogo
        4
    Geekgogo  
    OP
       2018-08-20 11:42:35 +08:00
    @zlkent 试过了,一样的
    @aruisi 应该没什么权限问题吧?我用的是 root 用户
    openbsd
        5
    openbsd  
       2018-08-20 11:43:49 +08:00
    输入文件名时坚持用自动补全,这样可以避免很多问题
    Geekgogo
        6
    Geekgogo  
    OP
       2018-08-20 11:43:56 +08:00
    @wenzhoou 该如何检测呢? 92 这个目录是明显能看到的,但是对它以及它的子目录操作的话就报找不到的错误
    Geekgogo
        7
    Geekgogo  
    OP
       2018-08-20 11:45:36 +08:00
    @openbsd 可以补全的
    neoblackcap
        8
    neoblackcap  
       2018-08-20 11:47:32 +08:00
    @Geekgogo 你试试先重命名看看
    billwsy
        10
    billwsy  
       2018-08-20 11:52:57 +08:00 via iPad
    92 带了颜色?
    littleylv
        11
    littleylv  
       2018-08-20 11:53:51 +08:00
    很明显 92xxxxxx 那个文件跟 92 目录是在同一个目录里的
    应该是 ls 92xxxxxxxxx
    而不是 ls 92/92xxxxxxxxx
    littleylv
        12
    littleylv  
       2018-08-20 11:55:37 +08:00
    你 chmod 777 92 按下 tab 的时候出现 2 个可选项( 92/ 和 92xxxxxxxx ), 这两个就是在同一目录的
    你文件放错目录了 8 mv 92xxxxx 92/ 先
    meowoo
        13
    meowoo  
       2018-08-20 11:55:48 +08:00 via iPhone
    文件夹是你自己创建的么 可能设置了不可写 试试 chattr 加一下权限
    Geekgogo
        14
    Geekgogo  
    OP
       2018-08-20 11:56:06 +08:00   ❤️ 1
    @billwsy @littleylv 92 是一个目录,这个目录还有一个 92xxxxxxxxxx 的文件
    liaohongxing
        15
    liaohongxing  
       2018-08-20 11:57:10 +08:00
    同样的命令 ubuntu server 16.04 lts 没有问题。
    billwsy
        16
    billwsy  
       2018-08-20 11:57:13 +08:00 via iPad
    运行一下 ls -la | less 看看有没有异样?
    Geekgogo
        17
    Geekgogo  
    OP
       2018-08-20 11:59:15 +08:00
    @littleylv 跟 92 这个目录同一级有一个 92yyyyyy 的文件,92 目录下还有一个 92xxxxxx 的文件,我的目的是把 92yyyyy 这个文件移动到 92 目录下,但是不管是 mv,mkdir,cp,touch,chmod 等等操作都在报 not such file or directory
    littleylv
        18
    littleylv  
       2018-08-20 12:02:02 +08:00
    @Geekgogo #14 哦我看错了,确实 92/ 的时候能 tab 出来 确实 92 里面也有 92xxxx 文件
    disk
        19
    disk  
       2018-08-20 12:08:46 +08:00 via Android
    用-i 把 inode 列出来进行操作行吗?
    DANG
        20
    DANG  
       2018-08-20 12:34:16 +08:00
    用绝对路径试试吧
    KeepPro
        21
    KeepPro  
       2018-08-20 12:55:06 +08:00   ❤️ 1
    jimages
        22
    jimages  
       2018-08-20 13:03:14 +08:00 via iPhone
    selinux 关掉
    est
        23
    est  
       2018-08-20 13:09:02 +08:00
    有可能你当前路径已经被删了。先 cd ~ 或者 cd / 退回到一个存在的目录。
    tonzeng
        24
    tonzeng  
       2018-08-20 13:13:26 +08:00
    pwd
    zjsxwc
        25
    zjsxwc  
       2018-08-20 13:22:36 +08:00
    起码发下` ls -la 92 ` 结果,让我们知道你文件当前的权限类型啊
    tatelucky
        26
    tatelucky  
       2018-08-20 14:10:08 +08:00
    ls -all
    skylancer
        27
    skylancer  
       2018-08-20 14:29:39 +08:00   ❤️ 1
    神特么关 SELinux
    lcdtyph
        28
    lcdtyph  
       2018-08-20 14:38:29 +08:00
    感觉是 chmod 的问题?
    chmod 有 alias 吗, `alias | grep chmod` 看看输出。
    还有把 92 换成绝对路径试试。
    ryd994
        29
    ryd994  
       2018-08-20 15:15:28 +08:00 via Android
    看看 dmesg 有没有相关信息
    不排除文件系统损坏,有试过 fsck 么?
    #23 说的情况完全有可能。文件删除后,inode 要等到所以 fd 关闭后才回收

    @zlkent
    @jimages 碰到问题就 777 或者关 SELinux 是不懂 rtfm 还误导他人
    如果是普通权限问题,那应该是 permission denied
    如果是 SELinux,可以 audit 日志,或者换成 permissive 再 audit,确认问题后再改回 enforce
    zlkent
        30
    zlkent  
       2018-08-20 15:21:37 +08:00
    @ryd994 #29 楼主的命令打的是 chmod 777 92 提示错误,我按他写改成 chmod 777 ./92。只是加了./而已,误导谁了?
    b821025551b
        31
    b821025551b  
       2018-08-20 15:31:44 +08:00   ❤️ 1
    ryd994
        32
    ryd994  
       2018-08-20 15:41:05 +08:00 via Android
    @zlkent 我道歉,喷错了
    catror
        33
    catror  
       2018-08-20 15:47:38 +08:00
    直觉是文件系统的问题
    xaviermoon
        34
    xaviermoon  
       2018-08-20 15:56:32 +08:00
    ldd 查看下,应该是少动态库的问题
    jimages
        35
    jimages  
       2018-08-20 16:04:23 +08:00 via iPhone
    @ryd994 关 selinux 是检查是不是 selinux 造成的权限错误…你说那么复杂…再加上 selinux 的配置本来就很复杂…先确定是不是 selinux 的问题再来确定该如何配置是不是对于新手来说是不是更加通俗易懂?
    jimages
        36
    jimages  
       2018-08-20 16:19:14 +08:00
    @skylancer
    @ryd994
    第一,为啥要直接关掉 selinux,看样子应该 linux 操作不是特别熟练,而且既然找不到问题的原因,是不是应该先找到问题的来源?关掉 selinux 就是先找到问题的来源,确定了是什么问题再来着手修复,你说了半天,还要让人家 audit.log 来找错误,还得把日志得看明白是不是让人家觉得望而生畏?是不是测试服务或者开发服务器都得把安全设置做好?比如,你要帮小白修电脑垃圾,你是觉得让人家装一个 360 直接清理垃圾,还是让人家去 CClean 下载安装软件,然后手把手教人家用软件,还是让他在一大坨 windows 设置找到系统自带的清理电脑的设置?
    第二,我确实不想多打字,没有说清楚,如果 LZ 反馈关掉 selinux 之后问题解决了我们再说后续的设置的问题,这样是不是能够快速排查掉是不是 selinux 的锅?至少不用纠结是不是 selinux 的问题。
    第三,你说的那么多命令,人家不会用怎么办?那你得教会人家用咯,而且人家是做开发不是做运维,为啥一定要把大把的时间经历放在代码以外的地方?
    第四,生产服务器一定要在评估影响之后再去修改安全和权限相关的问题。
    alen
        37
    alen  
       2018-08-20 16:32:15 +08:00
    试试管道
    iwaifor
        38
    iwaifor  
       2018-08-20 17:06:41 +08:00
    这个是容器环境么
    yezhiye
        39
    yezhiye  
       2018-08-20 17:38:50 +08:00 via Android
    怎么没人说开放 ssh 让我连上去啊😏
    PulpFunction
        40
    PulpFunction  
       2018-08-20 17:55:39 +08:00
    tree 看一下啊
    PulpFunction
        41
    PulpFunction  
       2018-08-20 17:56:57 +08:00
    demo 下 tree 一下 不就完事了?
    不就美滋滋?
    cnrting
        42
    cnrting  
       2018-08-20 18:48:30 +08:00 via iPad
    严重怀疑有不可见字符
    wenzhoou
        43
    wenzhoou  
       2018-08-20 19:13:34 +08:00 via Android
    @Geekgogo ls -b 的结果是什么样的?
    kaneg
        44
    kaneg  
       2018-08-20 19:20:37 +08:00 via iPhone
    根据你的主机名来看,这应该是个 docker 容器。我碰到过类似的问题,同一个 image 在不同的 docker 主机上创建出来,在 ubuntu 上创建出来的一切正常,而在 centos 上创建出来的文件用 rm -rf 删不掉,删完用 ls 会出现一堆问好。

    到现在也没有查到具体原因,最后放弃 centos
    webjin1
        45
    webjin1  
       2018-08-20 20:14:55 +08:00 via Android
    lsattr -l 看看权限
    realityone
        46
    realityone  
       2018-08-20 20:53:43 +08:00
    你用的是不是 overlayfs
    raysonx
        47
    raysonx  
       2018-08-20 22:04:13 +08:00 via iPad
    看楼主贴的主机名像是 docker 环境,如果是的话,这个目录是在 image 里还是挂载的 volume ?哪种类型的 volume ?
    建议也发一下 docker info 的输出和 docker inspect 容器名 的输出。
    tangweihua163
        48
    tangweihua163  
       2018-08-20 22:28:53 +08:00
    @b821025551b 你是在逗我么?
    shanks
        49
    shanks  
       2018-08-20 22:48:13 +08:00
    感觉是文件系统层面的问题
    lfzyx
        50
    lfzyx  
       2018-08-20 23:01:15 +08:00
    丨丨丨

    你看得出我输入的是啥么
    v2lf
        51
    v2lf  
       2018-08-20 23:16:28 +08:00
    是不是使用的 windows linux 子系统- - 我今天也碰到这个问题了
    zyqf
        52
    zyqf  
       2018-08-21 01:10:34 +08:00 via Android
    推测可能是软链,对应文件被删,但软链的文件是可以存在的,但实际对这个软链操作都是无效的,因为实际文件不存在。个人推测。
    ryd994
        53
    ryd994  
       2018-08-21 01:33:23 +08:00 via Android
    @zyqf 如果是这样的话,ls -l 会显示链接目标
    msg7086
        54
    msg7086  
       2018-08-21 01:43:24 +08:00
    @lfzyx gun
    wuweidong0107
        55
    wuweidong0107  
       2018-08-21 07:44:07 +08:00
    先用 strace 命令看一下是哪一个系统调用返回的没有权限。
    Geekgogo
        56
    Geekgogo  
    OP
       2018-08-21 09:16:39 +08:00
    @kaneg 应该跟你一样的情况,镜像的问题。找不到原因,最后重做了一个
    Geekgogo
        57
    Geekgogo  
    OP
       2018-08-21 09:18:03 +08:00
    @wenzhoou docker 容器的问题,也不知道什么原因,着急着解决就重做了一个容器。出问题的已经删掉了
    Geekgogo
        58
    Geekgogo  
    OP
       2018-08-21 09:18:57 +08:00
    @jimages 辛苦你打那么多字了,确实跟 selinux 没关系,是 docker 容器的问题
    alen
        59
    alen  
       2018-08-21 09:28:27 +08:00
    docker 容器里把原本镜像文件夹或文件删除了,然后操作就会出现。
    skylancer
        60
    skylancer  
       2018-08-21 09:32:12 +08:00
    @jimages
    1. 卤煮操作的文件 99%不会是 SELinux 导致的问题,不是跟系统相关的东西我想不到上来就直奔 SELinux 的理由
    2. 开 Permissive 看 aduit 更容易看出来是不是 SELinux context 的问题
    zjsegzhf
        61
    zjsegzhf  
       2022-10-18 10:44:51 +08:00
    @xaviermoon 感谢,我遇到了类似的问题。
    最后检查了是缺少了动态库。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3021 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 13:54 · PVG 21:54 · LAX 05:54 · JFK 08:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.