ฉันจะเรียกใช้งานไฟล์โดยไม่ให้สิทธิ์ดำเนินการกับตัวเองได้chmod u+x
อย่างไร
ถ้าฉันลองทำเครื่องหมายถูก 'อนุญาตให้เรียกใช้ไฟล์เป็นโปรแกรม' เครื่องหมายถูกจะถูกลบออกทันที
ฉันจะเรียกใช้งานไฟล์โดยไม่ให้สิทธิ์ดำเนินการกับตัวเองได้chmod u+x
อย่างไร
ถ้าฉันลองทำเครื่องหมายถูก 'อนุญาตให้เรียกใช้ไฟล์เป็นโปรแกรม' เครื่องหมายถูกจะถูกลบออกทันที
คำตอบ:
โปรดทำสิ่งนี้ก่อนสิ่งใดเพิ่มเติม (เว้นแต่คุณจะแน่ใจว่าคุณเป็นเจ้าของไฟล์)
ตรวจสอบและตรวจสอบให้แน่ใจว่าคุณเป็นเจ้าของไฟล์ที่คุณพยายามเรียกใช้ด้วยวิธีใดวิธีหนึ่งต่อไปนี้
ดำเนินการคำสั่งนี้ในเทอร์มินัล
[ ! -O "/path/to/file" ] && echo "You don't own the file"
You don't own the file
" ดู "เปลี่ยนความเป็นเจ้าของไฟล์" ด้านล่างดำเนินการคำสั่งนี้ในเทอร์มินัล
sudo chown $USER:$(id -gn $USER) "/path/to/file"
คำตอบที่ผมพบจากการแสดงความคิดเห็นโดยLekensteynในคำตอบสำหรับคำถามเกี่ยวกับchmod
บนพาร์ติชัน NTFS ซึ่งผมคิดว่าสมควรได้รับมันเป็นคำถามของตัวเองและคำตอบเครดิตเต็มไป 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)"
คำสั่งข้างต้นทั้งหมดจะไม่ทำงานสำหรับสคริปต์ที่เป็นข้อความ (Bash, Python, Perl, ฯลฯ ) ดูด้านล่าง
ใช้คำสั่งนี้เพื่อค้นหาว่าไฟล์ที่เรียกใช้งานได้คือ 32 ( x86
) หรือ 64 ( x86-64
)
objdump -f "$file" | grep '^architecture' | cut -d, -f1 | sed 's/architecture: //'
ถ้ามันบอกว่าi386:x86-64
เป็น 64 บิต ถ้ามันบอกi386
แค่นั้นก็คือ 32 บิต
สำหรับสคริปต์ที่ใช้ข้อความ (Bash, Python, Perl ฯลฯ ) คุณควรใช้คำสั่งที่ระบุใน#!
บรรทัดแรกในไฟล์
ตัวอย่างเช่นหากบรรทัดแรกของไฟล์คือ
#!/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
ไฟล์Javaสำหรับ jar ที่ใช้งานได้ของ Java คุณสามารถใช้คำสั่งเหล่านี้ (แทน/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)"
ต่อไป
หากเป็นเชลล์สคริปต์คุณสามารถ "source" มาจากเชลล์สคริปต์อื่นเช่น:
#!/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 $@