About
Linux file management
Type
hidden
A full stop '.' before the name of the file makes it a hidden file. Example '.bash'
Metadata
Management
Get
Filename and extension
Using Parameters Expansion Removal
fileFullName=$(basename "$filePath")
# or
fileFullName="${filePath##*/}"
extension="${fileFullName##*.}"
filename="${fileFullName%.*}"
parent directory
- From a path string where the file does not exist
VAR=/filedoesnt/exist
echo ${VAR%/*}
/filedoesnt
- dirname returns the first parent of an existing path file.
dirname "dir/file"
dir
File Permission
Linux - File/Folder Permissions - Access Control List ( ACL ) - Posix Model
File exists
if [ ! -f $PATH ]; then
echo "File $PATH not found!"
fi
Absolute path
ABSOLUTE_PATH=$(realpath "${FILE_NAME}")
Size
with Linux - ls (List directory content)
ls -lh myFile | awk '{ print $5 }'
where:
- -lh shows a human readable size
- an awk will extract the 5de column of the ls output
Monitoring the size of a (log) file
Example:
# the program that run
program=unzip
# the log of the progam
logfile='restoreAll.log'
# Don't touch below, the program
count=0
while kill -0 $(pgrep ${program}) 2> /dev/null; do
count=$(( $count + 1 ))
size=$(ls -lh ${logfile} | awk '{ print $5 }')
echo "${count} - Process is running and the log is ${size}"
sleep 10
done
echo "${count} - Process has exited"
Comparison
cmp --silent $old $new || echo "files are different"
cmp -b $old $new
See also : diff
Diff
diff file1 file2 | cat -t
where:
- ^M for CR,
- ^I for tab
See also: comparison
Filter a list of files ?
- Using grep
This command below gives you all files in the current directory which begin by elfutils
dir | grep -i elfutils
elfutils-0.137-3.el5.i386.rpm
elfutils-devel-0.137-3.el5.i386.rpm
elfutils-devel-static-0.137-3.el5.i386.rpm
elfutils-libelf-0.137-3.el5.i386.rpm
elfutils-libelf-devel-0.137-3.el5.i386.rpm
elfutils-libelf-devel-static-0.137-3.el5.i386.rpm
elfutils-libs-0.137-3.el5.i386.rpm
- find can do it recursviely
Remove a file?
Permission: In UNIX and Linux, the ability to remove a file is determined by the access bits of parent directory
chmod 777 .
chown hi-adm:hi-adm .
With the command rm
Example:
- Basic
rm filename.extension
- Prompts for confirmation before removing a file
rm -i filename.extension
- Force removal of the file regardless of it bieng write-protected or open
rm -f filename.extension
- Remove files recursively in 'directory'
rm -r directory
More … perform the man commando
man rm
Copy 1 or multiple file
cp - Copy one or more files to another location.
Example::
- Copy of a directory with resistivity:
cp -r dirtocopy newdir
- Copy two files
cp myFile1.txt myFile2.txt myDirDestination
- Copy all files of directory
cp * myDirDestination
# or
cp /myDirSource/* /myDirDestination
- Copy all txt files (with a pattern)
cp *.txt myDirDestination
Move / Rename
- mv - Moves or renames file
Example:
mv file.log file.$(date "+%Y.%m.%d-%H.%M.%S").log
Concatenate
cat file1 file2 > finalFile
# example with cert
cat first_cert.pem second_cert.pem > combined_cert.pem
Transfer
See the content
- Shell Data Processing - Head (Displays first 10 lines of file),
- tail - Displays last 10 lines of file,
- Shell Data Processing - Tac (for reverse output) (for reverse output)
- less and more let you scroll the text files
Search a file by name
- locate - List files that match a pattern.
Locate all file with a regular expression. In this example all file which begin with sp and end up with the extension msb.
locate -r "sp.*\.msb"
- find - search for files in a directory hierarchy with glob pattern
find /my/directory -name myFile.extension
#
find /my/directory -name globPattern
Search files based on time
touch -d '2011-12-31 10:22' foo
find . -newer foo
See all other files in the time section of the find command
Search the content of files
Shell Data Processing - Global Regular Expression Print (GREP command) (line filtering, word search)
- For the current directory .
grep -rn "string*" .
File Architecture (32 or 64 bit)
File Architecture
file fileName
Example:
file java
/bin/java: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
Iterate / List
The ls pattern does not work in a bash script unless an option is on.
The best way is to use find when you need pattern matching
ENV_FILES=$(find . -maxdepth 1 -type f -name $ENV_FILE_PATTERN 2> /dev/null)
for ENV_FILE in $ENV_FILES ; do
echo $ENV_FILE
done
Executable Capability
A file may also be an executable one and it may got capabilities such as being able to take the port 80
On Linux, see:
- setcap - set file capabilities.
sudo setcap 'cap_net_bind_service=+ep' /path/to/your/executable
- getcap - get the file capabilities.
sudo getcap /path/to/your/executable
Processing
List of command
Content
- Shell Data Processing - Uniq ( unique ) - duplicate line removing: returns a file where the line are unique