Directory permissions changed by mistake, any idea why?
SlackwareThis Forum is for the discussion of Slackware Linux.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
I tried downloading a pre-built package of SBo from https://sbopkg.org/downloads.php. Upon doing so I extracted the tarball and I think I made a mistake in doing so or I passed the wrong args so I deleted everything I just downloaded and tried downloading it again.
But upon attempting to download a 2nd time, it then prompted me where I wanted to save the file, which it didn't do last time. Then when I selected my /home/username/Downloads directory, it said I had invalid save permissions when I had them just moments ago. I never ran any chown commands in the process.
So Changing into my /home/username/ directory, I ran ls -l to list all the permissions and sure enough, all of them sans the Downloads directory were owned by my user, with /home/username/Downloads being, for some reason, owned by root user and group. Exiting from my user account and logging into root, I changed directories into /home/username/Downloads and managed to successfully change the permissions back to username and users group, but I'm still stumped as to how or why the perms just randomly changed after I downloaded/deleted the file I downloaded?
The only commands I ran were rm -rf on the files within /home/username/Downloads.
maybe you changed a few times with su - , and back to your regular user. And because of that, some dirs where made with root permissions, and when you changed back to your regular user, you could not save in that directory.
Thanks. But I'm afraid I don't understand. The ~/.bashrc file supposedly only exists to deal with environment variables for an interactive Bash shell, not a login one; yet it's required for the making of permanent aliases?
I don't see why this is the case. The ~/.bashrc file only dealing with interactive shell configuration implies to me that it has no bearing on the overall login shell configuration for bash. But then if I want to make permanent aliases, I have to create a file named ~/.bashrc and have it include the alias there.
I just find it confusing that the ~/.bashrc file seems to be so integral to general system configuration yet doesn't exist until a user creates it manually. And after seeing some examples /bin/bash.bashrc files, They seem to deal with integral parts of a BASH login shell such as tab completion and the like. I don't have a bash.bashrc file on my computer so I am puzzled as to how/where my bash shell's actual configuration is actually handled. The only bash file I seem to have is /etc/bash_completion.d and ~/.bash_history
Last edited by burning; 07-09-2020 at 11:46 AM.
Reason: edited for clarification
~/.bashrc is for interactive non-login shells
~/.bash_profile is for interactive login shells
You can have one of the files source the other file if you want it to apply to both shells.
Neither of these files are created when you create a user (since only the home folder is created).
I've never bothered creating one. I change my konsole terminal to use a login shell for every instance and I make my changes in /etc/profile directly (since I'm the only user on the system). But if I were not the administrator and unable to to edit system conf files, I would add my changes to the ~/.bash_profile and continue to set everything to use a login shell.
Thanks
I read through the slackware docs and edited my ~/.bash_profile to read:
Code:
if [ -f ~/.bashrc ]; then
.~/.bashrc
fi
and edited my ~/.bashrc to read:
Code:
. /etc/profile
but every time I login now, I'm met with two randomized quotes/messages that I get at the beginning of every session instead of the usual one. Any idea what went wrong?
Last edited by burning; 07-10-2020 at 10:06 AM.
Reason: bash not nash
but every time I login now, I'm met with two randomized quotes/messages that I get at the beginning of every session instead of the usual one. Any idea what went wrong?
When you use a login shell, bash will check for and try and source /etc/profile (which will include anything in /etc/profile.d/, ~/.profile, and ~/.bash_profile.
Adding the sourcing of your .bashrc to your ~/.bash_profile will then cause /etc/profile to be run twice. Just remove the reference to .bashrc in ~/.bash_profile and keep the . /etc/profile in your ~/.bashrc and all shells will have the same environment.
Fwiw this is all documented in the man page. See bash(1).
Quote:
INVOCATION
A login shell is one whose first character of argument zero is a -, or
one started with the --login option.
An interactive shell is one started without non-option arguments
(unless -s is specified) and without the -c option whose standard input
and error are both connected to terminals (as determined by isatty(3)),
or one started with the -i option. PS1 is set and $- includes i if
bash is interactive, allowing a shell script or a startup file to test
this state.
The following paragraphs describe how bash executes its startup files.
If any of the files exist but cannot be read, bash reports an error.
Tildes are expanded in filenames as described below under Tilde
Expansion in the EXPANSION section.
When bash is invoked as an interactive login shell, or as a non-
interactive shell with the --login option, it first reads and executes
commands from the file /etc/profile, if that file exists. After
reading that file, it looks for ~/.bash_profile, ~/.bash_login, and
~/.profile, in that order, and reads and executes commands from the
first one that exists and is readable. The --noprofile option may be
used when the shell is started to inhibit this behavior.
When an interactive login shell exits, or a non-interactive login shell
executes the exit builtin command, bash reads and executes commands
from the file ~/.bash_logout, if it exists.
When an interactive shell that is not a login shell is started, bash
reads and executes commands from ~/.bashrc, if that file exists. This
may be inhibited by using the --norc option. The --rcfile file option
will force bash to read and execute commands from file instead of
~/.bashrc.
When bash is started non-interactively, to run a shell script, for
example, it looks for the variable BASH_ENV in the environment, expands
its value if it appears there, and uses the expanded value as the name
of a file to read and execute. Bash behaves as if the following
command were executed:
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
but the value of the PATH variable is not used to search for the
filename.
If bash is invoked with the name sh, it tries to mimic the startup
behavior of historical versions of sh as closely as possible, while
conforming to the POSIX standard as well. When invoked as an
interactive login shell, or a non-interactive shell with the --login
option, it first attempts to read and execute commands from
/etc/profile and ~/.profile, in that order. The --noprofile option may
be used to inhibit this behavior. When invoked as an interactive shell
with the name sh, bash looks for the variable ENV, expands its value if
it is defined, and uses the expanded value as the name of a file to
read and execute. Since a shell invoked as sh does not attempt to read
and execute commands from any other startup files, the --rcfile option
has no effect. A non-interactive shell invoked with the name sh does
not attempt to read any other startup files. When invoked as sh, bash
enters posix mode after the startup files are read.
When bash is started in posix mode, as with the --posix command line
option, it follows the POSIX standard for startup files. In this mode,
interactive shells expand the ENV variable and commands are read and
executed from the file whose name is the expanded value. No other
startup files are read.
Bash attempts to determine when it is being run with its standard input
connected to a network connection, as when executed by the remote shell
daemon, usually rshd, or the secure shell daemon sshd. If bash
determines it is being run in this fashion, it reads and executes
commands from ~/.bashrc, if that file exists and is readable. It will
not do this if invoked as sh. The --norc option may be used to inhibit
this behavior, and the --rcfile option may be used to force another
file to be read, but neither rshd nor sshd generally invoke the shell
with those options or allow them to be specified.
If the shell is started with the effective user (group) id not equal to
the real user (group) id, and the -p option is not supplied, no startup
files are read, shell functions are not inherited from the environment,
the SHELLOPTS, BASHOPTS, CDPATH, and GLOBIGNORE variables, if they
appear in the environment, are ignored, and the effective user id is
set to the real user id. If the -p option is supplied at invocation,
the startup behavior is the same, but the effective user id is not
reset.
When you use a login shell, bash will check for and try and source /etc/profile (which will include anything in /etc/profile.d/, ~/.profile, and ~/.bash_profile.
Adding the sourcing of your .bashrc to your ~/.bash_profile will then cause /etc/profile to be run twice. Just remove the reference to .bashrc in ~/.bash_profile and keep the . /etc/profile in your ~/.bashrc and all shells will have the same environment.
Thanks, I thought I was supposed to do it the way I did it because of what it said [URL="https://docs.slackware.com/howtos:cli_manual:shells#login_shell_initialisation"here[/URL]
under the |/.bashrc vs |/.bash_profile header.
Thanks, I thought I was supposed to do it the way I did it because of what it said [URL="https://docs.slackware.com/howtos:cli_manual:shells#login_shell_initialisation"here[/URL]
under the |/.bashrc vs |/.bash_profile header.
If you are adding customizations to ~/.bashrc, then it might be worth having ~/.bash_profile source ~/.bashrc. But if you're just having non-login shells source /etc/profile, then there's no need to tell login shells to source ~/.bashrc.
Do the same things as you did but as different user. So create new account. Reinstall rm and other utilities using distribution packages. How did you download? Through web browser? There is possibility under Linux to run application as different user - I don't quite well recall now. Sticky bit? Maybe I am wrong in this. But it means that you start app but system sees this as being started by someone else. Say you start app and system sees that was started by root - with of course all privileges - and every created file is owned by root.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.