Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: Memorize Terminal Commands (memorize-terminal-commands.com)
166 points by maherdeeb on July 28, 2019 | hide | past | favorite | 85 comments



I watched the GIF animation for a long time until it looped and I realized that it conveyed no information about the project. That was disappointing.

It would be great if watching the main image/animation on your front page showed what it's like to actually play the game!


When I started the project, I did not have a better idea than this short video to introduce the game. I agree that this is not the best way and it is misleading. I am going to change it in the future.


Ditto


    Your answer:
    ls -lha

    Correct answer:
    ls -lah
Oh dear.


there is also ls -lh -a, ls -l -a -h and so on. I am going to solve this by adding an option in the future to activate the regex if the user doesn't want to memorize a single pattern. Thanks a lot for mentioning it. Regards


Why not do it by default? Why do you believe you can choose one "right" pattern?

Also:

Questions repeated multiple time within single session.

  Question: Write the command that clears the terminal
  command line screen and shows it as new
  Your answer:
  reset
 
  Correct answer:
  clear
"Clear" will not fix terminal in some cases. Maybe do not ask for "and shows it as new" and note you only want to remove current text?

  Question: Write the command that you use
  to move into your home directory '~'
  Your answer:
  cd
  
  Correct answer:
  cd ~


Question: Write the name of the standard subdirectory of the root directory which contains references and files for the devices.

Your answer: dev

Correct answer: /dev

Edit: Also

Question: Write the command that shows a text 'hello world' in the console without moving to a new line after executing the command

Your answer: printf '%s' 'hello world'

Correct answer: echo -n 'hello world'


I also got a similar result with this: Question: Write the command that reads the file that has the name (text.txt) and shows only one page each time you hit space and it allows you to explore the file back and forward.

Your answer: less test.txt

Correct answer: less text.txt


echo -n hello world considered wrong as well.

Also

Question: Write the command that you use if you finish working with the terminal and you want to log out from the current session.

Your answer:logout

Correct answer:exit


I got bit by that as well. I think testing common arguments is useful, but I wonder if it would make more sense to limit to a single argument. That would eliminate the need to handle permutations, and it would also keep the questions simpler.


I think to do this properly you need to implement the argument parsing the command is doing; e.g., use getopt(3C). After all, "ls -la -h --" is valid too.


Not all unix utilities use getopt.

Clearly the correct way to implement this is to run each command in a short-lived container and check the output matches what's expected. For things like the pager questions, it'll need to implement a full vte and vte comparison, so that should be fun.

For bonus points, one of the options to emulate linux in the browser could be used to do that more securely and without the need for a service... though the load time might increase by several minutes or hours.


> Clearly the correct way to implement this is to run each command in a short-lived container and check the output matches what's expected.

I'm not sure it is clearly correct. Some commands don't produce output, `mkdir` and `cd` for example (the first two in the animation). Furthermore they'd have to blacklist `echo` and other ways to produce the output against the spirit of the exercise... until an answer is, say, `echo $?` - at which point you'd require a preceding command exiting in a suitable way in order to keep the "just execute it" approach workable.


> though the load time might increase by several minutes or hours.

Just a few seconds on my humble E480 using Firefox: https://bellard.org/jslinux/vm.html?url=https://bellard.org/...


You can just put the flags in a set and test for set equality.


I got hit by auto correct on my phone and answered like this:

Question: Write the command that clears the terminal-command line screen and shows it as new Your answer:Clear Correct answer:clear


This is what is supposed to happen. UNIX-based terminals are case sensitive.


Site dev should still be able to turn off the autocomplete functionality?


It's practice for your interview skills. If you're on a job interview, and you say 'ls -lha' when the interviewer is expecting 'ls -lah', chances are good you will be marked wrong, and may be passed over in favor of a candidate with "stronger command line skills".


But neither of those options is more or less correct than the other; there is no way to know which a strict (but apparently unqualified!) interviewer is going to prefer.


Question: Write the command that reads the file that has the name (text.txt) and shows only one page each time you hit space and it allows you to explore the file back and forward.

Your answer: more text.txt

Correct answer: less text.txt


Indeed, traditionally more doesn't go backward. It's the first line of prose in the less(1) manpage: "Less is a program similar to more (1), but which allows backward movement in the file as well as forward movement."


Oh, good point. That is a subtle distinction, though.


I guess you could say less is more!


Yeah, a handful of these tripped me up as well. I got:

Question: Write the command that you use to move into your home directory '~'

Your answer: cd

Correct answer: cd ~

The man pages specify that cd moves into the current user's $HOME directory if called without arguments, but I'm sure there's some mystic difference between cd $HOME and cd ~ in certain cases.


Thanks a lot for your comment. I think both answers are correct. I am not sure if cd works for all systems.


https://pubs.opengroup.org/onlinepubs/9699919799/utilities/c...

cd without an argument will change directory to $HOME if $HOME is set and the value is non-empty as defined in the standard linked above. That’s not to say that all Unix-like systems do or even try to implement everything of that standard, but it’s a good indicator pointing to that a lot or most of them probably do.

As for cd ~, tilde expansion is done by the shell, not by cd. Same goes with any other command that you type ~ as the leading part of a path and provide as argument. (Also, in bash, among others, cd is a builtin command.) The shell will substitute the ~ for the path of your home dir when ~ is alone or followed by a slash and anything else. (And you probably know also that ~example would refer to the home dir of a user named “example”.)

I think you will sooner run into a system with a shell that doesn’t do tilde expansion, than you will run into a Unix system where plain cd without an argument doesn’t bring you to your home dir.


Technically the chances of tilde not working are the same as cd behaving differently because they’re both shell builtins.

I’m guessing (though admittedly not checked) that both ~ and cd (without parameters) are defined in POSIX. In which case any edge case that doesn’t conform could reasonably be discounted with regards to the submission’s exercise.


I did some quick research on the POSIX thing and it looks like cd (without parameters) is defined in POSIX:

https://www.unix.com/man-page/posix/1posix/cd/

Also I don’t know why many of my posts keep getting downvoted even when they’re factually accurate.


Things like this should probably be ‘Correct’ with a small warning.


Why warn? It’s perfectly reasonable behaviour to learn. I’ve used it for years.


Not sure if the site is meant to be strictly Linux/Unix or not, but on Windows, cd without any path just prints the current directory and doesn't do anything else. (Although "cd ~" produces the response "The system cannot find the path specified.")


And yet my preferred pager is `most` https://linux.die.net/man/1/most


Color support is nice, default colors seemed terrible (blue on grey wasn't readable). The keybinds didn't make sense. No vi keybinds is a no go. At least do not touch hjkl!


First question didn't go great, would be nice if there was a way to report missing answers.

Question: Write the command which you use to move inside the directory which has the name 'my dir' (the name contains a space)

Your answer: cd 'my dir'

Correct answer: cd my\ dir


And in practice: `cd my<tab>`. I strive to make the first three letters of a filename a unique prefix in each directory; and if I were to use a space like this, I’d be making sure “my” was a unique prefix. This system becomes a sufficiently ingrained habit that I can’t cope with Zola having a directory “content” beside a file “config.toml”.


Tab completion isn't default in every shell


I did that too and learned backslashing the space is another way. Next time I'll do it that way and win the sweet green.


There are so many ways to escape the space. It did not accept cd my" "dir either.


The responsive design is unusable on an iPhone SE. This would have the most appeal to me as something to use during downtime (e.g. on the train) rather than when I am at my desk so it’s too bad.


Thanks for your feedback. I agree that it is not user-friendly for mobile users. I will improve the UI in the future to fit small devices as well.


Did you try Firefox?


Yep I only use FF. The DOM is the same either way, though.


This is a really cool idea! I love that there's an option to train on git commands. Git has always been the kind of thing where I only learn as much as I need in order to do the task immediately in front of me, so this kind of thing might be a useful way to level up my skills in that area.

I also really love that in the "about" section, you include lots of details about the architecture of the project. I was only expecting a summary of how to use the project, but all these additional details were really nice to see.


>Assuming that you execute the command man -ls

I assume this is supposed to be `man ls`.

>You move inside the help document of the ls command. Write the keyboard key that you can use to move forward to the next page inside the help document

> Your answer: page down

> Correct answer: f

I mean, both work? Maybe my answer is less likely to work ona remote system with TERM set wrong.


I really thank you for giving it a try and for your comments. I should say that the user's answer could be correct in many cases. I am working on a more advanced answer normalizing feature using some regex expressions which will NOT be a default option. From my point of view, it is better to memorize one pattern of the command that does the work instead of focusing on searching how to use the command.


Maybe add a button that says “challenge this ruling I’m pretty sure im right” so at least you’ll know which ones people were sure on vs ones they got wrong because they guessed.


This is very neat.

I found it difficult to read/parse the descriptions, they almost feel like sentence riddles. Also, the column width may be too wide for fast reading. Maybe one could solve these more quickly if there was always the same format using newlines like "type the command\nwhich will display x\n such that y".


That might make sense if there is some canonical answer to your questions. But if you arbitrarily choose "right" answer you are annoying people who already have some experience. But then, I guess you target people with little to not experience, right?


Another suggestion: Instead of just the verbal description of what to type, how about some sample output to? That wouldn't give away any answers but would help understand what you are looking for. Like when you asked "type text to the terminal" I put 'cat' instead of 'echo'. Sample output would probably have helped me there.


Thanks a lot for your suggestion. I agree 100% with you. I am thinking to provide hints to the users either by giving a link to the source or showing a picture of the results or both.


Anki is superb for this sort of stuff. It implements a spaced repetition algorithm to keep the added content in your memory while minimizing the number of times that you need to refresh it. While used mostly for studying natural languages, there's nothing wrong with using it for IT stuff (I do).

(Edit: Dropped a bit that was left after some previous culling.)


"You can use a fake Email". Curious! Why not just make it an optional field?


I got a lot of questions about the names of root level linux directories, which while good knowledge doesn't seem to fit under the title description.


I'm liking it so far. Doesn't bother me about being marked wrong when right. It's not like it's for anyone else. Getting some good lessons and refreshes, and works great on Firefox on my phone. Thank you very much for making it.


Some of these are kinda poorly phrased, and the answer in a few of them could've been "depends" more than once.

Would be slightly better if the questions were more specific, or at least accept multiple answers.


I thought it would be a memory game like Simon [1] where the game prints one line and then your repeat it. If you are correct it starts from the first line but adds another line for you to remember.

I could see the fun in that. Also you wouldn't have the issue of people complaining about right and wrong answers because you would have to write just as it was printed.

[1] https://en.m.wikipedia.org/wiki/Simon_(game)


What is this??? I see a gif with terminals commands and a sign up. You have no call to action. There is nothing on the page that tell me what this is about or how this will benefit me.


Dear all,

I appreciate your effort and your time testing the website. It was a great help to me. Your feedback is the light in the darkness. There are a lot of ideas in the pipeline. Your feedback helps me to prioritize them. Big thanks for everyone who wrote feedback here or sent it to me via email or LinkedIn. Thanks for all 9k+ tester. This is my Sunday project. Each Sunday, I am going to release a new version with a new fix or feature.

Best regards

Maher Deeb


The University of Technology Sydney wrote a similar training program inside a VM to use in their systems introduction classes called LinuxGym [0]. Its a surprisingly useful learning tool if a little basic and dated, but covers everything from directories to grep to awk.

[0] - http://linuxgym.it.uts.edu.au/linuxgym/lgwww/


See also [1][2] (bookmarked them sometime back, don't remember the details)

[1] https://www.shortcutfoo.com/app/dojos/command-line

[2] https://www.memrise.com/course/50252/shell-fu/


I love the idea, it's like push-ups for programmers. (Though actual push-ups wouldn't be a bad idea either ;) On that note, are there other things that come to mind like that? Maybe anki-decks or https://typing.io/


Correct answer adds the current working directory not all changes in the local repository.

  Write the command that asks git to add all changes that have been made inside the project that git tracks.
  Your answer: git add -A

  Correct answer: git add .


Did one session and it kept asking me some commands that I had typed correctly from the first time.


Thanks for your comment. I appreciate it a lot. I will try to figure out why this happened and solve the problem.


If this helps I trained as a guest.


:) I am going to check the logs. I think I should be able to see the problem.


UX feedback. Get rid of "Repeat Password" field. It will make the form look more user-friendly, as well as hide the scroll bar (at least on my MacBook Pro), so the entire page fit the screen.


Hey guys, i have an app that I have just put away where you can save commands in the command line in the system or upload them to a remote... anyone interested...it is just a npm package


Anybody have a good Linux command line reference they might recommend? I've been using Ubuntu on my computer and it would be nice to have a resource for when I get stuck.


I have a curated list of resources[1] on topics like learning command line basics, bash scripting, style guide, etc. I have also have my own basics guide[2] and a comprehensive cli text processing repo[3]

[1] https://github.com/learnbyexample/scripting_course/blob/mast...

[2] https://github.com/learnbyexample/Linux_command_line

[3] https://github.com/learnbyexample/Command-line-text-processi...


Very cool. Thanks!


This is a really cool idea. I think ideally, it could do with a Duolingo/Flash card style approach where your first taught the commands, and then asked to write them.


WRONG Answer: tail test.txt Your answer: tail test.txt

I think it didn't like my answers if I hit the 'enter' button.


I thought I got hit by this, and then realized that it's text.txt with an X and not test.txt with an S.


Just a heads up to the author: When I click the "Start memorizing" button, I get a 500 server error.


thanks a lot for your comment. I got the error from Google App Engine as well. I am going to investigate this and solve the problem.


Question: Write the command that you use to move into the parent directory of the current directory.

Your answer: ..

Correct answer: cd ..

Nope.


`..` is not a command, it's just the name of the parent directory (unless you've defined it as an alias for `cd ..`)


I use zsh and fish, `..` takes you to the parent directory without typing `cd`


Can you do something about duplicate questions?


Sure! After I get all the questions in place, there will be no duplicate questions.


Very cool, thanks for sharing


Thank you for creating this.


this is like a parrot learning how to say 100 sentences in french. the parrot has no idea what it is saying, only that the result might generate a cracker or a grape.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: