ورقة مساعدة أوامر باش لينكس
بعض أدوات معلمات سطر الأوامر
ليس قائمة شاملاً جداً، فقط بعض الأشياء التي وجدتها مفيدة
التحقق من إصدار لينكس أوبونتو
الطريقة 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 يعمل بعد تسجيل الخروج
بافتراض أن لديك برنامج يعمل في前景، اضغط على
- 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>