read files directly VS getent
Clash Royale CLAN TAG#URR8PPP
up vote
5
down vote
favorite
In various shell scripts I often see two approaches for getting information from databases supported by Name Service Switch libraries like /etc/group
, /etc/hosts
or /etc/services
. One is getent
utility and other is grep
or some other text processing tool. For example:
root@fw-test:~# getent passwd root
root:x:0:0:root:/root:/bin/bash
root@fw-test:~#
root@fw-test:~# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
root@fw-test:~#
..or:
root@fw-test:~# getent hosts www.blah.com
189.113.174.199 www.blah.com
root@fw-test:~#
root@fw-test:~# host www.blah.com
www.blah.com has address 189.113.174.199
root@fw-test:~#
Which of those two approaches above should be used in scripts? I mean is one of the solutions more elegant or standard than the other?
nsswitch getent
add a comment |
up vote
5
down vote
favorite
In various shell scripts I often see two approaches for getting information from databases supported by Name Service Switch libraries like /etc/group
, /etc/hosts
or /etc/services
. One is getent
utility and other is grep
or some other text processing tool. For example:
root@fw-test:~# getent passwd root
root:x:0:0:root:/root:/bin/bash
root@fw-test:~#
root@fw-test:~# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
root@fw-test:~#
..or:
root@fw-test:~# getent hosts www.blah.com
189.113.174.199 www.blah.com
root@fw-test:~#
root@fw-test:~# host www.blah.com
www.blah.com has address 189.113.174.199
root@fw-test:~#
Which of those two approaches above should be used in scripts? I mean is one of the solutions more elegant or standard than the other?
nsswitch getent
add a comment |
up vote
5
down vote
favorite
up vote
5
down vote
favorite
In various shell scripts I often see two approaches for getting information from databases supported by Name Service Switch libraries like /etc/group
, /etc/hosts
or /etc/services
. One is getent
utility and other is grep
or some other text processing tool. For example:
root@fw-test:~# getent passwd root
root:x:0:0:root:/root:/bin/bash
root@fw-test:~#
root@fw-test:~# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
root@fw-test:~#
..or:
root@fw-test:~# getent hosts www.blah.com
189.113.174.199 www.blah.com
root@fw-test:~#
root@fw-test:~# host www.blah.com
www.blah.com has address 189.113.174.199
root@fw-test:~#
Which of those two approaches above should be used in scripts? I mean is one of the solutions more elegant or standard than the other?
nsswitch getent
In various shell scripts I often see two approaches for getting information from databases supported by Name Service Switch libraries like /etc/group
, /etc/hosts
or /etc/services
. One is getent
utility and other is grep
or some other text processing tool. For example:
root@fw-test:~# getent passwd root
root:x:0:0:root:/root:/bin/bash
root@fw-test:~#
root@fw-test:~# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
root@fw-test:~#
..or:
root@fw-test:~# getent hosts www.blah.com
189.113.174.199 www.blah.com
root@fw-test:~#
root@fw-test:~# host www.blah.com
www.blah.com has address 189.113.174.199
root@fw-test:~#
Which of those two approaches above should be used in scripts? I mean is one of the solutions more elegant or standard than the other?
nsswitch getent
nsswitch getent
asked Apr 17 '15 at 12:29
Martin
3772370130
3772370130
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
up vote
7
down vote
accepted
A lot of this will come down to factors stemming from the specific environment you're in, but I prefer the getent
method because it looks up external users as well as local users. Specifically, it will look up the LDAP users in my environment from the LDAP server, whereas a cat /etc/passwd
or similar has no idea my LDAP server even exists, much less has valid users on it. If all your users are always local, getent
doesn't really buy you much aside from "no need to rewrite if we add an LDAP server in 10 years".
add a comment |
up vote
4
down vote
The getent
approach would be more compatible and preferable. Those files (/etc/group, /etc/hosts, /etc/services, /etc/passwd, ...) are not always in /etc
they could also be, depending on the operating system you're on, in other places. getent
would anyway find the entries (if it's on the system).
Also as @John stated, getent
searches trough all configured nsswitch databases. Even if you have (multiple) external sources connected, where your users are authenticated with or name resolutions via DNS-servers and so on. getent
therefore is slower, because every lookup must go trough all databases.
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
7
down vote
accepted
A lot of this will come down to factors stemming from the specific environment you're in, but I prefer the getent
method because it looks up external users as well as local users. Specifically, it will look up the LDAP users in my environment from the LDAP server, whereas a cat /etc/passwd
or similar has no idea my LDAP server even exists, much less has valid users on it. If all your users are always local, getent
doesn't really buy you much aside from "no need to rewrite if we add an LDAP server in 10 years".
add a comment |
up vote
7
down vote
accepted
A lot of this will come down to factors stemming from the specific environment you're in, but I prefer the getent
method because it looks up external users as well as local users. Specifically, it will look up the LDAP users in my environment from the LDAP server, whereas a cat /etc/passwd
or similar has no idea my LDAP server even exists, much less has valid users on it. If all your users are always local, getent
doesn't really buy you much aside from "no need to rewrite if we add an LDAP server in 10 years".
add a comment |
up vote
7
down vote
accepted
up vote
7
down vote
accepted
A lot of this will come down to factors stemming from the specific environment you're in, but I prefer the getent
method because it looks up external users as well as local users. Specifically, it will look up the LDAP users in my environment from the LDAP server, whereas a cat /etc/passwd
or similar has no idea my LDAP server even exists, much less has valid users on it. If all your users are always local, getent
doesn't really buy you much aside from "no need to rewrite if we add an LDAP server in 10 years".
A lot of this will come down to factors stemming from the specific environment you're in, but I prefer the getent
method because it looks up external users as well as local users. Specifically, it will look up the LDAP users in my environment from the LDAP server, whereas a cat /etc/passwd
or similar has no idea my LDAP server even exists, much less has valid users on it. If all your users are always local, getent
doesn't really buy you much aside from "no need to rewrite if we add an LDAP server in 10 years".
edited Nov 28 at 12:53
sourcejedi
22.3k43398
22.3k43398
answered Apr 17 '15 at 12:38
John
11.4k11730
11.4k11730
add a comment |
add a comment |
up vote
4
down vote
The getent
approach would be more compatible and preferable. Those files (/etc/group, /etc/hosts, /etc/services, /etc/passwd, ...) are not always in /etc
they could also be, depending on the operating system you're on, in other places. getent
would anyway find the entries (if it's on the system).
Also as @John stated, getent
searches trough all configured nsswitch databases. Even if you have (multiple) external sources connected, where your users are authenticated with or name resolutions via DNS-servers and so on. getent
therefore is slower, because every lookup must go trough all databases.
add a comment |
up vote
4
down vote
The getent
approach would be more compatible and preferable. Those files (/etc/group, /etc/hosts, /etc/services, /etc/passwd, ...) are not always in /etc
they could also be, depending on the operating system you're on, in other places. getent
would anyway find the entries (if it's on the system).
Also as @John stated, getent
searches trough all configured nsswitch databases. Even if you have (multiple) external sources connected, where your users are authenticated with or name resolutions via DNS-servers and so on. getent
therefore is slower, because every lookup must go trough all databases.
add a comment |
up vote
4
down vote
up vote
4
down vote
The getent
approach would be more compatible and preferable. Those files (/etc/group, /etc/hosts, /etc/services, /etc/passwd, ...) are not always in /etc
they could also be, depending on the operating system you're on, in other places. getent
would anyway find the entries (if it's on the system).
Also as @John stated, getent
searches trough all configured nsswitch databases. Even if you have (multiple) external sources connected, where your users are authenticated with or name resolutions via DNS-servers and so on. getent
therefore is slower, because every lookup must go trough all databases.
The getent
approach would be more compatible and preferable. Those files (/etc/group, /etc/hosts, /etc/services, /etc/passwd, ...) are not always in /etc
they could also be, depending on the operating system you're on, in other places. getent
would anyway find the entries (if it's on the system).
Also as @John stated, getent
searches trough all configured nsswitch databases. Even if you have (multiple) external sources connected, where your users are authenticated with or name resolutions via DNS-servers and so on. getent
therefore is slower, because every lookup must go trough all databases.
answered Apr 17 '15 at 13:37
chaos
34.9k773115
34.9k773115
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
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%2f196829%2fread-files-directly-vs-getent%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