alias settings nor working at logon

Newly installed hirsute = 21.04. Installed out of the package, created my own personal account, the default .bashrc is present in my homedir and to make sure there is a .bash_aliases too. Both mention alias ll='ls -alF' still this alias is not available after logon. Is this a bug or am I missing something?

NAME="Ubuntu"
VERSION="21.04 (Hirsute Hippo)"

karel@schal:~$ pwd ; ls -al .bash*
/home/karel
-rwxr-xr-x 1 karel users   53 Sep 26 06:22 .bash_aliases
-rw------- 1 karel users 9834 Sep 26 06:23 .bash_history
-rw-r--r-- 1 karel users 3771 Aug 31 23:17 .bashrc
karel@schal:~$ cat .bash_aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
karel@schal:~$ ll
ll: command not found

edited after a not-very-friendly comment, to add:

karel@wiske:~$ ssh [email protected]
[email protected]'s password: 
Welcome to Ubuntu 21.04 (GNU/Linux 5.11.0-34-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

0 updates can be applied immediately.


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
Last login: Sun Sep 26 09:37:21 2021
karel@schal:~$ alias
karel@schal:~$ /bin/bash
karel@schal:~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'

and that behaviour is identical, whether logging in per ssh or in the local graphical environment or on a local text-only console (dev/tty5 and similar)

Also, as requested, excerpt from ~/.bashrc:

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

[further edited as requested]

karel@schal:~$ ls -al ~/.bash_profile  ~/.bash_login ./.profile
ls: cannot access '/home/karel/.bash_profile': No such file or directory
ls: cannot access '/home/karel/.bash_login': No such file or directory
ls: cannot access './.profile': No such file or directory
karel@schal:~$ ps -p $$ | tail -n1 | awk '{print $NF}'
bash

Solution 1:

When logging in over ssh, you are running what is known as an interactive login shell, and not an interactive non-login shell which is what happens when you open a terminal once logged in. Login shells do not read ~/.bashrc and instead read ~/.profile, ~/.bash_profile and ~/.bash_login. This is why your aliases are not present. For more details on this and the differences between the initialization files of various shell types, see Why are scripts in /etc/profile.d/ being ignored (system-wide bash aliases)?. This is also why you do get your aliases when you run /bin/bash since that starts a non-login shell and will read ~/.bashrc.

That said, Ubuntu's default ~/.profile file includes these lines:

# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi

So it should actually be reading your ~/.bashrc as well. If this isn't happening, I suspect one of the following:

  1. You (or someone) have created a ~/.bash_profile file. That would cause the ~/.profile file to be ignored. As explained in man bash (emphasis mine):

    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 com‐ mands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.

    So if either ~/.bash_profile or ~/.bash_login exist, then anything in ~/.profile is ignored.

  2. You (or someone else) have created your own ~/.profile which does not source ~/.bashrc.

  3. You are not actually running bash. You can check this by running ps -p $$ | tail -n1 | awk '{print $NF}' in the shell where you don't have aliases. If the output isn't bash, you are running a different shell. Perhaps you've set your default login shell to sh, which is dash on Ubuntu. You can check the current value with echo $SHELL and you can change it with chsh.


Based on your latest edit, it seems that your case is:

  1. You don't have a ~/.profile for some reason. And, based on your last edit, this seems to be the case. So just copy the default .profile from /etc/skel and you should be fine next time you log in:

    cp /etc/skel/.profile ~/
    

Solution 2:

@terdon had it right: for some reason or other, there was no .profile in my homedir. All was okay after - as suggested - cp /etc/skel/.profile ~