I think these ls commands are far better than using find if the additional file metrics that find (which just returns filenames) does not provide are needed. That said, all the ls solutions seem really cumbersome piping to awk. Why not just use gnu date's built in formatting instead? Show ls -ltr directory/ | grep "$(date +"%b %e")" Does the same thing and requires no awk print statements or conditionals. GNU date formatting is really helpful for outputting your date exactly how you need. In this case %b matches the 3 letter month and %e is a space-padded day value matching the format of ls instead of a 0-padded day value that the default date uses. ls -ltr directory/ | grep "$(date +"%b %e")" Example output: -rw-r----- 1 ocams ocams 987 Sep 2 01:45 ember_status_2021-245-01_30.log.gz.closed -rw-r----- 1 ocams ocams 1202 Sep 2 01:45 realmvm_status_2021-245-00_04.log.gz.closed -rw-r----- 1 ocams ocams 1085 Sep 2 01:45 realmvm_status_2021-245-01_04.log.gz.closed -rw-r----- 1 ocams ocams 312590 Sep 2 01:45 3-21-244-234712.csv.gz.closed -rw-r----- 1 ocams ocams 925880 Sep 2 01:45 1-21-245-010728.csv.gz.closed -rw-r----- 1 ocams ocams 310556 Sep 2 01:45 3-21-245-010238.csv.gz.closed -rw-r----- 1 ocams ocams 1041 Sep 2 01:45 ember_status_2021-245-00_45.log.gz.closedIf you wanted to more closely match find to get exactly 24 hours you can handle the two different dates (the current day, and the previous day) with an or condition in grep: ls -ltr directory/ | grep "$(date +"%b %e")\|$(date -d -1day +"%b %e")". This is returning 25-48 hours worth of data instead of <24. ls -ltr directory/ | grep "$(date +"%b %e")\|$(date -d -1day +"%b %e")" Example output: -rw-r----- 1 ocams ocams 314951 Sep 1 23:45 3-21-244-231707.csv.gz.closed -rw-r----- 1 ocams ocams 899348 Sep 1 23:45 1-21-244-230205.csv.gz.closed -rw-r----- 1 ocams ocams 915400 Sep 1 23:45 1-21-244-231708.csv.gz.closed -rw-r----- 1 ocams ocams 671063 Sep 1 23:45 2-21-244-231708.csv.gz.closed -rw-r----- 1 ocams ocams 666953 Sep 1 23:45 2-21-244-230205.csv.gz.closed -rw-r----- 1 ocams ocams 987 Sep 2 01:45 ember_status_2021-245-01_30.log.gz.closed -rw-r----- 1 ocams ocams 1202 Sep 2 01:45 realmvm_status_2021-245-00_04.log.gz.closed -rw-r----- 1 ocams ocams 1085 Sep 2 01:45 realmvm_status_2021-245-01_04.log.gz.closed In this chapter, we will discuss in detail about file permission and access modes in Unix. File ownership is an important component of Unix that provides a secure method for storing files. Every file in Unix has the following attributes −
The Permission IndicatorsWhile using ls -l command, it displays various information related to file permission as follows − $ls -l /home/amrood -rwxr-xr-- 1 amrood users 1024 Nov 2 00:10 myfile drwxr-xr--- 1 amrood users 1024 Nov 2 00:10 mydirHere, the first column represents different access modes, i.e., the permission associated with a file or a directory. The permissions are broken into groups of threes, and each position in the group denotes a specific permission, in this order: read (r), write (w), execute (x) −
File Access ModesThe permissions of a file are the first line of defense in the security of a Unix system. The basic building blocks of Unix permissions are the read, write, and execute permissions, which have been described below − ReadGrants the capability to read, i.e., view the contents of the file. WriteGrants the capability to modify, or remove the content of the file. ExecuteUser with execute permissions can run a file as a program. Directory Access ModesDirectory access modes are listed and organized in the same manner as any other file. There are a few differences that need to be mentioned − ReadAccess to a directory means that the user can read the contents. The user can look at the filenames inside the directory. WriteAccess means that the user can add or delete files from the directory. ExecuteExecuting a directory doesn't really make sense, so think of this as a traverse permission. A user must have execute access to the bin directory in order to execute the ls or the cd command. Changing PermissionsTo change the file or the directory permissions, you use the chmod (change mode) command. There are two ways to use chmod — the symbolic mode and the absolute mode. Using chmod in Symbolic ModeThe easiest way for a beginner to modify file or directory permissions is to use the symbolic mode. With symbolic permissions you can add, delete, or specify the permission set you want by using the operators in the following table.
Here's an example using testfile. Running ls -1 on the testfile shows that the file's permissions are as follows − $ls -l testfile -rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfileThen each example chmod command from the preceding table is run on the testfile, followed by ls –l, so you can see the permission changes − $chmod o+wx testfile $ls -l testfile -rwxrwxrwx 1 amrood users 1024 Nov 2 00:10 testfile $chmod u-x testfile $ls -l testfile -rw-rwxrwx 1 amrood users 1024 Nov 2 00:10 testfile $chmod g = rx testfile $ls -l testfile -rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfileHere's how you can combine these commands on a single line − $chmod o+wx,u-x,g = rx testfile $ls -l testfile -rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfileUsing chmod with Absolute PermissionsThe second way to modify permissions with the chmod command is to use a number to specify each set of permissions for the file. Each permission is assigned a value, as the following table shows, and the total of each set of permissions provides a number for that set.
Here's an example using the testfile. Running ls -1 on the testfile shows that the file's permissions are as follows − Then each example chmod command from the preceding table is run on the testfile, followed by ls –l, so you can see the permission changes − $ chmod 755 testfile $ls -l testfile -rwxr-xr-x 1 amrood users 1024 Nov 2 00:10 testfile $chmod 743 testfile $ls -l testfile -rwxr---wx 1 amrood users 1024 Nov 2 00:10 testfile $chmod 043 testfile $ls -l testfile ----r---wx 1 amrood users 1024 Nov 2 00:10 testfileChanging Owners and GroupsWhile creating an account on Unix, it assigns a owner ID and a group ID to each user. All the permissions mentioned above are also assigned based on the Owner and the Groups. Two commands are available to change the owner and the group of files −
Changing OwnershipThe chown command changes the ownership of a file. The basic syntax is as follows − $ chown user filelistThe value of the user can be either the name of a user on the system or the user id (uid) of a user on the system. The following example will help you understand the concept − $ chown amrood testfile $Changes the owner of the given file to the user amrood. NOTE − The super user, root, has the unrestricted capability to change the ownership of any file but normal users can change the ownership of only those files that they own. Changing Group OwnershipThe chgrp command changes the group ownership of a file. The basic syntax is as follows − $ chgrp group filelistThe value of group can be the name of a group on the system or the group ID (GID) of a group on the system. Following example helps you understand the concept − Changes the group of the given file to special group. SUID and SGID File PermissionOften when a command is executed, it will have to be executed with special privileges in order to accomplish its task. As an example, when you change your password with the passwd command, your new password is stored in the file /etc/shadow. As a regular user, you do not have read or write access to this file for security reasons, but when you change your password, you need to have the write permission to this file. This means that the passwd program has to give you additional permissions so that you can write to the file /etc/shadow. Additional permissions are given to programs via a mechanism known as the Set User ID (SUID) and Set Group ID (SGID) bits. When you execute a program that has the SUID bit enabled, you inherit the permissions of that program's owner. Programs that do not have the SUID bit set are run with the permissions of the user who started the program. This is the case with SGID as well. Normally, programs execute with your group permissions, but instead your group will be changed just for this program to the group owner of the program. The SUID and SGID bits will appear as the letter "s" if the permission is available. The SUID "s" bit will be located in the permission bits where the owners’ execute permission normally resides. For example, the command − $ ls -l /usr/bin/passwd -r-sr-xr-x 1 root bin 19031 Feb 7 13:47 /usr/bin/passwd* $Shows that the SUID bit is set and that the command is owned by the root. A capital letter S in the execute position instead of a lowercase s indicates that the execute bit is not set. If the sticky bit is enabled on the directory, files can only be removed if you are one of the following users −
To set the SUID and SGID bits for any directory try the following command − $ chmod ug+s dirname $ ls -l drwsr-sr-x 2 root root 4096 Jun 19 06:45 dirname $ |