回答:
設定ファイルをインストールしたパッケージを確認します。
$ dpkg -S unity-greeter.conf
unity-greeter: /etc/lightdm/unity-greeter.conf
ご覧のとおり、パッケージの名前はunity-greeter
です。
のよう/etc/pam.d
にディレクトリを削除した場合は、ディレクトリパスを使用して、追加したすべてのパッケージをリストできます。
$ dpkg -S /etc/pam.d
login, sudo, libpam-runtime, cups-daemon, openssh-server, cron, policykit-1, at, samba-common, ppp, accountsservice, dovecot-core, passwd: /etc/pam.d
<package-name>
パッケージの名前に置き換えて、次のコマンドを実行します。
sudo apt install --reinstall -o Dpkg::Options::="--force-confask,confnew,confmiss" <package-name>
そして、ディレクトリを復元するために:
sudo apt install --reinstall -o Dpkg::Options::="--force-confask,confnew,confmiss" $(dpkg -S /etc/some/directory | sed 's/,//g; s/:.*//')
すべてが期待どおりに機能した場合、メッセージが表示されます。
Configuration file `/etc/lightdm/unity-greeter.conf', does not exist on system.
Installing new config file as you requested.
すべてのPulseAudio構成ファイルを再インストールする必要がある場合の実用的な例:
apt-cache pkgnames pulse |xargs -n 1 apt-get -o Dpkg::Options::="--force-confmiss" install --reinstall
--force-confask
削除せずに追加の利点は、変更と元の変更の差分を表示できることです。
ucf
この--force-confmiss
オプションで管理されている設定ファイルを復元するDebianでは動作しませんsudo UCF_FORCE_CONFFMISS=1 apt-get --reinstall install [pkgname]
。使用する必要があります。
-o
「dpkg:error:unknown option -o」エラーが表示されましたが、--option
代わりに使用するとうまくいきました。Ubuntu 16.04.1。を使用しています。
多くの場合、デフォルトの構成ファイルはパッケージによって直接提供されます。そのような場合は、パッケージから特定のファイルを抽出して、ファイルを簡単に復元できます。
パッケージがファイルを提供しているかどうかを確認するには、ファイルのdpkg -S
フルパスで実行します。例えば:
$ dpkg -S /etc/ssh/sshd_config /etc/ssh/ssh_config /etc/sudoers
dpkg-query: no path found matching pattern /etc/ssh/sshd_config
openssh-client: /etc/ssh/ssh_config
sudo: /etc/sudoers
私たちが見ることができるように、/etc/ssh/sshd_config
直接、任意のパッケージで提供されていませんが、他の2つはによって提供されているopenssh-client
とsudo
、それぞれ。そのため/etc/ssh/ssh_config
、リカバリする場合は、まずパッケージを取得します。
apt-get download openssh-client
これで、ファイルを目的の場所に直接抽出するか、比較して対比したい場合、または手動でマージしたい場合は、の代わりに現在のディレクトリを基準にした目的の場所に抽出できます/
。前者の場合:
dpkg-deb --fsys-tarfile openssh-client_*.deb | sudo tar x ./etc/ssh/ssh_config -C /
-C /
伝えtar
に変更した後に抽出するために、/
対象のファイルが置き換えられてしまいますことを意味します。削除すると、tar
現在のディレクトリに抽出され、現在のディレクトリに./etc/ssh/ssh_config
存在することになります。
何らかの理由でsudo
機能しない場合は、pkexec
代わりに使用します。pkexec
どちらも機能しない場合は、リカバリモードで再起動し、/
としてマウントしrw
ます。それがうまくいかない場合...
どう/etc/ssh/sshd_config
?パッケージによって提供されていないようですが、どのように表示されましたか?
この場合(および他の多くの場合、他の例では/etc/modules
)、インストール中にパッケージメンテナースクリプトを使用してファイルが作成されました。これは、クエリに対するユーザーの応答のために構成ファイルを変更する必要がある場合によく行われます。たとえば、OpenSSHは、新しいバージョンなどでにPermitRootLogin
変更する必要があるかどうかを尋ねno
ます。
そのような場合を特定するには、メンテナースクリプトを調べます。通常、見る必要があるのはだけですpostinst
が、うまくいかない場合は、同様postinst
に試してくださいpreinst
:
grep -l /etc/ssh/sshd_config /var/lib/dpkg/info/*.postinst
この場合、私たちは幸運です:
$ grep /etc/ssh/sshd_config /var/lib/dpkg/info/*.postinst -l
/var/lib/dpkg/info/openssh-server.postinst
一致するファイルは1つだけで、運がよければ、デフォルトの構成ファイルを作成するコードが含まれています。
cat <<EOF > /etc/ssh/sshd_config
# Package generated configuration file
# See the sshd_config(5) manpage for details
# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes
# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 768
# Logging
SyslogFacility AUTH
LogLevel INFO
# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys
# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes
# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no
# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication yes
# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no
#MaxStartups 10:30:60
#Banner /etc/issue.net
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes
EOF
通常、これは次のようなものです(別の例、/etc/modules
からkmod
):
cat > /path/to/the/file <<EOF
# default contents
EOF
そのため、このコードを探して、スクリプトから直接コンテンツを取得できます。
そのようなスクリプトはありませんか?それでも、関連するパッケージのファイルリストを調べて、何かがヒットするかどうかを確認することはできますが、現時点では、簡単に一般化できる方法はありません(chrootやVM、ライブUSBなどの一時的な環境での再インストール以外)。
長期的には、構成をバージョン管理下に置いてください。塩分の価値のあるVCSであれば、ここで1日を節約でき、etckeeper
ユーティリティ/etc
はVCS を維持するタスクを大幅に簡素化します。
Ubuntuフォーラムのこのスレッドによると、ターミナルで次を実行するのと同じくらい簡単です。
sudo dpkg-reconfigure lightdm
dpkg-maintscript-helper: warning: environment variable DPKG_MAINTSCRIPT_NAME missing dpkg-maintscript-helper: warning: environment variable DPKG_MAINTSCRIPT_PACKAGE missing
。LightDMも元の構成に復元されませんでした。
sudo apt-get --reinstall install lightdm
)、まだ/etc/lightdm/unity-greeter.conf
空です。
構成ファイルを所有するパッケージを見つけます。
dpkg --search /etc/path/to/config
次のようなものが出力されます。
unity-greeter: /etc/lightdm/unity-greeter.conf
パッケージ名は「ユニティグリッター」なので、パッケージをダウンロードします。
apt-get download unity-greeter
次に、ファイルシステムツリーデータをtarファイルに抽出します。
dpkg-deb --fsys-tarfile unity-greeter_version-0ubuntu1_amd64.deb > pkg.tar
最後に、必要な場所にある正確な構成のみを抽出します。
tar -Oxf pkg.tar ./etc/lightdm/unity-greeter.conf |
sudo tee /etc/lightdm/unity-greeter.conf
./etc/lightdm/unity-greeter.conf
アーカイブ内のファイル名です。/etc/lightdm/unity-greeter.conf
保管するために送信する場所です。または、@ Muruが提案したように、1つのライナーでそれを行うことができます。
dpkg-deb --fsys-tarfile unity-greeter_version-0ubuntu1_amd64.deb |
sudo tar -x -C / ./etc/lightdm/unity-greeter.conf
dpkg-deb --fsys-tarfile unity-greeter_version-0ubuntu1_amd64.deb | sudo tar x -C / ./etc/lightdm/unity-greeter.conf
、展開tar
する/
前にcdします。
Ubuntu 17.04でも同じ問題が発生しました。ポストインストールでは、からのテンプレートを使用し/usr/share/openssh/
ます。rootloginが有効かどうかを確認し、このオプションを設定してにコピーし/etc/ssh
ます。その後、いくつかのucfおよびucfr呼び出しを実行します(その目的はわかりません)。
コピー/usr/share/openssh/sshd_config
先/etc/ssh/sshd_config
:
sudo cp /usr/share/openssh/sshd_config /etc/ssh/sshd_config
sshd_config
必要に応じて調整してください。
これはすべての構成ファイルで機能するわけではありません。については/etc/nsswitch.conf
、etc / nsswitch.confファイルを復元/再作成する方法を参照してください。でそのファイルを再構築することはできないようですdpkg-reconfigure
。
ファイルを削除(バック)し、で再インストールunity-greeter
しapt-get install --reinstall unity-greeter
ます。