# إرسال ملف: يتم إنشاء كلمة المرور تلقائيًا، ويُطبع الرابط + كلمة المرور $ ttl send secret.pdf No password provided. Generate one? [Y/n]: Generated password: aB3kL9mXq7Rt ·✧★◉ Thank goodness, secret.pdf is in orbit (1.2 MB) IMPORTANT! Save your password — required to download and decrypt the file. Password: aB3kL9mXq7Rt https://ttl.space/aBcDeFgHiJ # تنزيل: يُطلب إدخال كلمة المرور بشكل تفاعلي $ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, secret.pdf landed safe and sound (1.2 MB)
يتولى سطر الأوامر التشفير والرفع والتنزيل وفك التشفير. لا يرى الخادم كلمة مرورك أو بياناتك النصية مطلقًا.
$ brew install tweenietomatoes/ttl/ttl
$ scoop bucket add ttl https://github.com/tweenietomatoes/scoop-ttl $ scoop install ttl
# قم بالتنزيل لمنصتك من صفحة الإصدارات $ curl -Lo ttl.tar.gz \ https://github.com/tweenietomatoes/ttl/releases/download/v1.6.0/ttl_1.6.0_linux_amd64.tar.gz $ tar xzf ttl.tar.gz && sudo mv ttl /usr/local/bin/
$ go install github.com/tweenietomatoes/ttl/cmd/ttl@latest
$ git clone https://github.com/tweenietomatoes/ttl $ cd ttl && go build -o ttl ./cmd/ttl/ $ sudo mv ttl /usr/local/bin/
$ ttl version ttl 1.6.0
# إنشاء كلمة مرور تلقائيًا، مدة صلاحية افتراضية 7 أيام $ ttl send report.xlsx
عند عدم تحديد كلمة مرور في الطرفية، يسأل سطر الأوامر:
No password provided. Generate one? [Y/n]:
اضغط Enter أو اكتب y للإنشاء التلقائي.
$ ttl send -p mySecretPass -t 1h document.pdf
# يُستهلك لحظة بدء أول تنزيل، وبعد انقطاعه لا يستأنفه إلا ذلك التنزيل نفسه $ ttl send -b photo.jpg
$ ttl send -t 5m temp-credentials.txt # تنتهي خلال 5 دقائق $ ttl send -t 30m meeting-link.txt # تنتهي خلال 30 دقيقة $ ttl send -t 6h backup.tar.gz # تنتهي خلال 6 ساعات $ ttl send -t 1d daily-report.pdf # تنتهي خلال يوم واحد $ ttl send -t 3d project-archive.zip # تنتهي خلال 3 أيام $ ttl send -t 5d design-assets.zip # تنتهي خلال 5 أيام $ ttl send report.xlsx # تنتهي خلال 7 أيام (افتراضي)
$ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)
تُقرأ كلمة المرور بشكل آمن، لا تظهر في الطرفية. يُحفظ اسم الملف الأصلي؛ وإذا كان هذا الاسم موجودًا بالفعل في دليل الإخراج، يُحفظ الملف باسم name (1).ext بدلاً من الكتابة فوق الملف الموجود.
# يمكنك استخدام الرمز المكون من 10 أحرف فقط بدلاً من الرابط الكامل $ ttl get aBcDeFgHiJ
$ ttl get -o ~/Downloads aBcDeFgHiJ
بشكل افتراضي، يتم حفظ الملفات في الدليل الحالي. استخدم -o / --output لتحديد دليل مختلف.
$ ttl get -p mySecretPass https://ttl.space/aBcDeFgHiJ
يمكنك أيضًا تنزيل الملفات وفك تشفيرها في متصفحك عن طريق زيارة الرابط مباشرةً. تستخدم واجهة الويب نفس تنسيق الملفات والخوارزميات (Argon2id، XChaCha20-Poly1305) وتطلب كلمة المرور. لا حاجة لتثبيت برامج.
كلمة المرور هي أساس مفتاح التشفير. لا تغادر جهازك أبدًا ولا تُرسل إلى الخادم مطلقًا. هناك ست طرق لتوفيرها:
$ ttl send notes.txt No password provided. Generate one? [Y/n]: y Generated password: aB3kL9mXq7Rt
يُنشئ كلمة مرور عشوائية تشفيريًا من 12 حرفًا من مجموعة [0-9A-Za-z]. متاح فقط أثناء send (بشكل تفاعلي، أو تلقائيًا في وضع --json).
$ ttl send notes.txt No password provided. Generate one? [Y/n]: n Enter password: ******** Confirm password: ******** $ ttl get https://ttl.space/aBcDeFgHiJ Enter password: ********
لا تُعرض كلمة المرور ولا تُحفظ في سجل الصدفة. أثناء send يُعرض خيار الإنشاء التلقائي أولاً. أثناء get يُطلب الإدخال مباشرة.
-p / --password$ ttl send -p mySecretPass file.zip $ ttl get --password mySecretPass https://ttl.space/aBcDeFgHiJ
-p / --password تظهر في مخرجات ps aux وقد تُحفظ في سجل الصدفة (~/.bash_history). تجنب استخدامها في البيئات المشتركة والنصوص البرمجية. استخدم --password-stdin أو --password-file بدلاً من ذلك.--password-stdin# التمرير عبر echo $ echo "mySecretPass" | ttl send --password-stdin backup.tar.gz # التمرير من مدير كلمات المرور $ pass show ttl/key | ttl send --password-stdin data.zip # التمرير من متغير بيئة $ printenv MY_SECRET | ttl get --password-stdin https://ttl.space/aBcDeFgHiJ # heredoc $ ttl send --password-stdin report.pdf <<<"mySecretPass"
يقرأ السطر الأول من الإدخال القياسي. مفيد في النصوص البرمجية وخطوط أنابيب CI/CD والأتمتة. عندما لا يكون الإدخال القياسي طرفية ولم يُحدد مصدر لكلمة المرور، يخرج سطر الأوامر بخطأ (إلا عند استخدام --json، الذي يُنشئ كلمة مرور تلقائيًا).
--password-file$ ttl send --password-file /run/secrets/key report.xlsx $ ttl get --password-file ~/.ttl-key https://ttl.space/aBcDeFgHiJ
يقرأ السطر الأول من الملف (يُزال حرف السطر الجديد اللاحق). متوافق مع أسرار Docker (/run/secrets/) وملفات وكيل Vault والأنماط المشابهة.
ttl.passwordإذا لم يتم تقديم كلمة مرور صريحة، يبحث CLI عن ملف ttl.password بجوار البرنامج، ثم ~/.ttl/password. يُستخدم السطر الأول ككلمة مرور.
-p / --password و--password-stdin و--password-file. يتم فحص ملف ttl.password المكتشف تلقائياً فقط عند عدم تقديم أي منها. الحد الأدنى للطول: ٨ أحرف.| العلم | الوصف | الافتراضي |
|---|---|---|
-p, --password P | كلمة مرور التشفير | تفاعلي |
--password-stdin | قراءة كلمة المرور من الإدخال القياسي | |
--password-file F | قراءة كلمة المرور من ملف | |
-t, --ttl مدة | مدة الصلاحية | 7d |
-b, --burn | حذف بعد القراءة (تنزيل واحد) | معطّل |
-u, --uploader-only | لا يمكن التنزيل إلا بمفتاح API الخاص بك (Orbit؛ اسم بديل: --private) | معطّل |
--timeout مدة | مهلة النقل | بلا حد |
--server URL | عنوان الخادم | https://ttl.space |
-h3, --http3 | تجربة HTTP/3 (QUIC)، الرجوع إلى TCP | معطّل |
--json | إخراج JSON إلى stdout (للنصوص البرمجية ووكلاء الذكاء الاصطناعي) | إيقاف |
| العلم | الوصف | الافتراضي |
|---|---|---|
-p, --password P | كلمة مرور فك التشفير | تفاعلي |
--password-stdin | قراءة كلمة المرور من الإدخال القياسي | |
--password-file F | قراءة كلمة المرور من ملف | |
-o, --output DIR | دليل الإخراج | الدليل الحالي |
--timeout مدة | مهلة النقل | بلا حد |
-h3, --http3 | تجربة HTTP/3 (QUIC)، الرجوع إلى TCP | معطّل |
--json | إخراج JSON إلى stdout (للنصوص البرمجية ووكلاء الذكاء الاصطناعي) | إيقاف |
مجاني: 5m 10m 15m 30m 1h 2h 3h 6h 12h 24h 1d 2d 3d 4d 5d 6d 7d
Orbit يضيف: 14d 15d 28d 30d permanent
الافتراضي: بلا حد. يُستأنف النقل المتوقف تلقائيًا، ويتوقف إذا تعذّرت متابعته. لتعيين حد استخدم --timeout 30m أو --timeout 2h.
#!/bin/bash tar czf /tmp/backup.tar.gz /data echo "$BACKUP_KEY" | ttl send --password-stdin -t 6h /tmp/backup.tar.gz rm /tmp/backup.tar.gz
$ ttl send -p mypass123 file.pdf | pbcopy
$ ttl send -p mypass123 file.pdf | xclip -sel clip
$ echo "$DB_PASSWORD" | ttl send --password-stdin -b -t 5m credentials.env # الرابط يعمل مرة واحدة فقط، وتنتهي صلاحيته خلال 5 دقائق
# إرسال: يتم إنشاء كلمة المرور تلقائياً في وضع JSON $ ttl --json send report.pdf {"ok":true,"link":"https://ttl.space/xK9mQ2vLpA","filename":"report.pdf","size":2097152,"ttl":"7d","burn":false,"uploader_only":false,"is_permanent":false,"password":"aB3kL9mXq7Rt"} # تنزيل $ ttl --json get -p aB3kL9mXq7Rt xK9mQ2vLpA {"ok":true,"filename":"report.pdf","size":2097152,"saved_to":"/home/user/report.pdf"} # الأخطاء تعيد ok:false {"ok":false,"error":"Link not found"}
في وضع --json، تكون جميع المخرجات JSON منظم على stdout. إذا لم يتم تقديم كلمة مرور أثناء الإرسال، يتم إنشاء واحدة تلقائياً وتضمينها في الاستجابة. رمز الخروج هو 0 عند النجاح و1 عند الخطأ.
Orbit يفتح ملفات أكبر (١٠ جيجابايت)، واحتفاظاً أطول (٣٠ يوماً أو دائم)، وملفات خاصة بمن رفعها (لا يمكن تنزيلها إلا بمفتاح API الخاص بك)، وإدارة الملفات (القائمة والحذف). المقارنة الكاملة: Features.
يتم اكتشاف مفتاح API تلقائياً: متغير البيئة TTL_API_KEY، ttl.key بجوار البرنامج أو ~/.ttl/key. استخدم ttl activate لحفظ المفتاح أو اكتبه يدوياً في أي من هذه المواقع.
# تفعيل المفتاح: يُطلب دون أن يظهر على الشاشة، فلا يُحفظ في سجل الصدفة $ ttl activate Enter Orbit API key: ******** Orbit plan activated. Key saved to /usr/local/bin/ttl.key # بدون تفاعل: ttl activate --key-stdin | ttl activate --key-file F # التحقق من الخطة والاستخدام $ ttl plan Plan: orbit Max file size: 10.0 GB Max TTL: 30 days (or permanent) Uploads per day: 1000000 Usage: Uploads today: 3 Active storage: 1.2 GB / 500.0 GB # الإرسال مع TTL ممتد $ ttl send -t 30d large-backup.tar.gz # ملف دائم (Orbit فقط): بلا انتهاء صلاحية، يُحتفظ به حتى تحذفه أو ينتهي اشتراكك $ ttl send -t permanent archive.tar.gz # إرسال ملف خاص: لا يمكن تنزيله إلا بمفتاح API الخاص بك (Orbit فقط) $ ttl send -u payroll.xlsx # عرض التحميلات الأخيرة $ ttl list xK9mQ2vLpA 4.2 MB 2026-03-16 10:30 → 2026-04-15 10:30 [active] https://ttl.space/xK9mQ2vLpA rT7bNw3KpF 912.0 KB 2026-03-15 14:20 → 2026-03-17 14:20 [active (burn)] https://ttl.space/rT7bNw3KpF # حذف ملف $ ttl delete xK9mQ2vLpA Deleted: xK9mQ2vLpA # إزالة المفتاح المحفوظ $ ttl deactivate Key file removed: /usr/local/bin/ttl.key
ttl send / ttl get أو وضع --json. نقاط النهاية أدناه لإدارة ملفات Orbit.$ curl https://ttl.space/v1/files -H "X-API-Key: ttl_orbit_..." {"files":[{"token":"xK9mQ2vLpA","link":"https://ttl.space/xK9mQ2vLpA","size_bytes":1048576,"created_at":1711800600,"expires_at":1714392600,"burn":false,"expired":false,"uploader_only":false,"is_permanent":false,"is_note":false,"perm_grace_until":0}],"has_more":false} # الصفحة التالية: فقط عندما تكون has_more تساوي true؛ مرّر next_cursor من الاستجابة السابقة $ curl "https://ttl.space/v1/files?cursor=1711800600123456" -H "X-API-Key: ttl_orbit_..."
يُرجع الملفات المحمّلة بهذا المفتاح، الأحدث أولاً، 20 ملفًا في كل صفحة. عندما تكون قيمة has_more هي true، تتضمن الاستجابة أيضًا next_cursor؛ مرّره كـ ?cursor= لجلب الصفحة التالية. يتطلب خطة Orbit.
$ curl -X DELETE https://ttl.space/v1/files/xK9mQ2vLpA -H "X-API-Key: ttl_orbit_..."
يُرجع 204 No Content عند النجاح. يتطلب خطة Orbit. يجب أن ينتمي الملف لهذا المفتاح.
| الحالة | المعنى |
|---|---|
401 | مفتاح API غير صالح أو منتهي الصلاحية |
403 | الميزة تتطلب خطة Orbit |
404 | الملف غير موجود أو لا ينتمي لهذا المفتاح |
429 | تم تجاوز حد الطلبات |
500 | خطأ داخلي في الخادم،أعد المحاولة لاحقًا |
502 | التخزين غير متاح مؤقتًا،أعد المحاولة لاحقًا |
| القيد | مجاني | Orbit |
|---|---|---|
| الحد الأقصى لحجم الملف | ٢ جيجابايت | ١٠ جيجابايت |
| الحد الأقصى لـ TTL | ٧ أيام | ٣٠ يوماً أو دائم |
| التحميلات يومياً | ١٠ | غير محدود |
| حجم التحميلات يومياً (لكل IP) | ١٠ جيجابايت | غير محدود |
| التحميلات المتزامنة | ١ لكل IP | ١ لكل IP ولكل مفتاح API |
| حصة التخزين | ✗ | ٥٠٠ جيجابايت |
| قائمة الملفات | ✗ | ✓ |
| الحذف المبكر | ✓ | ✓ |
| ملفات خاصة بمن رفعها | ✗ | ✓ |
| الحد الأدنى لطول كلمة المرور | ٨ أحرف | |
| الطلبات لكل IP | ٣٠ لكل ١٠ ثوانٍ | |
| الاتصالات لكل IP | ١٠ متزامنة | |
تُشفّر الملفات على جهازك قبل الرفع. يخزّن الخادم النص المشفر فقط ولا يمكنه فك تشفير ملفاتك.
| المكوّن | الخوارزمية / القيمة |
|---|---|
| اشتقاق المفتاح | Argon2id (time=3, memory=64 MiB, parallelism=1) |
| التشفير | XChaCha20-Poly1305 AEAD |
أي تعديل على النص المشفر يتسبب في فشل فك التشفير. يتحقق الخادم من أن المُنزِّل يعرف كلمة المرور الصحيحة قبل إصدار النص المشفر، باستخدام رمز أحادي الاتجاه مشتق من مفتاح التشفير.