cat sth와 cat < sth의 차이점

cat sth와 cat < sth의 차이점

cat sth나는 둘 다 cat < sth정확히 동일한 출력을 제공한다는 것을 깨달았습니다 . 그들은 동일합니까?

답변1

그들은 정확히 동일하지 않습니다. 중요한 경우 리디렉션 방법은 종종 더 짜증나고 모호한 결과를 제공합니다(물론 이것이 아마도 원하는 것일 수도 있습니다).

$ cat < /proc/self/maps
$ cat /proc/self/maps
55c61257e000-55c61258a000 r-xp 00000000 fd:00 1180143                    /usr/bin/cat
...

또는 grep, 검색 프로그램을 사용해 보세요.

$ grep "grep" /proc/self/exe
Binary file /proc/self/exe matches
$ grep "grep" < /proc/self/exe
$

sudo약간의 치트이지만 액세스 권한이 있는 명령을 실행하기 위해 를 사용할 때 이런 문제가 발생할 가능성이 가장 높습니다 root.

$ sudo cat < /etc/shadow
bash: /etc/shadow: Permission denied
$ sudo cat /etc/shadow
root:!::0:99999:7:::
....

답변2

cat그의 직업은 속이는 것이다고양이enate는 모든 것을 가져온 다음 stdout에 인쇄하지만 일반적으로 단일 파일의 내용을 인쇄하는 데 사용됩니다(물론 파일의 내용을 연결한 다음 stdout에 씁니다). stdout(표준 출력)은 단순히 프로그램이 일반적으로 쓰는 출력 데이터입니다. (일부 프로그램(예: dd)은 인수가 달리 나타내지 않는 한 출력 데이터를 stdout에 기록하며, 오류가 발생할 때 프로그램이 기록하는 표준 오류 채널인 stderr도 있습니다.)

catstdin(표준 입력)을 통해 또는 인수로 전달된 파일에서 데이터를 얻을 수 있습니다.

당신이 해야 할 일은 cat sth파일의 모든 내용을 표준 출력에 쓰도록 지시하는 단일 인수를 사용하여 호출하는 것뿐입니다. 더 많은 파일 이름을 추가하고 연결되어 표준 출력에 기록되는 파일의 내용을 볼 수 있습니다.catsthcatsth

cat < sth를 호출하기 전에 stdin을 파일 내용으로 변경합니다 cat. 그런 다음 모든 것을 표준 입력에서 읽고 표준 출력에 기록합니다.sthcatcat

두 경우 모두 cat파일 내용이 sth표준 출력에 기록됩니다. 이에 대해 더 자세히 읽을 수 있습니다.여기또한 man cat터미널에 입력하여 cat해당 기능을 설명하는 매뉴얼 페이지를 읽을 수도 있습니다.

의 내용은 sth로그인한 사용자가 읽으며(터미널에 로그인한 사용자는 반드시 그래픽 세션에 로그인한 사용자일 필요는 없음(있는 경우)) 프로그램에서 사용할 수 있습니다. 다른 권한을 앞에 쓴 다음 sudo이를 실행하는 사용자의 권한으로 읽습니다. 로그인한 사용자와 전환한 사용자 sudo(반드시 그럴 필요는 없으며 root다르게 지정할 수 있음)가 읽으려는 파일에 대한 액세스 권한이 다를 수 있으므로 결과가 다를 수 있습니다.

답변3

특정 파일 인쇄의 경우에는 cator 를 사용하는 것과 마찬가지로 유효합니다 sth. 명령은 명령줄 인수로 제공된 모든 파일을 인쇄하도록 설계되었기 때문입니다(경우: 문자열을 인수로 받고 파일을 엽니다). 주어진 파일은 표준 입력을 인쇄합니다(이 경우 쉘은 표준 입력을 열고 연결하여 리디렉션을 따릅니다).cat sthcat <sthcatcat sthcatsthcat <sthsthcat

따라서 두 경우 모두 동일한 동작이 특정합니다 cat. 표준 입력이나 명령줄 인수 중 하나만 허용하도록 설계된 명령에서는 전혀 작동하지 않을 수 있습니다. 다른 경우에는 표준 입력을 통해 데이터를 가져올 때 명령이 파일 이름에 액세스할 수 없기 때문에 동작이 약간 다를 수 있습니다.

$ grep -H foo sth
sth:foo

$ grep -H foo <sth
(standard input):foo

관련 정보