[RUBY] Die Berechtigungsspezifikation der FileUtils-Methode ist eine Oktalzahl.

Ich möchte die Berechtigung beim Erstellen eines Verzeichnisses mit mkdir_p angeben ...

Über mkdir_p

Erstellen Sie das Verzeichnisverzeichnis und alle übergeordneten Verzeichnisse.

Zum Beispiel

require 'fileutils'
FileUtils.mkdir_p('/usr/local/lib/ruby')
Überprüft alle Verzeichnisse unten(Wenn nicht)Erstellen.

/usr
/usr/local
/usr/local/bin
/usr/local/bin/ruby

Zitat https://docs.ruby-lang.org/ja/latest/class/FileUtils.html#M_MAKEDIRS

Versuchen Sie zu erstellen, indem Sie die Berechtigung angeben

Mit Linux-Befehlen .. mkdir -p -m 755. / hoge1 / hoge2 / hoge3 / ruby Rubin

test.rb


require 'fileutils'

FileUtils.mkdir_p('./hoge1/hoge2/hoge3/ruby', mode: 755)

Wunder?

Sofort ausführen

$ ruby test.rb
$ ls -la
d-wxrw--wt    3 casix  staff     96 Jun 12 01:06 hoge1/

Nein, offensichtlich ist die Autorität nicht 755 ...

Ich habe den Quellcode von mkdir_p gelesen

fileutils.rb


# File fileutils.rb, line 194
def mkdir_p(list, mode: nil, noop: nil, verbose: nil)
  list = fu_list(list)
  fu_output_message "mkdir -p #{mode ? ('-m %03o ' % mode) : ''}#{list.join ' '}" if verbose
  return *list if noop

  ...
end

Wenn Sie die Verarbeitung des in den Modus versetzten Arguments sorgfältig lesen

mkdir -p #{mode ? ('-m %03o ' % mode) : ''}

ein

#{mode ? ('-m %03o ' % mode) : ''}

Sollte 755 sein,

'-m %03o ' % mode

Wenn Sie 755 in den Modus versetzen

irb(main):001:0> mode = 755
=> 755
irb(main):002:0> '-m %03o ' % mode
=> "-m 1363 "

1363 wird zurückgegeben

Das bedeutet ...

FileUtils.mkdir_p('./hoge1/hoge2/hoge3/ruby', mode: 755)
# ↓
# $ mkdir -p -m 1363 ./hoge1/hoge2/hoge3/ruby

Das war es

Das Argument sollte eine Oktalzahl sein, keine Dezimalzahl

'-m %03o ' % mode

# %Da 03o als 0-gepackte 3-stellige Oktalzahl ausgegeben wird
#Im Modus die Zahl, die durch Konvertieren von 755 in Dezimalzahl erhalten wird(493)Einstellen

irb(main):001:0> mode = 0o755
=> 493
irb(main):002:0> '-m %03o ' % mode
=> "-m 755 "

Sieht gut aus

Versuche es zu reparieren

FileUtils.mkdir_p('./hoge1/hoge2/hoge3/ruby', mode: 0o755)

# FileUtils.mkdir_p('./hoge1/hoge2/hoge3/ruby', mode: 0755)Aber k
$ ls -la
drwxr-xr-x    3 casix  staff     96 Jun 12 01:43 hoge1/

Es scheint, dass es mit 755 eingestellt werden kann!

In FileUtils war die Berechtigungseinstellung unabhängig von mkdir_p oktal

Es war in erster Linie nicht auf mkdir_p beschränkt Alle Methoden, die Berechtigungen mit FileUtils angeben können, scheinen dieselben Spezifikationen zu haben

https://docs.ruby-lang.org/ja/latest/class/FileUtils.html#options

(Übrigens, wenn es bei 0 beginnt, vergisst man leicht das Wissen, dass es eine Oktalzahl wird ...)

Recommended Posts

Die Berechtigungsspezifikation der FileUtils-Methode ist eine Oktalzahl.
Die Reihenfolge der Java-Methodenmodifikatoren ist festgelegt
[Ruby] Zähle eine gerade Zahl in einem Array mit der geraden? -Methode
Was ist die Zupfmethode?
Gilt die Methode der primitiven spezialisierten IntFunction oder applyAsInt?
[Ruby] Fragen und Überprüfung der Anzahl der Methodenargumente
Was ist der Unterschied zwischen einer Aktion und einer Instanzmethode?
Was ist die Initialisierungsmethode?
Methode, um die Anzahl der Jahre zu addieren und das Monatsende zu erhalten
Untersuchungsmethode, wenn die CPU des Servers, auf dem Java ausgeführt wird, schwer ist
'% 02d' Was ist der% von% 2?
Informationen zur Rolle der Initialisierungsmethode
Was für eine Methode ist define_method?
Einführung des Heartbeat-Loggers, der die ausgeführte Methode / Zeilennummer regelmäßig protokolliert
Rufen Sie den Typ eines Elements eines Arrays ab, um festzustellen, ob es sich um ein Array handelt
Was ist ein Test? ・ Über die Wichtigkeit eines Tests
Vergleichen Sie Elemente eines Arrays (Java)
So bestimmen Sie die Anzahl der Parallelen
Was ist die Hauptmethode in Java?
Wie ist die Datenstruktur von ActionText?
Vertiefte mein Verständnis der Zusammenführungsmethode
Über die Anzahl der Threads von Completable Future
[Java] Überprüfen Sie die Anzahl der Zeichen
[Swift] So ermitteln Sie die Anzahl der Elemente in einem Array (Super Basic)
Upcast (Java), das den Änderungsbetrag reduzieren kann, wenn die Spezifikation geändert wird
[Java] Ist es nicht erforderlich, "Identität" bei der Implementierung der equals () -Methode zu überprüfen?
Ob das Gesamtprodukt der ersten n Primzahlen plus 1 eine Primzahl ist