/usr误删了 linux
2019-05-15 10:25:28 weixin_44572041 阅读数 28

在Linux中有时候手抖会误删了一些文件,所以就搜集了一点解决办法。

  1. 当你创建一个进程(线程),在不断的往filea里面写日志吧。然后一不小心给删除了。那么此进程(线程)会不会继续往该filea里面写日志呢?
    进程一直在往文件中打印时间
    a. 会的。可以ps aux查看你的执行该进程的ID,然后cd pro/ID/fd,
    可以看到还是会往该文件打印日志
    查看就可以发现,该进程仍旧会往filea里面写日志。
    b. 可不可以在误删filea之后,创建一个同名文件filea?
    经过测试,是不行的。该进程不会往新创建的同名文件filea中打印日志。
    创建同名文件测试
    测试代码:

     	   1  #include<string.h>
           2 #include<stdio.h>
           3 #include<iostream>
           4 #include<stdlib.h>
           5 #include<sys/time.h>
           6 #include<sys/types.h>
           7 #include<sys/stat.h>
           8 #include<ctype.h>
           9 #include<fcntl.h>
          10 #include<unistd.h>
          11 using namespace std;
          12 int main()
          13 {
          14         int fd = open("falsedelete",O_CREAT|O_RDWR);
          15         char str[] = "\nhaha";
          16         char str2[5] = {0};
          17         char str3[20] = {0};
          18         int i = 1;
          19         time_t timer;
          20         struct tm *tblock;
          21         while(1)
          22         {
          23                 sleep(1);
          24                 tblock = localtime(&timer);
          25                 timer = time(NULL);
          26 
          27                 write(fd,str,sizeof(str));
          28                 cout<<str<<" ";
          29 
          30                 memset(&str2,0,sizeof(str2));
          31                 sprintf(str2,"%d",i);
          32                 write(fd,str2,sizeof(str2));
          33                 cout<<str2<<" ";
          34 
          35                 memset(str3,0,sizeof(str3));
          36                 sprintf(str3,"%s",asctime(tblock));
          37                 write(fd,str3,sizeof(str3));
          38                 cout<<str3<<endl;
          39                 i++;
          40         }
          41         return 0;
          42 }
    

如果
int fd = open(“falsedelete”,O_CREAT|O_RDWR);
改成
int fd = open(“falsedelete”,o_CREAT|C_RDWR|O_APPEND);
并且放到while里面呢?
我试了,删不掉,
在这里插入图片描述

2016-07-28 10:32:00 weixin_34209851 阅读数 24

今日在整理VPS上面的文件的时候,手贱,打错命令,把根目录下的文件全部移动到一个目录下去了。
本来要打

mv 14.rar ../

打成

mv 14.rar //*

然后发现,系统出问题了…

我这个半桶水遇到这个问题彻底蒙了,怎么ls、mv、cp这些命令都用不到了….

[root@li400-86 /]# ls
-bash: /bin/ls: No such file or directory
[root@li400-86 /]# mv
-bash: /bin/mv: No such file or directory

于是想用SFTP登陆上去看看目录怎么了,发现SFTP方式无法登陆,于是就想不会是服务器没办法登陆了吧,马上新建一个窗口登陆终端,果然已经没办法登陆了,而我此前已经登陆的账户还保持在线,并且可以继续操作。
于是马上向朋友求救,才知道,这个 【mv 14.rar //*】把我根目录下的所有文件都移动到了/ztmp下了

朋友叫我尝试一下打【./】然后再用TAB键来当ls命令使用,最后确认所有根目录文件都在【/ztmp】下。但是就算通过【/ztmp/bin/ls】这样的命令也是无法使用,会提示

./ztmp/usr/bin/ls
./ztmp/usr/bin/ls: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

最后这位朋友表示没遇到过这样的问题,所以没办法解决了。
没办法之下找到第二位朋友,根据他说的根目录被移走的情况,上网搜索了一下,找到了:http://sharkyan.blog.51cto.com/536264/771966这篇文章,最后问题才解决。这里就把原文整理一下发到我这里来:
1、由于命令依赖库/lib里面的文件被移动到了/ztmp目录下,所以绝大多数的命令已经无法使用,但是bash原生的那些命令依然可用:
cd、export、declare、echo、pwd

2、由于运行命令的依赖库已经不在指定的目录了,所以需要运行bash以外的命令,就需要指定依赖库文件,现在我的依赖库在【/ztmp/lib】,ls命令在【/ztmp/bin/ls】可以采取:

/ztmp/lib/ld-linux.so.2 --library-path /ztmp/lib /ztmp/bin/ls / -F

这样的方式来指定依赖库并运行ls命令,发现可以正常使用后,经过朋友确认该目录下的文件都可以复制到根目录下后,朋友让我使用下面的命令,将/ztmp下面的目录以保留权限的方式复制到根目录去:

/ztmp/lib/ld-linux.so.2 --library-path /ztmp/lib /ztmp/bin/cp -rfp /ztmp/* /

经过漫长的等待后,所有的文件都归位了,所有命令都可以正常使用了,并且也在此确认了一次终端可以正常登陆了,自此,这个问题算是修复完毕了。

事后经过网上搜索后发现,出现这个问题后,终端必须不能断开,否则就没有办法再连接回来了

转载于:https://my.oschina.net/activehealth/blog/719385

2013-07-21 09:42:26 winnerX 阅读数 595

        今天打开电脑,发现linu系统未关机,一直处在ubuntu图标界面。当时以为是昨晚没关机,所以也没留意。直接关闭电源关了电脑。当我再打开时,发现一直系统依然处于图标界面,这时候感觉不对了。回顾昨天做过的,想会不会是因为改了/bin下面的rm文件。改这个文件的目的,也就是防止我手贱,把mv打成rm,这个操作不可逆,我又吃过亏,所以想自己设置一个验证。当时在网上看的时候,发现别人的做法是将rm之后的文件放到回收站,我觉得不用这么麻烦,所以直接写了一个bash文件,添加一个条件语句用于验证,然后调用系统自带的rm,最后,我将这个bash文件重命名为rm,这样,每次调用rm,都会要求验证。没想到这个实现却对系统的启动造成致命影响。

        当然我原来也没想到会是这个问题,还以为是主机硬件出现问题。但是当我进入另一个win7系统时,发现一切正常。我就想到肯定是ubuntu的系统文件问题了。以前装软件的时候,经常会默认的将一些输出文件放到/tmp下,并且提示我们修改,否则系统开始会清空。既然系统会情况这个文件夹,应该会调用删除命令,看来就是这个rm命令了。我改了这个文件后,程序需要验证才会删除文件,这会造成系统等待我的验证,但是当时又无法输入,所以系统就一直停留在那个界面。

        我首先重启系统,选择恢复模式,然后利用root权限进入字符界面,试图去修改rm文件。但是不幸的事情发生了,系统提示当前是只读模式。没办法,百度搜答案,发现输入一条命令就能够写文件,即mount -o rw,remount /,然后把rm文件改回来,然后exit,继续启动系统,系统运行正常。

        启示:不要随便修改系统文件。

2012-03-30 13:38:00 weixin_33829657 阅读数 1

/usr/include/linux是用来编译当前系统的程序的;
/usr/src/linux/include/linux/是用来编译内核的,

要使用/usr/src/linux/include/linux的头文件,
可以用gcc -I /usr/src/linux-x.x.x/include/

呵呵,一个是用户态下的搜索路径,一个是内核模块需要的头文件搜索路径,用的地方都不一样
如果你没有在编译时显示地加上-I的情况下:
如果你的代码中没有__KERNEL__这样的宏声明,那么编译时就会使用C库的头文件
如果你的代码是用于内核模块的,那么它指向的就是内核头文件,一般说来,在你的/usr/src/下还有一个链接符号,符号名为linux,它指向了 linux-2.4.20-8这个目录,这是编译器在编译内核模块时使用的路径,编译器是通过__KERNEL__这个宏来识别你是需要内核中的结构体/ 函数或者是使用C库中的各种函数与结构体等

转载于:https://www.cnblogs.com/qiaoge/archive/2012/03/30/2425126.html

2013-01-23 02:30:19 guanjun83 阅读数 554

/usr/include/linux是用来编译当前系统的程序的;
/usr/src/linux/include/linux/是用来编译内核的,

要使用/usr/src/linux/include/linux的头文件,
可以用gcc -I /usr/src/linux-x.x.x/include/

呵呵,一个是用户态下的搜索路径,一个是内核模块需要的头文件搜索路径,用的地方都不一样
如果你没有在编译时显示地加上-I的情况下:
如果你的代码中没有__KERNEL__这样的宏声明,那么编译时就会使用C库的头文件
如果你的代码是用于内核模块的,那么它指向的就是内核头文件,一般说来,在你的/usr/src/下还有一个链接符号,符号名为linux,它指向了 linux-2.4.20-8这个目录,这是编译器在编译内核模块时使用的路径,编译器是通过__KERNEL__这个宏来识别你是需要内核中的结构体/ 函数或者是使用C库中的各种函数与结构体等

linux /usr目录

阅读数 1615

没有更多推荐了,返回首页