এলএসবি-রিলিজ ছাড়াই কীভাবে দেবিয়ান কোডনাম পাবেন


15

আমি এমন একটি স্ক্রিপ্ট তৈরি করার চেষ্টা করছি যা আমাকে ডিবিয়ান কোডনামটি প্রিন্ট করতে হবে যাতে আমি এটি উত্স.লিস্ট ফাইলটিতে প্রতিধ্বনি করতে পারি।

আমি এই স্ক্রিপ্টটি দেবিয়ানর যে কোনও সংস্করণ জুড়ে কাজ করার চেষ্টা করছি, তাই আমি মুক্তির কোডনামের একটি ব্যাশ ভেরিয়েবল সেট করার আশা করছিলাম। এটি করা সহজ হবে (lsb_reLive -c সহ), তবে আমাদের স্থাপনার চিত্রগুলিতে ডিফল্টরূপে lsb_re্লেজ থাকে না - এবং এই স্ক্রিপ্টটির সাথে উত্সগুলি নির্দিষ্ট করা প্রয়োজন list তালিকা, অপ্ট-গেটের সাথে lsb-রিলিজ ইনস্টল করা কোনও বিকল্প হবে না list ।

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

কোন ধারনা ব্যাপকভাবে প্রশংসা হবে!

(ওএস আমি এটি দিয়ে দেবিয়ান স্কুইজ পরীক্ষা করছি)


1
যদি আপনি ড্রপিংয়ের কথা বিবেচনা করার সময় এটিlsb_release
গুগল

উত্তর:


20

আপনি ব্যবহার করতে পারেন /etc/os-release:

(
  . /etc/os-release
  printf '%s\n' "$VERSION"
)
7 (wheezy)

10

গ্রাঙ্কটি প্রেরণ করে না /etc/os-release, এটি আমার 'হ্যাক':

dpkg --status tzdata|grep Provides|cut -f2 -d'-'

ইউও, ভাই এটা অসুস্থ! ঠিক আমার যা প্রয়োজন ছিল। লিনাক্স মিন্ট এলএমডিই (দেবিয়ান সংস্করণ) এর অন্য যে কোনও কিছুই মিন্টটি নির্মিত ছিল এমন ডিবিয়ান সংস্করণ প্রদর্শন করে না। তবে আপনার সমাধানটি করে। ধন্যবাদ!
জিটিডোরভ

5

আপনি ডেবিয়ান সংস্করণ নম্বর সহ কোড মুদ্রণ করতে পারেন:

root@debian:/home/mohsen# grep "VERSION=" /etc/os-release |awk -F= {' print $2'}|sed s/\"//g
8 (jessie)

অথবা আপনি কোড এবং নাম থেকে আপনার কোডের নামটি বহন করতে পারেন:

grep "VERSION=" /etc/os-release |awk -F= {' print $2'}|sed s/\"//g |sed s/[0-9]//g | sed s/\)$//g |sed s/\(//g
jessie

বা, আরও awk -F= '/VERSION=/ {gsub(/"/,""); print $2}' /etc/os-release
অদ্ভুতভাবে

1
@ জেসনওয়ারিয়ান ইওনawk -F"[=\"]+" '/VERSION=/ {print $2}' /etc/os-release
কস্টাস

@ কাস্টাস আমার আউটপুট কেবল কোডনাম।
ফার্সিগাল্ফ

3
আপনি যদি কেবল কোড-নামটি চান তবে এটি খুব সহজawk -F"[)(]+" '/VERSION=/ {print $2}' /etc/os-release
কস্টাস

4

আপনি আপনার ডেবিয়ান বিতরণের কোডনামটি থেকে পেতে পারেন /etc/os-release। এই ফাইলটিকে বিশ্লেষণ করার চেষ্টা করার পরিবর্তে আপনি এটি একটি নতুন পরিবেশে উত্স তৈরি করতে পারেন, যাতে আপনার বর্তমান পরিবেশের উপর প্রভাব না পড়ে echoএবং সেই নতুন পরিবেশে একটি কমান্ড কার্যকর করা যায় না।

env -i bash -c '. /etc/os-release; echo $VERSION_CODENAME'

এটি ভেঙে ফেলার জন্য:

  • env : একটি নতুন পরিবেশে একটি কমান্ড চালান।
  • -i : বিদ্যমান পরিবেশ থেকে পরিবেশের পরিবর্তনশীল উত্তরাধিকারী হবেন না।
  • bash : বাশ রান করুন যাতে আমাদের কাছে ওএস-রিলিজ ফাইল উত্সের শেল থাকে এবং ইকো কমান্ড চালানো যায়।
  • -c: বলুন bashআমরা একটি ইন্টারেক্টিভ শেল শুরু না করে একটি কমান্ড কার্যকর করতে চাই।
  • . /etc/os-release: os-releaseআমাদের নতুন পরিবেশের বিষয়বস্তু উত্স । os-releaseপরিবেশের ভেরিয়েবলগুলি নির্ধারণ করার জন্য কয়েকটি লাইন রয়েছে এবং এটি আমাদের নতুন পরিবেশে সেই পরিবেশের পরিবর্তনশীলগুলি সেট করবে।
  • ; : এই আদেশটি পৃথক করুন এবং পরবর্তী কমান্ডটি চালান run
  • echo $VERSION_CODENAME: os-releaseফাইল দ্বারা সেট করা কোড নামটি ইকো করুন।

1
দুর্দান্ত উত্তর, আমি এগুলি থেকে এ জাতীয় ফাইলগুলি ব্যবহার করতে শিখেছি। আমি এটা ভালো ব্যবহার করা echo "$(. /etc/os-release && echo $VERSION_CODENAME"কিন্তু খেয়াল কোন যে সেখানে $VERSION_CODENAMEstretch। খুব দুঃখজনক সংবাদ।
হিমুরা

2
আমি এটিকে এটি echo "$(. /etc/os-release && echo ${VERSION_CODENAME-stretch})"ঠিক করেছিলাম যা আমার কাজটির জন্য ঠিক বলে মনে হচ্ছে, তবে এটি দেখতে খারাপ দেখাচ্ছে
হিমুরা

1
এটি দেখতে সবচেয়ে মার্জিত পদ্ধতির মতো দেখাচ্ছে (অন্তর্ভুক্ত কোনও
পার্সিংয়ের

2

সিস্টেমডের জন্য:

hostnamectl | grep "Operating System"

আউটপুট:

  Operating System: Debian GNU/Linux 8 (jessie)

এটা আমার জন্য কাজ করে.
অ্যান্থনিবি

এটি অবশ্যই ডেবিয়ান স্কুইজে কাজ করবে না কারণ ডেবিয়ান স্কুইজে সিস্টেমড প্যাকেজ নেই have এমনকি ডেবিয়ান 8 জেসির সাথে (যেখানে সিস্টেমেড ডিফল্ট ইনফরমেশন সিস্টেম হয়ে উঠেছে) হোস্টনামেক্টল কেবল তখনই ইনস্টল করা হয় যদি সিস্টেমড ইনস্টল করা থাকে, সুতরাং প্রশ্নে থাকা সিস্টেমটি অন্য 3 বা 4 টি এনডি সিস্টেমের মধ্যে ডেবিয়ান অফার ব্যবহার করে যদি এই সমাধান কাজ করে না।
এক্সেল বেকার্ট

0

আর একটি হিউরিস্টিক হ'ল বর্তমানে চলমান ওএসের প্যাকেজগুলি কোথা থেকে এসেছে তা দেখতে।

সাধারণ (এবং সম্ভবত ত্রুটি-প্রবণ) বৈকল্পিক:

fgrep -r /debian/ /etc/apt/sources.list \
    | egrep -v '^ *#' \
    | awk '{print $3}' \
    | egrep -v '[-/]'  \
    | uniq

আরও নির্ভরযোগ্য উপায় হ'ল apt-cache policy(আরও প্যারামিটার ছাড়াই) আউটপুট থেকে বিশদ বিশ্লেষণ করা :

apt-cache policy \
    | fgrep o=Debian, \
    | fgrep ,l=Debian, \
    | fgrep ,c=main, \
    | awk -F '[,=]' '{print $6}'

apt-cache policyস্থানীয় সিস্টেমে ব্যবহৃত সমস্ত এপিটি সংগ্রহস্থল তালিকাভুক্ত করে। আমরা যারা যা ডেবিয়ান থেকে উদ্ভূত, যা শুধু লেবেলযুক্ত ফিল্টার করে বের করে Debian(অর্থাত নয় এমন লেবেল যেমন Debian debug), তারপর শুধুমাত্র প্রধান সংরক্ষণাগার দিকে (নয় বলে contribবা non-free) এবং তারপর অনুযায়ী মান নির্বাচন করুন।

একটি আরও স্থিতিশীল পদ্ধতির হ'ল উপাদান ক্রমের উপর নির্ভর n=না করা এবং অবশিষ্ট লাইনে মানটি পাওয়া না:

apt-cache policy \
    | fgrep o=Debian, \
    | fgrep ,l=Debian, \
    | fgrep ,c=main, \
    | egrep -o 'n=[^, ]*' \
    | awk -F= '{print $2}'

তবুও আরেকটি সম্ভাবনা হ'ল /var/lib/apt/lists/*Releaseফাইলগুলি তা করার পরিবর্তে নিজেরাই পার্স করা apt-cache:

egrep -l '^Origin: Debian$' /var/lib/apt/lists/*Release \
    | xargs egrep -l '^Label: Debian$' \
    | xargs egrep -L 'Codename: .*-' \
    | xargs fgrep Codename \
    | awk '{print $2}'

0

আমার দরকার ছিল উত্স.লিস্টে কিছু ইউআরএল যুক্ত করা। এবং পরিবর্তনশীল সংস্করণ কোড নাম রাখতে সক্ষম হবার জন্য, আমি এই টুকরো কোডটি ব্যবহার করি (কোড নামটি প্রথম বন্ধনের মধ্যে রয়েছে তা নির্ভর করে): @ পার্সিয়ানগালফ উত্তর দ্বারা অনুপ্রাণিত ।

grep "VERSION=" /etc/os-release |awk -F= {' print tolower($2)'}|sed s/\.*\(//g | sed s/" ".*\"//g


0

@ কাস্টাস উত্তরটি প্রসারিত করে , এই কমান্ডটি 16.04-র জন্য কার্যকর হয়নি যেখানে এটি পুরো নামটি "জেরিয়াল জেরাস" ফিরিয়ে দিয়েছে তবে আমি কেবল "এক্সেরিয়াল" চেয়েছিলাম কারণ আমি যে রেপোটি আলাদা সংস্করণে পৃথক করা থেকে টানতে চাইছিলাম। এই কমান্ডটি যোগ করে যে কেবল প্রথম শব্দটিই ফিরে আসবে এবং এটি সমস্ত ছোট হাতের অক্ষর হবে:

awk -F"[)(]+" '/VERSION=/ {print $2}' /etc/os-release | awk '{print $1}' | awk '{ print tolower($0) }'

এটি "জেসি" এর জন্যও কাজ করে


0

শুধুমাত্র ব্যবহার grep:

grep -Po 'VERSION="[0-9]+ \(\K[^)]+' /etc/os-release

এটি চেষ্টা করুন (এই পোস্টে লেখার মতো আউটপুট):

$ docker run --rm debian:stable-slim grep -Po 'VERSION="[0-9]+ \(\K[^)]+' /etc/os-release
stretch

0

এই এক হতে পারে (বা নাও) বোকোকা দেবিয়ান স্কিজে কী লিখেছেন তার বিকল্প পন্থা হতে পারে - আমি এটি পরীক্ষিত উবুন্টু 18.04:

$ cat /etc/debian_version
buster/sid
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.