linux - للعدد - طريقة ايجاد الجذر التربيعي بالتحليل




الحصول على أذونات الجذر على ملف داخل السادس؟ (7)

تحذيرات مشتركة

الطريقة الأكثر شيوعًا للتغلب على مشكلة الملف للقراءة فقط هي فتح توجيه الإخراج إلى الملف الحالي كمستخدم فائق باستخدام تطبيق sudo tee . ومع ذلك ، تضم جميع الحلول الأكثر شيوعًا التي وجدتها حول الإنترنت مجموعة من المحاذير المحتملة العديدة:

  • يتم كتابة الملف بالكامل إلى المحطة ، وكذلك الملف. قد يكون هذا بطيئًا بالنسبة للملفات الكبيرة ، خاصة عبر اتصالات الشبكة البطيئة.
  • يفقد الملف أوضاعه وسماته المشابهة.
  • قد لا تتم معالجة مسارات الملفات ذات الأحرف أو المسافات غير المعتادة بشكل صحيح.

محاليل

للتغلب على جميع هذه المشكلات ، يمكنك استخدام الأمر التالي:

" On POSIX (Linux/Mac/BSD):
:silent execute 'write !sudo tee ' . shellescape(@%, 1) . ' >/dev/null'

" Depending on the implementation, you might need this on Windows:
:silent execute 'write !sudo tee ' . shellescape(@%, 1) . ' >NUL'

هذه يمكن تقصيرها ، باحترام:

:sil exec 'w !sudo tee ' . shellescape(@%, 1) . ' >/dev/null'
:sil exec 'w !sudo tee ' . shellescape(@%, 1) . ' >NUL'

تفسير

: يبدأ الأمر ؛ ستحتاج إلى كتابة هذا الحرف في الوضع العادي لبدء إدخال أمر. يجب حذفها في البرامج النصية.

sil[ent] يقمع الإخراج من الأمر. في هذه الحالة ، نريد إيقاف Press any key to continue مثل المطالبة التي تظهر بعد تشغيل :! أمر.

exec[ute] ينفذ سلسلة كأمر. لا يمكننا تشغيل :write لأنها لن تعالج استدعاء الوظيفة الضرورية.

! يمثل :! الأمر: الأمر الوحيد الذي :write يقبل :write . عادةً ، :write يقبل :write مسار ملف يمكن الكتابة إليه. :! يعمل بمفرده على تشغيل أمر في shell (على سبيل المثال ، استخدام bash -c ). مع :write ، سيتم تشغيل الأمر في shell ، ثم كتابة الملف بأكمله إلى stdin .

يجب أن تكون sudo واضحة ، لأن هذا هو السبب في أنك هنا. قم بتشغيل الأمر كمستخدم فائق. هناك الكثير من المعلومات حول الشبكة حول كيفية عمل ذلك.

الأنابيب tee stdin إلى ملف معين. :write ستكتب إلى stdin ، ثم tee المستخدم الفائقة سوف تتلقى محتويات الملف وكتابة الملف. لن ينشئ ملفًا جديدًا - ما عليك سوى الكتابة فوق المحتويات - لذلك سيتم الحفاظ على أوضاع الملفات وسماتها.

shellescape() يهرب من الأحرف الخاصة في مسار الملف المحدد كما هو مناسب للقذيفة الحالية. مع معلمة واحدة فقط ، فإنه عادةً ما يحيط المسار في علامات الاقتباس حسب الضرورة. نظرًا لأننا نرسل إلى سطر أوامر shell بالكامل ، فسنحتاج إلى تمرير قيمة غير صفرية كوسيطة ثانية لتمكين الهروب من الخط المائل العكسي للحروف الخاصة الأخرى التي قد تنتقل إلى أعلى.

@% يقرأ محتويات السجل % الذي يحتوي على اسم ملف المخزن المؤقت الحالي. ليس بالضرورة مسارًا مطلقًا ، لذا تأكد من أنك لم تقم بتغيير الدليل الحالي. في بعض الحلول ، سترى الرمز التجاري في الحذف. بناءً على الموقع ، يمثل % تعبيرًا صالحًا ، وله نفس التأثير مثل قراءة السجل % . متداخل داخل تعبير آخر غير مسموح عمومًا الاختصار ، مثل: في هذه الحالة.

>NUL و >/dev/null تعيد توجيه stdout إلى الجهاز الفارغ للمنصة. على الرغم من أننا أسكتنا الأمر ، إلا أننا لا نريد عودة جميع النفقات العامة المرتبطة بأنابيب المواسير إلى هدمها - من الأفضل تفريغها في أقرب وقت ممكن. NUL هو الجهاز الفارغ على DOS و MS-DOS و Windows ، وليس ملفًا صالحًا. اعتبارًا من Windows 8 ، لا تؤدي إعادة التوجيه إلى NUL إلى كتابة ملف يسمى NUL. حاول إنشاء ملف على سطح المكتب باسم NUL ، مع أو بدون امتداد الملف: لن تتمكن من القيام بذلك. (هناك العديد من أسماء الأجهزة الأخرى الموجودة في Windows والتي قد تستحق التعرف عليها.)

~ / .vimrc

منصة تابع

بالطبع ، ما زلت لا ترغب في حفظها واكتبها في كل مرة. من الأسهل كثيرًا تعيين الأمر المناسب إلى أمر مستخدم أكثر بساطة. للقيام بذلك على POSIX ، يمكنك إضافة السطر التالي إلى ملف ~/.vimrc الخاص بك ، ~/.vimrc إذا لم يكن موجودًا بالفعل:

command W silent execute 'write !sudo tee ' . shellescape(@%, 1) . ' >/dev/null'

سيتيح لك ذلك كتابة الأمر: W (حساس لحالة الأحرف) لكتابة الملف الحالي بأذونات فائقة للمستخدم - أسهل بكثير.

منصة مستقلة

يمكنني استخدام ملف ~/.vimrc مستقل عن النظام الأساسي ~/.vimrc عبر أجهزة الكمبيوتر ، لذلك أضفت وظائف متعددة الأنظمة الأساسية إلى ملفي. إليك ~/.vimrc مع الإعدادات ذات الصلة فقط:

#!vim
" Use za (not a command; the keys) in normal mode to toggle a fold.
" META_COMMENT Modeline Definition: {{{1
" vim: ts=4 sw=4 sr sts=4 fdm=marker ff=unix fenc=utf-8
"   ts:     Actual tab character stops.
"   sw:     Indentation commands shift by this much.
"   sr:     Round existing indentation when using shift commands.
"   sts:    Virtual tab stops while using tab key.
"   fdm:    Folds are manually defined in file syntax.
"   ff:     Line endings should always be <NL> (line feed #09).
"   fenc:   Should always be UTF-8; #! must be first bytes, so no BOM.


" General Commands: User Ex commands. {{{1
    command W call WriteAsSuperUser(@%)         " Write file as super-user.


" Helper Functions: Used by user Ex commands. {{{1
    function GetNullDevice() " Gets the path to the null device. {{{2
        if filewritable('/dev/null')
            return '/dev/null'
        else
            return 'NUL'
        endif
    endfunction

    function WriteAsSuperUser(file) " Write buffer to a:file as the super user (on POSIX, root). {{{2
        exec '%write !sudo tee ' . shellescape(a:file, 1) . ' >' . GetNullDevice()
    endfunction


" }}}1
" EOF

غالبًا ما أقوم بتحرير ملفات التكوين أثناء تحرير ملفات التكوين ، وعندما أدرك ذلك لحفظها ، أدرك أنني لم أكتب

sudo vi filename

هل هناك أي طريقة لإعطاء امتيازات vi sudo لحفظ الملف؟ يبدو أنني أتذكر أنني رأيت شيئًا ما حول هذا الموضوع أثناء البحث عن بعض الأشياء عن vi منذ فترة ، لكن الآن لا يمكنني العثور عليها.


إذا كنت تستخدم Vim ، فهناك برنامج نصي متاح باسم sudo.vim . إذا وجدت أنك فتحت ملفًا تحتاج إلى وصول الجذر للقراءة ، فاكتب

:e sudo:%
يستبدل Vim٪ باسم الملف الحالي ، و sudo: يرشد النص البرمجي sudo.vim لتولي القراءة والكتابة.


الاختراق السريع الذي يمكنك التفكير فيه هو إجراء chmod على الملف الذي تقوم بتحريره ، وحفظه باستخدام vim ، ثم إعادة chmod إلى ما كان عليه الملف في الأصل.

ls -l test.file (to see the permissions of the file)
chmod 777 test.file
[This is where you save in vim]
chmod xxx test.file (restore the permissions you found in the first step)

بالطبع لا أوصي بهذا النهج في نظام تشعر فيه بالقلق حيال الأمان ، فبضع ثوانٍ يمكن لأي شخص قراءة / تغيير الملف دون إدراكك.


بشكل عام ، لا يمكنك تغيير معرف المستخدم الفعال لعملية vi ، لكن يمكنك القيام بذلك:

:w !sudo tee myfile

عندما تذهب إلى وضع الإدراج في ملف ما ، فأنت بحاجة إلى الوصول إلى sudo للتحرير ، فستظهر لك رسالة حالة

-- INSERT -- W10: Warning: Changing a readonly file

إذا فاتني ذلك ، أفعل ذلك عمومًا

:w ~/edited_blah.tmp
:q

..ثم..

sudo "cat edited_blah.tmp > /etc/blah"

..أو..

sudo mv edited_blah.tmp /etc/blah

من المحتمل أن يكون هناك طريق أقل تقريبًا للقيام بذلك ، لكنه ينجح.


لدي هذا في بلدي ~ / .bashrc:

alias svim='sudo vim'

الآن كلما احتجت إلى تحرير ملف التكوين ، أفتحه فقط باستخدام svim.


يبدو أن Google سريعة تقدم هذه النصيحة:

  1. لا تحاول التعديل إذا كان للقراءة فقط.
  2. قد تتمكن من تغيير الأذونات على الملف. (سواء كانت ستسمح لك بالحفظ أم لا ، فإن الأمر متروك للتجربة.)
  3. إذا كنت لا تزال تحرر على أي حال ، فاحفظه في ملف مؤقت ثم انقله.

http://ubuntuforums.org/showthread.php?t=782136





vi