কমান্ড লাইনে সেট করা অনুমতি নিয়ে ফাইলগুলি তৈরি করা যায়?


37

ডিরেক্টরি mkdir -m <mode> <dir>তৈরি করার সময় প্রদত্ত মোড / অনুমতি সেট (একতাত্ত্বিকভাবে) দিয়ে এক বা একাধিক ডিরেক্টরি তৈরির সরবরাহ করে।

কমান্ড লাইনে ফাইল তৈরির সমতুল্য কি আছে?

এর সদৃশ কিছু:

open("file", O_WRONLY | O_APPEND | O_CREAT, 0777);

এখানে কি আমার একমাত্র বিকল্প touchঅনুসরণ করে chmod?


সম্পাদনা: টেপিকের পরামর্শটি ব্যবহার করার চেষ্টা করার পরে install, আমি এটি straceদেখতে পারলাম যে এটি পারমাণবিকের কত কাছাকাছি ছিল। উত্তরটি খুব নয়:

$ strace install -m 777 /dev/null newfile
...
open("newfile", O_WRONLY|O_CREAT|O_EXCL, 0666) = 4
fstat(4, {st_mode=S_IFREG|0666, st_size=0, ...}) = 0
...
fchmod(4, 0600)                         = 0
close(4)                                = 0
...
chmod("newfile", 0777)                  = 0
...

তবুও এটি একটি একক শেল কমান্ড এবং এটি আমি আগে জানতাম না।

উত্তর:


47

আপনি installডামি ফাইলের সাথে কমান্ডটি (জিএনইউ কোর্টিলের অংশ) ব্যবহার করতে পারেন , যেমন

install -b -m 755 /dev/null newfile

-bবিকল্প ব্যাক আপ নেয় newfileযদি এটা আগে থেকেই আছে। আপনি মালিককে সেট করতেও এই আদেশটি ব্যবহার করতে পারেন।


4
+1 আমাকে পরিচয় করিয়ে দেওয়ার জন্যinstall
কোরানিয়ান

এটি একটি দরকারী ছোট কমান্ড। যেমন এর নামটি ইঙ্গিত দেয় যে এটি সত্যই সোর্স কোড থেকে সংকলিত সফটওয়্যার ইনস্টল করার জন্য তৈরি করা হয়েছে, chmod, chown এবং সমস্ত সময় ব্যবহারের জন্য সংরক্ষণ করা।
তেপিক

স্টিন লাগলেই তো হয়! ঠিক আছে, / proc / স্ব / এফডি / 0 আমার উদ্দেশ্যে কাজ করবে।
প্রসিকি

নোট করুন যে মোড 755 দিয়ে তৈরি ফাইলগুলির ডিফল্ট অনুমতি রয়েছে install, সুতরাং -m 755এটির দরকার নেই।
কুসালানন্দ

@ কুসালানন্দ এটি সম্ভবত একটি মোড কীভাবে সেট করবেন তার একটি উদাহরণ, যেহেতু প্রশ্নটি ছিল 755 কীভাবে সেট করবেন না।
টপিক

22

touchফাইলটি উপস্থিত না থাকলে সর্বদা তৈরি করে, সর্বদা প্রতীকী লিঙ্কগুলি অনুসরণ করে এবং সর্বদা ফাইলটিকে অ-নির্বাহযোগ্য করে তোলে। আপনি উমাস্কের মাধ্যমে বিটগুলি পড়তে এবং লিখতে সিদ্ধান্ত নিতে পারেন ।

(umask 077; touch file)  # creates a 600 (rw-------) file
(umask 002; touch file)  # creates a 664 (rw-rw-r--) file

"নিরাপদ" পারমাণবিক ফাইল তৈরি (বিশেষত: সহ O_NOFOLLOW) traditionalতিহ্যবাহী শেল সরঞ্জামগুলির সাহায্যে সম্ভব নয়। আপনি sysopenপার্ল ব্যবহার করতে পারেন । আপনার যদি বিএসডি-অনুপ্রাণিত mktempইউটিলিটি থাকে তবে এটি পারমাণবিকভাবে একটি ফাইল তৈরি করে O_NOFOLLOW; এর chmodপরে আপনাকে কল করতে হবে যদি 600 এর ডিফল্ট মোডটি সঠিক না হয়।


আমি আরও বিস্তারিত ব্যাখ্যা লেখার প্রক্রিয়ায় ছিলাম, তবে উইকিপিডিয়া নিবন্ধগুলি সবকিছু ঠিকঠাক করে দেয়।
জোর্ডানম

যদি কেবল touchএক্সিকিউটেবল ফাইলগুলি তৈরি করার বিকল্প ছিল তবে এটিই আমি পরে আছি। তারপরে umaskবিশদটি টেইলার করতে ব্যবহার করা যেতে পারে। দুঃখের সাথে এক্সিকিউটেবলগুলি তৈরি করা umaskএবং touchতৈরি করার কোনও উপায় নেই ।
কোরনিয়ান

@ কোর্নিয়ান আপনি যে কোনওভাবেই খালি খালি ফাইল তৈরি করতে পারবেন না। পরমাণুভাবে একটি খালি এক্সিকিউটেবল ফাইল তৈরি করার বিন্দুটি কী? touchএরপরে ব্যবহার করুন chmod +x
গিলস

4
আপনি ... ln বা এমভি দিয়ে নাগরিকভাবে ফাঁকা, এক্সিকিউটেবল ফাইল তৈরি করতে পারেন। আপনি সর্বদা উমাস্ক 077 দিয়ে তৈরি ডিরেক্টরিতে সঠিক সামগ্রী এবং অনুমতি নিয়ে ফাইলটি তৈরি করতে পারেন এবং এটিকে সরাতে বা পরে ln করতে পারেন।
স্টাফেন চেজেলাস

-1

আমার হোম ডিরেক্টরিতে একটি বাশ স্ক্রিপ্ট রয়েছে /home/anthony/touchmod.sh:

#!/bin/bash

touch "$2"
chmod "$1" "$2"

সুতরাং আমি যদি readme.txt644 অনুমতি নিয়ে তৈরি করতে চাই তবে আমি টাইপ করতে পারি:

~/touchmod.sh 644 readme.txt

3
আপনি সম্ভবত প্রশ্নটি বুঝতে পারেন নি। প্রশ্নকারী এটিকে এড়াতে চেষ্টা করেন।
সিল্ভিং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.