用C++写了防止误用rm的方法,在调用rm命令时会有两次提示。
使用方法,创建文件test.cpp,然后使用g++ -o rm test.cpp编译,最后将/usr/bin下面的rm重命名为rm_backup,并将由代码生成的可执行文件rm放在/usr/bin下。
#include <iostream>
#include <cstdlib>
#include <sys/stat.h>
#include <unistd.h>
#include <csignal>
#include <string>
using namespace std;
#define FILENAME "a.out"
int IsFileExist(const char* path){
return !access(path, F_OK);
}
int main(int argc, char ** argv) {
char status;
const char* filename = "/usr/bin/rm_backup";
//返回0不存在,返回1存在
if(!IsFileExist(filename)){
cout << "Error! rm is not exist in /usr/bin" << endl;
exit(0);
}
int count = 0;
while(true){
if(count==0){
cout << "Do you really want to remove this file or dictionary? [Y/N]" << " ";
}
else if(count==1){
cout << "Think anymore? [Y/N]" << " ";
}
else if(count==2){
break;
}
cin >> status;
if(status=='N' || status=='n'){
cout << "exit" << endl;
exit(0);
}
else if(status=='Y' || status=='y'){
count++;
}
else{
cout << "Input error! Only support Y/N/y/n" << endl;
exit(0);
}
}
string command = "";
for(int i=1; i<argc; i++){
command = command + argv[i] + " ";
}
std::string str(filename);
command = str + " " + command;
system(command.c_str());
// cout << "Remove successfully!" << endl;
return 0;
}