Linux / UNIX Desktop Fun: Steam Locomotive

Posted on in Categories Humor, Linux, Linux desktop last updated May 26, 2011

One of the most common mistake is typing sl instead of ls command. I actually set an alias i.e. alias sl=ls; but then you may miss out the steam train with whistle.

sl is a joke software or classic UNIX game. It is a steam locomotive runs across your screen if you type “sl” (Steam Locomotive) instead of “ls” by mistake.

Install sl

Type the following command under Debian / Ubuntu Linux, enter:
# apt-get install sl
It is also available on FreeBSD and other UNIX like operating systems. Next, mistyped ls command as sl:
$ sl

Fig.01: Run steam locomotive across the screen if you type "sl" instead of "ls"
Fig.01: Run steam locomotive across the screen if you type "sl" instead of "ls"

It also supports the following options:

  • -a : An accident seems to happen. You’ll feel pity for people who cry for help.
  • -l : shows little one.
  • -F : It flies.
  • -e : Allow interrupt by Ctrl+C.

Related: Linux / UNIX Desktop Fun: Terminal ASCII Aquarium.

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin and a trainer for the Linux operating system/Unix shell scripting. He has worked with global clients and in various industries, including IT, education, defense and space research, and the nonprofit sector. Follow him on Twitter, Facebook, Google+.

24 comment

    1. Not sure about Linux but on the Solaris boxes it actually made a very loud whistle noise. It sent the audio to the hardware speaker inside the case. It means everyone in the Lab knew that you mistyped ls.. lol!

  1. @ Hari -> i want to see the code of sl command can i

    Yes you can here are the steps. Execute the following command

    [email protected]:~$ whereis sl
    sl: /usr/bin/sl /usr/share/man/man6/sl.6.gz

    You should get the sl script location -> sl: /usr/bin/sl

    Then you need to navigate to that path

    [email protected]:~$ cd /usr/bin/

    Now execute the below command to view the script

    [email protected]:~$ strings sl
    
    ##################################################################
    ##################################################################
    
    /lib/ld-linux.so.2
    libncurses.so.5
    __gmon_start__
    _Jv_RegisterClasses
    scrollok
    stdscr
    waddch
    noecho
    _fini
    endwin
    _init
    wrefresh
    leaveok
    COLS
    mvcur
    wmove
    initscr
    LINES
    libc.so.6
    _IO_stdin_used
    signal
    usleep
    __libc_start_main
    _edata
    __bss_start
    _end
    GLIBC_2.0
    PTRh
    <Fu
    t-<at"~
    [^_]
    [^_]
    [^_]
    [^_]
    [^_]
    VUUU
    <[^_]
    WVSQ
    Y[^_]
    [^_]
    (   )
    (    )
    (  )
    (@@@)
    (@@@@)
    (@@)
    Help!
    ____________________
    |  ___ ___ ___ ___ |
    |  |_| |_| |_| |_| |
    |__________________|
       (O)        (O)
    
    ____
    |   @@@@@@@@@@@
    |    @@@@@@@@@@@@@_
    |                  |
       (O)       (O)
         ++      +------
         ||      |+-+ |
       /---------|| | |
      + ========  +-+ |
     _|--O========O~-+
    //// _/      _/
     _|--/O========O-+
     _|--/~O========O-+
     _|--/~------/~-+
    //// _O========O
    //// O========O/
    //// O========O_/
        _________________
       _|                _____A
     =|                        |
     -|                        |
    __|________________________|_
    |__________________________|_
       |_D__D__D_|  |_D__D__D_|
        _/   _/    _/   _/
          ====        ________                ___________
      _D _|  |_______/        __I_I_____===__|_________|
       |(_)---  |   H________/ |   |        =|___ ___|
       /     |  |   H  |  |     |   |         ||_| |_||
      |      |  |   H  |__--------------------| [___] |
      | ________|___H__/__|_____/[][]~_______|       |
      |/ |   |-----------I_____I [][] []  D   |=======|__
    __/ =| o |=-~~  /~~  /~~  /~~ ____Y___________|__
     |/-=|___|=    ||    ||    ||    |_____/~___/
      _/      O=====O=====O=====O_/      _/
    
     |/-=|___|=O=====O=====O=====O   |_____/~___/
      _/      __/  __/  __/  __/      _/
    __/ =| o |=-O=====O=====O=====O  ____Y___________|__
    __/ =| o |=-~O=====O=====O=====O ____Y___________|__
     |/-=|___|=   O=====O=====O=====O|_____/~___/
      _/      _O=====O=====O=====O/      _/
    
    ##################################################################
    
  2. Okai if you wanna a train whistle / air whistle, create a script as follows:

    #!/bin/sh
    # ~/bin/sl-wrapper.sh
    /usr/bin/aplay -N -q ~/train-whistle.wav &
    /usr/games/sl
    

    aplay is my command line .wav file player and download .wav files here. Now set alias as follows in ~/.bashrc:

    alias sl="$HOME/bin/sl-wrapper.sh"

    You can thank me later ๐Ÿ™‚ .

    1. It’s later now, so thanks, Monk!
      The sound works. On my openSUSE box, I have:

      #!/bin/sh
      # ~/bin/sl-wrapper.sh
      /usr/bin/play -q ~/trein.wav &
      /usr/bin/sl

      But: no colors. What’s more important: the options (-l -F -e -A) don’t work anymore.

  3. And whats even more annoying is when you place in your bashrc:
    alias ls=’sl’
    Place it on a friday afternoon 5pm at a active used server, save, quit and leave for a week or 2 to a sunny location of choice.

  4. Works in Debian Jessie but no whistle. Does not work in root terminal in the default install directory as it installs in /usr/games, whose content mostly should not be setup to run as root anyways. So, quick workaround:
    [email protected]:/home/selenia# sl
    bash: sl: command not found
    [email protected]:/home/selenia# whereis sl
    sl: /usr/games/sl /usr/share/man/man6/sl.6.gz
    [email protected]:/home/selenia# ln -s /usr/games/sl /usr/bin/sl
    [email protected]:/home/selenia# sl

    Worked on the subsequent sl command as root ๐Ÿ™‚

  5. Actually, more proper workaround when I thought about it for one minute. So I deleted the symbolic link and did this:
    nano /etc/bash.bashrc
    Put this at the bottom of your file or above the http proxy lines(if they exist)
    alias sl=”/usr/games/sl”
    Save the file and type
    bash
    This reloads the config file.
    Now type the command and it should work. Figured this is nicer working in root too for us traditional Debian people who use su for a root terminal with sudo disabled.

Leave a Comment