mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-11 05:17:44 +03:00
delta: if prefix is specified, only show overrides there
systemd-delta /run/systemd/system will show all unit overrides in /run, etc.
This commit is contained in:
parent
f939e9a47c
commit
6096dfd616
@ -49,7 +49,9 @@
|
||||
|
||||
<refsynopsisdiv>
|
||||
<cmdsynopsis>
|
||||
<command>systemd-delta <arg choice="opt" rep="repeat">OPTIONS</arg> <arg choice="opt" rep="repeat">SUFFIX</arg></command>
|
||||
<command>systemd-delta</command>
|
||||
<arg choice="opt" rep="repeat">OPTIONS</arg>
|
||||
<arg choice="opt" rep="repeat"><replaceable>PREFIX</replaceable><optional>/<replaceable>SUFFIX</replaceable></optional>|<replaceable>SUFFIX</replaceable></arg>
|
||||
</cmdsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
@ -57,18 +59,46 @@
|
||||
<title>Description</title>
|
||||
|
||||
<para><command>systemd-delta</command> may be used to
|
||||
identify and compare configuration files in
|
||||
<filename>/etc</filename> that override default
|
||||
counterparts in <filename>/usr</filename>. The command
|
||||
line argument can be one or more name of a subdirectories of
|
||||
<filename>/etc</filename> or
|
||||
<filename>/usr/lib</filename> to compare, such as
|
||||
<filename>tmpfiles.d</filename>, <filename>sysctl.d</filename> or
|
||||
<filename>systemd/system</filename>.</para>
|
||||
identify and compare configuration files that override
|
||||
other configuration files. Files in
|
||||
<filename>/etc</filename> have highest priority, files
|
||||
in <filename>/run</filename> have the second highest
|
||||
priority, ..., files in <filename>/lib</filename> have
|
||||
lowest priority. Files in a directory with higher
|
||||
priority override files with the same name in
|
||||
directories of lower priority. In addition, certain
|
||||
configuration files can have <literal>.d</literal>
|
||||
directories which contain "drop-in" files with
|
||||
configuration snippets which augment the main
|
||||
configuration file. "Drop-in" files can be overriden
|
||||
in the same way by placing files with the same name in
|
||||
a directory of higher priority (except that in case of
|
||||
"drop-in" files, both the "drop-in" file name and the
|
||||
name of the containing directory, which corresponds to
|
||||
the name of the main configuration file, must match).
|
||||
For a fuller explanation, see
|
||||
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
|
||||
</para>
|
||||
|
||||
<para>When no argument is specified a number of
|
||||
well-known subdirectories are searched for overridden
|
||||
files.</para>
|
||||
<para>The command line argument will be split into a
|
||||
prefix and a suffix. Either is optional. The prefix
|
||||
must be one of the directories containing
|
||||
configuration files (<filename>/etc</filename>,
|
||||
<filename>/run</filename>,
|
||||
<filename>/usr/lib</filename>, ...). If it is given,
|
||||
only overriding files contained in this directory will
|
||||
be shown. Otherwise, all overriding files will be
|
||||
shown. The suffix must be a name of a subdirectory
|
||||
containing configuration files like
|
||||
<filename>tmpfiles.d</filename>,
|
||||
<filename>sysctl.d</filename> or
|
||||
<filename>systemd/system</filename>. If it is given,
|
||||
only configuration files in this subdirectory (across
|
||||
all configuration paths) will be analyzed. Otherwise,
|
||||
all configuration files will be analyzed. If the
|
||||
commandline argument is not given at all, all
|
||||
configuration files will be analyzed. See below for
|
||||
some examples.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
@ -168,9 +198,28 @@
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Examples</title>
|
||||
|
||||
<para>To see all local configuration:</para>
|
||||
<programlisting>systemd-delta
|
||||
</programlisting>
|
||||
|
||||
<para>To see all runtime configuration:</para>
|
||||
<programlisting>systemd-delta /run
|
||||
</programlisting>
|
||||
|
||||
<para>To see all system unit configuration changes:</para>
|
||||
<programlisting>systemd-delta systemd/system
|
||||
</programlisting>
|
||||
|
||||
<para>To see all runtime "drop-in" changes for system units:</para>
|
||||
<programlisting>systemd-delta --type=extended /run/systemd/system
|
||||
</programlisting>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Exit status</title>
|
||||
|
||||
@ -181,7 +230,8 @@
|
||||
<refsect1>
|
||||
<title>See Also</title>
|
||||
<para>
|
||||
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
|
||||
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
|
||||
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
|
@ -4,6 +4,7 @@
|
||||
This file is part of systemd.
|
||||
|
||||
Copyright 2012 Lennart Poettering
|
||||
Copyright 2013 Zbigniew Jędrzejewski-Szmek
|
||||
|
||||
systemd is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU Lesser General Public License as published by
|
||||
@ -346,7 +347,7 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
|
||||
}
|
||||
}
|
||||
|
||||
static int process_suffix(const char *suffix) {
|
||||
static int process_suffix(const char *suffix, const char *onlyprefix) {
|
||||
const char *p;
|
||||
char *f;
|
||||
Hashmap *top, *bottom, *drops;
|
||||
@ -391,20 +392,23 @@ static int process_suffix(const char *suffix) {
|
||||
o = hashmap_get(bottom, key);
|
||||
assert(o);
|
||||
|
||||
if (path_equal(o, f))
|
||||
notify_override_unchanged(f);
|
||||
else {
|
||||
k = found_override(f, o);
|
||||
if (k < 0)
|
||||
r = k;
|
||||
else
|
||||
n_found += k;
|
||||
if (!onlyprefix || startswith(o, onlyprefix)) {
|
||||
if (path_equal(o, f)) {
|
||||
notify_override_unchanged(f);
|
||||
} else {
|
||||
k = found_override(f, o);
|
||||
if (k < 0)
|
||||
r = k;
|
||||
else
|
||||
n_found += k;
|
||||
}
|
||||
}
|
||||
|
||||
h = hashmap_get(drops, key);
|
||||
if (h)
|
||||
HASHMAP_FOREACH(o, h, j)
|
||||
n_found += notify_override_extended(f, o);
|
||||
if (!onlyprefix || startswith(o, onlyprefix))
|
||||
n_found += notify_override_extended(f, o);
|
||||
}
|
||||
|
||||
finish:
|
||||
@ -423,24 +427,41 @@ finish:
|
||||
return r < 0 ? r : n_found;
|
||||
}
|
||||
|
||||
static int process_suffix_chop(const char *suffix) {
|
||||
static int process_suffixes(const char *onlyprefix) {
|
||||
const char *n;
|
||||
int n_found = 0, r;
|
||||
|
||||
NULSTR_FOREACH(n, suffixes) {
|
||||
r = process_suffix(n, onlyprefix);
|
||||
if (r < 0)
|
||||
return r;
|
||||
else
|
||||
n_found += r;
|
||||
}
|
||||
return n_found;
|
||||
}
|
||||
|
||||
static int process_suffix_chop(const char *arg) {
|
||||
const char *p;
|
||||
|
||||
assert(suffix);
|
||||
assert(arg);
|
||||
|
||||
if (!path_is_absolute(suffix))
|
||||
return process_suffix(suffix);
|
||||
if (!path_is_absolute(arg))
|
||||
return process_suffix(arg, NULL);
|
||||
|
||||
/* Strip prefix from the suffix */
|
||||
NULSTR_FOREACH(p, prefixes) {
|
||||
if (startswith(suffix, p)) {
|
||||
suffix += strlen(p);
|
||||
const char *suffix = startswith(arg, p);
|
||||
if (suffix) {
|
||||
suffix += strspn(suffix, "/");
|
||||
return process_suffix(suffix);
|
||||
if (*suffix)
|
||||
return process_suffix(suffix, NULL);
|
||||
else
|
||||
return process_suffixes(arg);
|
||||
}
|
||||
}
|
||||
|
||||
log_error("Invalid suffix specification %s.", suffix);
|
||||
log_error("Invalid suffix specification %s.", arg);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@ -595,15 +616,11 @@ int main(int argc, char *argv[]) {
|
||||
}
|
||||
|
||||
} else {
|
||||
const char *n;
|
||||
|
||||
NULSTR_FOREACH(n, suffixes) {
|
||||
k = process_suffix(n);
|
||||
if (k < 0)
|
||||
r = k;
|
||||
else
|
||||
n_found += k;
|
||||
}
|
||||
k = process_suffixes(NULL);
|
||||
if (k < 0)
|
||||
r = k;
|
||||
else
|
||||
n_found += k;
|
||||
}
|
||||
|
||||
if (r >= 0)
|
||||
|
Loading…
Reference in New Issue
Block a user