How to fix Error: mkdir(): Permission denied when running composer
How to fix Error: mkdir(): Permission denied when running composer
我有一个 ec2 映像,在尝试创建新的 laravel 项目时遇到以下错误。
[ErrorException] mkdir(): Permission denied
命令如下:
composer create-project laravel/laravel mydir
我可以使用我的 ec2-user 用户名写入文件夹,但我是否需要为 composer 添加写入权限?
添加 "www" 组并将您的用户添加到该组
sudo groupadd www
sudo usermod -a -G www ec2-user
logout/login
设置所有权和写入权限
sudo chown -R root:www /var/www
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} +
find /var/www -type f -exec sudo chmod 0664 {} +
引用:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-LAMP.html
确保您拥有 read/write 文件夹权限。对我有用。
喜欢 ubuntu
var/www/html
因此,如果您想在 html
文件夹中创建目录,请先授予 html
文件夹权限。然后你就完成了。谢谢。
快速回答:
出于安全原因,让 root
保留为所有者,只允许我们自己在我们将要工作的区域内读取、写入和执行。
更改目录
cd /var/www/
更改群组所有权
sudo chown -Rv root:$USER .
为我们的群组添加权限
sudo chmod -Rv g+rw .
为了大结局,继续创建新的 laravel 项目
composer create-project laravel/laravel
projectName--prefer-dist
恭喜,我们完成了。 :)
深入解释
解决方案背后的解释:
默认情况下,您有两个用户; root
和 $USER
(这是全局变量,但实际名称是您输入的用户名)。创建的每个用户也都带有一个组。因此,如果我的用户名是 john
,我有一个名为 john
的组。
有很多方法可以解决这个问题,但出于以下几个原因我更喜欢这条路线:
出于安全原因,我仍然希望 root
成为文件的所有者。
我在本地主机上工作,所以不应该有任何其他(来宾)用户在我的文件上写入。
为了实现这一点,我们需要编辑组所有权并添加适当的权限。我们将 others
保持原样,只允许他们读取和执行文件。
让我们开始吧:
我喜欢在我正在更改的目录中以避免错误,因此首先我们需要进入我们将在其中工作的目录。
cd /var/www/
我们需要更改我们将在其中工作的目录的组所有权。从我们所在的目录开始,以及我们将在该目录下创建的所有未来目录和文件。所以从现在开始基本上任何子目录都将归我们组所有。
sudo chown -Rv root:$USER .
chown
= command to change owner.
-R
= Recursive - This is basically stating to perform the same command to all the directories within this directory.
-v
= verbose - we are stating here to keep us updated by showing us what is actually happening.
root:$USER
= This is were we are setting the ownership. The first word before the colon(:) states the root
will be the single owner. The second word after the colon(:) states that the group owner will be $USER
(the current user).
.
= This just means 'here, in this directory'.
- 现在我们要为我们的组添加正确的权限。请记住,这是我们允许
root
成为主要所有者的地方,同时只允许我们自己创建更改(当然,root
除外)。正如我之前提到的,这不允许其他用户创建任何更改。
sudo chmod -Rv g+rw .
chmod
= command to change modifications, in this case, privileges.
-Rv
= Recursive & Verbose
g
= this states who will receive the modifications. In our case g-group Other options are u-user and o-other.
+
= symbolizes add
r
= symbolizes read
w
= symbolizes write
- 现在我们完成了。尝试创建一个新的 laravel 项目。
composer create-project laravel/laravel
projectName` --prefer-dist
注意: 如果这不起作用,请在 /var/www/
目录中输入命令 ls -al | grep $USER
。
如果你得到这个:
drwxrw-r-x
您缺少该组的可执行(x
) 权限。第一个 x
是给用户的,最后一个 x
是给其他人的。该组应该有中间x
。
运行 以下命令,您应该已经准备就绪:
sudo chmod -Rv g+x .
现在如果你 运行 ls -al | grep $USER
,你应该得到:
drwxrwxr-x
cd 到您当前要安装的目录 laravel 并使用
更改目录访问权限
sudo chmod -R 777 ./
输入您的密码,您就可以继续安装了
Vagrant 盒子的问题
如果您尝试在新的 vagrant box 中使用 composer 安装某些东西,可能是因为在安装 vagrant 时您指定了允许使用的路径。
因此请检查您的个人 .yml 文件以便在下面进行检查
\ansible\vars
你有这样的东西
vagrant_local:
vm:
name: oxideshop
hostname: oxideshop.local
aliases:
- www.oxideshop.local
app_shared_folder:
source: oxideshop
target: /var/www/oxideshop
您必须确保 app_shared_folder 目标与您用于 composer 安装的目标相同。
示例:
composer create-project oxid-esales/oxideshop-project
/var/www/oxideshop dev-b-6.1-ce
确保您拥有 read/write 文件夹权限。
喜欢:sudo chown -R USER NAME:www-data /PROJECT PATH/USER NAME/PROJECT NAME/
示例:
$ sudo chown -R tubai:www-data /home/tubai/firstlara/
我运行在Homestead/Vagrant环境里面创建一个额外的项目时,进入了类似的ErrorException。
我之前已将文件夹和路径添加到 Homestead.yaml。
Oscar 和 Jens A. Koch 的回答指出了正确的方向,但在我的开发机器上走得太远了。
在 Homestead-Box 中使用更窄的解决方案:
sudo mkdir <ProjectDir>
sudo chgrp vagrant <ProjectDir>
sudo chmod g+wx <ProjectDir>
composer create-project --prefer-dist laravel/laravel <Project>
运行以下命令
cd /var/www
sudo chown -R $USER:www-data html/
sudo chmod -R 775 html/
我有同样的问题,使用 sudo 执行命令对我有用:
sudo composer create-project laravel/laravel mydir
问题的要点
在 /var/www/html
文件夹中安装 Laravel 是一项常见要求。但是,系统默认通常将此文件夹及其父文件夹 (www
) 的用户和组设置为 root
并且 composer
将 complain 如果您 运行作为 root
.
解决方案
找到你的apache/nginx服务器对应的用户。它通常有 www
、www-data
等名称。您可以 运行 下面的命令来获取线索
cat /etc/group | grep www
根据服务器用户的知识(从上面),你可以运行下面的命令。我假设您的服务器用户是 www-data
# Under your user account, change directories
cd /var/www/
# Change group ownership
sudo chown -Rv root:www-data .
# Give all the privileges to the group
sudo chmod -Rv g+rwx .
# Add your user name to www-data group, use 'who' command to get your username
sudo usermod -a -G www-data your_user_name
# Verify that your user name is in the www-data group by typing
group your_user_name
# Very important, logout of the system and come back to this folder
# Do the the laravel install
composer create-project --prefer-dist laravel/laravel projectName
# Not finished yet! recursive make the www-data the group owner of projecName which the folder in which Laravel site resides by now
sudo chown -R :www-data projectName
我的解决方案是这样的
$Linux = '/var/www/helpfibo';
然后我在上传到数据库时删除了目录 $linux 实际上错误给了你因为它试图在根目录中创建一个新文件夹这发生在 Linux
注意:helpfibo是我正常工作的文件夹html或者你创建的文件夹
public function pacth($path) {
// para crer nuevas carpeta
$linux = '/var/www/helpfibo';
$ruta = "/public/data/";
$path = $linux.$ruta.$path;
if (!file_exists($path)) {
mkdir($path, 0777, true);
}
return $path.'/';
}
我有一个 ec2 映像,在尝试创建新的 laravel 项目时遇到以下错误。
[ErrorException] mkdir(): Permission denied
命令如下:
composer create-project laravel/laravel mydir
我可以使用我的 ec2-user 用户名写入文件夹,但我是否需要为 composer 添加写入权限?
添加 "www" 组并将您的用户添加到该组
sudo groupadd www sudo usermod -a -G www ec2-user
logout/login
设置所有权和写入权限
sudo chown -R root:www /var/www sudo chmod 2775 /var/www find /var/www -type d -exec sudo chmod 2775 {} + find /var/www -type f -exec sudo chmod 0664 {} +
引用:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-LAMP.html
确保您拥有 read/write 文件夹权限。对我有用。
喜欢 ubuntu
var/www/html
因此,如果您想在 html
文件夹中创建目录,请先授予 html
文件夹权限。然后你就完成了。谢谢。
快速回答:
出于安全原因,让 root
保留为所有者,只允许我们自己在我们将要工作的区域内读取、写入和执行。
更改目录
cd /var/www/
更改群组所有权
sudo chown -Rv root:$USER .
为我们的群组添加权限
sudo chmod -Rv g+rw .
为了大结局,继续创建新的 laravel 项目
composer create-project laravel/laravel
projectName--prefer-dist
恭喜,我们完成了。 :)
深入解释
解决方案背后的解释:
默认情况下,您有两个用户; root
和 $USER
(这是全局变量,但实际名称是您输入的用户名)。创建的每个用户也都带有一个组。因此,如果我的用户名是 john
,我有一个名为 john
的组。
有很多方法可以解决这个问题,但出于以下几个原因我更喜欢这条路线:
出于安全原因,我仍然希望
root
成为文件的所有者。我在本地主机上工作,所以不应该有任何其他(来宾)用户在我的文件上写入。
为了实现这一点,我们需要编辑组所有权并添加适当的权限。我们将 others
保持原样,只允许他们读取和执行文件。
让我们开始吧:
我喜欢在我正在更改的目录中以避免错误,因此首先我们需要进入我们将在其中工作的目录。
cd /var/www/
我们需要更改我们将在其中工作的目录的组所有权。从我们所在的目录开始,以及我们将在该目录下创建的所有未来目录和文件。所以从现在开始基本上任何子目录都将归我们组所有。
sudo chown -Rv root:$USER .
chown
= command to change owner.
-R
= Recursive - This is basically stating to perform the same command to all the directories within this directory.
-v
= verbose - we are stating here to keep us updated by showing us what is actually happening.
root:$USER
= This is were we are setting the ownership. The first word before the colon(:) states theroot
will be the single owner. The second word after the colon(:) states that the group owner will be$USER
(the current user).
.
= This just means 'here, in this directory'.
- 现在我们要为我们的组添加正确的权限。请记住,这是我们允许
root
成为主要所有者的地方,同时只允许我们自己创建更改(当然,root
除外)。正如我之前提到的,这不允许其他用户创建任何更改。sudo chmod -Rv g+rw .
chmod
= command to change modifications, in this case, privileges.
-Rv
= Recursive & Verbose
g
= this states who will receive the modifications. In our case g-group Other options are u-user and o-other.
+
= symbolizes add
r
= symbolizes read
w
= symbolizes write
- 现在我们完成了。尝试创建一个新的 laravel 项目。
composer create-project laravel/laravel
projectName` --prefer-dist
注意: 如果这不起作用,请在 /var/www/
目录中输入命令 ls -al | grep $USER
。
如果你得到这个:
drwxrw-r-x
您缺少该组的可执行(x
) 权限。第一个 x
是给用户的,最后一个 x
是给其他人的。该组应该有中间x
。
运行 以下命令,您应该已经准备就绪:
sudo chmod -Rv g+x .
现在如果你 运行 ls -al | grep $USER
,你应该得到:
drwxrwxr-x
cd 到您当前要安装的目录 laravel 并使用
更改目录访问权限sudo chmod -R 777 ./
输入您的密码,您就可以继续安装了
Vagrant 盒子的问题
如果您尝试在新的 vagrant box 中使用 composer 安装某些东西,可能是因为在安装 vagrant 时您指定了允许使用的路径。
因此请检查您的个人 .yml 文件以便在下面进行检查 \ansible\vars
你有这样的东西
vagrant_local:
vm:
name: oxideshop
hostname: oxideshop.local
aliases:
- www.oxideshop.local
app_shared_folder:
source: oxideshop
target: /var/www/oxideshop
您必须确保 app_shared_folder 目标与您用于 composer 安装的目标相同。
示例:
composer create-project oxid-esales/oxideshop-project /var/www/oxideshop dev-b-6.1-ce
确保您拥有 read/write 文件夹权限。 喜欢:sudo chown -R USER NAME:www-data /PROJECT PATH/USER NAME/PROJECT NAME/
示例:
$ sudo chown -R tubai:www-data /home/tubai/firstlara/
我运行在Homestead/Vagrant环境里面创建一个额外的项目时,进入了类似的ErrorException。 我之前已将文件夹和路径添加到 Homestead.yaml。
Oscar 和 Jens A. Koch 的回答指出了正确的方向,但在我的开发机器上走得太远了。
在 Homestead-Box 中使用更窄的解决方案:
sudo mkdir <ProjectDir>
sudo chgrp vagrant <ProjectDir>
sudo chmod g+wx <ProjectDir>
composer create-project --prefer-dist laravel/laravel <Project>
运行以下命令
cd /var/www
sudo chown -R $USER:www-data html/
sudo chmod -R 775 html/
我有同样的问题,使用 sudo 执行命令对我有用:
sudo composer create-project laravel/laravel mydir
问题的要点
在 /var/www/html
文件夹中安装 Laravel 是一项常见要求。但是,系统默认通常将此文件夹及其父文件夹 (www
) 的用户和组设置为 root
并且 composer
将 complain 如果您 运行作为 root
.
解决方案
找到你的apache/nginx服务器对应的用户。它通常有
www
、www-data
等名称。您可以 运行 下面的命令来获取线索cat /etc/group | grep www
根据服务器用户的知识(从上面),你可以运行下面的命令。我假设您的服务器用户是
www-data
# Under your user account, change directories cd /var/www/ # Change group ownership sudo chown -Rv root:www-data . # Give all the privileges to the group sudo chmod -Rv g+rwx . # Add your user name to www-data group, use 'who' command to get your username sudo usermod -a -G www-data your_user_name # Verify that your user name is in the www-data group by typing group your_user_name # Very important, logout of the system and come back to this folder # Do the the laravel install composer create-project --prefer-dist laravel/laravel projectName # Not finished yet! recursive make the www-data the group owner of projecName which the folder in which Laravel site resides by now sudo chown -R :www-data projectName
我的解决方案是这样的
$Linux = '/var/www/helpfibo';
然后我在上传到数据库时删除了目录 $linux 实际上错误给了你因为它试图在根目录中创建一个新文件夹这发生在 Linux
注意:helpfibo是我正常工作的文件夹html或者你创建的文件夹
public function pacth($path) {
// para crer nuevas carpeta
$linux = '/var/www/helpfibo';
$ruta = "/public/data/";
$path = $linux.$ruta.$path;
if (!file_exists($path)) {
mkdir($path, 0777, true);
}
return $path.'/';
}