# إرسال ملف — يتم إنشاء كلمة المرور تلقائيًا، ويُطبع الرابط + كلمة المرور $ ttl send secret.pdf No password provided. Generate one? [Y/n]: Generated password: aB3kL9mX ·✧★◉ Thank goodness, secret.pdf is in orbit (1.2 MB) IMPORTANT! Save your password — required to download and decrypt the file. Password: aB3kL9mX 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/latest/download/ttl_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 v1.3.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)
تُقرأ كلمة المرور بشكل آمن — لا تظهر في الطرفية. يُحفظ اسم الملف الأصلي.
# يمكنك استخدام الرمز المكون من 10 أحرف فقط بدلاً من الرابط الكامل $ ttl get aBcDeFgHiJ Enter password: ******** Password verified ◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)
$ ttl get -o ~/Downloads aBcDeFgHiJ
بشكل افتراضي، يتم حفظ الملفات في الدليل الحالي. استخدم -o / --output لتحديد دليل مختلف.
$ ttl get -p mySecretPass https://ttl.space/aBcDeFgHiJ
يمكنك أيضًا تنزيل الملفات وفك تشفيرها في متصفحك عن طريق زيارة الرابط مباشرةً. تستخدم واجهة الويب نفس مكتبة التشفير وتطلب كلمة المرور. لا حاجة لتثبيت برامج.
كلمة المرور هي أساس مفتاح التشفير. لا تغادر جهازك أبدًا ولا تُرسل إلى الخادم مطلقًا. هناك خمس طرق لتوفيرها:
$ ttl send notes.txt No password provided. Generate one? [Y/n]: y Generated password: aB3kL9mX
يُنشئ كلمة مرور عشوائية تشفيريًا من 8 أحرف من مجموعة [0-9A-Za-z]. متاح فقط أثناء send في الطرفية.
$ 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 | حذف بعد القراءة (تنزيل واحد) | معطّل |
--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
الافتراضي: تلقائي — يُقدّر من حجم الملف بافتراض 1 ميغابت/ثانية + هامش دقيقتين (5 دقائق كحد أدنى). يمكن تجاوزه بـ --timeout 10m أو --timeout 1h.
#!/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,"password":"aB3kL9mX"} # تنزيل $ ttl --json get -p aB3kL9mX 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 تلقائياً: متغير البيئة TTL_API_KEY، ttl.key بجوار البرنامج أو ~/.ttl/key. استخدم ttl activate لحفظ المفتاح أو اكتبه يدوياً في أي من هذه المواقع.
# تفعيل المفتاح $ ttl activate ttl_orbit_aBcDeFgHiJ... Orbit plan activated. Key saved to /usr/local/bin/ttl.key # التحقق من الخطة والاستخدام $ ttl plan Plan: orbit Max file size: 10.0 GB Max TTL: 30 days Uploads per day: Unlimited Usage: Uploads today: 3 Active storage: 1.2 GB / 250.0 GB # الإرسال مع TTL ممتد $ ttl send -t 30d large-backup.tar.gz # عرض التحميلات الأخيرة $ 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}]}
يُرجع جميع الملفات المحمّلة بهذا المفتاح. يتطلب خطة 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 | تم تجاوز حد الطلبات |
| القيد | مجاني | Orbit |
|---|---|---|
| الحد الأقصى لحجم الملف | ٢ جيجابايت | ١٠ جيجابايت |
| الحد الأقصى لـ TTL | ٧ أيام | ٣٠ يوماً |
| التحميلات يومياً | ١٠ | ٥٠ |
| حصة التخزين | — | ١٠٠ جيجابايت |
| القائمة والحذف | — | ✓ |
| الحد الأدنى لطول كلمة المرور | ٨ أحرف | |
| الطلبات لكل IP | ٣٠ لكل ١٠ ثوانٍ | |
| الاتصالات لكل IP | ١٠ متزامنة | |
تُشفّر الملفات على جهازك قبل الرفع. يخزّن الخادم النص المشفر فقط ولا يمكنه فك تشفير ملفاتك.
| المكوّن | الخوارزمية / القيمة |
|---|---|
| اشتقاق المفتاح | Argon2id (time=3, memory=64 MB, parallelism=1) |
| التشفير | XChaCha20-Poly1305 AEAD |
أي تعديل على النص المشفر يتسبب في فشل فك التشفير. يتحقق الخادم من أن المُنزِّل يعرف كلمة المرور الصحيحة قبل إصدار النص المشفر، باستخدام رمز أحادي الاتجاه مشتق من مفتاح التشفير.