The password for the next level is stored in the file data.txt and is the only line of text that occurs only once.
ls
명령어로 home directory에 있는 data.txt를 읽어보면 상당한 양의 파일이 출력된다. Level Goal에 적혀있듯이 한 줄만 나타나기에 출력된 내용 중 중복된 내용을 제거해야 하는 상황이다.
중복된 내용을 제거할 때 사용할 수 있는 명령어는 uniq
와 sort
이다. 더불어, Pipe
의 특수 기호를 활용해야 한다. 즉 sort
로 오름차순 정렬을 한 출력 값을, 입력 값으로 받아 uniq
로 중복된 항목을 제거할 수 있다.
bandit8@bandit:~$ cat data.txt | sort | uniq -c
10 07iR6PwHwihvQ3av1fqoRjICCulpoyms
10 0ob6rCn4D4jQ6KCiaT5hmOdWFrm2quR1
10 1drBmDT7PYS7hVgoTWkJSjUZUK7ZAIAa
10 1JnkIYLDOdn5M7TGabYxOWkn7HazMjYW
10 1wBrW0VGjKeYiXltbEWrUipwSHQfTu44
10 2Dxbtw8cnKyHwvt0lfFNYOGc4cE59uua
10 2TRkCQhbMjcM0hwL31NnJQ0DVagWN3Ca
10 4c7EsUtqLnLR9hiepV5EQVhdMgyi8onL
10 4cQDXE4IPH8fCBUBZaTPgnY2gwnPnlj6
10 6495bfC0lI1Qkw5kzZHnbVWooaOZHLvj
10 6rEzM4Qro8dH0e3uemAyYseTiNiNAYap
10 78rgduVcLZjLzZmooObdaN541MKV6IfQ
10 8qkrbCAUG9I28M49j9flUro5fWxenFzF
10 aIl4xN5maZVCQITz0xH0KNXIlLc0MhNf
10 aPsCQmSWVYGQQHUD6k1fHC2kqSyMlxwV
10 awglWaTRSAWBcol8hSMTJP4FYhIGJHVO
10 bCJdTkork5IRbZaaPZK0WVPgYIIO4mHF
10 BPl0XNou7xAZAI5fdzWzSmPkW1PnvTE1
10 bvIaDTzHBOGSO7CfpH9vUrJRRlwYTUA7
10 CS8HVrDmKGLG53qziqQCLWNRlUP1FHsV
10 CwwHDVp0pO6zmFp87L9AtFzqU5aB5j9w
10 CyziIvGRdotoy9yA00RAnvvkvrYdKCPp
10 DRqDxJYAv7IUfAMmrXtXEiz63TUjqeDn
10 DXI6y5CNPU06rVpkoZgnZJBWfkdW131j
10 enNw6tuj8mSxxS7f2Yd05puXVeuCZ39G
10 ewllxPExW9eaHxAH8WZkW9lDuK5cZcUy
10 eyKcuNPKnjt25kaOZxkMYQ9xqp45aIk9
10 fIBXc239DbhORY4t9xjgi7fSm4thHsIb
10 fiK30QpqzoULACXZwkBEKJZvpPQx9Uqm
10 FlHOKVUDNLx6Ga7CxC4ISRYNflN1GAnF
10 G4BHP66B4l3XkvB05CMgzrEKyjHhuCwz
10 gCx35PlKn08nrFFrAgHYLrUVWWZjLdqM
10 GEzwi36aKB8PLlCPH2wzl9gHzVm97IYu
10 glONDdR72FJL3Gc03nVNO4PKNzXFGH1A
10 gqGBgY1IdFDGG2XzB2o1VNGY4j6OL76V
10 h7jtcUsBhrryyLhtt1mT6Jdmp0l6ozBs
10 HKryX0XX2HT4WBT0OUzRz5Ac5B2rvIHU
10 iM3PaCO3VAxAdbdVsdGtEwuwrFQPYJV7
10 irGm6F73sbUrFhHukhp6JXgMQyLxJTz1
10 jtNdk5KDgrMkxgbZSJOvjOcM58svrzDY
10 jVscZ5eK5DWN7IvDSehXmyplCXRSbHJS
10 KerqNiDbY0zV2VxnOCmWX5XWxumldlAe
10 kha3sCpHsydUNrxLLXV3cFqWyucGjdxr
10 kt1VUEZpimCS4BaoAvhN3rgHOmhqaMIR
10 KUzqHCrxHSpgfkF5ZAzUfjlBaXW3zIaZ
10 L0nxAwlfV9V3J5onKIT8KYQ9InTcQ7yE
10 lnB8MWOYjETxoC8bQYrMFnxxQXAWHjP4
10 lZ9DhnzeHgIuLqYPmNzONpMCkuBYoeJI
10 M8JMUd7MSd4mOwZj1843ejBH5RXJOloa
10 mdug9JbW836YVZh3ALULBAxODlinqonJ
10 MIpMch66sYTmmqepKYczlRA9aJrnkt68
10 MpAqsgjJIVLT1MxSZcRoOOzl6g1db98Q
10 MQrydyojsVIYJSY8y1nCMjZGxnL1My7F
10 MsxcvOe3PGrt78wpZG2bBNF5wfXpZhET
10 n5fEmvCXKbJErzIDt3MLTmZZVMRNynrR
10 NL91hwGrqW5lVgoicb592Sd0djnHnbjZ
10 Nnih4Q0jf3xEOTcmM3yw2HkOm3VPox0w
10 NT4p09XwRb0k0wG9yIuvfs3MblMGpMc1
10 nU5zbsdUfmzv7cjNwkV9Hgb65OVe5EDt
10 nyvBweoC3kzt5QRTjbDfrWO7jhwOGN4g
10 OcVxHzDW027KWNFS03G31KQEb5TgN1WV
10 peXkYozDKE2u2BEOed5vvkY0nyjkGawn
10 PXHEt0PztCiArDZ7UCBmqKdBCiXNQWBN
10 QmFayGbrzFoiQ5Z2PGmnD2N6Pf77cxl9
10 QNTac9UtCmQ5VGAnzj10Z9BwV4TuaVvu
10 qsbKthWb80f3vQKBP7O12SjfFo1V5VkL
10 quhCb8ZIUJXXM2SbY1ER1D5GaDlQjdDa
10 QYeOFhgJCJEfKM1ZpT0K322R6SuKdCFT
10 r0VIMA1yzv838m7UfvutUhCf0zaY3Rqw
10 rfUNSGOvmQXz0m7PtFoEoPg1BpTbll7X
10 rJMbGeeDTMsj1RA4YibIQr0o9azHgP0I
10 rQAYnkKAXIViP4ROmehnDMIAXLpOOLEp
10 sBB2H7HateUFxr2oxrqUVoumFM60f1lj
10 SjFHXKRcIc7jlAYGknVMnGXSFd6xRmnF
10 tDZbF2SuhsvfaA3eTnwfcjQa1pZoPJeX
10 tiyVGzZcRwUPVAiqkroFMUbMI9ut9hcT
10 tLKyRATtoCuxMR4zZg1Dnlnr3je3bSHe
10 tmzBM5rcV9y7AM1xDHudL2yX9oefGieT
10 tWwjd16fG17vGdjutfOygVTjEGxlijOS
10 uBRx9inQTeaDZAuzEb2MadWXmkH8uW4O
1 UsvVyFSfZZWbi6wgC7dAFyFuR6jQQUhR
(생략)
uniq
로 중복이 제거되었고, 옵션인 -c
를 통해서 몇 번 중복되었는지 알 수 있다. 위에 적혀있는 10, 1과 같은 값은 중복 횟수이다. 그 중 앞이 '1'인 문자열이 있으니 해당 내용을 출력하면 password를 얻어낼 수 있다.
1이 적힌 문자열을 뽑아낼 때는, Level 7 → Level 8에서 다루었던 grep
명령어를 활용하여 뽑아낼 수 있다.
bandit8@bandit:~$ cat data.txt | sort | uniq -c | grep "1 "
→ EN632PlfYiZbn3PhVK3XOGSlNInNE00t
이때 주의할 점은, grep
명령어 다음에 오는 문자열을 작성할 때 1 뒤의 공백을 반드시 적어주어야 한다. grep "1"로 출력하면 10으로 시작하는 문자열 또한 해당되기에 원하는 문자열을 뽑아낼 수 없어진다.
Bandit9 Password : EN632PlfYiZbn3PhVK3XOGSlNInNE00t
sort
는 사용자가 지정한 파일의 내용을 정렬하거나, 정렬된 파일의 내용을 병합할 때 사용하는 명령어이다. 숫자, 알파벳을 오름차순으로 정렬한다.
sort [option]
-r
: reverse를 뜻하는 명령어로, 역순으로 정렬하게 된다.-u
: 정렬 후에 중복된 값을 제거하는 명령어이다. 추가적으로 uniq 명령어를 사용했을 때에는 연속적으로 중복된 값만 제거한다.uniq
입력 내용에서 중복된 항목을 제거하는 명령어이다. 보통 sort
명령어로 정렬을 한 결과를 pipe(|)
로 전달하여 중복된 내용을 제거할 수 있다.
uniq [option][file name]
uniq
는 이어진 중복만을 제거하기 때문에 추가적인 명령어가 필요하다. (sort 명령어를 사용하는 이유.)
-c
: 같은 라인이 몇 번 나오는지 표시해준다. 즉, 몇 번 중복된 것인지 알려주는 명령어.-D
: 중복되는 모든 라인을 보여준다.pipe
이란 Interprocess Communication
중 하나로, 특정 프로그램의 stdout
을 다른 프로그램의 stdin
으로 전달하는 방법이다. 즉, 한 프로그램의 출력 내용이 다른 프로그램의 입력 값이 전달된다.
|
기호를 사용하여 왼쪽에 위치한 프로그램의 실행 결과를, 오른쪽에 위치한 프로그램으로 넘긴다.
명령어 프로그램1 | 프로그램2
Redirect
와는 확실한 차이를 보인다. Redirect
는 프로그램의 결과 혹은 출력(output)ㅣ을 파일이나 다른 스트림으로 전달하거나 남길 때 사용한다. 반면, Pipe
는 출력을 다른 프로그램이나 유틸리티로 넘길 때 사용한다. 보통 파일을 사용하는 redirect과는 달리, pipe는 서로 다른 프로세스 간 작동하는 방식이다.