답변:
구성 파일을 설치 한 패키지를 찾으십시오 .
$ 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
옵션 으로 관리되는 설정 파일을 복원 하려면 작동하지 않습니다 sudo UCF_FORCE_CONFFMISS=1 apt-get --reinstall install [pkgname]
.
-o
"dpkg : error : unknown option -o"오류가 발생했지만 --option
대신 사용했을 때 작동한다는 것이 매우 이상합니다 . 우분투 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
직접 패키지가 제공되지 않지만, 다른 두에서 제공 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
.
이러한 경우를 식별하려면 관리자 스크립트를 통해 greping을 시도하십시오. 일반적으로을 살펴보면 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
하나의 파일 만 일치했으며 운 좋게도 기본 구성 파일 을 작성하는 코드가 포함되어 있습니다 .
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는 여기에 하루에 저장할 수 있으며, 유틸리티는 상당히 유지하는 작업을 단순화 VCS는에 있습니다.etckeeper
/etc
우분투 포럼 의이 스레드에 따르면 터미널에서 다음을 실행하는 것만 큼 간단합니다.
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
패키지 이름이 "unity-greeter"이면 패키지를 다운로드하십시오.
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가 제안했듯이 하나의 라이너로 할 수 있습니다.
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를 것이다 /
추출하기 전에.
우분투 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
.