কোনও এপট-গেইজ প্যাকেজ ইনস্টল রয়েছে কিনা তা পরীক্ষা করে দেখুন এবং এটি লিনাক্সে না থাকলে ইনস্টল করুন


223

আমি একটি উবুন্টু সিস্টেমে কাজ করছি এবং বর্তমানে আমি এটি করছি:

if ! which command > /dev/null; then
   echo -e "Command not found! Install? (y/n) \c"
   read
   if "$REPLY" = "y"; then
      sudo apt-get install command
   fi
fi

এটি কি বেশিরভাগ লোকেরা করত? নাকি আরও মার্জিত সমাধান আছে?


7
কমান্ডের নামগুলি সর্বদা তারা যে প্যাকেজের সাথে সম্পর্কিত তা প্রতিফলিত করে না। আপনি বড় লক্ষ্য কি? আপনি কেবল কেন এটি ইনস্টল করার চেষ্টা করবেন না এবং এটি ইতিমধ্যে ইনস্টল হওয়ার পরে সবচেয়ে খারাপ ক্ষেত্রে তা হবে না।
viam0Zah

8
ভাগ্যক্রমে, অ্যাপট-গেট ইনস্টল আদর্শবান, তাই এটি কেবল এটি চালানো নিরাপদ এবং এটি ইনস্টল করা আছে কি না তা নিয়ে চিন্তা করবেন না।
ডেভিড বাউকুম

@ ডেভিডবাউকের মন্তব্যের একটি উত্তর হওয়া উচিত যা সর্বাধিক ভোট পাবে।
নির্মল

@ নির্মল, উত্তর তৈরি হয়েছে।
ডেভিড বাউকুম

1
সম্পর্কিত, আপনার ব্যবহার করা উচিত command -v <command>; না which <command>। আরো দেখুন চেক যদি একটি প্রোগ্রাম একটি ব্যাশ স্ক্রিপ্ট থেকে বিদ্যমান
jww

উত্তর:


314

packagenameইনস্টল করা হয়েছে কিনা তা পরীক্ষা করতে , টাইপ করুন:

dpkg -s <packagename>

আপনি এটি ব্যবহার করতে পারেন dpkg-queryযা আপনার উদ্দেশ্যটির জন্য আরও ভাল আউটপুট রয়েছে এবং ওয়াইল্ড কার্ডগুলিও গ্রহণ করে।

dpkg-query -l <packagename>

কী প্যাকেজের মালিক তা সন্ধান করতে command চেষ্টা করুন:

dpkg -S `which <command>`

আরও তথ্যের জন্য, নিবন্ধটি লিনাক্স এবং dpkg চিট শীটে প্যাকেজ ইনস্টল করা আছে কিনা তা দেখুন


31
আপনি যদি কোনও ব্যক্তি হিসাবে এই অ-প্রোগ্রামটি চান তবে আপনি এই তথ্যটি যেমন দাঁড়িয়েছেন তেমন ব্যবহার করতে পারেন। তবে আপনি এখানে স্ক্রিপ্টিংয়ের জন্য কেবল রিটার্ন কোডগুলিতে বা স্ক্রিপ্টিংয়ের জন্য আউটপুট / আউটপুটের অভাবের উপর নির্ভর করতে পারবেন না। এই প্রশ্নের জন্য তাদের কার্যকারিতা সীমিত করে আপনাকে এই কমান্ডগুলির আউটপুট স্ক্যান করতে হবে।
আপএন্ডএডাম

4
অদ্ভুতভাবে যথেষ্ট, আমি সম্প্রতি আবিষ্কার করেছি যে dpkg- কোয়েরি 1 টি হারিয়ে যাওয়া প্যাকেজে 1 ব্যবহার করত, এখন (উবুন্টু 12.04) 0 প্রদান করে, আমার জেনকিনসে নোড সেটআপ স্ক্রিপ্ট তৈরিতে সমস্ত ধরণের সমস্যা সৃষ্টি করে! dpkg -s ইনস্টল হওয়া প্যাকেজটিতে 0 এবং প্যাকেজ ইনস্টল না করে 0 প্রদান করে।
Therealstubot

17
আরে, ওপি ifব্যবহারের জন্য বলেছে । আমি ifব্যবহারের সন্ধানও করছি ।
টোমা জ্যাটো - মনিকা

1
@ থেরিয়ালস্টাবোট: আমি উবুন্টু ১২.০৪ ব্যবহার করছি এবং dpkg -sঅনুপস্থিত প্যাকেজগুলিতে ১ এবং অন্যথায় 0 হিসাবে ফিরে আসছি it আগের (বা সাম্প্রতিক) সংস্করণগুলিতে কীভাবে আলাদা ছিল?
MestreLion

4
একটি নোট: dpkg -sকোনও প্যাকেজ ইনস্টল করা থাকলে এবং তার পরে অপসারণ করা হলে শূন্য ফিরিয়ে দেয় - সে ক্ষেত্রে এটি Status: deinstall ok config-filesবা অনুরূপ, সুতরাং এটি "ঠিক আছে" - তাই আমার কাছে, এটি কোনও নিরাপদ পরীক্ষা নয়। dpkg-query -lএই ক্ষেত্রেও কার্যকর ফলাফল প্রত্যাশিত বলে মনে হচ্ছে না।
আগ্রহী

86

আরও স্পষ্ট করে বলতে, এখানে কিছুটা বাশ স্ক্রিপ্ট রয়েছে যা একটি প্যাকেজ পরীক্ষা করে এবং প্রয়োজনে এটি ইনস্টল করে। অবশ্যই, আপনি যে প্যাকেজটি অনুপস্থিত তা খুঁজে পাওয়ার পরেও অন্যান্য জিনিসগুলি করতে পারেন, যেমন একটি ত্রুটি কোড সহ সহজভাবে প্রস্থান করা।

REQUIRED_PKG="some-package"
PKG_OK=$(dpkg-query -W --showformat='${Status}\n' $REQUIRED_PKG|grep "install ok installed")
echo Checking for $REQUIRED_PKG: $PKG_OK
if [ "" = "$PKG_OK" ]; then
  echo "No $REQUIRED_PKG. Setting up $REQUIRED_PKG."
  sudo apt-get --yes install $REQUIRED_PKG 
fi

যদি স্ক্রিপ্টটি কোনও জিইউআইয়ের মধ্যে চলে (যেমন এটি একটি নটিলাস স্ক্রিপ্ট), আপনি সম্ভবত 'সুডো' অনুরোধটিকে একটি 'গিক্সুডো' দিয়ে প্রতিস্থাপন করতে চাইবেন।


5
--force-yesএকটি খারাপ ধারণা মনে হচ্ছে। ম্যান পেজ থেকে: "এটি একটি বিপজ্জনক বিকল্প যা সম্ভাব্য ক্ষতিকারক কিছু করছে যদি তা না জানিয়ে প্ররোচনা না দিয়েই চালিয়ে যেতে পারে। খুব বিশেষ পরিস্থিতিতে বাদে এটি ব্যবহার করা উচিত নয়। ! " এটি কোনও স্ক্রিপ্টে ব্যবহার করা আরও খারাপ করে তোলে।
ক্রিয়াকলাপ হ্রাস

68

এই ওয়ান-লাইনারটি 'ন্যানো' প্যাকেজের জন্য 1 (ইনস্টলড) বা 0 (ইনস্টল করা নেই) ফেরত দেয় ..

$(dpkg-query -W -f='${Status}' nano 2>/dev/null | grep -c "ok installed")

এমনকি প্যাকেজ উপস্থিত না থাকলেও / উপলব্ধ না।

নীচের উদাহরণটি 'ন্যানো' প্যাকেজটি ইনস্টল না করা থাকলে এটি ইনস্টল করে ..

if [ $(dpkg-query -W -f='${Status}' nano 2>/dev/null | grep -c "ok installed") -eq 0 ];
then
  apt-get install nano;
fi

4
এ সম্পর্কে আমার প্রকরণ:dpkg-query -W -f='${Status}' MYPACKAGE | grep -q -P '^install ok installed$'; echo $?
থারস্ম্মোনার

@ থারস্মমনার: আপনার চেয়ে ভাল কেন তা বোঝাতে যত্নশীল?

1
@ Knocte আমি নিশ্চিত নই যে উদ্দেশ্যমূলকভাবে আরও ভাল হওয়ার বিষয়ে কোনও যুক্তি আছে। যদিও আমি বিশ্বাস করি যে ভারব্যাটিম পোস্টের ওয়ান-লাইনার ফলাফল আউটপুট কার্যকর করবে, যা আমি কোনও উত্তরের মধ্যে ঝুঁকতে ছাড়তে চাই না। আমি যে লাইনারটি দেখিয়েছি তা কেবল প্রস্থান কোডটি পাওয়া (মুদ্রণ) উদাহরণ দেয়।
থারস্মমনার

1
@ থারস্মমনার আপনার grep -Pমতো সাধারণ রেইগেক্সের প্রয়োজন নেই ।
ট্রিপলি

7
সহজ: if ! dpkg-query -W -f='${Status}' nano | grep "ok installed"; then apt install nano; fi- ব্যবহারের দরকার নেই grep -c, কেবল প্রস্থান স্থিতিটি ব্যবহার করুনgrep
স্টিফেন অস্টারমিলার

17

dpkg -s স্বয়ংক্রিয় ইনস্টল সহ প্রোগ্রাম্যাটিক ব্যবহার

প্যাকেজগুলির কোনও ইনস্টল না করা থাকলে dpkg -sস্থিতিশীলতার সাথে এটি প্রস্থান করার সাথে সাথে পছন্দ করি 1, এটি স্বয়ংক্রিয়ভাবে সহজ করে তোলে:

pkgs='qemu-user pandoc'
if ! dpkg -s $pkgs >/dev/null 2>&1; then
  sudo apt-get install $pkgs
fi

man dpkg দুর্ভাগ্যক্রমে প্রস্থান স্থিতি নথিভুক্ত করে না, তবে আমি মনে করি এটির উপর নির্ভর করা উপযুক্তভাবে নিরাপদ হওয়া উচিত:

-s, --status package-name...
    Report status of specified package.

একটি বিষয় লক্ষণীয় যে চলমান:

sudo apt remove <package-name>

অগত্যা কিছু প্যাকেজগুলির জন্য সমস্ত ফাইল তাত্ক্ষণিকভাবে অপসারণ করা হয় না (তবে অন্যদের জন্য তা করা হয় না কেন তা নিশ্চিত নয়)) এবং অপসারণের জন্য কেবল প্যাকেজটিকে চিহ্নিত করে।

এই অবস্থায় প্যাকেজটি এখনও ব্যবহারযোগ্য বলে মনে হচ্ছে এবং এর ফাইলগুলি এখনও উপস্থিত রয়েছে তবে এটি অপসারণের জন্য পরে চিহ্নিত করা হয়েছে।

উদাহরণস্বরূপ আপনি যদি চালান:

pkg=certbot

sudo apt install -y "$pkg"
dpkg -s "$pkg"
echo $?

sudo apt remove -y "$pkg"
dpkg -s "$pkg"
echo $?
ls -l /usr/lib/python3/dist-packages/certbot/reporter.py

sudo apt remove --purge certbot
dpkg -s "$pkg"
echo $?
ls -l /usr/lib/python3/dist-packages/certbot/reporter.py

তারপর:

  • প্রথম দুটি echo $?আউটপুট 0, কেবল তৃতীয় এক আউটপুট1

  • প্রথমটির জন্য আউটপুট dpkg -s certbotরয়েছে:

    Status: deinstall ok installed

    যখন দ্বিতীয়টি বলে:

    Status: deinstall ok config-files

    এবং এটি কেবল শুদ্ধ হওয়ার পরে অদৃশ্য হয়ে যায়:

    dpkg-query: package 'certbot' is not installed and no information is available
  • ফাইলটি /etc/logrotate.d/certbotপরে সিস্টেমে উপস্থিত রয়েছে apt removeতবে পরে নেই --purge

    যাইহোক, ফাইল /usr/lib/python3/dist-packages/certbot/reporter.pyএখনও পরেও উপস্থিত --purge

আমি কেন বুঝতে পারছি না, কিন্তু helloপ্যাকেজ দ্বিতীয় dpkgপর apt removeদেখায় যে, তিনি প্যাকেজ ইতিমধ্যে ছাড়া সরানো হয়েছে --purge:

dpkg-query: package 'hello' is not installed and no information is available

ডকুমেন্টেশনগুলি খুব অস্পষ্ট যেমন:

sudo apt dselect-upgrade

certbotএটি চিহ্নিত করা deinstallহলেও অপসারণ করা হয়নি , যদিও man apt-getমনে হয় যে:

dselect-upgradetraditionalতিহ্যবাহী দেবিয়ান প্যাকেজিং ফ্রন্ট-এন্ড, ডিলিलेक्ट (1) এর সাথে একত্রে ব্যবহৃত হয়। ডিলেক্ট-আপগ্রেড উপলব্ধ প্যাকেজগুলির স্থিতি ক্ষেত্রে ডিলিলেক্ট (1) দ্বারা করা পরিবর্তনগুলি অনুসরণ করে এবং সেই অবস্থাটি উপলব্ধি করার জন্য প্রয়োজনীয় ক্রিয়া সম্পাদন করে (উদাহরণস্বরূপ, পুরানো অপসারণ এবং নতুন প্যাকেজ ইনস্টলেশন)।

আরো দেখুন:

উবুন্টু 19.10 এ পরীক্ষা করা হয়েছে।

পাইথন aptপ্যাকেজ

একটি প্রাক ইনস্টল পাইথন 3 প্যাকেজ বলা হয় aptউবুন্টু 18.04 তে যা পাইথন অ্যাপটি ইন্টারফেসটি প্রকাশ করে!

একটি স্ক্রিপ্ট যা প্যাকেজ ইনস্টল করা আছে কিনা তা যাচাই করে এবং এটি যদি না দেখা যায় তবে এটি ইনস্টল করে: পাইথন-অ্যাপ্ট এপিআই ব্যবহার করে কীভাবে প্যাকেজ ইনস্টল করবেন

রেফারেন্সের জন্য এখানে একটি অনুলিপি দেওয়া হয়েছে:

#!/usr/bin/env python
# aptinstall.py

import apt
import sys

pkg_name = "libjs-yui-doc"

cache = apt.cache.Cache()
cache.update()
cache.open()

pkg = cache[pkg_name]
if pkg.is_installed:
    print "{pkg_name} already installed".format(pkg_name=pkg_name)
else:
    pkg.mark_install()

    try:
        cache.commit()
    except Exception, arg:
        print >> sys.stderr, "Sorry, package installation failed [{err}]".format(err=str(arg))

PATHপরিবর্তে এক্সিকিউটেবলের মধ্যে রয়েছে কিনা তা পরীক্ষা করুন

দেখুন: বাশ স্ক্রিপ্ট থেকে কোনও প্রোগ্রাম উপস্থিত রয়েছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?


সিরো, আপনি "dpkg -s" প্রস্থান কোডের উপর নির্ভর করতে পারবেন না। উদাহরণস্বরূপ, আপনি যদি কোনও প্যাকেজ "ইনস্টল" করেন, তবে এটি "অপসারণ" এবং "dpkg -s প্যাকেজ নাম" চেষ্টা করার পরে আপনি স্থিতিটি দেখতে পাবেন: ডিএনস্টল এবং প্রস্থান কোড শূন্য (যেমন ইনস্টল করা)। আপনাকে "dpkg -s" আউটপুট ব্রো পার্স করতে হবে।
দিমিত্রি শেভকপলিয়াস

এই প্রতিবেদনের জন্য ধন্যবাদ দিমিত্রি শেভকপলিয়াস আমি উবুন্টু 19,10 উপর পুনরুত্পাদন করতে পারি নি: sudo apt install hello; dpkg -s hello; echo $?; sudo apt remove hello; dpkg -s hello; echo $?। আপনি কি আরও বিশদ সরবরাহ করতে পারেন?
সিরো সান্তিলি 法轮功 冠状 病 六四 事件 法轮功

1
প্রকৃতপক্ষে - "হ্যালো" প্যাকেজ "dpkg -s" সহ আপনার পরীক্ষার ক্ষেত্রে সঠিকভাবে প্যাকেজটি ইনস্টলড না হিসাবে দেখায় এবং প্রত্যাশিত প্রস্থান কোড "1" দেয়। তবে একই ইনস্টলটি চেষ্টা করুন / প্যাকেজ "সার্টবোট" দিয়ে চেক অপসারণ করুন, তারপরে আপনি "স্থিতি: ডিএনস্টল করুন ওকে কনফিগারেশন-ফাইলগুলি" আপনার "অ্যাপটি রিমুভ সার্টবোট" এবং প্রস্থান কোডটি ভুলভাবে আমাদের দেখানোর পরে "dpkg -s" আউটপুট হিসাবে দেখতে পাবেন "0"। আমার ভুল ধারণাটি ছিল যে এটি অন্য যে কোনও প্যাকেজের ক্ষেত্রে সঠিক ঘটনা, তবে মনে হয় এটি সবার জন্য এক নয়, যা আরও খারাপ এবং কম অনুমানযোগ্য। "Dpkg -s" পার্স আপনি অবশ্যই (গ)
যোদা

11

উবুন্টু তার "ব্যক্তিগত প্যাকেজ সংরক্ষণাগার" (পিপিএ) যুক্ত করার পরে আমি এই আপডেটটি দিচ্ছি, এবং পিপিএ প্যাকেজগুলির পৃথক ফলাফল রয়েছে।

  1. নেটিভ দেবিয়ান সংগ্রহস্থল প্যাকেজ ইনস্টল করা নেই:

    ~$ dpkg-query -l apache-perl
    ~$ echo $?
    1
  2. পিপিএ প্যাকেজ হোস্টে নিবন্ধিত এবং ইনস্টল করা:

    ~$ dpkg-query -l libreoffice
    ~$ echo $?
    0
  3. পিপিএ প্যাকেজ হোস্টে নিবন্ধিত কিন্তু ইনস্টল করা হয়নি:

    ~$ dpkg-query -l domy-ce
    ~$ echo $?
    0
    ~$ sudo apt-get remove domy-ce
    [sudo] password for user: 
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    Package domy-ce is not installed, so not removed
    0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

এছাড়াও পোস্ট করা হয়েছে: /superuser/427318/test-if-a-package-is-installed-in-apt/427898


2
আপনি যদি কোনও প্যাকেজ ইনস্টল ও মুছে ফেলেন, তারপরে আপনি dpkg-quare প্যাকেজটি ব্যবহার করবেন; প্রতিধ্বনি $? প্যাকেজ ইনস্টল না করা থাকলে 0 হবে।
পোল হ্যালেন

8

আপএন্ডএডাম লিখেছেন:

তবে আপনি এখানে স্ক্রিপ্টিংয়ের জন্য কেবল রিটার্ন কোডগুলিতে নির্ভর করতে পারবেন না

ইন আমার অভিজ্ঞতা করতে dkpg এর প্রস্থান কোড উপর নির্ভর করে।

ফেরত কোড dpkg -s হয় 0 যদি প্যাকেজ ইনস্টল করা থাকে এবং 1 যদি না, তাই সহজ সমাধান আমি পাওয়া যায় নি:

dpkg -s <pkg-name> 2>/dev/null >/dev/null || sudo apt-get -y install <pkg-name>

আমার জন্য ভাল কাজ করে ...


11
পরে apt-get remove <package>, dpkg -s <package>এখনো 0 ফেরৎ যদিও প্যাকেজ,deinstalled
ThorSummoner

7

এটি বেশ ভালভাবে কাজ করছে বলে মনে হচ্ছে।

$ sudo dpkg-query -l | grep <some_package_name> | wc -l
  • এটি হয় 0যদি ইনস্টল না করা হয় বা ইনস্টল করা হয় তবে কিছু নম্বর প্রদান করে > 0

8
grep | wc -lএকটি প্রতিষেধক যদি কিছু বিদ্যমান পরীক্ষা করার জন্য, আপনি কেবল চান grep -q। ঘটনাগুলি গণনা করতে (যা এই ধরণের দৃশ্যে খুব কমই কার্যকর), ব্যবহার করুন grep -c
ট্রিপলি

@ ট্রিপলি তাই dpkg -s zip | grep -c "Package: zip",? (নমুনা প্যাকেজ হিসাবে জিপ ব্যবহার করে)
ডেভিড তাবারনারো এম।

@ ডেভড্রাইভার উপরের জিনিসটি ঠিক তাই করে না তবে হ্যাঁ। কোনও স্ক্রিপ্টে আপনি সম্ভবত grep -q 'Package: zip'একটি প্রস্থান কোড ফিরিয়ে দিতে চান যা কোনও কিছুই প্রিন্ট না করে ফলাফলটি খুঁজে পেয়েছিল কিনা তা নির্দেশ করে।
ট্রিপলি

এটি আনইনস্টল করা প্যাকেজগুলির জন্যও দুর্দান্ত কাজ করছে বলে মনে হচ্ছে
mehmet

4

আমি ন্ট্টিরির উত্তরের ভিত্তিতে একটি স্থির করেছি :

MISSING=$(dpkg --get-selections $PACKAGES 2>&1 | grep -v 'install$' | awk '{ print $6 }')
# Optional check here to skip bothering with apt-get if $MISSING is empty
sudo apt-get install $MISSING

মূলত, ত্রুটি বার্তা থেকে dpkg --get-selections অন্যদের তুলনায় পার্স করা আরও সহজ, কারণ এতে "ডিনস্টল" এর মতো স্ট্যাটাস নেই। এটি একসাথে একাধিক প্যাকেজও পরীক্ষা করতে পারে, এমন কিছু যা আপনি কেবল ত্রুটি কোডগুলি দিয়ে করতে পারবেন না।

ব্যাখ্যা / উদাহরণ:

$ dpkg --get-selections  python3-venv python3-dev screen build-essential jq
dpkg: no packages found matching python3-venv
dpkg: no packages found matching python3-dev
screen                                          install
build-essential                                 install
dpkg: no packages found matching jq

সুতরাং গ্রেপ ইনস্টল করা প্যাকেজগুলি তালিকা থেকে সরিয়ে দেয়, এবং ত্রুটি বার্তা থেকে প্যাকেজটির নামগুলি বের করে দেয়, ফলস্বরূপ MISSING='python3-venv python3-dev jq', যা ইনস্টল কমান্ডের মধ্যে তুচ্ছভাবে .োকানো যেতে পারে।

আমি অন্ধভাবে একটি ইস্যু করছি না apt-get install $PACKAGESকারণ মন্তব্যে যেমন উল্লেখ করা হয়েছে, এটি অপ্রত্যাশিতভাবে প্যাকেজগুলি আপগ্রেড করতে পারে যা আপনি পরিকল্পনা করেননি; স্থিতিশীল বলে আশা করা যায় এমন স্বয়ংক্রিয় প্রক্রিয়াগুলির জন্য আসলেই ভাল ধারণা নয়।


আমি এই সমাধানটি পছন্দ করি। একযোগে একাধিক প্যাকেজগুলির জন্য সংক্ষিপ্ত এবং পরীক্ষা এছাড়াও, আপনি [[ ! -z $MISSING ]] && sudo apt-get install $MISSING
alচ্ছিক চেকটিকে

3

আমি প্যাকেজ ইনস্টল করা থাকলে এবং তারপরে অপসারণ করা সত্ত্বেও সিস্টেমে ইনস্টলেশন প্যাকেজটি রয়ে গেলে উপরের সমস্ত সমাধানগুলি একটি মিথ্যা ইতিবাচক উত্পাদন করতে পারে।

প্রতিলিপি করতে: প্যাকেজ apt-get install curl
সরান প্যাকেজ ইনস্টল করুনapt-get remove curl

এখন উপরের উত্তর পরীক্ষা করুন।

নিম্নলিখিত কমান্ডটি এই অবস্থার সমাধান করছে বলে মনে হচ্ছে:
dpkg-query -W -f='${Status}\n' curl | head -n1 | awk '{print $3;}' | grep -q '^installed$'

এর ফলস্বরূপ একটি ইনস্টলড ইনস্টলড বা ইনস্টল নয়


পুরোপুরি নয়, দুঃখের সাথে - এই ক্ষেত্রে অন্যান্য সম্ভাব্য ফলাফলগুলি config-files- তাই আমি মনে করি | grep -q "installed"কার্যকরী প্রস্থান কোডের স্থিতি পেতে একটি চূড়ান্ত সত্যই প্রয়োজন।
আগ্রহী

এটি করুন| grep -q '^installed$'
উত্সাহিত

3

দেখে মনে হয় আজকাল apt-getএকটি বিকল্প রয়েছে --no-upgradeযা ওপি যা চায় ঠিক তা করে:

--no-upgradeপ্যাকেজগুলি আপগ্রেড করবেন না। যখন ইনস্টলের সাথে একযোগে ব্যবহৃত হয়, নো-আপগ্রেড তালিকাভুক্ত প্যাকেজগুলি ইতিমধ্যে ইনস্টল করা থাকলে আপগ্রেড হতে আটকাবে না।

থেকে র manpage https://linux.die.net/man/8/apt-get

অতএব আপনি ব্যবহার করতে পারেন

apt-get install --no-upgrade package

এবং packageএটি না থাকলে কেবল ইনস্টল করা হবে।



2

এটি এটি করবে। apt-get installআদর্শবান।

sudo apt-get install command

5
এমন পরিস্থিতিতে রয়েছে যেখানে apt-get installপ্যাকেজটি ব্যবহার করা অনাকাঙ্ক্ষিত যেখানে প্যাকেজটি ইতিমধ্যে ইনস্টল করা রয়েছে, যদিও কমান্ডটি নিজেই আদর্শবান। আমার ক্ষেত্রে, আমি আনসিবলের কাঁচা মডিউল সহ একটি রিমোট সিস্টেমে একটি প্যাকেজ ইনস্টল করছি, যা আমি apt-get installনির্বিচারে চালিত হলে প্রতিবার পরিবর্তিত হিসাবে সিস্টেমের প্রতিবেদন করবে । শর্তসাপেক্ষ যে সমস্যাটি সমাধান করে।
জেবেেন্টলি

1
@ জেবেন্টলি এটি একটি ভাল পয়েন্ট। নির্ভরতার অংশ হিসাবে ইনস্টল হওয়া প্যাকেজগুলি ম্যানুয়ালি ইনস্টল হিসাবে চিহ্নিত হবে এবং আপনি যদি এটি ইনস্টল করে রাখেন তবে নির্ভরতা সরিয়ে ফেলা হবে না।
ডেভিড বাউকুম

2

ব্যবহার করুন:

apt-cache policy <package_name>

এটি ইনস্টল না করা থাকলে এটি প্রদর্শিত হবে:

Installed: none

অন্যথায় এটি প্রদর্শিত হবে:

Installed: version

1

এই বৈশিষ্ট্যটি ইতিমধ্যে command-not-foundপ্যাকেজে উবুন্টু এবং ডেবিয়ানে বিদ্যমান ।


15
ম্যাট @ ম্যাট-উবুন্টু: ~ $ কমান্ড-পাওয়া না-পাওয়া আদেশ-না-পাওয়া: কমান্ড পাওয়া যায় নি ... লোল।
ম্যাট ফ্লেচার

1
command-not-foundএকটি ইন্টারেক্টিভ সহায়ক, আপনার পছন্দসই নির্ভরতা রয়েছে তা নিশ্চিত করার সরঞ্জাম নয়। অবশ্যই নির্ভরতা ঘোষণার সঠিক উপায় হ'ল আপনার সফ্টওয়্যারটিকে একটি ডেবিয়ান প্যাকেজে প্যাকেজ করা এবং Depends:প্যাকেজের debian/controlফাইলটিতে ডিক্লেয়ারেশনটি সঠিকভাবে পূরণ করা।
ট্রিপলি

1
apt list [packagename]

এটি ডিপি কেজি এবং পুরানো এপটি- * সরঞ্জামগুলির বাইরে করার সহজ উপায় বলে মনে হচ্ছে


এটি ম্যানুয়াল চেকের জন্য দুর্দান্ত, তবে এটি একটি সতর্কবাণী জারি করে বলেছে যে অ্যাপটি স্ক্রিপ্টিংয়ের উদ্দেশ্যে নয় - অ্যাপ্লিকেশন * সরঞ্জামগুলির বিপরীতে।
হন্টভেরি লেভেন্তে


1

ডকারের পরিবর্তে স্থানীয়ভাবে পরীক্ষা চালানোর সময় আমার একই রকমের প্রয়োজন ছিল। মূলত আমি কেবলমাত্র কোনও .deb ফাইলগুলি ইনস্টল করতে চেয়েছি যদি তারা ইতিমধ্যে ইনস্টল না করা থাকে।

# If there are .deb files in the folder, then install them
if [ `ls -1 *.deb 2> /dev/null | wc -l` -gt 0 ]; then
  for file in *.deb; do
    # Only install if not already installed (non-zero exit code)
    dpkg -I ${file} | grep Package: | sed -r 's/ Package:\s+(.*)/\1/g' | xargs dpkg -s
    if [ $? != 0 ]; then
        dpkg -i ${file}
    fi;
  done;
else
  err "No .deb files found in '$PWD'"
fi

আমার ধারণা তারা কেবলমাত্র দেখতে পাচ্ছে যে সমস্যাটি হ'ল এটি প্যাকেজের সংস্করণ নম্বরটি পরীক্ষা করে না তাই যদি .deb ফাইলটি নতুন সংস্করণ হয় তবে এটি বর্তমানে ইনস্টল হওয়া প্যাকেজটিকে ওভাররাইট করতে পারে না।


1

উবুন্টুর জন্য, উপযুক্ত এটি করার জন্য মোটামুটি শালীন উপায় সরবরাহ করে। নীচে গুগল ক্রোমের উদাহরণ রয়েছে:

apt -qq list google-chrome-stable 2>/dev/null | grep -qE "(installed|upgradeable)" || apt-get install google-chrome-stable

আমি ত্রুটি আউটপুটটি বাতিল করতে পুনঃনির্দেশ করছি কারণ এপটি তার "অস্থির ক্লাইটি" ব্যবহারের বিরুদ্ধে সতর্ক করে। আমি সন্দেহ করি যে তালিকা প্যাকেজ স্থিতিশীল তাই আমি মনে করি এই সতর্কতাটি ফেলে দেওয়া ঠিক আছে। -কিউটি এপটিকে সুপার নিঃশব্দ করে তোলে।



@ পাওয়েলবার্কিক ভাল পয়েন্ট আমি এই পরিস্থিতিটি পরিচালনা করতে উত্তর আপডেট করেছি।
carlin.scott

0

এই আদেশটি সবচেয়ে স্মরণীয়:

dpkg --get-selections <package-name>

এটি ইনস্টল করা থাকলে এটি প্রিন্ট করে:

<প্যাকেজ- নাম> ইনস্টল করুন

অন্যথায় এটি মুদ্রণ

<প্যাকেজ-নাম> এর সাথে মিলে কোনও প্যাকেজ পাওয়া যায় নি।

এটি উবুন্টু 12.04.1 (যথাযথ পাঙ্গোলিন) এ পরীক্ষা করা হয়েছিল।


4
dpkg --get-selections <package-name>প্যাকেজটি পাওয়া না গেলে প্রস্থান কোডটি অ-শূন্যে সেট করে না।
লুকাস

0

অনেক কিছুই বলা হয়েছে তবে আমার কাছে সহজ উপায় হ'ল:

dpkg -l | grep packagename

0

বাশে:

PKG="emacs"
dpkg-query -l $PKG > /dev/null || sudo apt install $PKG

মনে রাখবেন পিকেজিতে বেশ কয়েকটি প্যাকেজ সহ আপনার স্ট্রিং থাকতে পারে।


0

আমি নিম্নলিখিত উপায় ব্যবহার:

which mySQL 2>&1|tee 1> /dev/null
  if [[ "$?" == 0 ]]; then
                echo -e "\e[42m MySQL already installed. Moving on...\e[0m"
        else
        sudo apt-get install -y mysql-server
                if [[ "$?" == 0 ]]; then
                        echo -e "\e[42mMy SQL installed\e[0m"
                else
                        echo -e "\e[42Installation failed\e[0m"
                fi
        fi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.