What's the difference between `mkdir -p` and `install -d`?
up vote
3
down vote
favorite
What, precisely, is the difference in what is being performed by mkdir -p
and install -d
, in terms of what changes the two commands are doing to the system?
c coreutils
add a comment |
up vote
3
down vote
favorite
What, precisely, is the difference in what is being performed by mkdir -p
and install -d
, in terms of what changes the two commands are doing to the system?
c coreutils
1
install -d
might not be POSIX, but don't quote me on that.
– phk
Jan 25 '17 at 23:13
1
At least inbusybox
by comparing mkdir.c and install.c you see that there is some difference when it comes to handling file modes, in latter (install
) the folders are apparently first created with a hardcoded file mode of0755
and only later set to a different value. (Some sort of workaround for certain GNU coreutils versions? Can someone more knoledgable please explain?) Also in latter the user and group ID can be specifically set. I ignored SELINUX.
– phk
Jan 25 '17 at 23:28
Does it trouble you that there might be more than one way of doing the same thing in UNIX/Linux?
– mdpc
Jan 26 '17 at 1:03
@mdpc, No, I just want to learn the difference, if any. Do they really do the exact same thing?
– Alexander
Jan 26 '17 at 1:23
add a comment |
up vote
3
down vote
favorite
up vote
3
down vote
favorite
What, precisely, is the difference in what is being performed by mkdir -p
and install -d
, in terms of what changes the two commands are doing to the system?
c coreutils
What, precisely, is the difference in what is being performed by mkdir -p
and install -d
, in terms of what changes the two commands are doing to the system?
c coreutils
c coreutils
edited Aug 27 at 17:31
asked Jan 25 '17 at 23:03
Alexander
5,78822043
5,78822043
1
install -d
might not be POSIX, but don't quote me on that.
– phk
Jan 25 '17 at 23:13
1
At least inbusybox
by comparing mkdir.c and install.c you see that there is some difference when it comes to handling file modes, in latter (install
) the folders are apparently first created with a hardcoded file mode of0755
and only later set to a different value. (Some sort of workaround for certain GNU coreutils versions? Can someone more knoledgable please explain?) Also in latter the user and group ID can be specifically set. I ignored SELINUX.
– phk
Jan 25 '17 at 23:28
Does it trouble you that there might be more than one way of doing the same thing in UNIX/Linux?
– mdpc
Jan 26 '17 at 1:03
@mdpc, No, I just want to learn the difference, if any. Do they really do the exact same thing?
– Alexander
Jan 26 '17 at 1:23
add a comment |
1
install -d
might not be POSIX, but don't quote me on that.
– phk
Jan 25 '17 at 23:13
1
At least inbusybox
by comparing mkdir.c and install.c you see that there is some difference when it comes to handling file modes, in latter (install
) the folders are apparently first created with a hardcoded file mode of0755
and only later set to a different value. (Some sort of workaround for certain GNU coreutils versions? Can someone more knoledgable please explain?) Also in latter the user and group ID can be specifically set. I ignored SELINUX.
– phk
Jan 25 '17 at 23:28
Does it trouble you that there might be more than one way of doing the same thing in UNIX/Linux?
– mdpc
Jan 26 '17 at 1:03
@mdpc, No, I just want to learn the difference, if any. Do they really do the exact same thing?
– Alexander
Jan 26 '17 at 1:23
1
1
install -d
might not be POSIX, but don't quote me on that.– phk
Jan 25 '17 at 23:13
install -d
might not be POSIX, but don't quote me on that.– phk
Jan 25 '17 at 23:13
1
1
At least in
busybox
by comparing mkdir.c and install.c you see that there is some difference when it comes to handling file modes, in latter (install
) the folders are apparently first created with a hardcoded file mode of 0755
and only later set to a different value. (Some sort of workaround for certain GNU coreutils versions? Can someone more knoledgable please explain?) Also in latter the user and group ID can be specifically set. I ignored SELINUX.– phk
Jan 25 '17 at 23:28
At least in
busybox
by comparing mkdir.c and install.c you see that there is some difference when it comes to handling file modes, in latter (install
) the folders are apparently first created with a hardcoded file mode of 0755
and only later set to a different value. (Some sort of workaround for certain GNU coreutils versions? Can someone more knoledgable please explain?) Also in latter the user and group ID can be specifically set. I ignored SELINUX.– phk
Jan 25 '17 at 23:28
Does it trouble you that there might be more than one way of doing the same thing in UNIX/Linux?
– mdpc
Jan 26 '17 at 1:03
Does it trouble you that there might be more than one way of doing the same thing in UNIX/Linux?
– mdpc
Jan 26 '17 at 1:03
@mdpc, No, I just want to learn the difference, if any. Do they really do the exact same thing?
– Alexander
Jan 26 '17 at 1:23
@mdpc, No, I just want to learn the difference, if any. Do they really do the exact same thing?
– Alexander
Jan 26 '17 at 1:23
add a comment |
2 Answers
2
active
oldest
votes
up vote
5
down vote
For starters, mkdir -p
is POSIX, install
is not. Then, we have this from the GNU install
documentation:
If the
--directory
(-d
) option is given,install
creates each
directory and any missing parent directories. Parent directories are created with mode ‘u=rwx,go=rx
’ (755), regardless of the-m
option
or the current umask. See Directory Setuid and Setgid, for how
the set-user-ID and set-group-ID bits of parent directories are
inherited.
And:
‘
-d
’
‘--directory
’
Create any missing parent directories, giving them the default
attributes. Then create each given directory, setting their owner,
group and mode as given on the command line or to the defaults.
So:
- For GNU
install
, the permissions of the parent directories could be different.
install
lets you set the ownership of the leaf directory.
1
Point 2 should be ownership. After all,mkdir
has an-m
option.
– JdeBP
Jan 26 '17 at 7:47
add a comment |
up vote
5
down vote
accepted
The main difference between mkdir -p
and install -d
is that if the directory already exists, only install -d
will try to set the ownership and file mode bits.
install -d
will callmake_dir_parents
withpreserve_existing
set tofalse
mkdir -p
will callmake_dir_parents
withpreserve_existing
set totrue
.
If preserve_existing
is true
and the directory already exists, the function will not attempt to set the ownership and file mode bits.
mkdir -p
and install -d
in coreutils call the exact same make_dir_parents
function.
Coreutil sources:
mkdir.c
install.c
Your answer is backwards. The sources you linked show preserve_existing to be the other way around and I have confirmed that by trying it out.
– Chewi
Nov 21 at 17:05
Thank you! Corrected the answer.
– Alexander
Nov 21 at 18:45
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
5
down vote
For starters, mkdir -p
is POSIX, install
is not. Then, we have this from the GNU install
documentation:
If the
--directory
(-d
) option is given,install
creates each
directory and any missing parent directories. Parent directories are created with mode ‘u=rwx,go=rx
’ (755), regardless of the-m
option
or the current umask. See Directory Setuid and Setgid, for how
the set-user-ID and set-group-ID bits of parent directories are
inherited.
And:
‘
-d
’
‘--directory
’
Create any missing parent directories, giving them the default
attributes. Then create each given directory, setting their owner,
group and mode as given on the command line or to the defaults.
So:
- For GNU
install
, the permissions of the parent directories could be different.
install
lets you set the ownership of the leaf directory.
1
Point 2 should be ownership. After all,mkdir
has an-m
option.
– JdeBP
Jan 26 '17 at 7:47
add a comment |
up vote
5
down vote
For starters, mkdir -p
is POSIX, install
is not. Then, we have this from the GNU install
documentation:
If the
--directory
(-d
) option is given,install
creates each
directory and any missing parent directories. Parent directories are created with mode ‘u=rwx,go=rx
’ (755), regardless of the-m
option
or the current umask. See Directory Setuid and Setgid, for how
the set-user-ID and set-group-ID bits of parent directories are
inherited.
And:
‘
-d
’
‘--directory
’
Create any missing parent directories, giving them the default
attributes. Then create each given directory, setting their owner,
group and mode as given on the command line or to the defaults.
So:
- For GNU
install
, the permissions of the parent directories could be different.
install
lets you set the ownership of the leaf directory.
1
Point 2 should be ownership. After all,mkdir
has an-m
option.
– JdeBP
Jan 26 '17 at 7:47
add a comment |
up vote
5
down vote
up vote
5
down vote
For starters, mkdir -p
is POSIX, install
is not. Then, we have this from the GNU install
documentation:
If the
--directory
(-d
) option is given,install
creates each
directory and any missing parent directories. Parent directories are created with mode ‘u=rwx,go=rx
’ (755), regardless of the-m
option
or the current umask. See Directory Setuid and Setgid, for how
the set-user-ID and set-group-ID bits of parent directories are
inherited.
And:
‘
-d
’
‘--directory
’
Create any missing parent directories, giving them the default
attributes. Then create each given directory, setting their owner,
group and mode as given on the command line or to the defaults.
So:
- For GNU
install
, the permissions of the parent directories could be different.
install
lets you set the ownership of the leaf directory.
For starters, mkdir -p
is POSIX, install
is not. Then, we have this from the GNU install
documentation:
If the
--directory
(-d
) option is given,install
creates each
directory and any missing parent directories. Parent directories are created with mode ‘u=rwx,go=rx
’ (755), regardless of the-m
option
or the current umask. See Directory Setuid and Setgid, for how
the set-user-ID and set-group-ID bits of parent directories are
inherited.
And:
‘
-d
’
‘--directory
’
Create any missing parent directories, giving them the default
attributes. Then create each given directory, setting their owner,
group and mode as given on the command line or to the defaults.
So:
- For GNU
install
, the permissions of the parent directories could be different.
install
lets you set the ownership of the leaf directory.
edited Jan 26 '17 at 7:50
answered Jan 26 '17 at 1:31
muru
35.2k581155
35.2k581155
1
Point 2 should be ownership. After all,mkdir
has an-m
option.
– JdeBP
Jan 26 '17 at 7:47
add a comment |
1
Point 2 should be ownership. After all,mkdir
has an-m
option.
– JdeBP
Jan 26 '17 at 7:47
1
1
Point 2 should be ownership. After all,
mkdir
has an -m
option.– JdeBP
Jan 26 '17 at 7:47
Point 2 should be ownership. After all,
mkdir
has an -m
option.– JdeBP
Jan 26 '17 at 7:47
add a comment |
up vote
5
down vote
accepted
The main difference between mkdir -p
and install -d
is that if the directory already exists, only install -d
will try to set the ownership and file mode bits.
install -d
will callmake_dir_parents
withpreserve_existing
set tofalse
mkdir -p
will callmake_dir_parents
withpreserve_existing
set totrue
.
If preserve_existing
is true
and the directory already exists, the function will not attempt to set the ownership and file mode bits.
mkdir -p
and install -d
in coreutils call the exact same make_dir_parents
function.
Coreutil sources:
mkdir.c
install.c
Your answer is backwards. The sources you linked show preserve_existing to be the other way around and I have confirmed that by trying it out.
– Chewi
Nov 21 at 17:05
Thank you! Corrected the answer.
– Alexander
Nov 21 at 18:45
add a comment |
up vote
5
down vote
accepted
The main difference between mkdir -p
and install -d
is that if the directory already exists, only install -d
will try to set the ownership and file mode bits.
install -d
will callmake_dir_parents
withpreserve_existing
set tofalse
mkdir -p
will callmake_dir_parents
withpreserve_existing
set totrue
.
If preserve_existing
is true
and the directory already exists, the function will not attempt to set the ownership and file mode bits.
mkdir -p
and install -d
in coreutils call the exact same make_dir_parents
function.
Coreutil sources:
mkdir.c
install.c
Your answer is backwards. The sources you linked show preserve_existing to be the other way around and I have confirmed that by trying it out.
– Chewi
Nov 21 at 17:05
Thank you! Corrected the answer.
– Alexander
Nov 21 at 18:45
add a comment |
up vote
5
down vote
accepted
up vote
5
down vote
accepted
The main difference between mkdir -p
and install -d
is that if the directory already exists, only install -d
will try to set the ownership and file mode bits.
install -d
will callmake_dir_parents
withpreserve_existing
set tofalse
mkdir -p
will callmake_dir_parents
withpreserve_existing
set totrue
.
If preserve_existing
is true
and the directory already exists, the function will not attempt to set the ownership and file mode bits.
mkdir -p
and install -d
in coreutils call the exact same make_dir_parents
function.
Coreutil sources:
mkdir.c
install.c
The main difference between mkdir -p
and install -d
is that if the directory already exists, only install -d
will try to set the ownership and file mode bits.
install -d
will callmake_dir_parents
withpreserve_existing
set tofalse
mkdir -p
will callmake_dir_parents
withpreserve_existing
set totrue
.
If preserve_existing
is true
and the directory already exists, the function will not attempt to set the ownership and file mode bits.
mkdir -p
and install -d
in coreutils call the exact same make_dir_parents
function.
Coreutil sources:
mkdir.c
install.c
edited Nov 21 at 18:45
answered Jan 26 '17 at 10:26
Alexander
5,78822043
5,78822043
Your answer is backwards. The sources you linked show preserve_existing to be the other way around and I have confirmed that by trying it out.
– Chewi
Nov 21 at 17:05
Thank you! Corrected the answer.
– Alexander
Nov 21 at 18:45
add a comment |
Your answer is backwards. The sources you linked show preserve_existing to be the other way around and I have confirmed that by trying it out.
– Chewi
Nov 21 at 17:05
Thank you! Corrected the answer.
– Alexander
Nov 21 at 18:45
Your answer is backwards. The sources you linked show preserve_existing to be the other way around and I have confirmed that by trying it out.
– Chewi
Nov 21 at 17:05
Your answer is backwards. The sources you linked show preserve_existing to be the other way around and I have confirmed that by trying it out.
– Chewi
Nov 21 at 17:05
Thank you! Corrected the answer.
– Alexander
Nov 21 at 18:45
Thank you! Corrected the answer.
– Alexander
Nov 21 at 18:45
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f340169%2fwhats-the-difference-between-mkdir-p-and-install-d%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
install -d
might not be POSIX, but don't quote me on that.– phk
Jan 25 '17 at 23:13
1
At least in
busybox
by comparing mkdir.c and install.c you see that there is some difference when it comes to handling file modes, in latter (install
) the folders are apparently first created with a hardcoded file mode of0755
and only later set to a different value. (Some sort of workaround for certain GNU coreutils versions? Can someone more knoledgable please explain?) Also in latter the user and group ID can be specifically set. I ignored SELINUX.– phk
Jan 25 '17 at 23:28
Does it trouble you that there might be more than one way of doing the same thing in UNIX/Linux?
– mdpc
Jan 26 '17 at 1:03
@mdpc, No, I just want to learn the difference, if any. Do they really do the exact same thing?
– Alexander
Jan 26 '17 at 1:23