Karatasi ya kumbukumbu

Amri za apt: kusakinisha, kusasisha na kufuta pakiti kwenye Ubuntu na Debian

Imesasishwa: · Skillaria.Top

apt ni kidhibiti cha pakiti cha Ubuntu na Debian: sudo apt update husasisha orodha za pakiti, sudo apt upgrade husakinisha masasisho, sudo apt install jina husakinisha pakiti, sudo apt remove huifuta (purge — pamoja na mipangilio), na apt autoremove huondoa utegemezi usiohitajika. Kutafuta pakiti kunasaidiwa na apt search na apt show, na utegemezi uliovunjika hurekebishwa na sudo apt --fix-broken install.

apt ni kidhibiti cha pakiti cha kawaida katika Ubuntu, Debian na mifumo inayotokana nao (Linux Mint, Pop!_OS). Hupakua programu kutoka kwenye hazina, huvuta utegemezi wenyewe na husasisha mfumo kwa amri moja. Hapa chini kuna amri zote za apt zinazohitajika kwa kazi za kila siku, zikipangwa kwa kazi, pamoja na makosa ya kawaida na suluhisho zake.

Jinsi apt inavyofanya kazi

Pakiti ni kumbukumbu ya .deb yenye programu, metadata na orodha ya utegemezi. Hazina (repositories) ni seva zinazohifadhi pakiti; anwani zao zimeandikwa kwenye /etc/apt/sources.list na kwenye folda /etc/apt/sources.list.d/. apt huhifadhi nakala ya ndani ya orodha ya pakiti zinazopatikana na wakati wa kusakinisha hulinganisha nayo, kwa hiyo inapaswa kusasishwa mara kwa mara.

Chini ya kofia apt huita dpkg ya kiwango cha chini, inayofungua na kusajili pakiti, lakini haiwezi kutatua utegemezi. Amri apt-get na apt-cache ni kiolesura cha zamani chenye utendaji uleule: matokeo thabiti, na zinafaa kwenye hati (scripts). apt ni kifungashio kipya kwa watu: ina upau wa maendeleo, rangi, na amri fupi.

Karibu amri zote zinazobadilisha mfumo zinahitaji haki za msimamizi, kwa hiyo zinaendeshwa kwa sudo. Kutafuta na kuangalia taarifa kunafanya kazi bila hiyo.

Jedwali la amri kuu za apt

AmriInafanya nini
sudo apt updatesasisha orodha za pakiti kutoka kwenye hazina
sudo apt upgradesakinisha masasisho bila kufuta pakiti
sudo apt full-upgradesasisha, pamoja na kufuta au kubadilisha pakiti inapohitajika
sudo apt install pakitisakinisha pakiti pamoja na utegemezi wake
sudo apt reinstall pakitisakinisha upya pakiti
sudo apt remove pakitifuta pakiti, ukiacha mipangilio
sudo apt purge pakitifuta pakiti pamoja na mipangilio ya mfumo
sudo apt autoremovefuta utegemezi ambao hauhitajiki tena
apt search nenotafuta pakiti kwa jina na maelezo
apt show pakitimaelezo, toleo, utegemezi, ukubwa
apt list --installedorodha ya pakiti zilizosakinishwa
apt list --upgradablekile kinachoweza kusasishwa
apt policy pakititoleo lililosakinishwa na matoleo yanayopatikana, vyanzo
sudo apt cleansafisha kache ya .deb zilizopakuliwa
sudo apt --fix-broken installrekebisha utegemezi uliovunjika

apt update na apt upgrade: jinsi ya kusasisha mfumo

Hizi ni shughuli mbili tofauti, na mara nyingi huchanganywa. apt update haisakinishi chochote: inapakua orodha mpya za pakiti tu. apt upgrade ndiyo inayosakinisha matoleo mapya ya programu zilizopo, kwa kutegemea orodha hizo.

$ sudo apt update
Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Get:2 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
...
12 packages can be upgraded. Run 'apt list --upgradable' to see them.

$ apt list --upgradable
$ sudo apt upgrade

Mchanganyiko wa kawaida kwa seva, kwa mstari mmoja, bila kuuliza uthibitisho:

sudo apt update && sudo apt upgrade -y

Tofauti kati ya upgrade na full-upgrade

apt upgrade inaweza kusakinisha utegemezi mpya, lakini kamwe haifuti pakiti zilizopo. Ikiwa sasisho linahitaji kufuta kitu (kwa mfano wakati wa kubadilisha toleo la kernel au maktaba), pakiti hizo zinacheleweshwa — kwenye matokeo utaona mstari The following packages have been kept back. apt full-upgrade (sawa na apt-get dist-upgrade) inaruhusu kufutwa na kumaliza sasisho. Kabla ya kuitumia, soma kwa makini kile apt inachokusudia kufuta.

Sasisha pakiti moja tu

sudo apt install --only-upgrade nginx

Ikiwa pakiti haijasakinishwa, amri yenye --only-upgrade haitaisakinisha — hii inalinda dhidi ya usakinishaji wa bahati mbaya.

apt install: kusakinisha pakiti

sudo apt install nginx                 # pakiti moja
sudo apt install git curl htop         # kadhaa kwa mara moja
sudo apt install -y docker.io          # bila swali la Y/n
sudo apt install nginx=1.24.0-2ubuntu7 # toleo maalum
sudo apt install --no-install-recommends ffmpeg  # bila pakiti zinazopendekezwa
sudo apt install ./google-chrome-stable_current_amd64.deb  # .deb ya ndani

Wakati wa kusakinisha apt inaonyesha pakiti zitakazoongezwa na nafasi zitakayochukua, kisha inauliza uthibitisho. Bendera -y inajibu "ndiyo" moja kwa moja — ni rahisi kwenye hati na Dockerfile, lakini katika kazi ya moja kwa moja ni bora kusoma orodha.

Kwa chaguo-msingi apt husakinisha si utegemezi wa lazima (Depends) tu, bali pia zile zinazopendekezwa (Recommends). Kwenye seva na kwenye kontena, --no-install-recommends hupunguza ukubwa kwa kiasi kikubwa.

Kusakinisha faili la .deb: apt au dpkg -i

Faili la .deb lililopakuliwa ni bora kusakinishwa kwa apt install ./faili.deb — njia lazima ianze na ./ au iwe kamili, vinginevyo apt itatafuta pakiti yenye jina hilo kwenye hazina. Tofauti na dpkg -i, apt yenyewe hupakua utegemezi unaokosekana. Ikiwa tayari umesakinisha pakiti kwa dpkg na kupata kosa la utegemezi, sudo apt --fix-broken install inalirekebisha.

sudo dpkg -i package.deb
sudo apt --fix-broken install

apt remove, purge na autoremove: kufuta pakiti

AmriProgramuMipangilio katika /etcUtegemezi
apt removeinafutwainabakiyanabaki
apt purgeinafutwainafutwayanabaki
apt autoremove——yasiyohitajika yanafutwa
sudo apt remove nginx
sudo apt purge nginx            # sawa na hiyo + mipangilio
sudo apt autoremove             # mabaki ya utegemezi
sudo apt autoremove --purge     # mabaki pamoja na mipangilio yake

remove inafaa ikiwa unapanga kurudisha programu na unataka kuhifadhi mipangilio yake. purge ni kwa usakinishaji mpya kabisa. Kumbuka: faili zilizo kwenye folda ya nyumbani ya mtumiaji (kwa mfano ~/.config) hazifutwi na amri hizi.

Kupata pakiti zilizofutwa lakini zilizoacha mipangilio, zenye hali rc:

dpkg -l | grep '^rc'

Kutafuta pakiti na taarifa zake

apt search postgresql          # tafuta kwa jina na maelezo
apt search --names-only '^php8' # kwa jina tu, kwa usemi wa kawaida
apt show htop                  # toleo, ukubwa, utegemezi, maelezo
apt policy docker.io           # matoleo yanayopatikana na yanatoka wapi
apt list --installed | grep python3
apt-cache depends curl         # pakiti inategemea nini
apt-cache rdepends libssl3     # ni nani anayetegemea pakiti hii

Faili fulani ni la pakiti ipi

$ dpkg -S /usr/bin/curl
curl: /usr/bin/curl

$ dpkg -L curl        # faili zipi pakiti ilisakinisha

Ikiwa amri bado haipo kwenye mfumo, Ubuntu inapojaribu kuiendesha yenyewe itapendekeza pakiti sahihi (ujumbe Command 'tree' not found, but can be installed with: sudo apt install tree). Kwa kutafuta faili ndani ya pakiti ambazo hazijasakinishwa kuna zana ya apt-file: apt-file search bin/dig baada ya sudo apt-file update.

Kufunga toleo: apt-mark hold

Wakati mwingine pakiti haipaswi kusasishwa — kwa mfano toleo la DBMS au kernel kwenye uzalishaji hubadilishwa kwa mkono tu. Kwa hiyo pakiti "inagandishwa":

sudo apt-mark hold postgresql-16
apt-mark showhold
sudo apt-mark unhold postgresql-16

Jozi nyingine muhimu ni apt-mark manual na apt-mark auto. Pakiti iliyosakinishwa kama utegemezi imewekwa alama ya kiotomatiki na itaingia kwenye autoremove ikiwa haihitajiki tena. Alama ya manual inailinda pakiti dhidi ya hilo.

Hazina: jinsi ya kuongeza na zilipo

Orodha ya vyanzo iko kwenye /etc/apt/sources.list na kwenye faili za /etc/apt/sources.list.d/*.list. Katika Ubuntu 24.04 na Debian 12+ umbizo la deb822 lenye kiambishi .sources linazidi kutumika (kwa mfano /etc/apt/sources.list.d/ubuntu.sources).

Hazina ya nje yenye ufunguo

Njia ya kisasa ni kuhifadhi ufunguo wa hazina peke yake na kuuunganisha kupitia signed-by. Amri apt-key imepitwa na wakati na imeondolewa kwenye matoleo mapya.

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update
sudo apt install docker-ce

PPA kwenye Ubuntu

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo add-apt-repository --remove ppa:deadsnakes/ppa

PPA ni hazina za kibinafsi kwenye Launchpad. Unganisha zile tu unazoziamini: pakiti kutoka humo husakinishwa kwa haki za root.

Kache na nafasi ya diski

Pakiti zilizopakuliwa zinabaki kwenye /var/cache/apt/archives/. Kwenye diski ndogo na kwenye picha za Docker kache inapaswa kusafishwa.

du -sh /var/cache/apt/archives
sudo apt clean          # futa kache yote ya .deb
sudo apt autoclean      # futa matoleo yaliyopitwa na wakati tu

Kwenye Dockerfile ni kawaida kuandika usakinishaji kwenye safu moja na kufuta orodha za pakiti mara moja:

RUN apt-get update \
 && apt-get install -y --no-install-recommends curl ca-certificates \
 && rm -rf /var/lib/apt/lists/*

Kwenye hati hutumika apt-get, si apt: apt ina kiolesura kisicho thabiti, na yenyewe inaonya kuhusu hilo (WARNING: apt does not have a stable CLI interface). Ili kisakinishi kisiulize maswali, ongeza DEBIAN_FRONTEND=noninteractive.

Makosa ya kawaida ya apt na jinsi ya kuyarekebisha

Could not get lock /var/lib/dpkg/lock-frontend

Mchakato mwingine tayari unafanya kazi na pakiti: umefungua terminal ya pili yenye apt, "Kituo cha Programu", au masasisho ya kiotomatiki unattended-upgrades. Subiri dakika chache na uangalie ni nani anashikilia kufuli:

ps aux | grep -E 'apt|dpkg'

Usifute faili za kufuli kwa mkono wakati mchakato uko hai: usakinishaji uliokatizwa unaweza kuacha mfumo katika hali isiyolingana. Ikiwa mchakato umekwama kweli au umeuawa, baada ya kumaliza endesha sudo dpkg --configure -a.

Unable to locate package

apt haikupata pakiti. Mara nyingi haujaendesha sudo apt update kwenye mfumo mpya, umekosea jina, au pakiti iko kwenye sehemu iliyozimwa (universe kwenye Ubuntu). Sehemu hiyo inawashwa kwa sudo add-apt-repository universe.

Unmet dependencies / held broken packages

Utegemezi haulingani — kwa kawaida baada ya kusakinisha .deb kwa mkono au kuchanganya hazina za matoleo tofauti ya usambazaji.

sudo apt --fix-broken install
sudo dpkg --configure -a
apt policy pakiti-yenye-tatizo

dpkg was interrupted

Usakinishaji ulikatizwa (terminal ilifungwa, umeme ukakatika). Ujumbe wenyewe unaonyesha suluhisho: sudo dpkg --configure -a.

NO_PUBKEY wakati wa apt update

Hazina ya nje haina ufunguo wa sahihi au ufunguo umepitwa na wakati. Pakua ufunguo wa sasa kutoka tovuti ya mradi kwenda /etc/apt/keyrings/ na uuweke kwenye signed-by, kama katika mfano wa Docker hapo juu.

Masasisho ya usalama ya kiotomatiki

Ubuntu Server ina kwa chaguo-msingi pakiti ya unattended-upgrades, inayosakinisha masasisho ya usalama yenyewe. Kuiangalia na kuiwasha:

sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
cat /var/log/unattended-upgrades/unattended-upgrades.log

Kama kuwasha upya kunahitajika baada ya sasisho, faili /var/run/reboot-required linaonyesha: likiwepo, kernel au maktaba muhimu zimesasishwa.

Hitimisho

Amri za msingi za apt zinafuata mzunguko mfupi: update kabla ya chochote, install kwa kusakinisha, upgrade kwa kusasisha, remove au purge kwa kufuta, na autoremove kwa usafi. Kwa matoleo kuna apt policy na apt-mark hold, na kwa matatizo — --fix-broken install na dpkg --configure -a; kwenye hati tumia apt-get. Usimamizi wa pakiti umefafanuliwa kwa vitendo katika kozi ya Linux.

Maswali ya mara kwa mara

apt inatofautiana vipi na apt-get?

Zote ni violesura vya mfumo mmoja wa pakiti. apt ni rahisi zaidi kwa kazi ya terminal (maendeleo, rangi, amri fupi), na apt-get ina matokeo thabiti na inapendekezwa kwa hati na Dockerfile.

Je, ninahitaji kuendesha apt update kabla ya kila usakinishaji?

Inapendekezwa ikiwa orodha hazijasasishwa kwa muda mrefu: vinginevyo apt inaweza isipate pakiti au ijaribu kupakua toleo ambalo halipo tena kwenye kioo, na kutoa kosa 404.

Ninawezaje kuona historia ya usakinishaji na ufutaji wa apt?

Historia inaandikwa kwenye /var/log/apt/history.log (rekodi za zamani ziko kwenye kumbukumbu za history.log.N.gz), na kumbukumbu ya kina ya dpkg iko kwenye /var/log/dpkg.log.

Ninawezaje kurudisha pakiti kwenye toleo la awali?

Angalia matoleo yanayopatikana kwa apt policy pakiti, kisha sakinisha toleo unalotaka kwa sudo apt install pakiti=toleo, na ulifungie kwa apt-mark hold ili sasisho lijalo lisirudishe jipya.

Je, apt inaweza kutumika kwenye CentOS au Fedora?

Hapana, huko kuna umbizo tofauti la pakiti (rpm) na vidhibiti vyao — dnf na yum. apt inafanya kazi kwenye Debian, Ubuntu na mifumo inayotokana nazo.

Jifunze mada hii kwa video

Mada hii inafundishwa kwa kina pamoja na mazoezi katika kozi “Linux: с нуля до уверенного администрирования”.

Nenda kwenye kozi