Кіріспе
Unix rm (Remove) – Unix және Unix-ке ұқсас операциялық жүйелердегі негізгі команда, файлдық жүйелерден компьютерлік файлдар, каталогтар, символдық сілтемелер және құрылғы түйіндері, құбырлар, сокеттер сияқты арнайы файлдарды жоюға арналған. Бұл команда MS-DOS, OS/2 және Microsoft Windows-тағы del командасына ұқсас. Бұйрық EFI қабығында да қолжетімді.
rm (short for remove) is a basic command on Unix and Unix like operating systems used to remove objects such as computer files, directories and symbolic links from file systems and also special files such as device nodes, pipes and sockets, similar to the del command in MS DOS, OS/2, and Microsoft Windows. The command is also available in the EFI shell.
Шолу
rm командасы файлдық жүйеден нысандарға сілтемелерді unlink жүйелік шақыру арқылы жояды, онда бұл нысандардың бірнеше сілтемесі болуы мүмкін (мысалы, екі түрлі аты бар файл), ал нысандардың өзі барлық сілтемелер алынған кезде ғана жойылады және ешқандай бағдарламада нысандарға ашық қолданыстар болмаса. Бұл бағдарламаға файлды ашып, оны дереу файлдық жүйеден жойып, содан кейін уақытша кеңістік ретінде пайдалануға мүмкіндік береді, себебі файлдың кеңістігі бағдарлама тоқтағаннан кейін босатылатынын біледі, тіпті ол қатемен тоқтаса да. Команда әдетте файл деректерін жоймайды, өйткені оның мақсаты тек сілтемелерді үзу, ал босатылған файлдық жүйе кеңістігі жойылған файлдан қалған деректерді сақтап қалуы мүмкін. Бұл кейбір жағдайларда қауіпсіздік мәселесін тудыруы мүмкін, сондықтан күшейтілген нұсқалары соңғы сілтеме үзілген кезде деректерді жою мүмкіндігін ұсынады, ал shred және srm сияқты бағдарламалар деректерді жоюға арналған мүмкіндіктерді ұсынады. rm көбінесе UNIX негізіндегі операциялық жүйелерде кездеседі, олар әдетте recycle bin сияқты механизм арқылы жойылған файлдарды қалпына келтіруді қамтамасыз етпейді, сондықтан пайдаланушылар көбінесе rm командасын кездейсоқ файлдарды жоюды болдырмау үшін қосымша бағдарламаға орап қолданады. Индексті қайта құруға тырысатын және егер бөліктері қайта пайдаланылмаса, файлды қалпына келтіре алатын файлды қалпына келтіру құралдары бар.
Тарих
Unix-тің кейбір ескі нұсқаларында rm командасы бос каталогтарды жоятын. Бұл қасиет rm командасының кейбір нұсқаларында d белгісімен әлі де қолданылады, мысалы, 4.4BSD Lite2-ден тараған BSD (FreeBSD, NetBSD, OpenBSD және macOS сияқты). rm командасының GNU coreutils жинағына енген нұсқасын Пол Рубин, Дэвид Маккензи, Ричард Столлман және Джим Мейеринг жазған. Бұл нұсқада да үйлесімділікті сақтау үшін d опциясы бар. Осы мүмкіндік стандартты rmdir командасымен де қамтамасыз етіледі. 7-ші нұсқадағы i опциясы 1-ші нұсқада пайда болған dsw, яғни "свитчтер арқылы жою" мүмкіндігін алмастырды. Даг Макилрой dsw туралы "бұл өте қиын атаулары бар файлдарды тазалау үшін жасалған соңғы амал болды" деп жазды. Бұл команда Microsoft Windows үшін жеке пакет ретінде UnxUtils жинағының бір бөлігі ретінде қол жетімді. KolibriOS команданың іске асырылуын қамтиды. Команда IBM i операциялық жүйесіне де көшірілген.
Рұқсаттар
Көптеген файлдық жүйелерде әдетте файлды өшіру үшін аталық каталогқа жазу рұқсаты (және алдымен каталогқа кіру үшін орындау рұқсаты) қажет. (Нақтырақ айтқанда, жаңадан бастаушыларды шатастыратыны, файлдың өзіндегі рұқсаттар маңызсыз. Дегенмен, GNU rm командасы f опциясы қолданылмаса, жазудан қорғалған файлды өшіруге рұқсат сұрайды.) Каталогты (rm -r командасымен) өшіру үшін оның барлық мазмұны рекурсивті түрде өшірілуі керек. Бұл үшін, егер каталог бос болмаса, сол каталогқа және барлық бос емес ішкі каталогтарға (бар болса) оқу, жазу және орындау рұқсаттары болуы тиіс. Мазмұнды өшіру үшін каталогтың мазмұнын тізімдеуге оқу рұқсаттары қажет. Кейде бұл жағдайға әкеледі: жазу рұқсаты болмағандықтан каталогтың мазмұнын өшіре алмайтындықтан, бос емес каталогты өшіру мүмкін болмайды; бірақ егер сол каталог бос болса, оны өшіруге болады. Егер файл жабысқақ бит белгіленген каталогта орналасқан болса, оны өшіру үшін файлдың иесі болу қажет.
Файл жүйесінің түбірін қорғау
Sun Microsystems компаниясы "rm rf /" қорғанысын 2005 жылы алғаш рет шыққан Solaris 10 жүйесінде енгізді. Бұл команданы орындағанда, жүйе / каталогын жоюға рұқсат жоқ екенін хабарлайды. Одан кейін, осы мүмкіндік FreeBSD нұсқасындағы rm құралына да қосылды. GNU rm, егер "root сақтау" опциясы берілсе, "rm rf /" командасын орындаудан бас тартады, бұл 2006 жылдан бері GNU Core Utilities 6.4 нұсқасынан бастап әдепкі параметр болып табылады. Жаңа жүйелерде бұл қауіпсіздік механизмі әрқашан қосулы күйде болады, тіпті опциясыз да. Команданы орындау үшін пайдаланушы, тіпті супер пайдаланушы болса да, "root сақтауды жою" опциясын қосып, қауіпсіздік механизмін айналып өтуі керек.
Командалық жол аргументінің шектелуі
Бірнеше Linux дистрибутивтерінде қолданылатын GNU Core Utilities іске асыруы командалық жол аргументтерінің байт санымен және ядрода командалық жол аргументтері үшін бөлінген беттер санымен шектеледі. 2.6.23 ядросынан бұрын, 2007 жылдың 9 қазанында жарияланған, бұл шектеулер include/linux/binfmts.h файлындағы MAX_ARG_PAGES айнымалысы арқылы ядроны құрастыру кезінде анықталды. Бірақ, жаңа ядролар аргументтердің ең үлкен ұзындығын максималды стек шегінің (ulimit -s) 25%-ымен шектейді. Егер командалық жол аргументтерінің шегі сақталмаса, «Қате: /bin/rm: Аргументтер тізімі тым ұзын» деген қате хабары шығады.