Ask Your Question
3

Imitace find executable

asked 2014-11-27 16:35:03 +0100

Mikulas gravatar image

updated 2014-11-27 17:53:41 +0100

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.)

edit retag flag offensive close delete

2 Answers

Sort by » oldest newest most voted
2

answered 2014-11-27 20:40:26 +0100

VojtechMyslivec gravatar image

updated 2014-11-28 16:56:58 +0100

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.

edit flag offensive delete publish link more

Comments

1

Tohle je úplně super, dík!

Mikulas ( 2014-11-27 23:46:51 +0100 )edit
1

answered 2014-11-27 16:44:04 +0100

Josef Kokeš gravatar image

updated 2014-11-27 16:46:34 +0100

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.)

edit flag offensive delete publish link more

Comments

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

Mikulas ( 2014-11-27 17:07:31 +0100 )edit

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 ( 2014-11-27 20:25:44 +0100 )edit

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š ( 2014-11-28 19:26:19 +0100 )edit

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: 2014-11-27 16:35:03 +0100

Seen: 147 times

Last updated: Nov 28 '14