以前在網上看文章提到說,經過apt-get的方式安裝nginx,可能安裝不是最新版本的狀況,考慮到在Ubuntu下第一次安裝nginx,之後確定會有卸載從新安裝新版本的需求,恰好剛開始學習nginx,索性練習下卸載重裝的過程。html
使用Ubuntu下的包管理工具apt來安裝nginxnginx
$ sudo apt-get install nginx
一樣使用apt來卸載nginxweb
$ sudo apt-get remove nginx
sudo apt-get autoremove
命令幫咱們卸載再也不須要的依賴包
在這裏咱們卸載nginx相關的依賴包apache
$ sudo apt-get autoremove
刪除nginx配置文件夾ubuntu
$ sudo rm -rf /etc/nginx
# 更新源 $ sudo apt update $ sudo apt-get install nginx
然而控制檯報錯:架構
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details. invoke-rc.d: initscript nginx, action "start" failed. dpkg: error processing package nginx-core (--configure): subprocess installed post-installation script returned error exit status 1 dpkg: dependency problems prevent configuration of nginx: nginx depends on nginx-core (>= 1.10.3-0ubuntu0.16.04.2) | nginx-full (>= 1.10.3-0ubuntu0.16.04.2) | nginx-light (>= 1.10.3-0ubuntu0.16.04.2) | nginx-extras (>= 1.10.3-0ubuntu0.16.04.2); however: Package nginx-core is not configured yet. Package nginx-full is not installed. Package nginx-light is not installed. Package nginx-extras is not installed. nginx depends on nginx-core (<< 1.10.3-0ubuntu0.16.04.2.1~) | nginx-full (<< 1.10.3-0ubuntu0.16.04.2.1~) | nginx-light (<< 1.10.3-0ubuntu0.16.04.2.1~) | nginx-extras (<< 1.10.3-0ubuntu0.16.04.2.1~); however: Package nginx-core is not configured yet. No apport report written because the error message indicates its a followup error from a previous failure. Package nginx-full is not installed. Package nginx-light is not installed. Package nginx-extras is not installed. dpkg: error processing package nginx (--configure): dependency problems - leaving unconfigured Processing triggers for libc-bin (2.23-0ubuntu9) ... Errors were encountered while processing: nginx-core nginx E: Sub-process /usr/bin/dpkg returned an error code (1)
查看nginx.service
狀態app
$ systemctl status nginx.service
● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Sat 2018-03-17 23:16:40 CST; 1min 18s ago Process: 26795 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=1/FAILURE) Main PID: 18259 (code=exited, status=0/SUCCESS) Mar 17 23:16:40 VM-0-5-ubuntu systemd[1]: Starting A high performance web server and a reverse proxy server... Mar 17 23:16:40 VM-0-5-ubuntu nginx[26795]: nginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: No such file or direMar 17 23:16:40 VM-0-5-ubuntu nginx[26795]: nginx: configuration file /etc/nginx/nginx.conf test failed Mar 17 23:16:40 VM-0-5-ubuntu systemd[1]: nginx.service: Control process exited, code=exited status=1 Mar 17 23:16:40 VM-0-5-ubuntu systemd[1]: Failed to start A high performance web server and a reverse proxy server. Mar 17 23:16:40 VM-0-5-ubuntu systemd[1]: nginx.service: Unit entered failed state. Mar 17 23:16:40 VM-0-5-ubuntu systemd[1]: nginx.service: Failed with result 'exit-code'.
仔細看報錯信息,獲取到兩個信息點:ssh
因而上網搜,網上找說多是apache
佔用了80
端口致使報錯tcp
查看端口占用狀況工具
$ sudo netstat -nlp
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1287/sshd udp 0 0 0.0.0.0:68 0.0.0.0:* 891/dhclient udp 0 0 172.21.0.5:123 0.0.0.0:* 1231/ntpd udp 0 0 127.0.0.1:123 0.0.0.0:* 1231/ntpd udp 0 0 0.0.0.0:123 0.0.0.0:* 1231/ntpd udp6 0 0 :::123 :::* 1231/ntpd
發現80端口沒被佔用,並且systemctl status nginx.service
的提示信息也沒說起80端口被佔用,若是提示信息中說80端口被佔用,能夠執行如下兩步試試:
終止apache運行
$ sudo service apache2 stop
從新安裝nginx
$ sudo apt-get install nginx
瞭解詳細信息請看 askubuntu上的提問
上述狀況與個人並不相符,因而換個思路,報錯信息中說起nginx的配置文件不存在,思考爲何卸載重裝nginx,卻沒有生成配置文件?
和第一次安裝的時候不同,而後百度上搜nginx卸載重裝後配置文件沒有從新生成
,找到了相似的問題,給出了以下的操縱步驟:
卸載nginx不保留配置文件
$ sudo apt-get --purge remove nginx Reading package lists... Done Building dependency tree Reading state information... Done The following packages were automatically installed and are no longer required: fontconfig-config fonts-dejavu-core libfontconfig1 libgd3 libjbig0 libjpeg-turbo8 libjpeg8 libtiff5 libvpx3 libxpm4 libxslt1.1 nginx-common nginx-core Use 'sudo apt autoremove' to remove them. The following packages will be REMOVED: nginx* 0 upgraded, 0 newly installed, 1 to remove and 205 not upgraded. 2 not fully installed or removed. After this operation, 37.9 kB disk space will be freed. Do you want to continue? [Y/n] y (Reading database ... 66386 files and directories currently installed.) Removing nginx (1.10.3-0ubuntu0.16.04.2) ... Setting up nginx-core (1.10.3-0ubuntu0.16.04.2) ... Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details. invoke-rc.d: initscript nginx, action "start" failed. dpkg: error processing package nginx-core (--configure): subprocess installed post-installation script returned error exit status 1 Errors were encountered while processing: nginx-core E: Sub-process /usr/bin/dpkg returned an error code (1)
卸載自動安裝且再也不須要的依賴包
$ sudo apt-get autoremove Reading package lists... Done Building dependency tree Reading state information... Done The following packages will be REMOVED: fontconfig-config fonts-dejavu-core libfontconfig1 libgd3 libjbig0 libjpeg-turbo8 libjpeg8 libtiff5 libvpx3 libxpm4 libxslt1.1 nginx-common nginx-core 0 upgraded, 0 newly installed, 13 to remove and 205 not upgraded. 1 not fully installed or removed. After this operation, 9,745 kB disk space will be freed. Do you want to continue? [Y/n] y (Reading database ... 66383 files and directories currently installed.) Removing nginx-core (1.10.3-0ubuntu0.16.04.2) ... Removing libgd3:amd64 (2.1.1-4ubuntu0.16.04.8) ... Removing libfontconfig1:amd64 (2.11.94-0ubuntu1.1) ... Removing fontconfig-config (2.11.94-0ubuntu1.1) ... Removing fonts-dejavu-core (2.35-1) ... Removing libtiff5:amd64 (4.0.6-1ubuntu0.2) ... Removing libjbig0:amd64 (2.1-3.1) ... Removing libjpeg8:amd64 (8c-2ubuntu8) ... Removing libjpeg-turbo8:amd64 (1.4.2-0ubuntu3) ... Removing libvpx3:amd64 (1.5.0-2ubuntu1) ... Removing libxpm4:amd64 (1:3.5.11-1ubuntu0.16.04.1) ... Removing libxslt1.1:amd64 (1.1.28-2.1ubuntu0.1) ... Removing nginx-common (1.10.3-0ubuntu0.16.04.2) ... Processing triggers for libc-bin (2.23-0ubuntu9) ... Processing triggers for man-db (2.7.5-1) ...
篩選已安裝軟件包中與nginx有關的
$ dpkg --get-selections | grep nginx nginx-common deinstall
卸載nginx-common
不保留配置文件
$ sudo apt-get --purge remove nginx-common Reading package lists... Done Building dependency tree Reading state information... Done The following packages will be REMOVED: nginx-common* 0 upgraded, 0 newly installed, 1 to remove and 205 not upgraded. After this operation, 0 B of additional disk space will be used. Do you want to continue? [Y/n] y (Reading database ... 66243 files and directories currently installed.) Removing nginx-common (1.10.3-0ubuntu0.16.04.2) ... Purging configuration files for nginx-common (1.10.3-0ubuntu0.16.04.2) ... dpkg: warning: while removing nginx-common, directory '/var/www/html' not empty so not removed
從新安裝nginx
$ sudo apt-get install nginx ...
查看版本號,執行nginx配置文件語法檢測
$ nginx -v nginx version: nginx/1.10.3 (Ubuntu) $ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
apt-get autoremove
:刪除,自動安裝的,且再也不須要的
(不被其餘軟件看成依賴的)軟件包
舉個栗子: 經過apt-get方式安裝nginx時,會經過引導自動安裝所需的依賴包(nginx-core),而當咱們卸載nginx後,
那些自動安裝的依賴包就成爲再也不須要的軟件包(nginx-core),經過apt-get autoremove
會自動清理它們
既然會自動刪除再也不須要的軟件包,那麼爲何nginx-common沒被刪除?
apt-get autoremove
的時候卸載?不知道細心的童鞋發現沒,咱們在卸載nginx的時候,
手動刪除了nginx的配置文件夾(sudo rm -rf /etc/nginx
)。
那這些配置文件夾和nginx-common
軟件包有什麼關係呢?
經過查找ubuntu packages,找到了Ubuntu16.0.4下nginx-common軟件包的文件清單。
按照清單上的目錄手動排查,發現本機上除了手動刪除的/etc/nginx
目錄不存在,文件清單內的其餘文件都沒有被刪除,猜想多是nginx-common軟件包完整性被破壞,致使autoremove
的時候沒有被刪除,固然這隻個人猜想。
整理徹底卸載nginx命令時,發現執行以下命令,ngnix的配置文件並無被刪除
$ sudo apt-get remove --purge nginx
查閱ubuntu packages發現,nginx依賴nginx-core,nginx-core依賴nginx-common,且其中nginx的配置文件屬於nginx-common軟件包配置文件的一部分。
執行以下命令進一步驗證
# 卸載nginx-common ,nginx配置文件不會被刪除 $ sudo apt-get remove nginx-common ... # 卸載nginx-common,nginx配置文件已經被刪除(包括但不限於) $ sudo apt-get remove --purge nginx-common $ find /etc/nginx/ find: ‘/etc/nginx/’: No such file or directory
apt-get autoremove
執行時,nginx-common
軟件包已經被選擇用於卸載( deinstall
),可是實際尚未卸載。
$ dpkg --get-selections| grep nginx nginx-common deinstall
瞭解更多關於deinstall,點擊這裏,若是有知道爲何的同窗請不吝賜教。
# 徹底卸載nginx $ sudo apt-get remove --purge nginx $ sudo apt-get autoremove --purge # 更新nginx,保留配置文件 # 親測nginx.conf不會被刪除和覆蓋,但保險起見仍是建議先備份 $ sudo apt-get remove nginx $ sudo apt-get autoremove $ sudo apt update $ sudo apt-get install nginx # 安裝軟件包 # sudo apt-get install 軟件包名稱` # eg: $ sudo apt-get install nginx # 卸載軟件包 # sudo apt-get remove 軟件包名稱 # eg: $ sudo apt-get remove nginx # 卸載軟件包且不保留配置文件 # sudo apt-get remove --purge 軟件包名稱 # eg: $ sudo apt-get remove --purge nginx # 卸載自動安裝的軟件包且不保留配置文件 # sudo apt-get autoremove --purge # 列出本地軟件包列表 # dpkg --get-selections [| grep 篩選關鍵字] # eg:(列出本地全部軟件包) $ dpkg --get-selections # eg:(列出本地與ngnix有關的軟件包) $ dpkg --get-selections | grep nginx # 查看進程信息 # ps -ef [| grep 篩選關鍵字] # eg:(列出全部進程信息) $ ps -ef # eg:(列出與nginx有關的進程信息) $ ps -ef | grep nginx # 查看端口占用信息 $ sudo netstat -nlp
Package nginx-core not configured yet.Sub-process :/user/bin/dpkg returned an error code(1)nginx fail to install on Ubuntu 15.10 server
Ubuntu 14.04上卸載nginx以後從新安裝沒有從新生成配置文件的解決方法
在 xenial 發行版中 all 硬件架構下的 nginx-common 軟件包文件清單
What is difference between the options 「autoclean」, 「autoremove」 and 「clean」?