From fea2c6d0690241150b86020cdb90b70a6d10ee43 Mon Sep 17 00:00:00 2001 From: Vidar Holen Date: Sun, 6 Dec 2020 21:46:19 -0800 Subject: [PATCH] Updated SC2024 (markdown) --- SC2024.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/SC2024.md b/SC2024.md index 6e4a112..0e0ebb6 100644 --- a/SC2024.md +++ b/SC2024.md @@ -1,11 +1,16 @@ ## `sudo` doesn't affect redirects. Use `..| sudo tee file` -or "Use `sudo cat file | ..`" for input files. +or "Use `..| sudo tee -a file`" instead of `>>` to append. + +or "Use `sudo cat file | ..`" instead of `<` to read. ### Problematic code: ``` # Write to a file +sudo echo 3 > /proc/sys/vm/drop_caches + +# Append to a file sudo echo 'export FOO=bar' >> /etc/profile # Read from a file @@ -16,6 +21,9 @@ sudo wc -l < /etc/shadow ``` # Write to a file +echo 3 | sudo tee /proc/sys/vm/drop_caches > /dev/null + +# Append to a file echo 'export FOO=bar' | sudo tee -a /etc/profile > /dev/null # Read from a file @@ -28,9 +36,10 @@ Redirections are performed by the current shell before `sudo` is started. This m * To *read* from a file that requires additional privileges, you can replace `sudo command < file` with `sudo cat file | command`. * To *write* to a file that requires additional privileges, you can replace `sudo command > file` with `command | sudo tee file > /dev/null` +* To *append* to a file, use the above with `tee -a`. * If the file does *not* require special privileges but the command *does*, then you are already doing the right thing: please [[ignore]] the message. -Both substitutions work by having a command open the file for reading or writing, instead of relying on the current shell. Since the command is run with elevated privileges, it will have access to files that the current user does not. +The substitutions work by having a command open the file for reading or writing, instead of relying on the current shell. Since the command is run with elevated privileges, it will have access to files that the current user does not. Note: there is nothing special about `tee`. It's just the simplest command that can both truncate and append to files without help from the shell. Here are equivalent alternatives: