이런거 물어봐도 되는지요..ㅡ.ㅡ;

attochip의 이미지

안녕하세요?

이제까지 유닉스 계정에서만 플그램 하다가요

요번에 리눅스 레드햇 8.0깔일이 있어서 컴퓨터에 설치했습니다..

그런데 문제가 있습니다..

만약 간단한 프로그램을 c로 짜서

a.c라고 해서 저장을 했습니다..

그래서 gcc -o a a.c

이렇게 해서 컴파일 하면 아무 에러 없이 실행 되고

실행 파일인 a가 나오더군요..

그런데 a 하고 엔터 치면

없는 command라고 해서 에러가 나옵니다..

bash : 해서 없는 command라고 하더군요..ㅡ.ㅡ;

유닉스에서는 cc -o a a.c해서 잘 되던데요..

리눅스에서도 cc, gcc, g++세가지 다 해봤거든요..

그런데 왜 안되죠?

책에도 걍 위 방식대로 하면은 된다고 하던데요..

아..너무 초보적인 질문 같습니다..

리눅스에서는 다른 방법으로 하나요?

움...너무 어이 없는 질문 이지만 답변 부탁드립니다..ㅡ.ㅡ;

아..그리구요 fork()함수 있죠? 여기서

fork안에 인수를 넣을수 있더라구요..

책이 이상해서 그런지 몰라도 안에 인수에 대해서는 설명이

안되어 있더라구요...여기 게시판에도요..

예를 들면 fork(arg1, arg2, arg3);

이렇게 있는데 arg1, arg2, arg3의 각각 어떤 의미를 갖는 걸까요?

낙엽의 이미지

./a 실행하세요 ^^;;;;;

현재 디렉토리가 path에 포함안되어 있답니다

익명 사용자의 이미지

attochip wrote:
안녕하세요?

이제까지 유닉스 계정에서만 플그램 하다가요

요번에 리눅스 레드햇 8.0깔일이 있어서 컴퓨터에 설치했습니다..

그런데 문제가 있습니다..

만약 간단한 프로그램을 c로 짜서

a.c라고 해서 저장을 했습니다..

그래서 gcc -o a a.c

이렇게 해서 컴파일 하면 아무 에러 없이 실행 되고

실행 파일인 a가 나오더군요..

그런데 a 하고 엔터 치면

없는 command라고 해서 에러가 나옵니다..

bash : 해서 없는 command라고 하더군요..ㅡ.ㅡ;

유닉스에서는 cc -o a a.c해서 잘 되던데요..

리눅스에서도 cc, gcc, g++세가지 다 해봤거든요..

그런데 왜 안되죠?

책에도 걍 위 방식대로 하면은 된다고 하던데요..

아..너무 초보적인 질문 같습니다..

리눅스에서는 다른 방법으로 하나요?

움...너무 어이 없는 질문 이지만 답변 부탁드립니다..ㅡ.ㅡ;


이상하군요. 유닉스는 전통적으로 현재 디렉토리를 실행 경로에 집어넣지 않는 것이 원칙인데 그냥 실행해도 되었다니요.

Quote:
아..그리구요 fork()함수 있죠? 여기서

fork안에 인수를 넣을수 있더라구요..

책이 이상해서 그런지 몰라도 안에 인수에 대해서는 설명이

안되어 있더라구요...여기 게시판에도요..

예를 들면 fork(arg1, arg2, arg3);

이렇게 있는데 arg1, arg2, arg3의 각각 어떤 의미를 갖는 걸까요?


fork()가 인수를 취한다면 그건 표준 유닉스 함수가 아닙니다. 커널 안에서는 여러 개의 인수를 갖는 fork() 함수를 쓰긴 합니다만.
attochip의 이미지

유닉스는 학교 계정으로 쓰고 있는데

거기서는 걍 실행하면은 되던디염..

근데 ./a는 어뒤서 해야 하는 거예요?

제가 리눅스에서 program디렉토리를 따로 만들었거든요..

거기서 ./a하고 나서

해야하나요?

글고 fork함수는 Nutt씨의 Operating Systems의 동기화 부분에서

그렇게 나와 있더라구요..음...

slayer의 이미지

현재 디렉토리를 가리키는 겁니다..
그러니까, 윗 분들이 뜻하는 것은 컴파일뒤에 나온 실행 파일앞에 ./를 붙여서 실행하라는 소리이죠..
당연히 실행파일이 존재하는 디렉토리에 들어가서 하셔야 합니다..

logout의 이미지

사족입니다.

참고로 다음 두 명령은 사실 본질적인 차이는 없습니다. 그러니까...

$ a <enter>

$ ./a <enter>

둘 다 모두 현재 디렉토리의 a 라는 실행화일을 실행하겠다는 의미입니다.

다만 두번째 방법을 타이핑 하기가 귀찮아 보여도 권장합니다. 이것은 보안상의 문제 때문에 그렇습니다. 가끔씩 /tmp 와 같은 디렉토리에 ls로 위장한 백도어 실행 화일을 크랙커들이 넣어놓는 경우가 있거든요. root와 같은 시스템 관리자가 아무 생각없이 cd /tmp 하고 파일 리스트를 보려고 ls 하는 순간 크래커에게 루트 권한이 부여되는 수가 있습니다. 따라서 보통 현재 디렉토리를 의미하는 . 는 보안상의 이유로 PATH 환경 변수에서 빠져 있습니다. 이런 경우는 첫번째 명령어는 command not found 에러를 발생시키죠.

그러나 오래된 유닉스 머신들은 기본적으로 . 가 PATH 환경변수에 들어가 있는 경우가 많습니다. 어쨌든, 현재 디렉토리의 파일을 실행할때는 귀찮더라도 ./ 를 앞에 붙여주는 습관을 들이는 것이 좋습니다.

"I conduct to live,
I live to compose."
--- Gustav Mahler

withlhw의 이미지

<shell>a 이거는 명령어를 PATH에서 해당 명령어가 있는지 찾아서 실행을
시키는 겁니다. 아마 기본적인 PATH 셋팅에는 현재 디렉토리를
의미하는 ./라는 디렉토리가 포함되어 있지 않습니다. 그래서
a를 실행 시키지 못하는 겁니다. 이를 해결할려면은 PATH에
./를 추가 하시면 됩니다. 이를 추가하는 방법은 shell 마다
다 다르지만 bash 에서는 vi ~/.bashrc => PATH = ./:$PATH
이라고 하시면 될껍니다.

xfmulder의 이미지

logout wrote:
사족입니다.

참고로 다음 두 명령은 사실 본질적인 차이는 없습니다. 그러니까...

$ a <enter>

$ ./a <enter>

둘 다 모두 현재 디렉토리의 a 라는 실행화일을 실행하겠다는 의미입니다.

서로 다릅니다.

명령은 크게 세가지인데 순서에 따라 다음과 같습니다.
1 alias alias a="ls -l"
2 내부명령어 function a () { ls -l ; }
3 외부명령어 PATH="/bin:/usr/bin:." 이면 /bin/a /usr/bin/a ./a 순으로 찾다가 먼저걸리는 놈을 실행함

a 라는 명령이 있으면 먼저 alias 에서 뒤져보고 없으면 내부명령어 또는 현재쉘이 갖고있는 함수들 에서 찾습니다.
내부명령어는 help 를 치면 나오는 것들입니다.
외부명령어는 PATH 환경변수에 나온 디렉토리에서 파일을 찾아나가다가 있으면 그 파일을 실행하게 됩니다. 유닉스는 도스와 달리 현재디렉토리가 기본 PATH 에 들어있지 않습니다.

내 자식들도 나처럼 !!

stoneshim의 이미지

Quote:
명령은 크게 세가지인데 순서에 따라 다음과 같습니다.
1 alias alias a="ls -l"
2 내부명령어 function a () { ls -l ; }
3 외부명령어 PATH="/bin:/usr/bin:." 이면 /bin/a /usr/bin/a ./a 순으로 찾다가 먼저걸리는 놈을 실행함

조금만 더 자세히 말씀드리면...

shell이 command line을 token으로 나눈 후 명령을 인식하는 우선순위는 다음과 같습니다.

1. alias
2. keyword
3. function( shell function )
4. shell builtin( shell 내장명령 )
5. script 나 program

type 이라는 shell builtin으로 사용하는 명령이 어떤 종류인지 알 수 있습니다.
예를들어 type cd 하면 "cd is a shell builtin" 이렇게 나옵니다.

우리 모두 리얼리스트가 되자. 그러나 가슴에 이룰 수 없는 꿈을 가지자

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.