how to get the current file permission and modify it


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting how to get the current file permission and modify it
# 1  
Old 04-13-2012
how to get the current file permission and modify it

Suppose the file abc.txt has permissions as follows.

Code:
abc.txt  -rw-r--r--

the value will be 644

how to check whether the file abc.txt has permission 666 or not. if not then the permission 666 has to be given to that file. I need to handle this in unix shell script (ksh).

Can any one help me out.

Thanks
Krishnakanth

Moderator's Comments:
Mod Comment Please use code tags. Video tutorial on how to use them

Last edited by Scrutinizer; 04-13-2012 at 06:58 AM..
# 2  
Old 04-13-2012
There are two ways to get the file's access rights in octal:
Code:
stat -c "%a" file

or a pure shell script, getperm.sh
Code:
#!/bin/bash
#
# getperm
 
for i in $(ls -ld ${1} | awk 'BEGIN{FIELDWIDTHS="4 3 3"}{print $1,$2,$3}'); do
    ((++j))
    while read -n 1 bit; do
          [[ x${bit} == x ]] && break
          case ${bit} in
          s|S) ((tib=j==1?4:2)) && ((mus+=tib))
               [[ ${bit} == s ]] && bit=1 || bit=0 ;;
          t|T) ((++mus)) 
               [[ ${bit} == t ]] && bit=1 || bit=0 ;;
          r)   bit=4 ;;
          w)   bit=2 ;;
          x)   bit=1 ;;
          *)   bit=0 ;;
          esac 
          ((sum+=bit))
    done < <(echo ${i})
    perm+="${sum}" && sum=
done 
[[ x${mus} == x ]] && mus=0
echo ${mus}${perm}

you can also replace
Code:
awk 'BEGIN{FIELDWIDTHS="4 3 3"}{print $1,$2,$3}'

with
Code:
sed 's/\(....\)\(...\)\(...\)\(.*\)/\1 \2 \3/g'

as FIELDWIDTHS is gnu awk only!
Invoking the script
Code:
bash getperm.sh file


Last edited by complex.invoke; 04-13-2012 at 07:22 AM..
# 3  
Old 04-13-2012
Found this answer when searching the forum. May help

Code:
 
perl -e 'for (@ARGV) { printf "%04o %s",  (stat)[2] & 07777, $_ }' file_name

# 4  
Old 04-13-2012
Or:
Code:
PERMS=$(ls -ald abc.txt|cut -f1 -d" ")
if [ "${PERMS}" = "-rw-r--r--" ]
then
        ls -ald abc.txt
        chmod 666 abc.txt
        ls -lad abc.txt
fi

# 5  
Old 04-13-2012
How about this 1 liner
Code:
find . -perm 644 | xargs -iFile chmod 666 File


Last edited by zedex; 04-13-2012 at 12:41 PM.. Reason: missed some part in code
# 6  
Old 04-13-2012
Why does it need 666 permissions? Giving write access to the entire universe usually isn't a good idea...
# 7  
Old 04-13-2012
Further to post #5 , we can tie it down to the single file:
Code:
if [ -f "/full_path_to_file/abc.txt" ]
then
           find "/full_path_to_file/abc.txt" -perm 0644 -exec chmod 666 {} \;
fi


I've had a database engine where the database client log had to be permissions 666 but changing the umask was not safe. The permissions were corrected after every database start or log archive.

Last edited by methyl; 04-13-2012 at 06:34 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Ed to modify a file --- or not?

Running Oracle Linux 6 (derivative of RHEL 6) Given this snippet of code in a shell script: #-- reset oratab to use 11.2 home for dwdev #-- normally we'd just use sed to do this sort of thing, but that would #-- require permissions that we don't have in the /etc/ directory, so we #-- ... (3 Replies)
Discussion started by: edstevens
3 Replies

2. Shell Programming and Scripting

File modify

Hi All I am getting a file with below pattern - 00150366 05/08/2015 07:14:32 8000186167+++ 50195281000000000371001010903236 800186167+++ 100209000000000 800000018617+++ 50295281000000000371001010900217================================3u4398482344334=432434 00150367 05/08/2015 07:14:32... (7 Replies)
Discussion started by: honey26
7 Replies

3. Shell Programming and Scripting

Modify a file by another file: add new line and variable after string is found

hello, I have problem with writing/adjusting a shell script. I searched forum and unfortunately couldn't write scipt based on the information I found. I never wtire such so it's hard for me and I do need to modify one script immediately. case looks like: 1. 'file' that needs to be modified... (3 Replies)
Discussion started by: bipbip
3 Replies

4. Shell Programming and Scripting

ksh- redirect stderr to file and then modify the file

I have the following: remsh $host -n 2>>syslog_issue_list.txt grep -i -e "EMS" -e "error" -e "warning" -e "excessive" /var/adm/syslog/syslog.log | awk /"$DATE1"/ | awk -vhost="$host" '!/remsh|telnetd/{print host "\n", $0 >> "syslog_issue_list.txt"}' I am creating a health script that has... (4 Replies)
Discussion started by: chipblah84
4 Replies

5. Shell Programming and Scripting

Modify file

Hi, I have a file that looks like this: 27+:<10,289808,1> 31+:<11,1445372,1> 33-:<7,1014101,2> 35+:<11,728811,1> 36-:<11,1445205,0> 37+:<11,1445792,2> and I want to change it to this: + 10 289808 + 11 1445372 - 7 1014101 + 11 728811 - 11 1445205 + 11 1445792 (3 Replies)
Discussion started by: kylle345
3 Replies

6. Shell Programming and Scripting

Perl : how to modify a file without generate a temporary file

Hi All, I have a file like below, how can i insert one line after line 1 without using a temporary file in perl? line 1 line 2 line 3 expected result line 1 new line <---insert here line 2 line 3 (2 Replies)
Discussion started by: summer_cherry
2 Replies

7. Shell Programming and Scripting

Modify a file

Hi all Can anyone suggest me a good solution ? My requirement is as follows I have a plain text file similar to this... sending data to 0003345234 here is the output... ,.......... ........... ....... sending data to 00033452ab here is the output... ,.......... ........... .... (5 Replies)
Discussion started by: ./hari.sh
5 Replies

8. Shell Programming and Scripting

Can I modify the .bashrc file instead of .profile file to customize my login?

Hello, I got this question which tells me to customize my login script. Some people in the forums suggested to modify the .profile file in my home directory. I did so, but none of my customizations show up when I open the terminal after. So, I tried to modify other files in my home directory,... (1 Reply)
Discussion started by: Hyunkel
1 Replies

9. UNIX for Dummies Questions & Answers

modify date of a file

I'm trying to find a way to print the date that a file was modified on. Using ls -l gives me to much information! All i need is the date. There must be a simple way to do this, but i cannot find it anywhere.. can someone give me some advise? (2 Replies)
Discussion started by: tine
2 Replies

10. Shell Programming and Scripting

modify a file

I'm a new member of the forum, I had this new generate file since I use 'grep' and 'awk', what I want to do is get rid off the all 0s before the numbers, is there any one who could help me to figure it out? Thanks a lot! yun 0000000029 000q7472 2002/03/01 0000000030 000q7472 2002/03/01 ... (2 Replies)
Discussion started by: yxiao
2 Replies
Login or Register to Ask a Question