11

When navigating the file system of my USB drive in the terminal, some weird things happen that didn't used to happen on my Raspberry Pi B+. I'm not quite sure how to articulate this, so I'll just show what is

  1. I open the command line and navigate to my USB drive with cd /media/pi/MYUSB/

  2. I use cd to enter a folder of the USB drive with cd /myFolder/myOtherFolder

  3. I navigate backwards to myFolder with cd ..

  4. I try to navigate again to myOtherFolder with cd /myOtherFolder. However, this raises the bash error bash: cd: /myOtherFolder: no such file or directory

I have no idea what or why this is happening, but I used to be able to do this without the error message. Sometimes I have power outages that cause the Raspberry Pi to shut off with the USB drive in it, so I have "ghost USB drives" like the ones described in Ghost USB drives left behind when power is cycled off and on.

2 Answers 2

31

You put a leading / to your path names! That's the root directory, meaning what you write next is an absolute path. Your /myFolder/myOtherFolder is not on your USB if it's mounted inside /media/pi/MYUSB/ anyway.

But you can use cd myOtherFolder in the case you're asking. I suggest reading some basic tutorial about Linux's (or Unix) file handling, filesystems, and such.

10

To go into a bit more detail —

Whether you come from a Windows or Mac OS X background, you will be used to external drives being independent places from your hard disk (more or less).

Part of Unix tradition is "avoid special cases wherever possible". For instance in Unix (and GNU/Linux), a keyboard is represented as a file that can be opened and read from just like a text file. So is a serial port (which can be written to as well). On a Raspberry Pi even the GPIO pins can be controlled like this. There is a file called /dev/zero that produces a sequence of 0-bytes when you read it. Etc.

This was a brilliant idea as it allowed programs to be constructed without having all sorts of special cases.

Anyway, in a similar tradition, there is one directory structure for the entire system, starting at / (the root directory). No special cases, no "drive letters". Just /.

Drives can be "attached" somewhere in this structure using the mount command (an Raspberry Pi is configured to do this automatically, but you can also do it manually).

Every file's path descends from / in some way (for example, /home/pi/test.txt). Because of this, a path starting with / is assumed to be an "absolute" path, starting from the root directory of the entire system. Without the / at the start, it is considered a "relative" path, i.e. it starts from the current directory.

Two other tricks—you probably know that a path starting with .. refers to the parent directory. A path starting with ~ starts from your home directory, e.g. ~/test.txt works the same no matter what your current directory is.

1
  • 3
    For completeness, a path starting with . refers to the current directory. This is important when one wishes to run a command stored in the current directory: Simply typing foo will cause the $PATH to be searched, and the first directory listed in it that contains a file named foo will be executed. But typing ./foo instructs the shell to explicitly look in the current directory rather than search $PATH. Commented Mar 4, 2019 at 19:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.