Heim  >  Artikel  >  php教程  >  Finden Sie häufige Anwendungsbeispiele unter Linux

Finden Sie häufige Anwendungsbeispiele unter Linux

黄舟
黄舟Original
2016-12-13 13:49:481035Durchsuche

Beispiele für die häufige Verwendung von „find“ unter Linux

·find path -option [ -print ] [ -exec -ok command ] {} ;

find command parameter;

Pfadname: Der vom Suchbefehl durchsuchte Verzeichnispfad. Verwenden Sie beispielsweise ., um das aktuelle Verzeichnis darzustellen, und /, um das Stammverzeichnis des Systems darzustellen.
-print: Der Befehl „find“ gibt passende Dateien in der Standardausgabe aus.
-exec: Der Befehl „find“ führt den durch diesen Parameter angegebenen Shell-Befehl für die passende Datei aus. Der entsprechende Befehl hat die Form „Befehl“ { } ;, beachten Sie das Leerzeichen zwischen { } und ;.
-ok: Es hat die gleiche Funktion wie -exec, außer dass es den durch diesen Parameter angegebenen Shell-Befehl in einem sichereren Modus ausführt. Vor der Ausführung jedes Befehls wird der Benutzer aufgefordert, zu bestätigen, ob er ausgeführt werden soll .

#-print Die gefundene Datei in die Standardausgabe ausgeben
#-exec command {} ;--Führen Sie die Befehlsoperation für die gefundene Datei aus. Zwischen {} und #-ok ist das Gleiche wie -exec, außer dass Sie den Benutzer vor der Ausführung fragen müssen:

=== ====== =========================================

- Name Dateiname #Suche nach einer Datei mit dem Namen Dateiname

-perm #Suche nach Ausführungsberechtigungen

-Benutzer Benutzername #Suche nach Dateieigentümer

-Gruppe Gruppenname #Suche nach Gruppe
- mtime - n                                                                                                                                                                                                                                                         

-Nogram #Suchen Sie nach Dateien, die keine gültige Gruppe haben, d. h. die Datei der Datei existiert nicht in/etc/groups existiert nicht
-NOUSER # Passwd existiert nicht
-newer f1 ! f2 Finden Sie die Datei, -n bedeutet innerhalb von n Tagen, +n bedeutet n Tage her. Innerhalb von Tagen, +n bedeutet n Tage vorher. Das heißt, der Eigentümer der Datei existiert nicht in /etc/passwd
-newer f1 ! f2 #Überprüfen Sie, ob Blockgeräte, Verzeichnisse, Zeichengeräte, Pipes, symbolische Links und gewöhnliche Dateien vorhanden sind. Suchen Sie vor dem Betreten des Unterverzeichnisses zunächst nach diesem Verzeichnis
-FSTYPE #Überprüfen Sie die Änderungszeit, um die neue, aber ältere Datei zu ändern
-Type B/D/C/P/L/F # , Zeichengerät, Pipe, symbolischer Link, gewöhnliche Datei
-size                         n[c]                                                                                                                                             ​Dieses Verzeichnis
-fstype                                                                    # Dateien durchsuchen, die sich in einem bestimmten Verzeichnis befinden Art des Dateisystems, diese Dateisystemtypen sind normalerweise zu finden in. /etc/fstab                                                  -follow                   #Wenn eine symbolische Linkdatei gefunden wird, folgen Sie der Datei, auf die der Link verweist
-cpio           T> -Mount #When Überprüfen Sie die Datei und überschreiten Sie nicht den Mount-Punkt des Dateisystems -prune                           #Ein Verzeichnis ignorieren

============================================= === ======
$find ~ -name "*.txt" -print #Überprüfen Sie die .txt-Dateien in $HOME und zeigen Sie
$find . -name "*.txt" -print $find . -name "[A-Z]*" -print #Dateien prüfen, die mit Großbuchstaben beginnen
$find /etc -name "host*" -print #Dateien prüfen, die mit host beginnen
$find . name „[a-z][a-z][0–9][0–9].txt“ -print #Überprüfen Sie TXT-Dateien, die mit zwei Kleinbuchstaben und zwei Zahlen beginnen
$find . -perm 755 -print
$ find . -perm -007 -exec ls -l {} ; #Überprüfen Sie Dateien, die von allen Benutzern gelesen, geschrieben und ausgeführt werden können, genau wie -perm 777
$find find ! -type d -print
$find . -type l -print

$find . size +10 -print etc home apps -third -print |. cpio -ivcdC65536 -o /dev/rmt0

$find /etc -name "passwd*" -exec grep "cnscn" {} ; #Überprüfen Sie, ob der cnscn-Benutzer existiert

$find . -name "yao*" |. xargs file
$find . -name "yao*" | *" | o-w

======================================= ====== ===========

find -name april* Dateien suchen, die mit april beginnen, im aktuellen Verzeichnis
find -name april* fprint file Dateien suchen, die mit april beginnen, im aktuellen Verzeichnis und die Ergebnisse in die Datei ausgeben
find -name ap* -o -name kann* Dateien finden, die mit ap beginnen, oder kann
/mnt -name tom.txt finden -ftype vfat. Finde Dateien mit dem Namen tom.txt und dem Dateisystemtyp vfat unter /mnt
finde /mnt -name t .txt ! -ftype vfat Suchen Sie die Datei mit dem Namen tom.txt unter /mnt und der Dateisystemtyp ist nicht vfat
suchen Sie /tmp -name wa* -type l Suchen Sie in /tmp nach Dateien, deren Namen mit wa beginnen und deren Typ ist ein symbolischer Link
find /home -mtime -2 Nach Dateien suchen, die in den letzten zwei Tagen geändert wurden Dateien, auf die zugegriffen wurde
find /home -mmin +60 Nach Dateien unter /home suchen, die geändert wurden vor 60 Minuten
find /home -amin +30 Dateien durchsuchen, auf die vor 30 Minuten zugegriffen wurde
find /home -newer tmp.txt Suchen Sie unter /home nach Dateien oder Verzeichnissen, deren Aktualisierungszeit aktueller als tmp.txt ist
find /home -anewer tmp.txt Dateien oder Verzeichnisse
find /home -used -2 ​​​​Listen Sie die Dateien oder Verzeichnisse auf, auf die innerhalb von 2 Tagen nach der Änderung der Datei oder des Verzeichnisses zugegriffen wurde
find /home -user cnscn Listen Sie die Dateien oder Verzeichnisse im /home-Verzeichnis auf. Dateien oder Verzeichnisse, die dem Benutzer cnscn
find /home -uid +501 gehören. Listen Sie die Dateien oder Verzeichnisse mit Benutzeridentifikationscodes größer als 501 im /home-Verzeichnis auf
find /home -group cnscn Listen Sie die Gruppe in /home als cnscn auf
find /home -gid 501 Listen Sie Dateien oder Verzeichnisse mit der Gruppen-ID 501 in /home auf
find /home -nouser Listen Sie Dateien oder Verzeichnisse in / auf home, die nicht zu lokalen Benutzern gehören
find /home -nogroup Listen Sie die Dateien oder Verzeichnisse in /home auf, die nicht zur lokalen Gruppe gehören
find /home -name tmp.txt -max Depth 4 Listen Sie die tmp auf. txt in /home Die maximale Tiefe der Suche beträgt 3 Ebenen
find /home -name tmp.txt -min Depth 3 Beginnen Sie mit der Suche ab Ebene 2
find /home -empty Suchen Sie nach Dateien oder leeren Verzeichnissen mit Dateien der Größe 0 k
find /home -size -512k Dateien mit weniger als 512 KB suchen
find /home -links +2 Dateien oder Verzeichnisse mit einer Hardlink-Nummer größer als 2 suchen Dateien mit Berechtigungen 700 durchsuchen Oder Verzeichnis
find /tmp -name tmp.txt -exec cat {} ;
find /tmp -name tmp.txt -ok rm {} ;

find / -amin -10 # Dateien finden, auf die in den letzten 10 Minuten im System zugegriffen wurde
find / -atime -2 # Dateien finden, auf die in den letzten 48 Stunden im System zugegriffen wurde
find / -empty # Suchen Sie nach leeren Dateien oder Ordnern im System
find / -group cat >find / -mtime -1 #Finden Sie Dateien, die in den letzten 24 Stunden im System geändert wurden
find / -nouser #Finden Sie dazugehörende Dateien an ungültige Benutzer im System
find / -user fred #Dateien im System finden Dateien, die dem Benutzer FRED gehören

Alle gewöhnlichen Dateien im aktuellen Verzeichnis durchsuchen

# find -. Typ f -exec ls -l {} ;

-rw-r–r– 1 Root Root 34928 2003-02-25 ./conf/httpd.conf

-rw-r–r– 1 Root Root 12959 25.02.2003 ./conf/magic
-rw-r–r– root ============================= ===================
Suchen Sie Dateien im Verzeichnis /logs, die vor mehr als 5 Tagen geändert wurden, und löschen Sie sie:
$ find logs -type f -mtime +5 -exec -ok rm {} ;

==== ============================ =================

Anfrage zum Tag der geänderten Datei
[root@book class]# find ./ -mtime -1 -type f -exec ls - l {} ;

============ =========================== =========

Fragen Sie die Datei ab und fragen Sie, ob Sie sie anzeigen möchten
[root@book class]# find ./ -mtime -1 -type f -ok ls -l {} ;
< ls … ./classDB.inc.php > ? @book class]# find ./ -mtime -1 -type f -ok ls -l {} ; #

================== ========================= ======
Fragen Sie es ab und übergeben Sie es zur Verarbeitung an awk
[root@book class] # who | awk '{print $1"t"$2}'
cnscn pts/0

======================= ====================== ====
awk—grep—sed

[root@book class]# df -k | ///g"

Dateisystem
sda2
sda1
[root@book class]# df -k | awk '{print $1}' | grep -v 'none'

Datei system

/dev/sda2
/dev/sda1



1 )Suchen Sie alle *.h in /tmp und suchen Sie in diesen Dateien nach „SYSCALL_VECTOR“ und schließlich alle Dateinamen ausdrucken, die „SYSCALL_VECTOR“ enthalten

A) find /tmp -name „*.h“ | exec grep „SYSCALL_VECTOR“ {} ; -print

2)find / -name Dateiname -exec rm -rf {} ;
find / -name Dateiname -ok rm -rf {} ;

3) Wenn Sie beispielsweise Dateien finden möchten, die größer als 3 MB auf der Festplatte sind:

find . -size +3000k -exec ls -ld {} ;

4) Kopieren Sie das gefundene Zeug an einen anderen Ort

find *.c -exec cp '{}' /tmp ';'

Wenn es spezielle Dateien gibt, können Sie cpio verwenden, oder Sie können diese Syntax verwenden:

find cpio -pdv newdir

6) Dateien suchen, die am 30.11.2004 um 16:36:37 geändert wurden
# A=`find ./ -name "*php"` | /null |. grep "2004-11-30 16:36:37"

Linux-all, Linux | >18. April 2006

Um alle *.h in /usr/linux zu finden, suchen Sie in diesen Dateien nach „SYSCALL_VECTOR“ und drucken Sie schließlich alle Dateinamen aus, die „SYSCALL_VECTOR“ enthalten. Es gibt mehrere Methoden, dies zu erreichen

find /usr/linux -name "*.h" |. xargs -n50 grep SYSCALL_VECTOR

grep SYSCALL_VECTOR /usr/linux/*.h |. uniq > filename >find /usr/linux -name "*.h" -exec grep "SYSCALL_VECTOR" {} ; -print

Ich habe find / -name filename| verwendet, aber es war erfolglos Fragen Sie, warum es nicht erfolgreich war?
find / -name filename -exec rm -rf {} ;
find . -name filename |rm -rf try {}, um das gefundene Ergebnis anzuzeigen.
; entspricht der „Verfassung“, es gibt nichts zu sagen, es ist nur so festgelegt, dass nach -exec ein Symbol erforderlich ist, das das Ende des Befehls anzeigt. Die Antwort finden Sie in man find.

Damit rm das Ergebnis von „find“ erkennt, gehen Sie wie folgt vor:

find / -name Dateiname |. Der von der Standardeingabe übergebene Befehl
sucht nach Dateien, die eine bestimmte Zeichenfolge enthalten die Zeichenfolge „die Zeichenfolge, die Sie finden möchten ...“ im aktuellen Verzeichnis:
$find . -type f -exec grep „die Zeichenfolge, die Sie finden möchten ...“ {} -print

Beginnen Sie mit der Überprüfung der tmpfile aus dem Stammverzeichnis und löschen Sie sie sofort, sobald sie gefunden wurde
find / -name "tmpfile" -exec rm {} ;

Perm-Problem mit find
Was bedeutet der folgende Befehl? Der Schlüssel ist das - vor der Nummer. Alle anderen kennen
find -name ".*" -perm -007

Ich weiß,

find -name ".*" -perm 755
Das wird verwendet Um versteckte Dateien mit Berechtigungsbit 755 zu finden, habe ich übrigens den Pfadnamenparameter von „find“ in den obigen Befehlen weggelassen. Durchsucht „find“ standardmäßig das aktuelle Arbeitsverzeichnis?

Wenn ich -ok anstelle von -exec verwende, muss ich dann trotzdem {} hinzufügen ;?

Das ist bereits klar, wird aber trotzdem benötigt, da -ok nur der Eingabeaufforderungsmodus von -exec ist. Es fügt lediglich einen weiteren Schritt zur Bestätigung des Vorgangs hinzu. Ich habe die Bedeutung dieser E-Texte einfach nicht verstanden Entschuldigung
-007 bezieht sich auf das Finden von Dateien, die von allen Benutzern gelesen, geschrieben und ausgeführt werden können~~~
Erklären Sie?
Gibt es einen Unterschied zwischen find -name ".*" -perm -007 und find -name ".*" -perm 777?
Wie bist du auf -007 gekommen?
Aber es gibt ein Problem
Ich verwende find -perm -100, um das aktuelle Verzeichnis aufzulisten.

Das Folgende ist ein Zitat aus dem von Explorer am 01.10.2002 um 06:15 Uhr veröffentlichten Inhalt:
-007 bezieht sich auf das Finden von Dateien, die von allen Benutzern gelesen, geschrieben und ausgeführt werden können Vorsichtig~~~
-007 besteht darin, Dateien zu finden, die von anderen Benutzern (verschiedenen Gruppen, nicht Eigentümern) gelesen, geschrieben und ausgeführt werden können. Sie müssen nicht von derselben Gruppe lesbar und beschreibbar sein, - bedeutet das Die Mindestberechtigung ist 007.
Das folgende Zitat stammt von What Xiaobaicai, gepostet am 01.10.2002 um 10:16 Uhr:
OK, haha ​​​​
Aber es gibt ein Problem
Ich verwende find . -perm -100, um das aktuelle Verzeichnis aufzulisten. Warum?

Diese Methode findet das Verzeichnis nicht genau. -100 bedeutet, dass die Berechtigungen zumindest vom Eigentümer ausgeführt werden können.

Auf Unix-Systemen können Sie nur dann ein Verzeichnis eingeben, wenn Sie über Ausführungsrechte für die Verzeichnisdateien verfügen. Aus diesem Grund werden Verzeichnisdateien aufgelistet.
find . -perm -001 -print findet häufig Verzeichnisdateien.
Natürlich möchte ich diese Methode nicht verwenden, um Verzeichnisse zu finden, aber ich verstehe sie einfach nicht . Die Bedeutung von -100
Bedeutet -010 dann analog, dass die Berechtigung zumindest vom Eigentümer und derselben Gruppe ausführbar ist? Mit anderen Worten, 010 und – hier sind sie tatsächlich getrennt – bedeutet zumindest, dass 010 tatsächlich zur Beschreibung des Berechtigungsbits verwendet wird?
Das macht es klar, danke

Das gefundene Zeug an einen anderen Ort kopieren?
find *.c -exec cp '{}' /tmp ';'
Wenn es etwas Besonderes gibt Dateien können Sie cpio verwenden, oder Sie können diese Syntax verwenden:
find cpio -pdv newdir

Suchen Sie Dateien innerhalb eines bestimmten Größenbereichs auf der Festplatte
Zum Beispiel , um Dateien zu finden, die größer als 3 MB sind:

find . -size +3000k -exec ls -ld {} ;


Wie verwende ich „find“, um an einem bestimmten Tag geänderte Dateien zu finden?
Sie können diese Befehlszeile verwenden, um Folgendes zu erreichen:
A=`find ~ -print` | 🎜>

So verwenden Sie den Suchbefehl, um die Shell eines bestimmten Zeitraums zu finden. Zum Beispiel von 11 Uhr bis 12 Uhr. Danke
Erstellen Sie ein Skript „richterzeit“ mit folgendem Inhalt:
ls -l $*|awk '{split($8,hour,":");if((hour[1]>23 || Stunde[ 1 ] < 1)&&hour[1]<24)print}'
Gehen Sie zu dem Verzeichnis, das Sie suchen möchten, und führen Sie
find ./ -name "*" -exec Judgetime {} ;
aus Achten Sie auf das Zeitformat. Es handelt sich um eine 24-Stunden-Uhr.
Danke, was ist, wenn ich auf Minuten genau sein möchte
touch -t 04241112 starttemp #Auf 12 Minuten genau
touch -t 04241220 endtemp #Ab 12:20
find [dir] - neueres starttemp -a ! -newer endtemp -exec ls -l {} ;
nowスr
Was ist mit der Datei gestern um 12:10?
Wäre es bei der täglichen Ausführung nicht ausreichend, es durch das Datum und den Zeitstempel dieses Tages zu ersetzen?
Ich weiß nicht, ob er alle von 11:00 bis 12:00 Uhr gefunden hat. Hat er sie nur einmal oder jeden Tag ausgeführt?
In diesem Fall habe ich wohl vergessen, wo ich meine Sachen hingelegt habe. Ich erinnere mich nur daran, dass es spät in der Nacht war.
Das macht Sinn!
Wie von Bambus erwartet!
Du weißt nicht nur, wie man Probleme löst, sondern du weißt auch, unter welchen Umständen solche Probleme entstehen.
Das Problem tritt erneut auf. beim Erstellen dieser Datei. In der Spalte, die eigentlich die Zeit sein sollte, steht jetzt 2002 statt 12:00 Uhr.
Warten Sie einfach, bis 12:00 Uhr vergangen ist!

Dateien mit einem bestimmten Datum löschen
find ./ -name file name-exec rm -f {};
Beispiel: Um Dateien zu löschen, die innerhalb der aktuellen 30 Tage nicht verwendet wurden, verwenden Sie der folgende Befehl:
find / -atime +30 -exec rm -f {} ;
Ich habe versucht, selbst einen kurzen Abschnitt von SHELL zu schreiben, und habe auch die Befehle ll, grep und rm verwendet, aber das war nicht der Fall zufriedenstellend.
Verwenden Sie eine FOR-Anweisung in der gefilterten Dateinamenliste und führen Sie dann rm aus. Jetzt möchte ich diese SHELL so erweitern, dass sie jeden Tag regelmäßig ausgeführt werden kann, um Dateien vor n Tagen zu löschen. Kann mir jemand ein paar Tipps geben?
Ich habe noch eine andere Frage: Ich habe die Methode „find / -atime +30 -exec rm -f {} ;
“ ausprobiert, aber sie scheint nicht zu funktionieren. Der Parameter -atime n soll nach Dateien suchen, auf die vor n Tagen zugegriffen wurde. Was ich nicht verstehe, ist, was der Zeitbezugspunkt hier ist und wie n Tage berechnet werden.
Frage 2: Habe ich den falschen Befehl „ll |cut -f 1“ verwendet? Ich wollte nur die in ll aufgeführten Dateinamen entfernen, konnte es aber mit dem Befehl „cut -f“ nicht tun, also habe ich es getan um es stattdessen zu verwenden. ll |cut -c 59- Auf diese Weise erhalte ich den gewünschten Dateinamen, aber es ist eine Pool-Idee! Ich habe auch versucht, awk zu verwenden, aber es scheint nicht richtig zu sein. Mal sehen, ob mir jemand ein paar Tipps geben kann. TKS SO VIEL. Frage 3: Wie ändere ich das Datumsformat des I-Knotens? von meinem aktuellen System angezeigt wird:
-rw-r—– 1 msahz01 Benutzer 2253 2. Februar 2002 poheader.i
Ich möchte dies in
-rw-rw-rw- 1 Hausbenutzer 2193 ändern 19. April 2001 hkdisp. p
Wie kann das erreicht werden?
awk sollte funktionieren
ll |. awk '{print $9}'
Dateien löschen, die älter als wie viele Tage sind
find /yourpath -mtime +31 -exec rm {} ;
find /yourpath - mtime +366 -exec rm {} ;

Was ist der Unterschied zwischen -ctime, -mtime und -atime in find

Welche Beziehung besteht zwischen -ctime und -mtime?

Wenn sich die ctime des übergeordneten Verzeichnisses ändert, wird die ctime der darunter liegenden Dateien automatisch geändert
-ctime und -mtime, -atime Wo werden diese Informationen gespeichert

Ich verwende -mtime? - 1 Die neu erstellten oder geänderten Dateien gefunden.

Aber wie können wir die Dateien finden, die innerhalb eines Tages verschoben wurden (ihre Zeit ist die ursprüngliche Zeit, früher als einen Tag)?

Verwenden Sie das -newer Option.

Sie können zunächst wie folgt eine Datei mit der gewünschten Zeit berühren:
$ touch -t 08190800 test
$ ls -l test
-rw-r–r– 1 dba other 0 Aug 19 08:00 test
then
$ find . -newer test -print
.
./.sh_history
$ ls -l .sh_history
-rw——- 1 dba other 154 20. August 17:39 .sh_history

Verwenden Sie Touch, um die Datei jederzeit zu schreiben, und verwenden Sie dann die Option -newer!, um erfolgreich zu sein.

1. ctime enthält die Änderungszeit der Inode-Informationen.

2 Nein.
3 Diese Informationen sollten im gespeichert werden Superblock des Dateisystems.

Ich habe das Buch überprüft. -ctime bezieht sich auf die Änderung des Inodes (oder die Änderung des Dateistatus).

Welche Informationen werden im Inode gespeichert?
Ich habe einiges gemacht kleine Tests, -mtime geändert, -ctime muss auch geändert werden.
Ändern Sie den Dateinamen, -ctime wird sich auch ändern.
Wer kann antworten, was in i-node gespeichert ist?

vi / usr/include/sys/inode.h

Master, ich kann nicht auf /usr/include/sys/inode.h zugreifen.
Der Auszug lautet wie folgt:
Verzeichnisse enthalten Verzeichniseinträge und eine Indexknotenreferenznummer (i-Knotennummer). Um die Geschwindigkeit zu erhöhen und den Speicherplatz zu nutzen, werden die Daten in einer Datei an verschiedenen Orten im Speicher des Computers gespeichert. Der i-Knoten enthält die Adressen, die zum Auffinden aller verstreuten Datenblöcke verwendet werden Eine Datei. Der I-Node zeichnet auch andere Informationen über die Datei auf, einschließlich Änderungszeit und Zugriffszeit, Zugriffsmodi, Anzahl der Links, Dateieigentümer und Dateityp.
Aber ich habe festgestellt, dass -atime geändert wurde, aber - Ctime wurde nicht geändert. Warum? Ändern der Inode-Informationen und des Ctime-Änderns?

Ich bin mit dem von Ihnen geposteten Artikel nicht einverstanden. Unter Sco Unix sind atime, ctime und mtime eine Struktur namens stat. (stat_32), Die Struktur von Inode unter

typedef struct inode
{

struct inode *i_forw; inode hash chain */

struct inode *i_back; /* '' */
struct inode *av_forw; /* freelist chain */
struct inode *av_back; /* '' */
int *i_fsptr; /* „typloser“ Zeiger auf fs-abhängig */
ino32_t i_number; /* i Zahl, 1-zu-1 mit Dev-Adresse */
ushort i_ftype; /* file type = IFDIR, IFREG usw. */
short i_fstyp; /* Dateisystemtyp */
off_t i_size; /* Größe der Datei */
ushort i_gid; Gruppe von Besitzern */
ushort i_want; /* i_flag Erweiterung zur Vermeidung von MP-Rennen */
ushort i_count; /* reference count */
short i_nlink; /
dev_t i_rdev; /* Rohgerätenummer */
#define i_namtype i_rdev /* i_ftype==IFNAM-Subtyp */
dev_t i_dev; /* Gerät, auf dem sich der Inode befindet */
struct mount * i_mton;/* ptr zum Mounten eines Tabelleneintrags, in dem */
/* dieses Verzeichnis gemountet ist */
struct Region *i_rp; /* ptr in die freigegebene Region, falls vorhanden */
struct stdata *i_sp; /* ptr zum zugehörigen Stream */
struct iisem *isem; /* ptr zu XENIX-Semaphoren */
struct iisd *isd; /* ptr zu XENIX-Shared-Daten */
} i_un;
#define i_mnton i_un.i_mton /* i_ftype ==IFDIR IMOUNT */
#define i_rptr i_un.i_rp /* i_ftype==IFREG ||. i_ftype==IFBLK */
#define i_sptr i_un.i_sp /* i_ftype ==IFCHR ||. i_ftype==IFIFO */
#define i_sem i_un.isem /* i_ftype==IFNAM && i_namtype==IFSEM */
#define i_sd i_un.isd /* i_ftype==IFNAM && i_namtype ==IFSHD */

struct fstypsw *i_fstypp; /* ptr to file system switch FSPTR */
long *i_filocks; /* pointer to filock (structure) list */
unsigned long i_mappages ; /* Anzahl der aktuell zwischengespeicherten Seiten * /
unsigned long i_vcode; /* read-ahead block save (NFS) */

short i_wcnt; /* write open count oder ITEXT count */

struct lockb i_cilock; /* tas zum Synchronisieren von i_flag-Änderungen */
ushort i_rdlocks; /* count of non-exclusive locks */
} inode_t;

Der Zugriff auf eine Datei kann also die Inode-Informationen nicht ändern.
Verwenden Sie die Befehle chown, chgrp, chmod. Sie können mtime und ctime sehr gut vergleichen.
Chown ändert den Besitzer einer Datei. Es kann mit ctime gefunden werden, aber nicht mit mtime.

Vielen Dank, Mozhu! Ich wurde oben interviewt.

Die Ergebnisse des Tests sind wie folgt:
Ändern Sie die Datei, -mtime geändert, -ctime wird ebenfalls geändert.
Zugriff auf die Datei, -atime wird geändert, -ctime Keine Änderung
chown, chgrp, chmod, mv, werden alle -ctime ändern, haben aber keine Auswirkungen auf -atime und -mtime.

touch kann -mtime und/oder -atime ändern, aber touch -a ändert nur den Zugriff. Wenn die Zeit geändert wird, wird -ctime natürlich auch geändert. ctime wird ebenfalls geändert.

Es scheint, dass es viele andere Dinge gibt, die -ctime ändern können, was unklar ist.
Gibt es eine Möglichkeit, -mtime, atime, ctime anzuzeigen?
Können Sie -ctime verwenden? um inkrementelle Dateien in einem Verzeichnis zu sichern oder zu übertragen?
Vielen Dank!

Es wird kein Tool angezeigt (Vielleicht weiß ich es nicht)
Ersetzen Sie st_mtime im folgenden Programm durch st_ctime oder st_atime und Sie werden bekommen, was Sie wollen.
#include
int
main (int argc, char * *argv)
{

struct stat buf;

char date[80];
char fname[80];
printf("Geben Sie den Dateinamen (mit vollständigem Pfad) ein, um mtime zu überprüfen: " );
scanf("%s",fname);
stat(fname, &buf );
printf ("mtime (in sec) of %s = %ldn", fname, buf.st_mtime) ;
strcpy(date, ctime((time_t *)&(buf.st_mtime)));
printf ("mtime (in date) of %s = %sn", fname, date);
}

Was ist bei der Dateisicherung nicht erlaubt?

mtime ls -l Der Zeitpunkt, zu dem der Dateiinhalt zuletzt geändert wurde
atime ls -lu Der Zeitpunkt, zu dem zuletzt auf die Datei zugegriffen wurde
ctime ls -li zeigt den Status der letzten Dateiänderungen an, z. B. Dateiänderungen, Attributbesitzeränderungen , Knoten, Linkänderungen usw. Es sollte nicht auf Änderungen vor und nach der Zeit beschränkt sein

Ich habe die Hilfe von ls gelesen und dachte, es wäre nur Sortieren nach ctime oder atime, die angezeigte Zeit ist immer noch mtime 🎜>

Nach sorgfältigem Vergleich ist das, was Ayhan gesagt hat, richtig. Vielen Dank, Ayhan.

Danke ahyan für den Tipp! Ich habe Folgendes auf Solaris versucht:
mtime wird mit ls -l gesehen
atime wird mit ls -lu gesehen
ctime wird mit ls -lc gesehen. ls -li Nur Inode-Nummer)
Der Auszug lautet wie folgt:
-c Verwendet die Zeit der letzten Änderung des I-Node (Datei
erstellt, Modus geändert usw.) zum Sortieren (-t )
oder Drucken (-l oder -n).
-u Verwendet die Zeit des letzten Zugriffs anstelle der letzten Änderung
zum Sortieren (mit der Option -t) oder Drucken (mit der Option
-l Option).
-i Druckt für jede Datei die I-Node-Nummer in der ersten
Spalte des Berichts aus.


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn