From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on sa.int.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-3.6 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.2.5 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:subject:message-id:mail-followup-to:references :mime-version:content-type:content-disposition :content-transfer-encoding:in-reply-to; bh=HXo4TcddZkacRryphHsoohstVXpwdFRozXUcufdzC38=; b=S6RnvrmcPu8mM6XRKEpqiP6A0DsFaLeDnDcQbuyuudP0x0CUb1MIf9dErBI0cWcW+X HNvD7sfvmNLT+bo+r2SnYoxR0fRpkDKdIMC/L1+XfX2IoEaTYsViIoNU46jdgVPQKQSn a+fn2LWQNjZhF1WivhnmIdfxYsfIEvgZRk7QVXVo+LovH8OJWLhecnDZx/7tSNJxLotF F7G4w4SHiGt0dU7UN9GLWK0Vbu9a/8evhdI/udSCe/zcUwhHpgg2t4rvWXXqZTar46wg TVYGPO4S+SxILDZFmeAcvVE3MeFffDx/Qt/zATRnkWTF3OKvB8ispQMymKUq2vPubzVH /jsg== Date: Fri, 31 Aug 2012 11:18:12 +0400 From: Dmitry Chistikov To: ALT Linux Community general discussions Message-ID: <20120831071812.GF7701@conflux.foliandre> Mail-Followup-To: ALT Linux Community general discussions References: <20120829144315.GI13963@conflux.foliandre> <3789813.elSHLEPuJ5@summoner.localdomain> <20120830151704.GB7449@conflux.foliandre> <4765383.KMFu31lscM@summoner.localdomain> <20120830165502.GA2592@t60p.mithraen.ru> <20120830173045.GE7449@conflux.foliandre> <20120830185020.GA15436@t60p.mithraen.ru> <20120831054612.GD7701@conflux.foliandre> <20120831064916.GA10923@t60p.mithraen.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20120831064916.GA10923@t60p.mithraen.ru> Subject: [Comm] =?koi8-r?b?bm8tc2hlYmFuZyBzY3JpcHRzLCB3YXM6IPDP08zFIM/C?= =?koi8-r?b?zs/XzMXOydEg0NLP0MHMySDJy8/Oy8kgzsEg0sHCz97FzSDT1M/MxQ==?= X-BeenThere: community@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Community general discussions List-Id: ALT Linux Community general discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 31 Aug 2012 07:18:20 -0000 Archived-At: List-Archive: List-Post: Денис Смирнов, Aug. 31, 2012, 10:49 +0400: > On Fri, Aug 31, 2012 at 09:46:12AM +0400, Dmitry Chistikov wrote: > > DC> Или Вы про вот эту особенность: > DC> If the header of a file isn't recognized (the attempted execve(2) failed with > DC> the error ENOEXEC), these functions will execute the shell (/bin/sh) with the > DC> path of the file as its first argument. (If this attempt fails, no further > DC> searching is done.) > > Именно. > > DC> Короче говоря, если файл не является "настоящим" бинарником (a.out > DC> dynamically linked binary executable, dynamically linked ELF executable) > DC> и не является сценарием оболочки (interpreter script в терминах execve(2); > DC> грубо говоря, в первой строке должен быть корректная #!-строка), > DC> то системный вызов для него оболочку запускать и не будет. Заниматься > DC> этой самодеятельностью будут разве что функции стандартной библиотеки - > DC> или же пользовательские программы (возможно, и сами оболочки). > > Если я правильно понял последние две предложения, то execve попытается сам > вызвать дефолтный /bin/sh, и только если обломается -- дальнейшеие попытки > выполинть завершаться. Н-ну... насколько я понимаю, не совсем так. Если натравить системный вызов execve(2) на текстовый файл без шебанга, то он обломается. Если на текстовый файл с корректным шебангом - то ядро запустит соответствующий интерпретатор. При этом обращение к execve(2) в трех из шести функций стандартной библиотеки содержит специальные инструкции: в случае такого (ENOEXEC) облома попробовать запустить оболочку (/bin/sh) с соответствующим параметром. Остальные три функции такой возможности не предоставляют. Кстати говоря, у Кернигана и Пайка в UPE никаких шебангов и вовсе не было, а сценарии содержали просто код на языке оболочки. О появлении шебангов есть два фрагмента в английской википедии: см. разделы Etymology и History на странице http://en.wikipedia.org/wiki/Shebang_(Unix) . Если верить приведенным объяснениям (цитируется Д. Ритчи!), ранее всю работу по идентификации командных сценариев выполняла оболочка, а введение шебангов позволило перепоручить это ядру. -- Дмитрий Чистиков