ورقة مساعدة أوامر باش لينكس

بعض أدوات معلمات سطر الأوامر

Page content

ليس قائمة شاملاً جداً، فقط بعض الأشياء التي وجدتها مفيدة

bash و shell ذكرى!

التحقق من إصدار لينكس أوبونتو

الطريقة 1

lsb_release -a

سينتج شيء مثل

لا توجد وحدات LSB متاحة.
مُوزع ID:	Linuxmint
الوصف:	Linux Mint 22.1
الإصدار:	22.1
الاسم الرمزي:	xia

الطريقة 2

cat /etc/os-release

سينتج شيء مثل

NAME="Linux Mint"
VERSION="22.1 (Xia)"
ID=linuxmint
ID_LIKE="ubuntu debian"
PRETTY_NAME="Linux Mint 22.1"
VERSION_ID="22.1"
HOME_URL="https://www.linuxmint.com/"
SUPPORT_URL="https://forums.linuxmint.com/"
BUG_REPORT_URL="http://linuxmint-troubleshooting-guide.readthedocs.io/en/latest/"
PRIVACY_POLICY_URL="https://www.linuxmint.com/"
VERSION_CODENAME=xia
UBUNTU_CODENAME=noble

التخزين المؤقت والفك

الضغط

tar -zcvf archive-name.tgz directory-name

التفكيك

tar -zxvf archive-name.tgz

الخوادم البعيدة

إرسال هوية المستخدم إلى خادم بعيد

ssh-copy-id user@10.0.0.225

لذلك سيسمح الدخول بدون كلمة مرور في المرة القادمة مثل

ssh user@10.0.0.225

رفع ملف

scp ~/file.ext user@host-ip:/home/user/file.ext

تنزيل مجلد مع محتوياته المتشابكة بشكل تكراري

scp -r user@host-ip:/home/user/dir ~/dir

المجلدات والملفات

التحقق من وجودها

# إنشاء مجلد إذا لم يكن موجوداً، مع جميع المجلدات الوسيطة
[ -d $repdir ] || mkdir -p $repdir

# أو
if [ -d $fname ]; then
  echo "الملف غير موجود: $fname"
  return
fi

إنشاء مجلد لمستخدم معين

sudo mkdir dir1
sudo chown specific_user dir1
sudo chown :specific_group dir1

تكرار الملفات في المجلد

# هذا يحول جميع ملفات jpg في بعض المجلد إلى fits
for f in some-folder/*.jpg
do
  convert "$f" "${f/.jpg/.fits}"
done

دمج جميع الملفات في واحد

cat ./* > merged.txt

إضافة تنفيذ أمر إلى crontab

(crontab -l 2>/dev/null | \
  grep -v control-marker-1; \
  echo '*/15 * * * * /bin/bash /home/user/stest/stest.sh /home/user/stest >> /home/user/stest/stest.log 2>&1 #control-marker-1') | \
  crontab -

هنا:

  • */15 - تنفيذ كل 15 دقيقة
  • control-marker-1 - هو معرف هذا الأمر في إعدادات cron لتحديثه لاحقاً بنفس النص
  • /bin/bash - الأمر الذي سيتم تنفيذه
  • /home/user/stest/stest.sh - معلمة bash - سيتم تشغيل هذا النص
  • /home/user/stest - معلمة النص - لاستخدامها بواسطة $1
  • /home/user/stest/stest.log - ملف سجل مع مخرجات وحدة التحكم من stest.sh

التحقق

grep /home/user/stest/stest.sh /var/log/syslog
crontab -e

السجلات

مراقبة ملف السجل مباشرة

sudo tail -f /var/log/megalog.log

رمز الحالة من curl

response=$(curl --write-out '%{http_code}' --silent --output /dev/null servername)
  
# أو

url='http://localhost:8080/'
status=$(curl --head --location --connect-timeout 5 --write-out %{http_code} --silent --output /dev/null ${url})

[[ $status == 500 ]] || [[ $status == 000 ]] && echo restarting ${url} # قم بتشغيل/إعادة تشغيل المنطق

مغادرة أمر ssh يعمل بعد تسجيل الخروج

https://stackoverflow.com/questions/954302/how-to-make-a-program-continue-to-run-after-log-out-from-ssh

بافتراض أن لديك برنامج يعمل في前景، اضغط على

  • ctrl-Z، ثم:

[1]+ توقف myprogram

  • disown -h %1
  • bg 1

[1]+ myprogram &

  • تسجيل الخروج

إنشاء JSON

تثبيت jo

sudo apt-get install jo
a="123"
b="456"
jo "model=a" "prompt=b" "stream=false"

سيؤدي إلى

{"model":"a", "prompt":"b", "stream":false}

أكثـر تعقيداً قليلاً:

jo -p name=Jane point[]=1 point[]=2 geo[lat]=10 geo[lon]=20
{
   "name": "Jane",
   "point": [
      1,
      2
   ],
   "geo": {
      "lat": 10,
      "lon": 20
   }
}

تنسيق JSON

استخدم

| jq .

لتنسيق JSON المُنشئ أعلاه:

a="123"
b="456"
jo "model=$a" "prompt=$b" "stream=false" | jq .

سيكون JSON المنسق كالتالي:

{
  "model": 123,
  "prompt": 456,
  "stream": false
}

تحليل JSON وإرجاع قيمة بعض الحقول

تثبيت jq أولاً

sudo apt-get install jq

استخدم

  | jq -r '.fieldName'

مثل تحليل خرج مكالمة إلى Ollama:

curl http://localhost:11434/api/generate -d '{
  "model": "llama3",
  "prompt": "لماذا السماء زرقاء؟",
  "stream": false
}'  | jq -r '.response'

عد الكلمات في الملف

عد الكلمات:

wc -w filename.txt

سيعود شيء مثل

261 filename.txt

إذا كنت ترغب فقط في عدد صحيح، يمكنك قطع الكلمة الأولى، وهي عدد

words=`wc -w filename.txt | cut -f1 -d' '`
echo "$words كلمات"

أو استخدام wc مثل:

words=`wc -w < filename.txt`
echo "$words كلمات"

التحقق من كمية المساحة التي يشغلها المجلد على HDD

du ~/dirname

الحصول على اسم المجلد الذي يحتوي على النص الذي يتم تشغيله

SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )

قياس وقت تنفيذ النص

خيار واحد هو استخدام دالة time

time your_script.sh

طريقة أخرى هي فقط أكثر تعقيداً قليلاً:

start=`date +%s`

# كود مهم جداً
# هنا

end=`date +%s`

runtime=$((end-start))

مقارنة ملفين مع vs code

code -d <file 1> <file 2>

التحقق من الحزم المتاحة في مستودع أوبونتو

sudo apt-cache policy <packageName>

روابط مفيدة