Bir dosyayı (örn. Bir .sh betiği) çalıştırılabilir hale getirme


245

Ben bir script.sh dosyası var ve bu dosyanın türü shellscript dosyasıdır. Bu dosyayı uygulama / x-çalıştırılabilir dosya yapmak istiyorum. Nasıl yapabilirim?




Bu bir kopya değil çünkü özellikle uygulama / x-çalıştırılabilir olmasını istemiştim. Diğer soru sadece sh dosyasını terminalde açmak için sorar.
Ziyaddin Sadigov

Yanıtlar:


326

Dosyayı çalıştırılabilir olarak işaretleyebilirsiniz:

chmod +x filename.sh

Daha sonra bu şekilde yürütebilirsiniz:

./filename.sh

Başlamak için farklı bir komut kullanmak istiyorsanız takma ad ekleyebilirsiniz:

gedit ~/.bashrc

Bunu dosyanın sonuna ekleyin:

alias <new name>='/home/<full path to script>/filename.sh'

Yeni bir terminal oturumu açın veya source ~/.bashrcbaşvurmak için terminalinizi yazın. Sonra sadece betiği başlatmak için yeni adı kullanın.


Komutu girdikten sonra sudo komutunun nasıl kullanılacağını biliyor musunuz: "alias command1 = '/home/user_name/dir/script.sh'. Benimkinde sudo olmadan çalışıyor, ancak onunla değil.
Aditya

Bash'ı yeniden başlatmak için .bashrc run: exec bash dosyasını düzenledikten sonra bash'yi yeniden başlatmanız gerekir.
Sampath Perera

2
Neden yürütülebilir dosya ./filename.shsadece değil filename.sh?
user1993

@ user1993 evet, ben de sadece tarafından çalıştırılabilir yapmak için bir yol arıyorum filenamedeğil./filename
MycrofD

@ user1993 Genel olarak, kullanarak ./filename.shgeçerli dizindeki filename.shbir dosyayı belirtir ve kullanarak, geçerli dizindeki bir dosyayı veya PATH'ın herhangi bir dizinini belirtir. İlk kullanım, hangi dosyaya erişildiği konusundaki belirsizlikleri ortadan kaldırır. Bu durumda, #!/bin/bashsadece dosya adını girerek betiği bash veya başka bir tercümanla ( betiğinizde ilk satır olarak kabul edilir) yürütmeye çalışıyorsunuz . Bu kullanım dizinin belirtilmesini gerektirir. Alternatif olarak, bash filename.shhangisinin belirtilmemiş dizinle çalıştığını deneyebilirsiniz .
a505999

37

Bir dosyayı çalıştırılabilir hale getirmenin iki yolu vardır:

GUI Yöntemi:

İzinler sekmesine gidin, ardından `Yürüt: [] kutusunu işaretleyin ve dosyanın program olarak yürütülmesine izin verin.

görüntü tanımını buraya girin

Terminal / Komut yöntemi:

İkisinden birini kullanabilirsiniz:

cd /to/my/required/directory

O zaman koş

chmod +x filename.extension

Ya da sadece koş:

chmod +x /path/to/your/filename.extension

chmod ayrıca daha gelişmiş seçeneklere de sahiptir:

Boşluklar ayrıldığını göstermek içindir: - rwx --- ---

İlk set ---Kullanıcıdır. İkincisi Grup, sonuncusu Diğer (başkası)

r Okuma, w Yazma ve eXecute x anlamına gelir.

Böylece herkesin okumasına izin vermek, ancak yalnızca Grup yürütmek ve Kullanıcı tarafından okumak ve yazmak (ancak bir nedenden ötürü yürütülmemek) olacaktır:

-rw- rx- r-- Ancak bu komuta şöyle eklenir:

chmod +rw-rx-r-- /path/to/file.extension

chmodAyrıca rakamlarla da yapabilirsiniz. İkilidir (1,2 ve 4 olduğundan sanırım)

Yani bu sayılar var:

Kullanıcı tarafından yürütmek 100. Grup tarafından yürütülür 010. Başkaları tarafından yürütmek 001

Kullanıcı tarafından yaz 200. Grup tarafından Yazma olduğunu 020. Başkaları tarafından yazılır 002.

Kullanıcı tarafından okunuyor 400. Grup olarak oku 040. Başkaları tarafından okunuyor 004.

Ardından, istediğiniz kombinasyonu elde etmek için bunları birlikte ekleyin.

Böylece herkesin okumasına izin vermek, ancak yalnızca Grup yürütmek ve Kullanıcının yazmasına izin vermek (ancak bir nedenden dolayı yürütülmemesi) olacaktır:

400 + 040 + 004ve 010ve200

Bu 600 + 050 + 004 = 654'e kadar ekler.

Daha sonra komutu çalıştırabilirsiniz.

chmod +654 /path/to/file.extension ayarlamak için.

Ve tüm izinleri ayarlamak için yazabilirsiniz:

chmod +rwxrwxrwx /path/to/file.extension

Veya (bu yazmak biraz daha kolay, ancak her birini hatırlamak daha zor):

chmod +777 /path/to/file.extension

Sonunda, şunları yapabilirsiniz:

chmod -777 /path/to/file.extension

Tüm izinleri herkesten uzaklaştırmak.

Ve:

chmod +300 /path/to/file.extension

Diğer izinleri etkilemeden, kullanıcı için okuma ve yazma eklemek (örneğin İzinleri çalıştır).

Bu web sitesi çok kullanışlı bir kılavuz onay kutusu işine sahiptir, böylece istediğiniz seçenekleri işaretleyebilirsiniz ve size şu komutu verir:

görüntü tanımını buraya girin

Ancak, tüm olası kombinasyonların kullanımı duyarlı değildir; Kullanılan başlıcalar şunlardır:

755 - Ownerhepsine sahiptir Groupve Otherokuyabilir ve uygulayabilir

700 - Ownerhepsine sahip

644 - Ownerokuyabilir, yazabilir Groupve Otherokuyabilir

600 - Ownerokuyabilir ve yazabilir

Ve önemsiz olmayan kullanıcı grupları kullanıyorsanız:

775 - Ownerokuyabilir, yazabilir Groupve Otherokuyabilir

770 - Ownerve Grouphepsine sahip ve Otherokuyabilir ve uygulayabilir

750 - Ownerhepsine sahiptir ve Groupokuyabilir ve uygulayabilir

664 - Ownerve Groupokuyabilir ve yazabilir ve Othersadece okuyabilir

660 - Ownerve Groupokuyabilir ve yazabilir

640 - Ownerokuyabilir ve yazabilir ve Groupokuyabilir

777 ve 666, / tmp dışında nadiren kullanılır.

Yaygın kullanımda olanları işaret ettiğiniz için teşekkürler Ilmari Karonen !


İkili (2-tabanlı) yerine sekizli (8-tabanlı) temeline dayanmaz mı? İkili dosyada sadece 0 ve 1 olabilir, sekizlikte ise 0, 1, ... 6, 7
Justinas

@Justinas bu ikilide 7 = 4 + 2 + 1 - 111 Okuma ve Yazma ve Çalıştırma'yı temsil eder.
Tim

8

Çalıştırmak:

chmod +x /path/to/file.sh

Çalıştırılamaz duruma getirmek için aşağıdakileri çalıştırın:

chmod -x /path/to/file.sh

Örneğin ben .shdosya oluşturdum :

vi tester12.sh

Vi editöründe bazı kodlar yazdıktan sonra vi editöründen çıkacağım:

:wq!
chmod +x tester12.sh
./tester12.sh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.