'분류 전체보기'에 해당되는 글 55건

  1. 2020.07.16 FileZilla FTP Server setting with PASSIVE Mode
  2. 2019.11.13 Virutal box에서 Ubuntu 16.04.5 LTS 를 구동시, apt update 되지 않음
  3. 2019.08.05 Remote Desktop in Ubuntu 18.04
  4. 2019.07.19 Visual Studio 2010 - manifest error code 31 1
  5. 2019.07.16 Subversion 에서 directory 이름을 바꿀 때,
  6. 2018.04.28 When gnu screen is used in serial console, adjust windows size
  7. 2018.04.01 validate ip address in bash
  8. 2017.04.24 Word를 사용할 때 첫 줄 들여쓰기 해제
  9. 2016.12.28 svn에서 git으로 이사가기
  10. 2016.06.27 Software coding style 일괄 변경하기
2020. 7. 16. 09:10

FileZilla FTP Server setting with PASSIVE Mode

1.     Port 설정

1.1.     Connection port: ex) 20000

 1.2.     Passive mode에서의 data port range 설정: ex) 30900~30999

2. Windows 에서의 Firewall 설정

Windows 방화벽 --> 방화벽에서 앱 허용 --> 설정 변경 (N) --> 다른 앱 허용 (R)

"찾아보기 (B)..." 에서 “FileZilla Server.exe” 선택

3.     서버가 Local에 있는 경우의 설정 추가

3.1.   FileZilla Server 에서 공인 IP 설정. (ex) 공인IP 가 123.123.123.123 인 경우)

 3.2.  공유기에서의 Port forwarding

3.2.1. connection port

 3.2.2. data port

 

 4.     기타: The difference of Active vs Passive mode 설명

참조: https://travelc.tistory.com/84

.끝.

2019. 11. 13. 21:05

Virutal box에서 Ubuntu 16.04.5 LTS 를 구동시, apt update 되지 않음

한 2년 만에 Ubuntu 16.04.5 LTS 를 구동하였다.

오래되어서, apt update 를 수행하였으나, 아래와 같이 오류가 발생한다....헐.

Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.4.0-139-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

54 packages can be updated.
43 updates are security updates.

# apt update
Err:1 http://security.ubuntu.com/ubuntu xenial-security InRelease
  Temporary failure resolving 'security.ubuntu.com'
Err:2 http://kr.archive.ubuntu.com/ubuntu xenial InRelease
  Temporary failure resolving 'kr.archive.ubuntu.com'
Err:3 http://kr.archive.ubuntu.com/ubuntu xenial-updates InRelease
  Temporary failure resolving 'kr.archive.ubuntu.com'
Err:4 http://kr.archive.ubuntu.com/ubuntu xenial-backports InRelease
  Temporary failure resolving 'kr.archive.ubuntu.com'
Reading package lists... Done
Building dependency tree       
Reading state information... Done
37 packages can be upgraded. Run 'apt list --upgradable' to see them.
W: Failed to fetch http://kr.archive.ubuntu.com/ubuntu/dists/xenial/InRelease  Temporary failure resolving 'kr.archive.ubuntu.com'
W: Failed to fetch http://kr.archive.ubuntu.com/ubuntu/dists/xenial-updates/InRelease  Temporary failure resolving 'kr.archive.ubuntu.com'
W: Failed to fetch http://kr.archive.ubuntu.com/ubuntu/dists/xenial-backports/InRelease  Temporary failure resolving 'kr.archive.ubuntu.com'
W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/xenial-security/InRelease  Temporary failure resolving 'security.ubuntu.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.
root@u64-16-bj:~# apt list --upgradable
Listing... Done
ghostscript/xenial-updates,xenial-security 9.26~dfsg+0-0ubuntu0.16.04.3 amd64 [upgradable from: 9.25~dfsg+1-0ubuntu0.16.04.3]
libcups2/xenial-updates,xenial-security 2.1.3-4ubuntu0.6 amd64 [upgradable from: 2.1.3-4ubuntu0.5]
libcupsimage2/xenial-updates,xenial-security 2.1.3-4ubuntu0.6 amd64 [upgradable from: 2.1.3-4ubuntu0.5]
libgs9/xenial-updates,xenial-security 9.26~dfsg+0-0ubuntu0.16.04.3 amd64 [upgradable from: 9.25~dfsg+1-0ubuntu0.16.04.3]
libgs9-common/xenial-updates,xenial-updates,xenial-security,xenial-security 9.26~dfsg+0-0ubuntu0.16.04.3 all [upgradable from: 9.25~dfsg+1-0ubuntu0.16.04.3]
libpam-systemd/xenial-updates,xenial-security 229-4ubuntu21.10 amd64 [upgradable from: 229-4ubuntu21.9]
libpoppler58/xenial-security 0.41.0-0ubuntu1.10 amd64 [upgradable from: 0.41.0-0ubuntu1.8]
libsmbclient/xenial-updates,xenial-security 2:4.3.11+dfsg-0ubuntu0.16.04.18 amd64 [upgradable from: 2:4.3.11+dfsg-0ubuntu0.16.04.17]
libssl1.0.0/xenial-updates,xenial-security 1.0.2g-1ubuntu4.14 amd64 [upgradable from: 1.0.2g-1ubuntu4.13]
libsystemd0/xenial-updates,xenial-security 229-4ubuntu21.10 amd64 [upgradable from: 229-4ubuntu21.9]
libudev1/xenial-updates,xenial-security 229-4ubuntu21.10 amd64 [upgradable from: 229-4ubuntu21.9]
  bwbclient0/xenial-updates,xenial-security 2:4.3.11+dfsg-0ubuntu0.16.04.18 amd64 [upgradable from: 2:4.3.11+dfsg-0ubuntu0.16.04.17]
linux-generic/xenial-updates 4.4.0.140.146 amd64 [upgradable from: 4.4.0.139.145]
linux-headers-generic/xenial-updates 4.4.0.140.146 amd64 [upgradable from: 4.4.0.139.145]
linux-image-generic/xenial-updates 4.4.0.140.146 amd64 [upgradable from: 4.4.0.139.145]
linux-libc-dev/xenial-updates 4.4.0-140.166 amd64 [upgradable from: 4.4.0-139.165]
openjdk-8-jdk/xenial-updates,xenial-security 8u191-b12-0ubuntu0.16.04.1 amd64 [upgradable from: 8u181-b13-1ubuntu0.16.04.1]
openjdk-8-jdk-headless/xenial-updates,xenial-security 8u191-b12-0ubuntu0.16.04.1 amd64 [upgradable from: 8u181-b13-1ubuntu0.16.04.1]
openjdk-8-jre/xenial-updates,xenial-security 8u191-b12-0ubuntu0.16.04.1 amd64 [upgradable from: 8u181-b13-1ubuntu0.16.04.1]
openjdk-8-jre-headless/xenial-updates,xenial-security 8u191-b12-0ubuntu0.16.04.1 amd64 [upgradable from: 8u181-b13-1ubuntu0.16.04.1]
openssl/xenial-updates,xenial-security 1.0.2g-1ubuntu4.14 amd64 [upgradable from: 1.0.2g-1ubuntu4.13]
python-samba/xenial-updates,xenial-security 2:4.3.11+dfsg-0ubuntu0.16.04.18 amd64 [upgradable from: 2:4.3.11+dfsg-0ubuntu0.16.04.17]
python3-distupgrade/xenial-updates,xenial-updates 1:16.04.26 all [upgradable from: 1:16.04.25]
qemu-user-static/xenial-updates,xenial-security 1:2.5+dfsg-5ubuntu10.33 amd64 [upgradable from: 1:2.5+dfsg-5ubuntu10.32]
samba/xenial-updates,xenial-security 2:4.3.11+dfsg-0ubuntu0.16.04.18 amd64 [upgradable from: 2:4.3.11+dfsg-0ubuntu0.16.04.17]
samba-common/xenial-updates,xenial-updates,xenial-security,xenial-security 2:4.3.11+dfsg-0ubuntu0.16.04.18 all [upgradable from: 2:4.3.11+dfsg-0ubuntu0.16.04.17]
samba-common-bin/xenial-updates,xenial-security 2:4.3.11+dfsg-0ubuntu0.16.04.18 amd64 [upgradable from: 2:4.3.11+dfsg-0ubuntu0.16.04.17]
samba-dsdb-modules/xenial-updates,xenial-security 2:4.3.11+dfsg-0ubuntu0.16.04.18 amd64 [upgradable from: 2:4.3.11+dfsg-0ubuntu0.16.04.17]
samba-libs/xenial-updates,xenial-security 2:4.3.11+dfsg-0ubuntu0.16.04.18 amd64 [upgradable from: 2:4.3.11+dfsg-0ubuntu0.16.04.17]
samba-vfs-modules/xenial-updates,xenial-security 2:4.3.11+dfsg-0ubuntu0.16.04.18 amd64 [upgradable from: 2:4.3.11+dfsg-0ubuntu0.16.04.17]
smbclient/xenial-updates,xenial-security 2:4.3.11+dfsg-0ubuntu0.16.04.18 amd64 [upgradable from: 2:4.3.11+dfsg-0ubuntu0.16.04.17]
sosreport/xenial-updates 3.6-1ubuntu0.16.04.2 amd64 [upgradable from: 3.5-1~ubuntu16.04.3]
systemd/xenial-updates,xenial-security 229-4ubuntu21.10 amd64 [upgradable from: 229-4ubuntu21.9]
systemd-sysv/xenial-updates,xenial-security 229-4ubuntu21.10 amd64 [upgradable from: 229-4ubuntu21.9]
ubuntu-release-upgrader-core/xenial-updates,xenial-updates 1:16.04.26 all [upgradable from: 1:16.04.25]
udev/xenial-updates,xenial-security 229-4ubuntu21.10 amd64 [upgradable from: 229-4ubuntu21.9]
winbind/xenial-updates,xenial-security 2:4.3.11+dfsg-0ubuntu0.16.04.18 amd64 [upgradable from: 2:4.3.11+dfsg-ubuntu0.16.04.17]
# apt update           
Err:1 http://security.ubuntu.com/ubuntu xenial-security InRelease
  Temporary failure resolving 'security.ubuntu.com'
Err:2 http://kr.archive.ubuntu.com/ubuntu xenial InRelease
  Temporary failure resolving 'kr.archive.ubuntu.com'
Err:3 http://kr.archive.ubuntu.com/ubuntu xenial-updates InRelease
  Temporary failure resolving 'kr.archive.ubuntu.com'
Err:4 http://kr.archive.ubuntu.com/ubuntu xenial-backports InRelease
  Temporary failure resolving 'kr.archive.ubuntu.com'
Reading package lists... Done
Building dependency tree       
Reading state information... Done
37 packages can be upgraded. Run 'apt list --upgradable' to see them.
W: Failed to fetch http://kr.archive.ubuntu.com/ubuntu/dists/xenial/InRelease  Temporary failure resolving 'kr.archive.ubuntu.com'
W: Failed to fetch http://kr.archive.ubuntu.com/ubuntu/dists/xenial-updates/InRelease  Temporary failure resolving 'kr.archive.ubuntu.com'
W: Failed to fetch http://kr.archive.ubuntu.com/ubuntu/dists/xenial-backports/InRelease  Temporary failure resolving 'kr.archive.ubuntu.com'
W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/xenial-security/InRelease  Temporary failure resolving 'security.ubuntu.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.

 

/etc/resolv.conf 화일을 바꾸어도 안되고, /etc/apt/sources.list 에서 주소를 바꾸어도 안되고,,,

결국은, 아래 사이트 에서 제시한 것 처럼,

$ vi /etc/network/interfaces

# The primary network interface
auto enp0s9
iface enp0s9 inet static
address 10.11.12.11
netmask 255.255.255.0
network 10.11.12.0
gateway 10.11.12.1
broadcast 10.11.12.255
dns-nameservers 8.8.8.8 8.8.4.4

적색 표시된 것 처럼, dns-nameservers 8.8.8.8 8.8.4.4 를 추가한 후에 정상적으로 진행된다.

gateway 설정은 덤,

즐 ubuntu 하시길,,,

출처: https://notpeelbean.tistory.com/entry/linux-Ubuntu-업데이트-서버-연결-에러-aptget-update-에러 [Storm Of Two Yellow Beans]

 

2019. 8. 5. 20:08

Remote Desktop in Ubuntu 18.04

* mate-desktop-environment 로 rdp 설정

sudo apt install xrdp
sudo apt install mate-core mate-desktop-environment mate-notification-daemon

sed -i.bak '/fi/a #xrdp multiple users configuration \n mate-session \n' /etc/xrdp/startwm.sh
cat /etc/xrdp/startwm.sh

# xrdp X session start script (c) 2015, 2017 mirabilos
# published under The MirOS Licence

if test -r /etc/profile; then
        . /etc/profile
fi

#xrdp multiple users configuration
mate-session

if test -r /etc/default/locale; then
        . /etc/default/locale
        test -z "${LANG+x}" || export LANG
        test -z "${LANGUAGE+x}" || export LANGUAGE
        test -z "${LC_ADDRESS+x}" || export LC_ADDRESS
        test -z "${LC_ALL+x}" || export LC_ALL
        test -z "${LC_COLLATE+x}" || export LC_COLLATE
        test -z "${LC_CTYPE+x}" || export LC_CTYPE
        test -z "${LC_IDENTIFICATION+x}" || export LC_IDENTIFICATION
        test -z "${LC_MEASUREMENT+x}" || export LC_MEASUREMENT
        test -z "${LC_MESSAGES+x}" || export LC_MESSAGES
        test -z "${LC_MONETARY+x}" || export LC_MONETARY
        test -z "${LC_NAME+x}" || export LC_NAME
        test -z "${LC_NUMERIC+x}" || export LC_NUMERIC
        test -z "${LC_PAPER+x}" || export LC_PAPER
        test -z "${LC_TELEPHONE+x}" || export LC_TELEPHONE
        test -z "${LC_TIME+x}" || export LC_TIME
        test -z "${LOCPATH+x}" || export LOCPATH
fi

#xrdp multiple users configuration
mate-session


if test -r /etc/profile; then
        . /etc/profile
fi

#xrdp multiple users configuration
mate-session

test -x /etc/X11/Xsession && exec /etc/X11/Xsession
exec /bin/sh /etc/X11/Xsession


sudo apt install xserver-xorg-core xorgxrdp

cat /etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla

[Allow Colord all Users]
Identity=unix-user:*
Action=org.freedesktop.color-manager.create-device;org.freedesktop.color-manager.create-profile;org.freedesktop.color-manager.delete-device;org.freedesktop.color-manager.delete-profile;org.freedesktop.color-manager.modify-device;org.freedesktop.color-manager.modify-profile
ResultAny=no
ResultInactive=no
ResultActive=yes

sudo apt-get install gnome-tweak-tool

sudo systemctl enable xrdp 

> 이제 windows의 원격데스크탑으로 log in 하면

ID, password를 넣으면 끝.

* 참고로 ubuntu 설치하면 우선 작업하는 것들

apt update
apt upgrade
apt autoremove
apt install vim
apt install ssh
vi /etc/ssh/sshd_config 


# Authentication:

#LoginGraceTime 2m
#PermitRootLogin prohibit-password
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

#PubkeyAuthentication yes

 

2019. 7. 19. 09:30

Visual Studio 2010 - manifest error code 31

간만에 오래된 프로젝트를 정리해야 하는데, 오류 발생

실행화일은 만들어졌는데, mt.exe 에서 오류가 발생하였다. 오류를 자세하게 표시하도록 하면,

1>"S:\6.sw\local_svn\trunk\v1\-\-\-\-.vcxproj" 프로젝트의 "C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets" 파일에 있는 "Manifest: (대상 ID:72)" 대상("_Manifest" 대상이 종속됨):
1>조건이 잘못되어 "Delete" 작업을 건너뜁니다. (('$(BuildType)' != 'Build' or '$(ForceRebuild)' == 'true') and '$(EmbedManifestby)'=='LINK')이(가) (('Build' != 'Build' or '' == 'true') and 'MT'=='LINK')(으)로 확인되었습니다.
1>"Microsoft.Build.CppTasks.Common, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 어셈블리에서 "Mt" 작업을 사용합니다.
1>"Mt" 작업(작업 ID:30)
1>  추적 명령:(작업 ID:30)
1>  c:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\Tracker.exe /d C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\FileTracker.dll /i "S:\6.sw\local_svn\trunk\v1\-\-\-\Release" /r "C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO 10.0\VC\INCLUDE\MANIFEST\DPIAWARE.MANIFEST|S:\6.SW\LOCAL_SVN\TRUNK\V1\-\-\-\RELEASE\-.EXE.INTERMEDIATE.MANIFEST" /b MSBuildConsole_CancelEvent4fb8122f2e474f9fa82ed059c8d8e7d6  /c "c:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe"  /nologo /verbose /outputresource:"S:\6.sw\local_svn\trunk\v1\-\-\-\Release\-.exe;#1" /manifest Release\-.exe.intermediate.manifest "c:\Program Files\Microsoft Visual Studio 10.0\VC\Include\Manifest\dpiaware.manifest"(작업 ID:30)
1>  (작업 ID:30)
1>mt.exe : general error c101008d: Failed to write the updated manifest to the resource of file "S:\6.sw\local_svn\trunk\v1\5i$0\58 \-\Release\-.exe". \$\ , $  (작업 ID:30)
1>  명령이 종료되었습니다(코드: 31).(작업 ID:30)
1>"Mt" 작업을 실행했습니다. - 실패(작업 ID:30)
1>"-.vcxproj" 프로젝트에 "Manifest" 대상을 빌드했습니다. - 실패: (대상 ID:72)

오류 상황과 관련된 온갖 인터넷을 모두 뒤져 보았지만,,,, 모두 실패하였으나,

바로 이것, 증분 링크 사용을 "예" 로 변경 한 후, 바로 다음과 같이,

다시 rebuild 한 후, OK

참 이상하죠?

어차피 무시될 설정인데....

여하튼 OK가 되니 이것으로 모든 프로젝트를 정리한다.

참, 폴더가 원격폴더 입니다. S: 라는 drive는 subst 명령을 사용하여 논리드라이브로 만든 것입니다.

> subst S: "\\vmware-host\Shared Folders\Dens"

Local drive에서는 발생하지 않더군요.

2019. 7. 16. 14:49

Subversion 에서 directory 이름을 바꿀 때,

폴더 명칭을 바꾸려고, tortoisesvn 에서의 rename 이나 svn mv 명령으로 하여도 오류가 발생하였다.

이를 해결하는 방법은 --parents 옵션을 사용하는 것이다.

> svn mv A B

svn: E720005: Can't move .....

>

> svn mv --parents A B

OK

간단하게 해결될 것을...

2018. 4. 28. 10:19

When gnu screen is used in serial console, adjust windows size

serial console을 사용할 때, screen에서 화면 크기 적용


터미널 에뮬레이터를 사용해서, 원격 접속해서 사용할 때, screen 프로그램을 사용하면 편리하다.

특히, serial console 을 사용할 때 screen을 사용한다면 더욱 더 큰 힘이 된다.

그런데, 에뮬레이터의 창의 크기를 바꾸었는데, screen에서 이를 인식하지 못하였다...난감.

ssh 나 telnet을 사용할 때는 자동으로 인식하였는데....

찾아보았는데,,, 이런 방법이 있다고 한다.

https://cafbit.com/post/terminal_window_size_detection_over/

대단하다. 어찌알고,,,,

마지막 문구에 힌트를 얻어서 한가지 더 시도해 보았다.... 정말 간단하게 해결되었다.

screen을 수행하기 전에 $ resize 명령을 수행하면 적용이 되었다.


root@linux ~$ resize

COLUMNS=160;LINES=52;export COLUMNS LINES;

root@linux ~$ screen


두개의 변수가 필요했나 보다...

난 여기까지 오는데, 무려 6개월 걸렸다.


다른 분들은 도움이 되시길..



2018. 4. 1. 21:13

validate ip address in bash


Linux의 bash shell script을 작성하는데, ip addresss를 입력받는 부분을 작성 중이다.

입력 받은 주소의 적합성을 검사하려고 하는데, 생각보다 간단하지 않았다.


최종 완성된 코드를 올리니, 참고하시라... (귀찮아서 설명을 하지 않음을 이해해 주세요)

#!/bin/bash


function is_number()

{

local src=$1

local stat=1

tdst=`expr $src + 1` 2> /dev/null

stat=$?

return $stat

}


function validate_ip()

{

    local  lip=$1

    local  stat=255

local renumexp='^[0-9]+$'

    if [[ $lip != ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then

        OIFS=$IFS

        IFS='.'

        sip=($lip)

        IFS=$OIFS


printf "0: %s\n" ${sip[0]}

printf "1: %s\n" ${sip[1]}

printf "2: %s\n" ${sip[2]}

printf "3: %s\n" ${sip[3]}


stat=0


vip=${sip[0]}

if [ $stat -eq 0 ] ; then

is_number $vip 2> /dev/null

if [ $? -eq 0 ] ; then

if [[ $vip -gt 255 ]] ; then

stat=1

fi

else

# not number

stat=11

fi

fi


vip=${sip[1]}

if [ $stat -eq 0 ] ; then

is_number $vip 2> /dev/null

if [ $? -eq 0 ] ; then

if [[ $vip -gt 255 ]] ; then

stat=2

fi

else

# not number

stat=12

fi

fi


vip=${sip[2]}

if [ $stat -eq 0 ] ; then

is_number $vip 2> /dev/null

if [ $? -eq 0 ] ; then

if [[ $vip -gt 255 ]] ; then

stat=3

fi

else

# not number

stat=13

fi

fi


vip=${sip[3]}

if [ $stat -eq 0 ] ; then

is_number $vip 2> /dev/null

if [ $? -eq 0 ] ; then

if [[ $vip -gt 255 ]] ; then

stat=4

fi

else

# not number

stat=14

fi

fi

    fi

    return $stat

}



read ip


if validate_ip $ip; then

  echo "success ($ip)"

  exit 0

else

  echo "fail ($ip)"

  exit 1

fi



참고 사이트는

1. validate ip

https://unix.stackexchange.com/questions/111841/regular-expression-in-bash-to-validate-ip-address

https://stackoverflow.com/questions/13777387/check-for-ip-validity


2. check number

https://stackoverflow.com/questions/806906/how-do-i-test-if-a-variable-is-a-number-in-bash

https://www.unix.com/shell-programming-and-scripting/21668-how-check-whether-string-number-not.html


이다.


2017. 4. 24. 10:38

Word를 사용할 때 첫 줄 들여쓰기 해제

Microsoft Word를 사용할 때, 첫 줄 들여쓰기가 자동으로 되어 있어서,

줄이 바뀔 때 여간 불편하지 않다.

이를 없애려면,

이 항목을 체크 해제하면 된다.

이 화면은 화일-->옵션-->언어교정-->자동 고침 옵션(A)-->입력할 때 자동 서식

에서 찾을 수 있다.

컴을 새로 설치할 때 마다 매번 찾게된다.

즐거운 하루되시길.


2016. 12. 28. 11:07

svn에서 git으로 이사가기


주로 local svn 저장소를 만들어서 작업을 했었는데,

이참에 git으로 변경하고자 하는데.... 저장소를 clone해서 해야 연관성이 유지된다.

clone 할 때 local repository를 지정할 때,

file:///d/svn/crios

이런식으로 지정하면 된다.

이것 몰라서, 몇번 삽질함...

2016. 6. 27. 15:17

Software coding style 일괄 변경하기

소프트웨어를 보다 보면, 구조와 포맷 때문에 여간 성가신게 아니다.

구조를 일괄적으로 바꾸어주는 툴이 있다.

AStyle 이라는 프로그램이다.


나는

  AStyle -A1 -r -t *

혹은
  AStyle -A1 -t <filename> 

이렇게 해서 소스를 본다.


한글도 깨지지 않아서 좋다.