[[oktatas:linux|< Linux]] ====== Munka fájlokkal ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2018, 2019 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * Web: https://szit.hu ===== Fájlok keresése ===== A find parancs tesztjei: | -amin n | A fájl elérési ideje n perccel ezelőtt volt | | -anewer FAJL | A fájl elérési ideje újabb mint a FAJL állomány | | -atime n | A fájl elérési ideje régebbi mint n nap | | -cmin n | A fájl utolsó inode változása n perccel ezelőtt volt | | -newer FAJL | A fájl utolsó inode változása újabb mint a FAJL állomány | | -ctime n | A fájl utolsó inode változása régebbi mint n nap | | -empty | A fájl üres | | -executable | A fájl futtatható | | -false | Mindig sikertelen | | -fstype típus | A fájl megadott fájlrendszeren van (pl.: ext4) | | -gid n | A fájl csoportazonosítója n | | -group csoportnév | A fájl adott csoportba tartozik | | -ilname minta | Szimbolikus linkek keresése, nincs kis- és nagybetű érzékenység | | -iname minta | Fájlok keresése, kis- és nagybetű érzékenység nincs | | -inum n | Adott inode számú fájl keresése | | ... || ===== Talált fájlokon parancs futtatása ===== find /utvonal -type d | xargs chmod g+s find /utvonal -type d -exec chmod g+s {} \; find /utvonal -type d -exec chmod 755 {} \; find /utvonal -type f -exec chmod 644 {} \; ===== Időbélyegek állítása ===== Időbélyegek: * atime -- access time -- utolsó hozzáférés ideje * mtime -- modify time -- utolsó módosítás ideje * ctime -- change time -- inode változás ideje * crtime -- create time -- létrehozás ideje Az elérési idő állítása: touch -a -t 11041220 ===== Létrehozási idő ===== A létrehozási idő tárolását nem tartalmazza a POSIX szabvány, azonban az ext4 fájlrendszerben már tárolásra kerül. A stat parancs viszont még nem képes olvasni azt, mivel a Linux kernel API jelenleg nem teszi hozzáférhetővé. Pedig a stat parancsban elvileg lekérdezhető: stat -c '%w' fájl # ember számára olvasható formában stat -c '%W' fájl # unix idő szerint A debugfs és a stat parancs kombinálásával viszont kinyerhető az adat ext4 fájlrendszer esetén. crtime megjelenítésének lépései: Kiderítjük a kívánt fájl inode számát: $ ls -i vmi.txt Megnézzük melyik fálrendszeren van: $ df -T vmi.txt A létrehozás idejének lekérdezése: # debugfs -R 'stat ' /dev/sda1 A kisebb-mint és nagyobb-mint jelek kötelező elemek. De szűrhetünk is az kívánt sorra: # debugfs -R 'stat <269383>' /dev/sda1 | grep crtime ===== Létrehozási időre bash script ===== xstat() { for target in "${@}"; do inode=$(ls -di "${target}" | cut -d ' ' -f 1) fs=$(df "${target}" | tail -2 | head -n 1 | awk '{print $1}') crtime=$(sudo debugfs -R 'stat <'"${inode}"'>' "${fs}" 2>/dev/null | grep -oP 'crtime.*--\s*\K.*') good_crtime=`echo ${crtime} | date "+%Y-%m-%d %H:%M"` echo -e "${good_crtime}\t${target}" done } A kódot másoljuk be a ~/.bashrc vagy a ~/.profile állományba. Újabb bejelentkezés után használható. Használat: xstat * A használathoz szükség van a felhasználó számára sudo jogra, a debugfs számára. ===== JSON fájlok ===== apt install jq Egy fájl értelmezése: jq '.' dolgozok.json [ { "az": 1, "nev": "Perke Béla", "kor": "32" }, { "az": 2, "nev": "Pink Boldizsár", "kor": "27" } ] A jq parancs használható csővezetékkel: cat dolgozok.json | jq '.' | less ===== Források ===== * https://www.binarytides.com/linux-find-command-examples/ (2018) * https://www.lifewire.com/uses-of-linux-command-find-2201100 * https://unix.stackexchange.com/questions/91197/how-to-find-creation-date-of-file (2018) * https://articles.forensicfocus.com/2015/08/25/linux-timestamps-oh-boy/ (2018) * https://lwn.net/Articles/397442/ (2018) Program eredeti forráskódok: * https://gist.github.com/moiseevigor/8c496f632137605b322e (2018) * https://gist.github.com/gnought/1dee2fa4422f37e4d875 (2018)