এক্সিকিউট করার অনুমতি ব্যতীত আমি কীভাবে একটি ফাইল চালাতে পারি?


11

আমি কীভাবে কোনও ফাইলকে এর chmod u+xজন্য সম্পাদনকারী অনুমতিগুলি (দিয়ে ) না দিয়েই কার্যকর করতে পারি ?

যদি আমি চেষ্টা করি এবং 'প্রোগ্রাম হিসাবে এক্সিকিউটিভ ফাইলকে মঞ্জুরি দিন' চেকমার্কটি চেষ্টা করি এবং চেকমার্কটি তাৎক্ষণিকভাবে সরিয়ে ফেলা হবে।



1
ফাইল অনুমতিগুলির পুরো পয়েন্টটি তাই না যাতে এটি ঘটে না? : ডি
গ্যালোইস

উত্তর:


14

ফাইলের মালিকানা পরীক্ষা করুন

দয়া করে আরও কিছু করার আগে এটি করুন (যদি না আপনি নিশ্চিত হন যে আপনি ফাইলটির মালিক হন)।

নীচের যে কোনও একটি পদ্ধতিতে আপনি যে ফাইলটি চালানোর চেষ্টা করছেন তা আপনার নিজের মালিকানাধীন কিনা তা পরীক্ষা করে দেখুন এবং তা নিশ্চিত করুন।

চিত্রানুগ

  1. ফাইলটি রাইট ক্লিক করুন।
  2. 'সম্পত্তি' ক্লিক করুন।
  3. 'অনুমতি' ট্যাব ক্লিক করুন।
  4. নিশ্চিত করুন যে 'মালিক' ক্ষেত্রটি আপনার ব্যবহারকারীর নাম বলছে। এটি নীচে "ফাইলের মালিকানা পরিবর্তন করুন" না দেখলে

কমান্ড লাইন

  1. টার্মিনালে এই কমান্ডটি কার্যকর করুন

    [ ! -O "/path/to/file" ] && echo "You don't own the file"
    
  2. যদি এটি " You don't own the file" প্রিন্ট করে তবে নীচে "ফাইলের মালিকানা পরিবর্তন করুন" দেখুন।

ফাইলের মালিকানা পরিবর্তন করুন

টার্মিনালে এই কমান্ডটি কার্যকর করুন

sudo chown $USER:$(id -gn $USER) "/path/to/file"

এক্সিকিউটেবল ফাইল

একটি উত্তর আমি থেকে পাওয়া মন্তব্য দ্বারা Lekensteyn একটি অন উত্তর একটি জন্য প্রশ্ন সম্পর্কে chmodNTFS পার্টিশনের যা আমার মনে হয় এটা নিজস্ব প্রশ্ন ও উত্তর, Lekensteyn পূর্ণ ক্রেডিট দাবী করেন।

এক্সিকিউটেবল ফাইলের জন্য এই কমান্ডটি ব্যবহার করুন ( /path/to/executableসঠিক পথের পরিবর্তে ):

  • 64 বিট এক্সিকিউটেবল ফাইল:

    /lib64/ld-linux-x86-64.so.2 /path/to/executable
    
  • 32 বিট এক্সিকিউটেবল ফাইল:

    /lib/ld-linux.so.2 /path/to/executable
    

যদি উপরের কাজ না করে (বা ফাইলগুলি ত্রুটিগুলি খুঁজে পাওয়া যায় না), উপরের কমান্ডের আগে এটি ব্যবহার করে দেখুন

cd "$(dirname /path/to/executable)"

উপরের সমস্ত কমান্ডগুলি পাঠ্য ভিত্তিক স্ক্রিপ্টগুলির জন্য কাজ করবে না (বাশ, পাইথন, পার্ল ইত্যাদি), নীচে দেখুন।

কোনও প্রোগ্রাম 64 বা 32 বিট কিনা তা পরীক্ষা করে দেখুন

এক্সিকিউটেবল 32 ( x86) বা 64 ( x86-64) বিট কিনা তা জানতে এই কমান্ডটি ব্যবহার করুন

objdump -f "$file" | grep '^architecture' | cut -d, -f1 | sed 's/architecture: //'

যদি এটি বলে i386:x86-64, তবে এটি 64 বিট। যদি এটি i386কেবল বলে , তবে এটি 32 বিট।


স্ক্রিপ্ট

পাঠ্য ভিত্তিক স্ক্রিপ্টগুলির জন্য (ব্যাশ, পাইথন, পার্ল ইত্যাদি), আপনার #!ফাইলের প্রথম লাইনে নির্দিষ্ট কমান্ডটি ব্যবহার করা উচিত ।

উদাহরণস্বরূপ, যদি ফাইলের প্রথম লাইন হয়

#!/usr/bin/env python3

তারপরে এই কমান্ডগুলি টার্মিনালে চালান ( /path/to/fileসঠিক পথের পরিবর্তে )

cd "$(dirname /path/to/file)"       # Not strictly necessary, see section below

# Replace '/usr/bin/env python3' with the first line without the front #!
/usr/bin/env python3 /path/to/file  # Use './file' if you want

জাভা .jarফাইল

জাভা এক্সিকিউটেবল জারের জন্য, আপনি কেবল এই আদেশগুলি ব্যবহার করতে পারেন ( /path/to/jarসঠিক পথের পরিবর্তে ):

cd "$(dirname /path/to/jar)"   # Not strictly necessary, see section below
java -jar /path/to/jar

যখন আপনার দরকার নেই cd "$(dirname /path/to/file)"

এগুলি সম্ভাব্য পরিস্থিতি যেখানে cd "$(dirname /path/to/file)"কোনও পদ্ধতিতে প্রোগ্রামটি চালানোর আগে আপনাকে ব্যবহার করতে হবে না: যদি কমপক্ষে একটি সত্য হয় তবে আপনাকে cdপ্রথমে প্রয়োজন হবে না ।

  • প্রোগ্রামটি কোনও ফাইল অপারেশন নিজেই সম্পাদন করে না (উদাহরণস্বরূপ: এটি কেবলমাত্র ব্যবহার করে apt-get)
  • প্রোগ্রামটি cdকোনও ফাইল ক্রিয়াকলাপ করার আগে একটি নিখুঁত পথে পরিবর্তনের জন্য (বা সমমান) ব্যবহার করে (উদাহরণ cd "$(dirname "$0")":)
  • প্রোগ্রামটি কোনও আপেক্ষিক পাথ উল্লেখ করে না ( ./কোনও স্ল্যাশ দিয়ে শুরু বা শুরু হওয়া পাথ )

যদি অনিশ্চিত cd "$(dirname "$0")"হয় তবে স্ক্রিপ্টের শীর্ষে (প্রয়োগযোগ্য হলে) যোগ করুন (বা সমতুল্য) বা cd "$(dirname /path/to/file)"যাইহোক ব্যবহার করুন ।


1
যে কেউ এটিকে স্ক্রিপ্ট করতে এবং সমস্ত সম্ভাবনা কভার করার জন্য এটি তৈরি করতে চান (যদি আপনি এমএস ফাইল সিস্টেমগুলি অনেক বেশি ব্যবহার করেন ) তবে তাকে স্বাগতম। আমি নিজে এটি করতে পারি, তবে এটির উপর নির্ভর করি না। (আপনি চাইলে এই মন্তব্যটি +1 করুন, যথেষ্ট সমর্থন এবং আমি এটি করতে পারি)
কিরি

0

যদি এটি শেল স্ক্রিপ্ট হয় তবে আপনি এটি অন্য শেল স্ক্রিপ্ট থেকে "উত্স" করতে পারেন, যেমন:

#!/bin/bash
# This script runs another script indirectly, by sucking in its contents and evaluating inline:

source /path/to/script/which/lost/its/exec/flag "$@"

"$ @" কমান্ড লাইন প্যারামিটারগুলি যুক্ত করে, যদি প্রয়োজন হয়।

এই বলে যে, এটি অন্তর্নিহিত সমস্যার সম্ভবত সেরা সমাধান নয়, তবে বিকল্প প্রস্তাব দেওয়ার জন্য আমরা সেই সমস্যা সম্পর্কে পর্যাপ্ত পরিমাণে জানি না।


আমি দেখতে পাচ্ছি না কীভাবে এটি বিশেষত আলাদাbash script $@
কিরি

এটি পরিচালনায় মৌলিকভাবে আলাদা নয়। আপনি সম্ভবত কোন সমস্যার সমাধানের চেষ্টা করছেন তা আমি বুঝতে পারি না - আমি ধরে নিয়েছিলাম যে আপনি কোনও স্ক্রিপ্ট কার্যকর করতে পয়েন্ট-ও-ক্লিকের উপায় চান যা (যে কারণেই হোক) এক্সিকিউটযোগ্য নয়। "কার্যকর করা যায় এমন একটি তৈরি করুন এবং অন্যটির উত্স উত্পন্ন করুন" সেই সমস্যাটির একটি সমাধান। যদি এটিই সমস্যা হয় ... ভাল :)
স্টেলেডোগ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.