কোনও ফাইলের অনুমতিগুলি নকল করার মানক উপায়


10

আমি একটি ফাইলের অনুমতি অন্য ফাইলে নকল করার জন্য একটি প্রমিত POSIX উপায় সন্ধান করার চেষ্টা করছি। একটি জিএনইউ সিস্টেমে এটি সহজ:

[alexmchale@bullfrog ~]$ ls -l hardcopy.*
-rw-r--r-- 1 alexmchale users 2972 Jul  8 20:40 hardcopy.1
---------- 1 alexmchale users 2824 May 14 13:45 hardcopy.4
[alexmchale@bullfrog ~]$ chmod --reference=hardcopy.1 hardcopy.4
[alexmchale@bullfrog ~]$ ls -l hardcopy.*
-rw-r--r-- 1 alexmchale users 2972 Jul  8 20:40 hardcopy.1
-rw-r--r-- 1 alexmchale users 2824 May 14 13:45 hardcopy.4

দুর্ভাগ্যক্রমে, - chmod থেকে রেফারেন্স পতাকাটি একটি মানহীন বিকল্প। সুতরাং যে আমার উদ্দেশ্যে আউট। আমি এটি ওয়ান-লাইনার হতে পছন্দ করব তবে এটি প্রয়োজনীয় নয়। শেষ পর্যন্ত, এটি পসিক্স সিন সিনট্যাক্সে থাকা দরকার।

উত্তর:


7

একটি প্রলোভন পার্স করা হয় lsসেই প্রলোভন এড়িয়ে চলুন

নিম্নলিখিতটি কাজ করছে বলে মনে হয়, তবে এটি তেহ ক্লুগে পূর্ণ। এটি cpটার্গেট ফাইলের অনুমতিগুলি ধরে রাখার উপর নির্ভর করে । এই ডেমোটির জন্য, ফাইল "টেমপ্লেট" ইতিমধ্যে বিদ্যমান থাকতে হবে না।

  • আপনি নতুন ফাইলটি করতে চান এমন অনুমতি সহ ফাইলটি অনুলিপি করুন
  • আগের ধাপে তৈরি করা ফাইলটিতে আপনি যে ফাইলটি পরিবর্তন করতে চান তা অনুলিপি করুন
  • আপনি যে মূল ফাইলটি পরিবর্তন করতে চান তা সরান
  • মধ্যবর্তী ফাইলটির নাম পরিবর্তন করে ফাইলের নাম পরিবর্তন করুন

ডেমো:

$ echo "contents of has">has
$ echo "contents of wants">wants
$ chmod ug+x has     # just so it's different - represents the desired permissions
$ cp has template
$ cat has
contents of has
$ cat wants
contents of wants
$ cat template
contents of has
$ ls -l has wants template
-rwxr-xr-- 1 user user 16 2010-07-31 09:22 has
-rwxr-xr-- 1 user user 16 2010-07-31 09:23 template
-rw-r--r-- 1 user user 18 2010-07-31 09:22 wants
$ cp wants template
$ ls -l has wants template
-rwxr-xr-- 1 user user 16 2010-07-31 09:22 has
-rwxr-xr-- 1 user user 18 2010-07-31 09:24 template
-rw-r--r-- 1 user user 18 2010-07-31 09:22 wants
$ cat template
contents of wants
$ rm wants
$ mv template wants
$ ls -l has wants
-rwxr-xr-- 1 user user 16 2010-07-31 09:22 has
-rwxr-xr-- 1 user user 18 2010-07-31 09:24 wants
$ cat has
contents of has
$ cat wants
contents of wants

এখন এটি একটি আকর্ষণীয় পদ্ধতির। আমি এটি পরীক্ষা করে দেখতে যাচ্ছি এবং বিভিন্ন সার্ভারের বিরুদ্ধে এটি কতটা ভাল কাজ করে তা দেখুন see আমার কাছে মনে হচ্ছে এটি কৌশলটি করবে।
অ্যালেক্স

@ অ্যালেক্স: এটি যদি উদ্বেগজনক হয় তবে ফাইলের মালিকানার সাথে এটি পরীক্ষা করে নেওয়ার বিষয়টি নিশ্চিত করুন।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

প্রথম সিপি কমান্ডটি, মোড এবং মালিকানার বৈশিষ্ট্যগুলি সংরক্ষণ করতে cp has templateব্যবহার cp -pকরা উচিত ।
মার্চ

@ মর্নস্ট: cpফাইলের মালিক / গ্রুপ (যেমন "ব্যবহারকারী") অনুলিপি করা (যেমন রুট) করার চেয়ে পৃথক হলে এটি কেবল প্রথমটির জন্য প্রয়োজনীয় ।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

@ ডেনিস উইলামসন: ঠিক আছে, তবে এটি একটি সম্ভাবনা এবং আমি cp -pসেখানে ব্যবহার করার কোনও খারাপ দিক দেখছি না।
মার্চ

12

আপনি statফাইলটি অনুমতি পেতে কমান্ডটি ব্যবহার করতে পারেন :

  • ম্যাক ওএস এক্স (বিএসডি) সিনট্যাক্স:

    chmod `stat -f% A fileWithPerm` fileToSetPerm

  • লিনাক্স সিনট্যাক্স (নিশ্চিত নয়):

    chmod `stat -c% a fileWithPerm` fileToSetPerm

` প্রতীক একটি backquote হয়।


1
আমি মনে করি না statপসিক্সের প্রয়োজন। এটি প্রায়শই উপলব্ধ হয় না।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

স্ট্যাট (কমান্ড লাইন) পসিক্স নয় এবং পোর্টেবল নয়। ডেনিস ++
জিম এমকনামারা

1

এসিএল ইউটিলিটিগুলি গেটফ্যাকল এবং সেটফ্যাকল এই উদ্দেশ্যে ব্যবহার করা যেতে পারে তবে এই পসিক্স যথেষ্ট পরিমাণে অনুগত কিনা তা আমি জানি না। কমপক্ষে ফ্রিবিএসডি 8.0 এবং লিনাক্সে কাজ করে তবে অন্যদিকে এসিএল ইউটিলিটিগুলি ইনস্টল করতে হতে পারে।

ম্যান পৃষ্ঠা থেকে:

getfacl file1 | setfacl -b -n -M - file2
Copy ACL entries from file1 to file2.

আমি মনে করি getfacl এবং setfacl ACL এর পাশাপাশি মানক ফাইল অনুমতিগুলিও পরিচালনা করতে পারে।


এসিএল এবং এগুলি যেমন পসিক্স দ্বারা সংজ্ঞায়িত করা হয় তা বাস্তবায়ন-নির্দিষ্ট, সুতরাং এটি সম্মতির প্রয়োজন হয় না।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

0

cp -p ফাইল অনুমতি সংরক্ষণ করবে।


1
এ কারণেই আমার উত্তরের কৌশলটি ( ব্যবহার না করার -p) ওপি যা চায় তার জন্য কাজ করে যা কোনও ফাইলের নকল নয়, ভিন্ন ফাইলের জন্য অনুমতিগুলি নকল করতে পারে ।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

0

একটি বহনযোগ্য, সোজা উপায় কোনও স্ট্যান্ডার্ড ইউটিলিটি নয় - আপনাকে টেম্পলেটফাইলে স্ট্যাট () কল করতে হবে, তারপরে গন্তব্য ফাইল (গুলি) এর chmod () করতে হবে। এর অর্থ সি এর মতো ভাষা ব্যবহার করা বা পার্লের মতো অন্য কোনও বহুল ব্যবহৃত ভাষা ব্যবহার।

ফাইল অ্যাক্সেসের অনুমতিগুলি স্ট্রাক্ট স্ট্যাটমোড সদস্যটিতে 0007777 বিট দ্বারা নির্দিষ্ট করা হয়েছে। ডেনিসের সমাধানটি সঠিক, আই / ও-তে কিছুটা ভারী হলে তাই বড় ফাইলগুলির জন্য এটি ব্যর্থ হতে পারে:

cp has template

উত্পাদনের জন্য প্রস্তুত নয় এই উদাহরণটি বিবেচনা করুন:

#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>

mode_t 
getperm(const char *template_file)
{
    struct stat st;
    if(stat(template_file, &st)==-1)
    {
       perror("Cannot stat file");
       exit(1);
    }
    return st.st_mode;
}

int main(int argc, char **argv)
{    
    mode_t mode=getperm(argv[1]);
    int i=0;
    for(i=2; argv[i]!=NULL; i++)    
    {
       if(chmod(argv[i], mode)==-1)
          fprintf(stderr, "Permissions failed on %s:\n\t%s\n",
              argv[i], strerror(errno));
    }       
    return 0;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.