[arch-general] Holy Cow -- What happened to bash / vi??

Gerardo Exequiel Pozzi vmlinuz386 at yahoo.com.ar
Tue Jun 23 19:55:10 EDT 2009


Gerardo Exequiel Pozzi wrote:
> David C. Rankin wrote:
>
> <snip>
>   
>> 	I get this new message:
>>
>> [00:08 archangel:/etc] # noc fstab
>> bash: /usr/local/bin/noc: /bin/bash: bad interpreter: Text file busy
>>
>>   
>>     
> <snip>
>   
>> 	Text file busy?? It's a text file, it's not busy, it's either saved or you 
>> get what was present the last time it was saved, but it certainly isn't busy.
>>
>>   
>>     
> <snip>
>
> "Text file busy" is not related with text files :)
>
> Text refers to the "text section" of the executable. The text section of an executable is where the code resides, in other words the real program.
>
> This message appears when a process is running and you try to overwrite it, for example:
>
> [root at gerardo ~]# lsof -n | grep "sbin/init"
> init         1   root  txt       REG        8,1     31352    1079262 /sbin/init <<< note the 'txt' at 4th field.
> [root at gerardo ~]# echo 'hola' > /sbin/init
> -bash: /sbin/init: Text file busy
>
> But in this case is different, you are open(2) a file in read/write mode (O_RDWR), and you tried to execute it execve(2). This is impossible.
>
> Again lsof help to view this:
>
> [djgera at gerardo ~]$ vi coco.sh 
>
> [djgera at gerardo ~]$ lsof -n | grep coco.sh
> vi        4127 djgera    4uW     REG        8,6        32 113481 /home/djgera/coco.sh #### see the 'W' in 4th field.
> [djgera at gerardo ~]$ ./coco.sh
> bash: ./coco.sh: /bin/bash: bad interpreter: Text file busy
>
>
> Another simple example:
>
> [djgera at gerardo ~]$ cat coco.sh
> #!/bin/bash
>
> echo "Hola mundo!"
> [djgera at gerardo ~]$ cat coco.c
> #include <stdio.h>
> #include <unistd.h>
> #include <sys/types.h>
> #include <sys/stat.h>
> #define __USE_GNU
> #include <fcntl.h>
>
> int main(int argc, char *argv[])
> {
>     int coco;
>     coco = open("./coco.sh", O_RDWR);
>     sleep(60);
>     close(coco);
>     return(0);
> }
> [djgera at gerardo ~]$ gcc coco.c -o coco
> [djgera at gerardo ~]$ ./coco &
> [1] 4234
> [djgera at gerardo ~]$ lsof -n | grep coco.sh
> coco      4234 djgera    3u      REG        8,6        32 113481 /home/djgera/coco.sh #### See the 'u' in 4th field.
> [djgera at gerardo ~]$ ./coco.sh
> bash: ./coco.sh: /bin/bash: bad interpreter: Text file busy
>
>
> Good Luck!
>
>
> (sorry my english)
>
>
>
>   
Btw: if you execute the script via "bash coco.sh" will work ;)

And maybe my example is ambiguous, if the openned file is not a script
also can not be executed. Example: (changing the  open line to
/bin/ping, and executing as root

[djgera at gerardo ~]$ ping
bash: /bin/ping: Text file busy


-- 
Gerardo Exequiel Pozzi ( djgera )
http://www.djgera.com.ar
KeyID: 0x1B8C330D
Key fingerprint = 0CAA D5D4 CD85 4434 A219  76ED 39AB 221B 1B8C 330D



More information about the arch-general mailing list