成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么 Shell 腳本一經(jīng)過(guò) Windows,執(zhí)行權(quán)限就神秘消失?

系統(tǒng)
本文我們將踏上一場(chǎng)揭開(kāi)操作系統(tǒng)底層秘密的偵探之旅。這篇文章,將帶你從現(xiàn)象到本質(zhì),徹底終結(jié)這個(gè)困擾。

今天被這個(gè)坑了,寫下來(lái)總結(jié)一下。

嘿,各位在代碼世界中探索的朋友們!

你是否經(jīng)歷過(guò)這樣一個(gè)令人百思不得其解的場(chǎng)景:

在你的 Linux 開(kāi)發(fā)機(jī)上,你精心撰寫了一個(gè) shell 腳本,賦予它 chmod +x 的神力,它執(zhí)行起來(lái)如臂使指,一切盡在掌握。然后,你只是想把這個(gè)腳本交給同事,于是順手把它拖到了 Windows 共享目錄,或是用 U 盤中轉(zhuǎn)了一下。

然而,當(dāng)這個(gè)腳本在新家的 Linux 系統(tǒng)上準(zhǔn)備大展拳腳時(shí),卻被無(wú)情地拒之門外:

bash: ./your_script.sh: Permission denied

你 ls -l 一看,原本 rwxr-xr-x 的赫赫神功,竟變成了 rw-r--r-- 的平庸之輩。你不禁仰天長(zhǎng)嘆:"我的執(zhí)行權(quán)限去哪了?難道文件內(nèi)容在旅途中被 Windows 修改了?"

如果你曾有過(guò)這樣的疑惑,那么恭喜你,你即將踏上一場(chǎng)揭開(kāi)操作系統(tǒng)底層秘密的偵探之旅。這篇文章,將帶你從現(xiàn)象到本質(zhì),徹底終結(jié)這個(gè)困擾。

第一章:初步偵查 —— 文件內(nèi)容真的被修改了嗎?

在深入調(diào)查之前,我們要先排除一個(gè)最大的嫌疑。很多人的第一直覺(jué)是:"我的文件肯定被 Windows'動(dòng)過(guò)手腳'了!"

這里,我可以給你一個(gè)斬釘截鐵的答案:沒(méi)有!

你的文件內(nèi)容,從 #!/bin/bash 到最后一個(gè)字符,一個(gè)字節(jié)都沒(méi)有變。你可以用 md5sum 或 diff 等工具來(lái)驗(yàn)證,你會(huì)發(fā)現(xiàn)從 Linux 出發(fā)的和歷經(jīng)滄桑歸來(lái)的文件,其內(nèi)容 (Content) 完全一致。

那么,如果內(nèi)容沒(méi)變,丟失的到底是什么?

這引出了我們理解整個(gè)問(wèn)題的核心概念,也是本次探案的第一個(gè)關(guān)鍵線索。

關(guān)鍵線索 #1:文件內(nèi)容 ≠ 文件屬性

為了讓你秒懂這個(gè)概念,我們來(lái)建立一個(gè)貫穿全文的比喻:

一個(gè)文件,就像一本書(shū)。它由兩部分組成:"書(shū)的內(nèi)容"和附帶的"圖書(shū)卡"。

  • 書(shū)的內(nèi)容 (Content):就是文件里存儲(chǔ)的代碼、文字、圖片等二進(jìn)制數(shù)據(jù)。這是文件的靈魂。
  • 圖書(shū)卡 (Metadata):這是一張記錄關(guān)于這本書(shū)信息的卡片,比如書(shū)名(文件名)、作者(所有者)、出版日期(修改時(shí)間),以及一個(gè)至關(guān)重要的東西——一個(gè)代表身份和權(quán)限的特殊印章。

在這個(gè)比喻里,可執(zhí)行權(quán)限 (+x)就是蓋在這張圖書(shū)卡上的一個(gè)紅色印章。

有了這個(gè)概念,我們?cè)賮?lái)看看那趟致命的 Windows 之旅到底發(fā)生了什么。我將用三張圖為你分解這個(gè)過(guò)程:

第一站:在 Linux 起點(diǎn),一切安好

在源頭的 Linux 系統(tǒng)上,你的腳本文件和它的"圖書(shū)卡"(元數(shù)據(jù))是完美配對(duì)的。圖書(shū)卡上清晰地蓋著"可執(zhí)行"的印章。

第二站:在 Windows 中轉(zhuǎn),信息丟失

當(dāng)你將文件復(fù)制到 Windows 系統(tǒng)時(shí),Windows 只認(rèn)識(shí)"書(shū)的內(nèi)容",但完全無(wú)法理解 Linux 的"圖書(shū)卡"格式。于是,它只保留了內(nèi)容,而將帶有關(guān)鍵權(quán)限印章的圖書(shū)卡無(wú)情地拋棄了。

第三站:在 Linux 目的地,被賦予新身份

當(dāng)這個(gè)只有"內(nèi)容"的文件回到一個(gè)新的 Linux 環(huán)境時(shí),系統(tǒng)發(fā)現(xiàn)它沒(méi)有"圖書(shū)卡",于是就按照默認(rèn)的規(guī)則,給了它一張全新的、空白的卡片。這張新卡片上,自然沒(méi)有"可執(zhí)行"的印章。

真相大白: 文件并未"武功全廢",只是它的"武功秘籍認(rèn)證"(元數(shù)據(jù))在旅途中遺失了。

第二章:深入追查 —— 文件究竟由什么組成?

"原來(lái)是圖書(shū)卡丟了!"你恍然大悟。但要真正理解為什么會(huì)丟失,我們需要更進(jìn)一步,揭開(kāi) Linux 系統(tǒng)下文件構(gòu)成的真實(shí)面貌。拋開(kāi)比喻,一個(gè)文件在磁盤上到底是如何存儲(chǔ)的?

在 Linux 文件系統(tǒng)(如 ext4)中,一個(gè)我們所認(rèn)知的文件,其信息被分散在三個(gè)關(guān)鍵部分:目錄項(xiàng) (Directory Entry)、索引節(jié)點(diǎn) (Inode) 和 **數(shù)據(jù)塊 (Data Blocks)**。讓我們逐一了解這三部分:

1. 目錄項(xiàng) (Directory Entry) —— 文件的"名片"

目錄項(xiàng)是最容易理解的部分。它就像是文件在系統(tǒng)中的"名片",包含文件名和一個(gè)指向其"身份證"的鏈接。

重要的是,目錄本身也是一個(gè)文件!它的內(nèi)容就是一個(gè)表格,記錄著該目錄下所有文件的名稱和對(duì)應(yīng)的 Inode 編號(hào)。當(dāng)你執(zhí)行 ls 命令時(shí),系統(tǒng)就是讀取這個(gè)目錄文件的內(nèi)容。

2. 索引節(jié)點(diǎn) (Inode) —— 文件的"身份證"

Inode 是我們前面比喻中的"圖書(shū)卡"。每個(gè)文件都有一個(gè)唯一的 Inode,它存儲(chǔ)了文件的所有元數(shù)據(jù)(除了文件名)。

注意看:文件權(quán)限信息 rwxr-xr-x 就存儲(chǔ)在 Inode 中。這就是為什么當(dāng)文件通過(guò)不支持 Inode 的系統(tǒng)(如 Windows)傳輸時(shí),權(quán)限會(huì)丟失。

3. 數(shù)據(jù)塊 (Data Blocks) —— 文件的"實(shí)際內(nèi)容"

數(shù)據(jù)塊存儲(chǔ)的是文件的真正內(nèi)容。對(duì)于我們的腳本來(lái)說(shuō),就是從 #!/bin/bash 開(kāi)始的所有代碼。

大文件的內(nèi)容可能會(huì)分散在多個(gè)數(shù)據(jù)塊中,Inode 會(huì)保存指向所有這些塊的指針。

4. 三者之間的關(guān)系:按圖索驥

現(xiàn)在,讓我們看看這三部分是如何協(xié)同工作的:

當(dāng)你通過(guò)文件名訪問(wèn) myscript.sh 時(shí),系統(tǒng)的工作流程是:

  • 在當(dāng)前目錄中查找 myscript.sh 這個(gè)目錄項(xiàng)
  • 從目錄項(xiàng)中獲取其對(duì)應(yīng)的 Inode 編號(hào) (#131075)
  • 通過(guò)編號(hào)找到 Inode,檢查權(quán)限,并獲取文件元數(shù)據(jù)
  • 根據(jù) Inode 中的指針,找到并讀取數(shù)據(jù)塊,呈現(xiàn)文件內(nèi)容

現(xiàn)在,一切都清晰了:文件權(quán)限,作為元數(shù)據(jù)的一部分,牢牢地存放在 Inode 中,它和文件內(nèi)容(數(shù)據(jù)塊)是物理分離的。

當(dāng)文件被復(fù)制到 Windows 系統(tǒng)時(shí),由于 Windows 不使用 Inode 這套機(jī)制,它只能讀取并保存文件內(nèi)容(數(shù)據(jù)塊),而描述文件屬性的 Inode 信息則被完全拋棄。這就是跨系統(tǒng)后權(quán)限丟失的根本原因。

第三章:終極謎題 —— 為何 SCP 能"穿越時(shí)空"傳遞權(quán)限?

看到這里,聰明的你肯定會(huì)立即提出那個(gè)直擊靈魂的追問(wèn):

"等一下!如果權(quán)限不在文件內(nèi)容里,那為什么我用 scp 直接在兩臺(tái) Linux 之間復(fù)制,權(quán)限就不會(huì)丟失呢?scp 是如何把那張看不見(jiàn)的'圖書(shū)卡'也一并送過(guò)去的?"

這個(gè)問(wèn)題,將我們的調(diào)查引向了最高潮。答案是:scp 走的不是簡(jiǎn)單的貨物搬運(yùn),而是一個(gè)有嚴(yán)格流程的"專業(yè)信使協(xié)議"。

讓我們升級(jí)比喻:scp 的過(guò)程,是兩位專業(yè)圖書(shū)館管理員之間的一通加密電話。

我們來(lái)看看這個(gè)過(guò)程的每一步:

步驟 1:建立安全連接

首先,兩臺(tái) Linux 機(jī)器需要建立一個(gè)安全的通信渠道。

這就像兩位圖書(shū)館管理員拿起加密電話,確認(rèn)了對(duì)方的身份。

步驟 2:元數(shù)據(jù)先行

與普通文件復(fù)制不同,scp 會(huì)先傳送文件的"圖書(shū)卡"信息。

源頭管理員A說(shuō):"在寄送書(shū)本內(nèi)容之前,我先告知你這本書(shū)的圖書(shū)卡信息:它的權(quán)限是 755,修改時(shí)間是……"

步驟 3:準(zhǔn)備容器

目標(biāo)機(jī)器收到元數(shù)據(jù)后,會(huì)先創(chuàng)建一個(gè)具有正確權(quán)限的空文件。

目標(biāo)管理員B說(shuō):"好的,信息收到。我已在本地準(zhǔn)備好一個(gè)空文件,并**立刻將其權(quán)限也設(shè)置為 755**。"

步驟 4:傳輸文件內(nèi)容

只有在容器準(zhǔn)備好后,才開(kāi)始傳輸實(shí)際的文件內(nèi)容。

管理員A開(kāi)始逐字逐句地念書(shū)的內(nèi)容(傳送二進(jìn)制數(shù)據(jù))。管理員B則將這些內(nèi)容寫入剛才準(zhǔn)備好的那個(gè)帶有正確權(quán)限的空文件中。

步驟 5:完整過(guò)程對(duì)比

讓我們對(duì)比一下普通復(fù)制和 SCP 的區(qū)別:

最終結(jié)論:scp 之所以能成功傳遞權(quán)限,是因?yàn)樗且粋€(gè)智慧協(xié)議。它在傳送文件內(nèi)容之前,會(huì)先進(jìn)行"元數(shù)據(jù)通信",讓接收方提前準(zhǔn)備好一個(gè)具有正確屬性的"容器",然后再將內(nèi)容"注入"。這是一個(gè)定義清晰、步驟嚴(yán)謹(jǐn)?shù)膶I(yè)流程。

第四章:探案結(jié)束 —— 我們的行動(dòng)手冊(cè)

現(xiàn)在,謎底已經(jīng)完全揭開(kāi)。作為日常開(kāi)發(fā)者,我們需要一份簡(jiǎn)單實(shí)用的行動(dòng)手冊(cè)。

方案一:亡羊補(bǔ)牢(手動(dòng)修復(fù))

如果文件已經(jīng)"失憶",別擔(dān)心,只需一招就能讓它恢復(fù)功力。在目標(biāo) Linux 機(jī)器上:

chmod +x your_script.sh

方案二:防患未然(專業(yè)運(yùn)輸)

如果需要在 Linux 之間頻繁傳送并保持屬性,請(qǐng)選擇以下"VIP 通道":

  • scp -p: -p 參數(shù)明確告訴 scp,請(qǐng)務(wù)必帶上權(quán)限、時(shí)間等元數(shù)據(jù)。
  • rsync -a: -a (歸檔模式) 是 rsync 的王牌,能完美同步包括權(quán)限在內(nèi)的幾乎所有屬性。
  • tar 打包:先在源頭將文件打包成 .tar 文件,tar 會(huì)將元數(shù)據(jù)一同存檔。再傳送這個(gè)單一的壓縮包,到目的地解壓即可原樣還原。

結(jié)語(yǔ)

從一個(gè)小小的 Permission denied,我們一路追查,從文件內(nèi)容與元數(shù)據(jù)的分離,到 Linux Inode 的底層結(jié)構(gòu),再到 scp 的智慧協(xié)議。希望這次的偵探之旅,不僅解決了你眼前的困惑,更能讓你對(duì)日常使用的工具有了更深刻的理解。

技術(shù)的世界,正是由這些看似微小卻設(shè)計(jì)精巧的細(xì)節(jié)構(gòu)成。保持好奇,不斷追問(wèn),你會(huì)發(fā)現(xiàn)更多樂(lè)趣。

責(zé)任編輯:趙寧寧 來(lái)源: everystep
相關(guān)推薦

2021-05-18 11:40:11

開(kāi)源腳本工具

2021-08-17 07:05:23

springboot InputStreamparameter

2018-06-28 09:05:47

Windows 10Windows控制面板

2009-12-03 10:06:33

Ubuntushell腳本

2019-11-13 08:31:43

Oracle數(shù)據(jù)庫(kù)腳本

2013-07-18 09:25:43

2016-11-28 11:19:48

術(shù)語(yǔ)神秘

2017-08-30 17:21:05

LinuxShell超時(shí)現(xiàn)象

2025-05-07 00:30:00

SafariURL參數(shù)

2009-12-07 15:35:34

Windows 7神秘

2021-07-15 10:38:36

REvil勒索軟件黑客

2013-05-09 14:48:26

Windows Blu

2014-12-30 10:05:42

操作系統(tǒng)

2020-12-14 06:57:37

shell

2017-03-23 15:10:15

Windows 10Windows系統(tǒng)權(quán)限

2020-03-11 16:20:03

Serializabl接口Java

2016-12-20 09:30:22

shell腳本linux

2021-01-12 10:10:41

shell腳本Linux命令

2021-01-08 08:06:19

腳本Shell文件

2015-07-22 16:46:13

Windows 11理由
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲九色| 成人久久一区 | av香蕉| 欧美激情精品久久久久久 | 精品国产鲁一鲁一区二区张丽 | 中日韩欧美一级片 | 狠狠亚洲 | 99re在线 | 女女爱爱视频 | 电影午夜精品一区二区三区 | 久久久99国产精品免费 | 国产精品a久久久久 | 久热精品在线观看视频 | 91麻豆产精品久久久久久夏晴子 | 亚洲最大的成人网 | 成人看片在线观看 | 中文字幕在线一区二区三区 | 在线国产小视频 | 99精品国产一区二区青青牛奶 | 成人黄色三级毛片 | 欧美三级在线 | 久久久一二三 | 久久国产亚洲 | 看毛片网站 | 特级黄一级播放 | 成人在线观看网站 | 国产精品影视在线观看 | 天天久久 | 亚洲欧洲一区二区 | 国产成人高清在线观看 | 欧美精品乱码久久久久久按摩 | 不卡一区二区三区四区 | 欧美视频 亚洲视频 | 精品免费 | 久久久久国产视频 | 国产精品揄拍一区二区 | 国产精品69av | 精品国产18久久久久久二百 | 国产精品久久久久久妇女6080 | 日本三级精品 | 亚洲欧洲精品在线 |