abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
včera 19:44 | IT novinky

Americké společnosti omezují spolupráci se společností Huawei, protože Ministerstvo obchodu Spojených států amerických přidalo Huawei na černou listinu. Omezení již oznámili Google, Qualcomm, Intel, Xilinx nebo Broadcom. Google omezí přístup k Androidu a Google Play. Existujících zařízení by se to nemělo týkat. Prohlášení společnosti Huawei.

Ladislav Hagara | Komentářů: 11
včera 16:47 | Nová verze
Vyšla nová verze Strongswan 5.8.0, multiplatformní implementace ipsec řešení. Mezi hlavní novinky patří podpora nového virtuálního interface XFRM, který je součástí kernelu od verze 4.19. Dále přibyla podpora IPv6 do backendu i pluginu aplikace NetworkManager, nebo např. podpora zašifrovaných hesel v utf-8 přes EAP-MSCHAPv2. Kompletní seznam změn viz changelog.
Max | Komentářů: 0
19.5. 00:22 | Pozvánky

Richard Stallman, zakladatel hnutí svobodného softwaru, projektu GNU a Free Software Foundation, vystoupí 6. června od 17:30 v Brně v kině Scala se svou přednáškou Free Software Movement and GNU/Linux Operating System. Přednášku organizuje Ústav práva a technologií Masarykovy univerzity.

Ladislav Hagara | Komentářů: 34
17.5. 21:11 | IT novinky

Hewlett Packard Enterprise (NYSE:HPE) kupuje společnost Cray Inc. (Nasdaq:CRAY) za přibližně 1,3 miliardy dolarů. Výrobce superpočítačů Cray má v seznamu 500 nejvýkonnějších superpočítačů na světě TOP500 aktuálně 52 superpočítačů. S Intelem staví další superpočítač Aurora. S AMD staví superpočítač za 600 milionů dolarů s názvem Frontier. Ten by měl v roce 2021 převzít vedení v TOP500.

Ladislav Hagara | Komentářů: 4
17.5. 19:44 | Zajímavý projekt

Ondřej Kokešpodcastu Dataři představuje projekt Česká otevřená data. Jedná se o sadu skriptů, které stahují především finanční data poskytovaná státními institucemi. V rozhovoru vysvětluje, že ke správné interpretaci dat jsou potřeba doménové znalosti, a popisuje zkušenosti, jak získat dokumentaci, která u datových sad často chybí.

Fluttershy, yay! | Komentářů: 0
17.5. 10:11 | Zajímavý projekt

Nadace XPRIZE vyhlásila před pěti lety soutěž Global Learning XPRIZE o nejlepší open source výukový program nebo inovativní způsob výuky, který umožní dětem v rozvojových zemích samostatně se naučit číst, psát a počítat. Tento týden byly vyhlášeny výsledky (YouTube). O první místo a 10 milionů dolarů se podělili Kitkit School a onebillion. Pět vítězných výukových programů bylo zveřejněno na GitHubu.

Ladislav Hagara | Komentářů: 19
17.5. 06:00 | Komunita

Dalších šest produktů od společnosti ThinkPenguin získalo certifikaci RYF (Respects Your Freedom, Respektuje vaši svobodu) udělovanou Nadací pro svobodný software (FSF). Certifikaci RYF má nově například také převodník z USB na paralelní port (LPT). Certifikace RYF byla představena v říjnu 2012.

Ladislav Hagara | Komentářů: 9
16.5. 23:11 | Pozvánky

Dnes je Světový den přístupnosti, anglicky Global Accessibility Awareness Day (GAAD, Wikipedie). Světový den přístupnosti vznikl v roce 2012. Jeho smyslem je šířit osvětu v této oblasti mezi širokou veřejností a motivovat ji k diskusím, přemýšlení a chuti dozvědět se o tématice přístupnosti webu, dokumentů, software, mobilních aplikací, asistivních technologiích či potřebách lidí s nejrůznějším postižením něco nového. O víkendu

… více »
Ladislav Hagara | Komentářů: 0
16.5. 19:55 | Pozvánky

Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 164. brněnský sraz, který proběhne v pátek 17. května od 18:00 v restauraci Přístav u Vodů u Brněnské přehrady aneb v hantecu u Prýglu.

Ladislav Hagara | Komentářů: 2
16.5. 07:00 | Nová verze

Byla vydána nová major verze 9.0 svobodného systému pro řízení přístupu k síti (NAC) PacketFence (Wikipedie). Přehled novinek v oznámení o vydání. Pro uživatele předchozích verzí jsou k dispozici poznámky k aktualizaci.

Ladislav Hagara | Komentářů: 2
GPU kterého výrobce aktuálně preferujete pro provoz Linuxu?
 (48%)
 (25%)
 (25%)
 (2%)
Celkem 308 hlasů
 Komentářů: 27, poslední včera 15:36
Rozcestník

coreutils 8.1 aneb není rm jako rm

26.11.2009 15:17 | Přečteno: 2519× | GNU/Linux | Výběrový blog | poslední úprava: 27.11.2009 00:19


18. listopadu 2009 vyšla nová stabilní verze Coreutils (GNU core utilities). Coreutils jistě není nutno představovat. Jde o balík obsahující základní GNU nástroje jako cat, chmod, cp, date, kill, ls, mkdir, mv, rm, touch, true, who, yes a mnoho dalších. Nová verze 8.1 přináší navíc nástroj nproc vypisující počet dostupných výpočetních jednotek (processing units).

Chtěl bych se podělit o zkušenosti s tak základním nástrojem jako je rm. Člověk by si řekl, co může být na rm zajímavého, prostě rm A smaže soubor A. To je ale jenom první přiblížení, když se jde do hloubky, nová verze rm se chová jinak než předchozí. Po aktualizaci coreutils v Source Mage se při instalaci balíčků (cast spell) začala objevovat podezřelá hláška:
rm: invalid argument: `'.
Creating compile log /var/log/sorcery/compile/rlwrap-0.33.bz2
Creating tablet in directory /var/state/sorcery/tablet/rlwrap/20091126140339
Creating install log /var/log/sorcery/install/rlwrap-0.33
Creating MD5 log /var/log/sorcery/md5sum/rlwrap-0.33
Creating cache file /var/cache/sorcery/rlwrap-0.33-i686-pc-linux-gnu.tar.bz2
rm: invalid argument: `'
Finished processing install requests.

Spells installed successfully:
------------------------------
rlwrap
Zprvu se předpokládalo, že se jedná o chybu v sorcery. Stejná hláška se ale začala objevovat i při překladě ze zdrojových kódů pomocí ./configure; make. Například balíček libXt:
make[3]: Entering directory `/usr/src/libXt-1.0.7/src'
  CC     ActionHook.lo
rm: invalid argument: `'
  CC     Alloc.lo
rm: invalid argument: `'
  CC     ArgList.lo
rm: invalid argument: `'
Změnilo se chování příkazu rm. V souboru NEWS se u příkazu rm píše pouze o změnách při práci s read-only souborovým systémem. Tady se ale o read-only souborový systém nejedná. Nakonec se zjistilo, že danou hlášku lze vypsat příkazem rm "".
# rm ""
rm: invalid argument: `'
Nikdo asi nebude úmyslně mazat soubor "", což vlastně není žádný soubor, poněvadž jsou uvozovky zpracovány shellem. Problém nastává, pokud chci v shell skriptu smazat soubor, jehož jméno mám v nějaké proměnné. Například rm "$A" v případě, že proměnnou A nemám definovanou. V sorcery byl problém vyřešen jednoduše. Prostě se před spuštěním příkaze rm zkontroluje, zda se opravdu jedná o soubor:
-    rm  -f $IW_LOG $C_LOG $TMP_INST_LOG $TMP_MD5_LOG "$STAGE_INST_LOG" \
-           "$spell_sub_depends" "$spell_rsub_depends" "$spell_depends"
+    for file in "$IW_LOG $C_LOG" "$TMP_INST_LOG" "$TMP_MD5_LOG" \
+                "$STAGE_INST_LOG" "$spell_sub_depends" "$spell_rsub_depends"\
+                "$spell_depends"
+    do
+      [[ -f $file ]] && rm -f "$file"
+    done
Je tady ale jiný problém. Co se stane při spuštění příkazu rm a b "" c? Předchozí verze příkazu rm zahlásí chybu (rm: cannot remove `': No such file or directory) a soubory a b c smaže. Nová verze také zahlásí chybu (rm: invalid argument: `'), i když jinou, soubory ale nesmaže.
$ rm --version | head -n 1
rm (GNU coreutils) 7.6
$ touch a b c; rm a b "" c; ls
rm: cannot remove `': No such file or directory

# rm --version | head -n 1
rm (GNU coreutils) 8.1
# touch a b c; rm a b "" c; ls
rm: invalid argument: `'
a  b  c
Holt není rm jako rm. Co by vlastně měl příkaz rm provést a jakou chybovou hlášku vypsat při spuštění rm ""? Je lepší "No such file or directory" nebo "invalid argument"? Těžko říct. Jisté ale je, že skripty fungující i několik let a využívající chybu nebo vlastnost předchozí verze rm se budou muset zkontrolovat a případně upravit.

Jenom aby příští verze příkazu true nevracela false, nebo příkaz yes nevypisoval n. :-)

       

Hodnocení: 93 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Vložit další komentář

Luk avatar 26.11.2009 15:39 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: coreutils 8.1 aneb není rm jako rm
Podle mého názoru je v pořádku, že se chyba pro smazání "" označuje jako "invalid argument" (protože prázdný řetězec není platným názvem souboru). Něco jiného je ale to, že se dost zásadně mění chování takového klíčového programu, protože existuje nesčetně skriptů, které ho využívají. Proto si myslím, že by to sice mělo hlásit něco o neplatnosti názvu souboru (ne neexistenci), ale že by to ty zbývající soubory mělo smazat.
LinuxMarket - linuxový e-shop | LinuxEXPRES - linuxový magazín | OpenOffice.cz - portál uživatelů OpenOffice/LibreOffice
kotyz avatar 26.11.2009 17:16 kotyz | skóre: 25 | blog: kotyzblog | Radnice
Rozbalit Rozbalit vše Re: coreutils 8.1 aneb není rm jako rm
hmm, v archu to jeste neni

rm (GNU coreutils) 7.6

Mul-ti-pass! | Hrdý člen KERNEL ULTRAS. | Furry/Brony/Otaku | Nemám čas ztrácet čas. | In 'pacman -Syu' we trust!
26.11.2009 17:38 oryctolagus | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: coreutils 8.1 aneb není rm jako rm
Hm taky jsem koukal.
Nejspíš proto, že tohle chování by mohl být celkem problém pro AUR a ABS, dost programů na to určitě nejsou připravený.

Stejně si myslim, že pokud to v coreutils "neopraví", někdo na to napíše patch, a bude to...
27.11.2009 07:34 Tom K | skóre: 20
Rozbalit Rozbalit vše Re: coreutils 8.1 aneb není rm jako rm
Invalid argument se mi jevi, jako spravna hlaska, ale A a C by bylo vhodne smazat. Tam nekde bude bota a zadal bych jeji opravu.
echo -n "u48" | sha1sum | head -c3; echo
27.11.2009 13:17 chochi | skóre: 29 | Praha
Rozbalit Rozbalit vše Re: coreutils 8.1 aneb není rm jako rm
Tak jsem koukal, kde se to vzalo a problem je je tohle (viz NEWS):
** Improvements

  rm: rewrite to use gnulib's fts
  This makes rm -rf significantly faster (400-500%) in some pathological
  cases, and slightly slower (20%) in at least one pathological case.

  rm -r deletes deep hierarchies more efficiently.  Before, execution time
  was quadratic in the depth of the hierarchy, now it is merely linear.
  However, this improvement is not as pronounced as might be expected for
  very deep trees, because prior to this change, for any relative name
  length longer than 8KiB, rm -r would sacrifice official conformance to
  avoid the disproportionate quadratic performance penalty.  Leading to
  another improvement:

  rm -r is now slightly more standards-conformant when operating on
  write-protected files with relative names longer than 8KiB.
Ono totiz uz selze inicilalizace fts (inicializace souboru pro smazani). Predtim se soubory neinicializovali najednou (nepouzivalo se fts) a chyba se preskocila (ted selze inicializace jako celek). By me zajimalo jak to hodlaj resit, az se nekdo ozve.
1.12.2009 19:19 Ladislav Hagara | skóre: 88 | blog: Ride the Raven
Rozbalit Rozbalit vše Re: coreutils 8.1 aneb není rm jako rm
Jsem se ozval, chyba opravena. Mé jméno se navíc objevilo v THANKS. :-)
Luboš Doležel (Doli) avatar 27.11.2009 14:59 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: coreutils 8.1 aneb není rm jako rm
Já vám nevím, od čeho tu máme argument -f?
29.11.2009 19:08 Ladislav Hagara | skóre: 88 | blog: Ride the Raven
Rozbalit Rozbalit vše Re: coreutils 8.1 aneb není rm jako rm
-f nepomůže
# rm --version | head -1
rm (GNU coreutils) 8.1
# touch -f a b c; rm a b "" c; ls
rm: invalid argument: `'
a  b  c
#
29.11.2009 19:10 Ladislav Hagara | skóre: 88 | blog: Ride the Raven
Rozbalit Rozbalit vše Re: coreutils 8.1 aneb není rm jako rm
Sorry, -f mělo být u rm ne o touch. Výsledek je ale stejný.
# touch  a b c; rm -f a b "" c; ls
rm: invalid argument: `'
a  b  c
29.11.2009 22:14 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: coreutils 8.1 aneb není rm jako rm

Odpověď si můžeme přečíst v rm(1p):

For each file the following steps shall be taken:

        1. If the file does not exist:

            a. If the -f option is not specified,
               rm shall write a diagnostic
               message to standard error.

            b. Go on to any remaining files.
2.12.2009 23:20 Vaclav Bilek | skóre: 5
Rozbalit Rozbalit vše Re: coreutils 8.1 aneb není rm jako rm
Dobry postreh! Dekuji za prispevek.

Prestoze souhlasim s vetsinou argumentu kolegu diskuteru, mam tu jedno "ale" pro diskuzi.

Co tak brat volani rm, jako komplexni pozadavek na smazani skupiny souboru.Potom prazdne jmeno souboru muze byt chapano jako chyba v pozadavku a proto se pozadavek nevyplni jako celek. Proste transakce neprobehne prave kvuli spatnym argumentum. Domnivam se, ze kdyz nekdo zada mnozinu souboru a jeden do mnoziny nepatri, tak to asi nebyl zamer, nebo jsem uplne mimo?

Prosim no flame, jen by mne zajimal vas nazor.

Tato zmena chovani by pak sla potlacit nejakym prepinacem, ktery vy vypinal toto prednastavene chovani. Stare skripty by jen pridali jeden prepinac a nemuseli by menit logiku.

3.12.2009 18:41 maertien
Rozbalit Rozbalit vše Re: coreutils 8.1 aneb není rm jako rm
Autori skriptu by si meli tu promennou nejdrive zkontrolovat, nez to poslou rm a nedivit se chybovym hlasenim. Ale aby rm nesmazalo ostatni zadane soubory to je taky drsne. To aby ted clovek se skripty distribuoval vlastni verzi coreutils, proti ktere bude jeho dilko fungovat bez takovychto chyb.

Založit nové vláknoNahoru

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.