تخطَّ إلى المحتوى

ورقة مرجعية Nushell - شِل منظم حديث

ورقة مرجعية Nushell - شِل منظم حديث

Section titled “ورقة مرجعية Nushell - شِل منظم حديث”

شِل حديث يتعامل مع كل شيء كبيانات منظمة بدلاً من النص الخام. تعمل خطوط الأنابيب مع الجداول والسجلات والقوائم — وليس فقط السلاسل النصية. فكر فيه كشِل يفهم JSON وCSV وTOML وYAML بشكل أصلي.

المنصةالأمر
macOS (Homebrew)brew install nushell
Windows (Winget)winget install nushell
Windows (Chocolatey)choco install nushell
Windows (Scoop)scoop install nu
Ubuntu/Debiansudo apt install nushell (أو التنزيل من إصدارات GitHub)
Arch Linuxsudo pacman -S nushell
Fedora/RHELsudo dnf install nushell
Cargo (All platforms)cargo install nu
Nixnix-env -iA nixpkgs.nushell

التشغيل: شغل nu من أي شِل لبدء Nushell. التعيين كشِل افتراضي: chsh -s $(which nu)

تمرر خطوط أنابيب Nushell بيانات منظمة (جداول، سجلات، قوائم)، وليس نصًا:

# شِل تقليدي: نص → grep → awk → نص
# Nushell: جدول → where → select → جدول

ls | where size > 1mb | sort-by size --reverse | first 5

أنواع البيانات: سلاسل نصية، أعداد صحيحة، أعداد عشرية، قيم منطقية، تواريخ، مدد، أحجام الملفات، قوائم، سجلات، جداول

الأمرالوصف
lsقائمة الدليل كجدول منظم
ls -laقائمة جميع الملفات (بما في ذلك المخفية) بتنسيق طويل
cd path/to/dirتغيير الدليل
cp source destنسخ الملفات أو الأدلة
mv source destنقل أو إعادة تسمية الملفات
rm fileإزالة الملفات
mkdir dirnameإنشاء دليل
open file.jsonفتح الملف كبيانات منظمة (اكتشاف تلقائي للتنسيق)
open file.csvفتح CSV كجدول
open file.tomlفتح TOML كسجل
save output.jsonحفظ إخراج خط الأنابيب إلى ملف
cat file.txtعرض محتويات الملف كنص
psإظهار العمليات الجارية كجدول
sysإظهار معلومات النظام
which commandالعثور على موقع الأمر
help commandsقائمة جميع الأوامر المتاحة
help <command>إظهار المساعدة لأمر محدد

تصفية واختيار البيانات

Section titled “تصفية واختيار البيانات”
الأمرالوصف
ls | where size > 10mbتصفية الملفات الأكبر من 10 ميجابايت
ls | where name =~ "\.rs$"التصفية بـ regex على اسم الملف
ls | where type == "dir"إظهار الأدلة فقط
ls | where modified > 2dayالملفات المعدلة في آخر يومين
ls | select name sizeإظهار أعمدة الاسم والحجم فقط
ls | reject typeإزالة عمود النوع
ls | get nameاستخراج عمود الاسم فقط كقائمة
ls | first 5إظهار أول 5 إدخالات
ls | last 3إظهار آخر 3 إدخالات
ls | skip 10تخطي أول 10 إدخالات
ls | nth 0 2 4اختيار الإدخالات حسب الفهرس
ls | lengthعد عدد الإدخالات
ls | uniqإزالة الإدخالات المكررة
الأمرالوصف
ls | sort-by sizeالترتيب حسب الحجم تصاعديًا
ls | sort-by size --reverseالترتيب حسب الحجم تنازليًا
ls | sort-by nameالترتيب أبجديًا
ls | group-by typeتجميع الإدخالات حسب النوع
ls | group-by {get name | path parse | get extension}التجميع حسب امتداد الملف
الأمرالوصف
"hello world" | str upcaseالتحويل إلى أحرف كبيرة
"HELLO" | str downcaseالتحويل إلى أحرف صغيرة
" hello " | str trimإزالة المسافات البيضاء
"hello" | str contains "ell"التحقق مما إذا كانت السلسلة تحتوي على سلسلة فرعية
"hello" | str replace "l" "L"استبدال الأحرف
"hello world" | split row " "تقسيم السلسلة إلى قائمة
["hello" "world"] | str join ", "ضم القائمة في سلسلة
"hello" | str lengthالحصول على طول السلسلة
"hello" | str starts-with "he"التحقق من بادئة السلسلة

العمل مع البيانات المنظمة

Section titled “العمل مع البيانات المنظمة”
الأمرالوصف
open data.json | get field_nameالوصول إلى حقل في JSON
open data.json | get nested.fieldالوصول إلى الحقول المتداخلة
{name: "Alice", age: 30}إنشاء سجل
[1 2 3 4 5]إنشاء قائمة
[[name age]; [Alice 30] [Bob 25]]إنشاء جدول
$data | to jsonالتحويل إلى JSON
$data | to csvالتحويل إلى CSV
$data | to tomlالتحويل إلى TOML
$data | to yamlالتحويل إلى YAML
$data | to mdالتحويل إلى جدول Markdown
الأمرالوصف
[1 2 3 4] | math sumمجموع القيم
[1 2 3 4] | math avgمتوسط القيم
[1 2 3 4] | math maxالقيمة القصوى
[1 2 3 4] | math minالقيمة الدنيا
[1 2 3 4] | math medianالقيمة الوسيطة
ls | get size | math sumالحجم الإجمالي للملفات المدرجة
1 + 2الحساب الأساسي
10 / 3القسمة
2 ** 8الأس
الأمرالوصف
http get https://api.example.com/dataجلب URL وتحليل الاستجابة
http post https://api.example.com/data {key: "value"}طلب POST مع نص
fetch url | get fieldجلب واستخراج حقل محدد

المتغيرات وتدفق التحكم

Section titled “المتغيرات وتدفق التحكم”
# المتغيرات (ثابتة افتراضيًا)
let name = "Alice"
let count = 42
let files = (ls | where size > 1mb)

# المتغيرات القابلة للتغيير
mut counter = 0
$counter += 1

# If/else
if $count > 10 { "big" } else { "small" }

# الحلقات
for file in (ls) { print $file.name }
ls | each { |row| $row.name | str upcase }

# الأوامر المخصصة (الدوال)
def greet [name: string] { $"Hello, ($name)!" }
greet "World"
الملفالغرض
$nu.config-pathالتكوين الرئيسي (config.nu)
$nu.env-pathتكوين البيئة (env.nu)
# إظهار موقع ملف التكوين
$nu.config-path

# تحرير التكوين
config nu    # فتح config.nu في المحرر
config env   # فتح env.nu في المحرر

خيارات التكوين الشائعة

Section titled “خيارات التكوين الشائعة”
# In config.nu
$env.config = {
    show_banner: false           # تعطيل شعار الترحيب
    table: {
        mode: rounded            # نمط الجدول: rounded, compact, thin, none
    }
    completions: {
        algorithm: "fuzzy"       # إكمال تبويب غامض
    }
    history: {
        max_size: 10000          # إدخالات السجل للاحتفاظ بها
        file_format: "sqlite"    # sqlite أو plaintext
    }
}
# العثور على أكبر الملفات في مشروع
ls **/* | where type == "file" | sort-by size --reverse | first 20

# تحليل واستعلام JSON API
http get https://api.github.com/repos/nushell/nushell | select stargazers_count forks_count

# التحويل بين التنسيقات
open data.csv | to json | save data.json

# تحليل ملفات السجل
open access.log | lines | parse "{ip} - - [{date}] \"{method} {path} {proto}\" {status} {size}"
| where status == "404" | group-by path | sort-by -r

# نظرة عامة سريعة على النظام
sys | get host
ps | sort-by cpu --reverse | first 10
الميزةBash/ZshNushell
نموذج البياناتتدفقات نصيةجداول منظمة
تحليل الإخراجgrep, awk, sedwhere, select, get مدمجة
معالجة JSONيتطلب jqأصلي (open file.json)
معالجة الأخطاءرموز الخروجرسائل خطأ غنية
إكمال Tabأساسيواعي بالسياق
نظام الأنواعبلاأعداد صحيحة، سلاسل، تواريخ، أحجام، إلخ.
منحنى التعلممألوفصيغة جديدة للتعلم
الأوامر الخارجيةأصليمدعوم بالكامل