কোডগুলি একের পর এক ভেঙে ফেলুন (আমার সিস্টেমের জন্য):
$ dpkg -l 'linux-image-*'
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-=============================-===================-===================-================================================================
un linux-image-3.0 <none> <none> (no description available)
ii linux-image-3.13.0-32-generic 3.13.0-32.57 amd64 Linux kernel image for version 3.13.0 on 64 bit x86 SMP
ii linux-image-extra-3.13.0-32-g 3.13.0-32.57 amd64 Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
ii linux-image-generic 3.13.0.32.38 amd64 Generic Linux kernel image
$ dpkg -l 'linux-image-*' | sed '/^ii/!d'
ii linux-image-3.13.0-32-generic 3.13.0-32.57 amd64 Linux kernel image for version 3.13.0 on 64 bit x86 SMP
ii linux-image-extra-3.13.0-32-generic 3.13.0-32.57 amd64 Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
ii linux-image-generic 3.13.0.32.38 amd64 Generic Linux kernel image
$ uname -r | sed 's/\(.*\)-\([^0-9]\+\)/\1/'
3.13.0-32
$ dpkg -l 'linux-image-*' | sed '/^ii/!d' | sed "/$(uname -r | sed 's/\(.*\)-\([^0-9]\+\)/\1/')/d"
ii linux-image-generic 3.13.0.32.38 amd64 Generic Linux kernel image
$ dpkg -l 'linux-image-*' | sed '/^ii/!d' | sed "/$(uname -r | sed 's/\(.*\)-\([^0-9]\+\)/\1/')/d" | sed 's/^[^ ]* [^ ]* \([^ ]*\).*/\1/'
linux-image-generic
$ dpkg -l 'linux-image-*' | sed '/^ii/!d' | sed "/$(uname -r | sed 's/\(.*\)-\([^0-9]\+\)/\1/')/d" | sed 's/^[^ ]* [^ ]* \([^ ]*\).*/\1/' | sed '/[0-9]/!d'
## No output
সুতরাং এটি কিছুই করবে না:
$ sudo apt-get remove --purge $(dpkg -l 'linux-image-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d')
আপনি দেখতে পাচ্ছেন এটি আমার বর্তমান কার্নেল মেটা প্যাকেজটি অপসারণের খুব কাছাকাছি ছিল linux-image-generic 3.13.0.32.38 amd64 Generic Linux kernel image (এই শেষ sed '/[0-9]/!d'লাইনের জন্য ধন্যবাদ ), যা ভুল।
সংক্ষেপে, এই টুকরোটির sedকয়েকটি বিষয় রয়েছে। আপনার পুরানো কার্নেলগুলি অপসারণ করতে আপনার এড়ানো উচিত।
সম্পাদনা করুন:
আমি ইতিমধ্যে বলেছি যে sedকমান্ডের সমস্যা আছে। এক্সটেনশনের খাতিরে আমি ফর্মটির সাথে শেষ দুটি লাইন সরিয়ে ফেলছি যা আমার বর্তমান দৃশ্যে আসলে কাজ করা উচিত।
পরিবর্তিত আকারে শেষ দুটি লাইন:
sed -r 's/^[^ ]* *(([a-z]|-)*)(-[a-z]*) *(([0-9]|-)*)\..*/\1-\4\3/'
তাই:
$ dpkg -l 'linux-image-*' | sed '/^ii/!d;/'"$(uname -r |
sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d' |
sed -r 's/^[^ ]* *(([a-z]|-)*(-[a-z]*) *(([0-9]|\.|-)*)\..*/\1\-\4\3/'
Outpus:
linux-image-3.13.0.32-generic
খুব বিপজ্জনক যে !!
--dry-runসম্পূর্ণ apt-get removeকমান্ডটি দিয়ে এই বিষয়টি আমার সিস্টেমে কী করবে তা দেখানো হচ্ছে :
$ sudo apt-get remove --dry-run $(dpkg -l 'linux-image-*' |
sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d' |
sed -r 's/^[^ ]* *(([a-z]|-)*)(-[a-z]*) *(([0-9]|\.|-)*)\..*/\1\-\4\3/')
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'linux-image-3.13.0-32-generic' for regex 'linux-image-3.13.0.32-generic'
The following package was automatically installed and is no longer required:
linux-headers-generic
Use 'apt-get autoremove' to remove it.
The following packages will be REMOVED:
linux-generic linux-image-3.13.0-32-generic
linux-image-extra-3.13.0-32-generic linux-image-generic
0 upgraded, 0 newly installed, 4 to remove and 0 not upgraded.
Remv linux-generic [3.13.0.32.38]
Remv linux-image-generic [3.13.0.32.38]
Remv linux-image-extra-3.13.0-32-generic [3.13.0-32.57]
Remv linux-image-3.13.0-32-generic [3.13.0-32.57]
আপনি যেহেতু দেখেন এটি আমার সমস্ত বর্তমান কার্নেলগুলি সরিয়ে ফেলবে, এছাড়াও নোট করুন যে এটি আমার বর্তমান দৃশ্যের সাথে মেলে একটি সিমুলেশন এবং আসলটি sedউন্নত করা যেতে পারে।
** মনে রাখবেন যে ওলি ইতিমধ্যে উল্লিখিতreboot হিসাবে কার্নেল আপগ্রেড করার পরে যদি করণীয় হয় তবে আসল কোডটি কাজ করবে ।
EDIT2:
এখানে একটি সহজ তবে দৃust় স্ক্রিপ্ট যা সমস্ত পরিস্থিতি বিবেচনা করবে এবং প্রকৃত পুরানো কার্নেলগুলি সরিয়ে ফেলবে:
#!/bin/bash
kernels=( $(grep -Po "^linux-image-[^-]+-[^-]+-generic\b" < <(dpkg --get-selections)) )
cur_rel=$(grep -Po ".*(?=-[a-z]*$)" < <(uname -r))
for kernel in "${kernels[@]}"; do
ker_rel=$(grep -Po "[0-9].*(?=-[a-z]*)" <<< "$kernel")
dpkg --compare-versions "$ker_rel" gt "$cur_rel" && { echo "Please Restart your computer first"; break; }
dpkg --compare-versions "$ker_rel" lt "$cur_rel" && sudo apt-get remove "$kernel"
done
আপনার যদি বর্তমানের তুলনায় নতুন কোনও সংস্করণ থাকে তবে এটি আপনাকে প্রথমে কম্পিউটার পুনরায় চালু করার জন্য একটি সতর্কতা দেবে। এছাড়াও মনে রাখবেন যে কোনও পুরানো কার্নেলগুলি কোনও ভাল কারণে সংরক্ষণ করা হয়েছে যার কারণ আপনি যদি কোনওরকমভাবে আপনার বর্তমান কার্নেলটিকে বিশৃঙ্খল করে দেন যা আপনার সিস্টেমকে অস্থিতিশীল করে তোলে তবে আপনার কোনও পুরানো কার্নেলটিতে বুট করতে সক্ষম হওয়া উচিত।