어떤 PATH의 파일이 실행되는지 알아보려면?

lacovnk의 이미지

execvp를 이용해 프로그램을 실행시킵니다.

근데 어떤 PATH의 프로그램을 실행시키는지에 따라 다른 동작을 해줘야 합니다 - 체크를 해줘야;

예를 들면

PATH=/bin:/usr/bin 이고, 두 곳에 모두 abc라는 프로그램이 있을때,

그냥 abc 실행시키면 앞의 /bin의 abc가 실행되잖아요? (앗, 거꾸로였던가? )

이걸 확인하려면, PATH 변수를 파싱해서, 그 디렉토리에 저 실행파일이 실행권한으로 있는지 일일이 확인하는 수 밖에 없는건가요? ㅠㅠ

bear의 이미지

where 로 확인 하면 되지 않을까요?

lacovnk의 이미지

프로그램 내에서 확인을 해야합니다;

즉,

절대경로 기준으로, 특정 경로의 파일이 실행될 경우 권한을 달리 주는 등의 동작을 해야됩니다.

그래서 실행파일 경로 확인 -> 만약 조건에 맞을 경우 setuid 한 후 -> execvp 해야 합니다.

으음.. 실행파일 경로 확인을 직접 구현해야하는건가요? 굉장히 번거로울 것 같은데 ㅠㅠ

"단지 파일이 존재하는지 확인" 해보려면, open 해보는 수 밖에 없나요?

lacovnk의 이미지

getenv("PATH")로 얻은 문자열을 :로 나누어 각각의 path에서 실행가능한 파일이 있는지 확인해야 하는데...

"주어진 파일(절대경로로 시작하는)에 대해 특정 사용자가 실행권한을 갖고 있느냐"를 쉽게 파악할 수 있는 방법이 있을까요?

지금 생각으로는 owner, group에 속하는지 확인하고, 각각의 x 퍼미션이 있는지 확인 해야 할 것 같은데.. stat에 getpwuid등등에 복잡해지네요; 으으..

근데 group에 속하는지를 어떻게 아나요? 예를 들면, 한 사용자는 여러 그룹에 속할텐데, getpwuid에서 얻는 struct는

struct passwd {
                    char    *pw_name;      /* user name */
                    char    *pw_passwd;    /* user password */
                    uid_t   pw_uid;        /* user id */
                    gid_t   pw_gid;        /* group id */
                    char    *pw_gecos;     /* real name */
                    char    *pw_dir;       /* home directory */
                    char    *pw_shell;     /* shell program */
              };

로, gid_t는 하나만 얻게 되는걸요;;

으으.. 도움 부탁드려요~

ssik425의 이미지

getcwd 함수는 어떤가요??

개발자들의 궁극적 비전은 ?

lacovnk의 이미지

getcwd는

Quote:
The getcwd() function copies an absolute pathname of the current working directory to the array pointed to by buf, which is of length size.

제가 원하는 것은

$ ls 라고 실행시키면, /bin/ls가 실행되지요? 그 /bin/ls를 알고 싶은 것이거든요. path가 여러개 있을 때, 어떤 path의 것이 실행되는지를 알아봐야하고.. 이런..

sodomau의 이미지

which ls

이거 이용하시면 될 듯 한데..

galien의 이미지

which

or

if it is needed to be implemented in C,

can you use the attrib?

(man -s 5 attributes)

lacovnk의 이미지

sodomau wrote:
which ls

이거 이용하시면 될 듯 한데..

그 프로그램의 행동인데,

c 프로그램 (쉘 프로그램) 내에서 실행해야 합니다;;;

그냥 path에서 돌아다니면 되야겠군요!

덧. path에서 가능한 것을 찾는 것이 아니라, 찾는 군요;

/home/bla/bin/ls 라는 파일이 있고, 실행권한이 없으면 - 예를 들면 600이면.. 그냥 에러가 뜨는군요 ㅎㅎ

권한 체크할 것 없이 편해지는군요 으흐흐

근데 파일 존재 여부는.. 열어봐야하나요? stat같은 옆구리함수-_-로 대신 부르는 게 나으려나.. (errno 확인해서; ) 어떤 방법이 있나요?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.