Author: Eiko

Time: 2024-11-16 11:35:57 - 2024-11-16 11:57:21 (UTC)

Linux

I’d like to interject for a moment. What you’re referring to as Linux, is in fact, GNU/Linux, or as I’ve recently taken to calling it, GNU plus Linux. Linux is not an operating system unto itself, but rather another free component of a fully functioning GNU system made useful by the GNU corelibs, shell utilities and vital system components comprising a full OS as defined by POSIX.

Linux is just a kernel: a kernel is a component that talks to the hardware and manages resources. The kernel is an essential part of an operating system, but useless by itself; it can only function in the context of a complete operating system. Linux is normally used in combination with the GNU operating system: the whole system is basically GNU with Linux added, or GNU/Linux. All the so-called Linux distributions are really distributions of GNU/Linux!

SS-Tier Commands

  • cat prints or concats the content of files.

  • cd changes directory.

  • chmod is used to change permissions of files or directories.

  • chown is used to change the owner of files or directories.

  • cp is used to copy.

  • echo prints text

  • env run a program in a modified enviroment.

  • groups command prints a list of groups that a user belongs to.

  • kill is used to send signal or terminate a process.

  • ln is used to create links.

  • ls list files in a directory.

  • mkdir is used to create directory, absolutely useful.

  • mv is used to move or rename a file.

  • pwd command prints the current working directory.

  • rm removes file or directories.

  • su switches user or root.

  • sudo run as root.

  • touch creates an empty file, or update the atime of an existing file.

  • grep can be used to search text.

  • find can be used to search files.

  • fzf can be used to search files or make option menus. Unlike other tools in this list, it is not part of GNU Core utils or shell command line default tools, and is usually not installed by default.

Recap

We have already covered the basic usage of cat, cd, pwd, mkdir, chmod, chown, echo, ls, rm, groups.

We will begin an in-depth look at the remaining commands: cp, env, kill, ln, mv, su, sudo, touch, grep, find, fzf.

touch

touch is used to create an empty file, or update the atime and mtime of an existing file.

touch FILE # TOUCH it, create if not exist. If it exists, update the times.

cp

cp is used to copy files or directories.

cp SOURCE DEST

cp SOURCE1 SOURCE2 ... DEST

cp -r SOURCE_DIR DEST

ln

ln is used to create links.

  • Hard link is a link to the inode of a file, there is only one file on your disk, but multiple names and paths pointing to it.

    file —-> file_disk hardlink —-^

  • Symbolic link is a link to a path, like a shortcut in Windows.

    a —-> file a itself is also a file.

ln SOURCE DEST  # Create a hard link

ln -s SOURCE DEST  # Create a symbolic link

mv

mv is used to move or rename a file.

mv SOURCE DEST

env

env runs a program in a modified environment.

env VAR1=VALUE1 VAR2=VALUE2 COMMAND

I/O model of a command

A command is a function that takes input and produces output. The input to a command can be

  • Standard input (stdin)

  • Command line arguments

  • Environment variables

Output can be

  • Standard output (stdout)

  • Standard error (stderr)

  • Exit status

(stdin, arguments) ----command----> (stdout, stderr)


              arguments
                 |
                 v
             ###############
   stdin---> #             # ---> stdout
             #   command   #
             #             # ---> stderr
             ###############

Pipes!

Commands can be connected using pipes. The output of one command can be used as input to another command.

            ########
     stdout #  |   # stdin of next command
      --->  # Pipe # ---> 
            #######$
command1 | command2 | command3

          ############        ############        ############
stdin --> # command1 # -----> # command2 # -----> # command3 # --> stdout
          ############        ############        ############

grep

grep is extremely useful for searching text!

It can take input in stdin or from files (pass in file names as arguments). And it will filter out the lines that match the pattern.

grep PATTERN FILE

stdin | grep PATTERN

grep -Ir PATTERN DIRECTORY
grep -Irl PATTERN DIRECTORY

find

find is used to search files.

find DIRECTORY -type f -name "PATTERN" # Find files with name PATTERN in DIRECTORY
find . -type f ... -exec COMMAND {} \; # Execute COMMAND on each file found

fzf

kill