Chown $ USER: $ USER komutunu bash betiğinin içinde kullanma


10

Ben çalışıyorum küçük bir bash komut dosyasında oluşturulan yeni bir dizin chown çalışıyorum. Ekledim:

sudo chown $USER:$USER /var/www/$sitename
sudo chmod 775 /var/www/$sitename

sonra mkdir ( sudo mkdir /var/www/$sitename).

Bazı nedenlerden dolayı chown çalışmaz. Manuel olarak çalıştırabilirim, ancak dosyaya yazıldığında çalışmıyor. "Chown" un "mkdir" ve "chmod" ile aynı renkte vurgulanmadığını fark ettim ama sorunumu anlayamıyorum.

Chown neden burada çalışmıyor?

Bir sorun $USER:$USERmu var ?

EDIT İşte tam komut dosyası. Kök olmayan kullanıcının komut dosyasını yürüttüğü dosyayı nasıl seçerim?

#!/bin/sh
#!/bin/bash
# New Site

cd /etc/apache2/sites-available/
echo "New site name (test.my):"
read sitename
echo "<VirtualHost *:80>

        ServerAdmin admin@$sitename

    ServerName $sitename

        ServerAlias $sitename

    DocumentRoot /var/www/$sitename

        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /var/www/$sitename>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined


</VirtualHost>" > $sitename.conf
sudo mkdir /var/www/$sitename
sudo chown $USER:$USER /var/www/$sitename
echo USER is $USER
sudo chmod 775 /var/www/$sitename
sudo a2ensite $sitename.conf
sudo apachectl restart
echo "New site created"

1
$ USER adlı bir grup var mı? getent group $USER
Cyrus

1
$USERdeğişken etkileşimli oturum açma sırasında ayarlanır. Komut dosyanızı giriş oturumundan veya cron kullanarak veya arka plan programından nasıl çalıştırıyorsunuz?
myaut

1
USER değişkeninin kod tarafından görülüp görülmediğini kontrol edin. Senaryonuza şöyle bir satır eklerseniz echo USER is $USER, ne yazdırılır?
Mark Plotnick

@MarkPlotnick Açıkçası USER is root,. Yaptığım düzenleme ile, root olmayan kullanıcının komut dosyasını yürüttüğü dosyaya nasıl chown yapılacağını açıklayabileceğinizi düşünüyor musunuz?
Pirinç Aparatı

@myaut Terminalden manuel olarak çalıştırıyorum.
Pirinç Aparatı

Yanıtlar:


9

Herhangi bir nedenle $USERayarlanmamışsa, idgerçek kullanıcının kimliğini elde etmek için komutu kullanabilirsiniz . $USERDeğişkeni ilk kez kullandığınızda, varsayılan bir değer sağlamak için kabuk genişletmeyi kullanabilirsiniz. chownSenaryonuzdaki satırı şu şekilde değiştirin :

sudo chown ${USER:=$(/usr/bin/id -run)}:$USER /var/www/$sitename

Eğer USERbu çalıştırıldığında boş veya ayarlanmadan, bash ayarlayacaktır USERçıkışına değişkeni/usr/bin/id -run


4

Senaryoyu aradığımda root olarak sudoayarlanmış $USERolur.

$ sudo ./myscript.sh

Denedim chown ${USER:=$(/usr/bin/id -run)}:$USER /var/www/$sitenameama yine de kök dönecekti.

Ben kullanılırsa buldum whoile awkBirlikte senaryoyu denilen geçerli kullanıcıyı elde edebildi sudo.

currentuser=$(who | awk '{print $1}')}
chown -R $currentuser:$currentuser /var/www/$sitename`

1
Çok currentusersatırlı kullanıcılarla ayarlamayı (bazen) önlemek için $(who | awk 'NR==1{print $1}')bunun yerine kullanın.
Illuminator

/ Usr 'i kullanıcıma değiştirmeye çalışıyorum: chown -R $currentuser:$currentuser /usr - çalışmıyor - hala root gösteriyor: root
Sam-T

2

Sorunu basitleştirmek ve sitename değişkenini aldığınız için neden bir kullanıcı adı değişkeni okumuyorsunuz?

Bununla birlikte, betik yürütmenin, betik yürütme biçiminde kullanıma sunulan çevresel değişkenlere bağlı olmadığından emin olursunuz.


0

Bence sadece küçük bir hata var. sudo komutu yürütmek için yeni bir kabuk açar ve sudo'dan sonra kullanıcı köküdür. Yani belki böyle bir şey kullanmalısın:

MyUser $ user =

sudo chown $ MYUSER: $ MYUSER

bence MYUSER üzerine yazılan sisteme özgü değil ve çalışacak.


1
Değişken, komut yürütülmeden önce değerlendirilir, bu nedenle önerilen alternatifiniz fark etmez. (Deneyin echo chown...ve görün.)
roaima
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.