Loading [MathJax]/jax/output/HTML-CSS/config.js
Ask Your Question
3

Imitace find executable

asked Nov 27 '14

Mikulas gravatar image

updated Nov 27 '14

shejby gravatar image

Dají se pomocí find vypsat soubory, ke který, má současný uživatel (např.) práva pro spuštění? Vzhledem k tomu, že uživatel pod kterým se find spouští nemusí být vlastník těch findovaných souborů, nebude podle mě fungovat obyčejný -perm u+x.

Šlo by to hádám nějakou složitáou konstrukcí, která by pomocí or vybrala soubory

  • co mají uživatele jako vlastníka a vlastník má oprávnění
  • co mají uživatelovu skupinu a zárověň má ta skupina to oprávnění
  • ani jedno a others mají oprávnění.

Jde to nějak lépe? (Nepočítám že by stačilo napsat -executable, který neběží na frayích.)

add a comment

2 Answers

Sort by » oldest newest most voted
2

answered Nov 27 '14

VojtechMyslivec gravatar image

updated Nov 28 '14

Tohle by mělo fungovat správně

find . -type f -exec test -x {} \; -print

Popřípadě místo -print použít -ls pro ověření (výpisem).

-exec je akce, jejíž hdnota (true / false) závisí na návratovém kódu vykonaného příkazu. Tím, že je to ale akce, přepíše implicitní print, který přiřadím na konec. Všechny predikáty jsou spojené logickým součinem. -print se tedy vykoná pouze při úspěšném vyhodnocení příkazu. Využívám tedy externí příkaz pro testování něčeho, co find testovat neumí.
-type f není nutný. Jen si omezuji na obyčejné soubory.

Otestováno na debianu (tam funguje i -exec [ -x {} ] ).
Na fray otestováno jen zběžně, nemůžu si tam vytvořit příjemné podmínky na testování (chown...), ale passwd najde, zatímco shadow ne (v případě testu na čitelnost).

EDIT: Sorry, v podmínce jsem měl -r. Samozřejmě má být -x.

link

Comments

1

Tohle je úplně super, dík!

Mikulas (Nov 27 '14)
add a comment
1

answered Nov 27 '14

Josef Kokeš gravatar image

updated Nov 27 '14

Správně je to ještě složitěji:

  • Mají uživatele jako vlastníka a vlastník má oprávnění, nebo
  • Nemají uživatele jako vlastníka, mají skupinu uživatele jako skupinu, skupina má oprávnění, nebo
  • Nemají uživatele jako vlastníka, nemají skupinu uživatele jako skupinu, ostatní mají oprávnění.

Do papírové písemky stačí napsat -executable. Nebo také jde použít jen výběr podle prvního bodu výše a skupinu a ostatní neřešit - v zadání je napsáno, že se předpokládá, pokud uživatel není vlastník, tak to číst nemůže (jinými slovy).

(Ale ta podmínka musí být napsána správně. -perm u+x správně není. Viz manuál, jaký je rozdíl mezi -perm X, -perm +X, -perm -X.)

link

Comments

Díky. To rozšíření s „nemají uživatele“ mi nedošlo :)

Mikulas (Nov 27 '14)

Pozor na -perm +X to dělá divné věci. V přednáškách respektive na frayi je buď -perm X (práva přesně zadaná) nebo -perm -X (práva alespoň tak jako zadaná). S tím by se mělo vystačit. V man find na debianu mám u -perm +X první slovo: "Deprecated".

VojtechMyslivec (Nov 27 '14)

Neříkám, kterou variantu má OP použít, jen že by si měl být vědom toho, že mezi nimi jsou jisté rozdíly.

Josef Kokeš (Nov 28 '14)
add a comment

Your answer

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

Add answer

[hide preview]

Question tools

Follow
1 follower

Stats

Asked: Nov 27 '14

Seen: 147 times

Last updated: Nov 28 '14