Ubuntu学习笔记2#

[TOC]

用户管理#

用户管理操作中,需要有root超级用户的权限,要不然无法操作

sudo 表示以管理员身份执行

Linux下,能执行sudo命令的用户叫做 sudoer

1
2
3
echin@i:~$ useradd es
useradd: Permission denied.
useradd: cannot lock /etc/passwd; try again later.

切换用户#

可以看到echin 用户并没有权限操作用户管理

su = switch user

1
2
3
4
5
6
echin@i:~$ sudu useradd -m test 
Command 'sudu' not found, did you mean:
command 'tudu' from deb tudu (0.10.4-2)
command 'sudo' from deb sudo (1.9.14p2-1ubuntu1)
command 'sudo' from deb sudo-ldap (1.9.14p2-1ubuntu1)
Try: apt install <deb name>

所以需要切换用户到超级用户

1
su root
1
2
3
echin@i:~$ su root
Password: #密码不显示的
root@i:/home/echin#

添加用户#

  • m 表示在 /home 下添加用户目录
1
sudo useradd -m  test

例子

1
2
3
root@i:/# sudo useradd -m test1
root@i:/# ls /home
deploy echin test1

修改用户密码#

1
sudo passwd test1

例子

1
2
3
4
root@i:/# sudo passwd test1
New password:
Retype new password:
passwd: password updated successfully

删除用户#

1
2
sudo userdel test1
sudo rm -rf /home/test1

例子

可以看到,我们虽然删除了用户,但是/home/test1这个目录不会删除

1
2
3
4
5
root@i:/# sudo userdel test1
root@i:/# ls /home
deploy echin test1
root@i:/# sudo userdel test1
userdel: user 'test1' does not exist

推出#

1
exit

用户和组(不用着重了解)#

因为一般来说Linux中不会有很多用户,所以不需要组这个概念

所以我绝对这下面的命令不需要知道,只要问gpt一下

创建组#

1
sudo groupadd boys

创建用户#

  • g 表示添加用户,同时将用户加到``boys`里面
1
sudo useradd -m -g boys xiaoMing

修改用户信息#

1
sudo usermod -g boys echin

查看用户和组#

查看group的信息

1
cat /etc/group

查看一个用户的信息

1
cat /etc/passwd

文件权限#

  • owner 文件的属主 owner
  • -r 文件是否可读 read
  • -w 文件是否可写 write
  • -x 文件是否可以执行 excute

如果系统中有用户 a 和 b

一个文件 xx.txt,由 a 创建

那么 b 是否可以访问这个文件,是否可读,是否可写

查看权限#

1
ls -l xx.txt

例子

1
2
3
4
5
6
7
root@i:/# cd /home/echin
root@i:/home/echin# ls -l
total 20
-rw-rw-r-- 1 echin echin 264 May 30 13:09 aaa.tar.gz
lrwxrwxrwx 1 echin echin 5 May 30 17:17 link -> world
drwxrwxr-x 4 echin echin 4096 May 30 13:03 world
-rw-rw-r-- 1 echin echin 10240 May 30 12:56 xxx.tar
  • -rw-rw-r-- 表示文件的权限
  • 1 表示目录中有多少文件
  • echin 创建文件的owner
  • echin
  • 10240 文件的大小
  • May 30 12:56 创建或修改时间
  • xxx.tar 文件的名称

权限字符的详解#

例子 : -rw-r--r--

  • 第一个字符 : -

    1. - 表示文件
    2. d 表示目录
    3. l 表示软链接
  • r w - | r - - | r - - = 自己 | 同组 | 别人

分别表示 自己有什么权限 | 同组的人有什么权限 | 别人有什么权限

  • 每个部分的解释

    r w x 分别表示 可读 可写 可执行

    如果是 - 就表示 不能读/写/执行

  • 解释: r w - | r - - | r - - 表示

自己可读可写不可执行|同组的人可读不可写不可执行|别人可读不可写不可执行

  • 解释二 r w x 可读可写可执行

修改文件的权限#

文件权限的修改只能由 文件的属主超级用户 修改

1
chmod # change file mode

如果给 xx 添加给别人的可读权限

1
2
chmod o+w example.txt # 表示添加别人可写的权限
chmod o-w example.txt # 表示减少别人可写的权限
  • a 表示 all ,是所有人的意思
  • u表示 user , 是自己的权限
  • o表示 other , 是别人的权限

省略的写法

1
chmod +w simple.txt # 默认修改自己和同组的权限

修改文件的属主#

一般来说,每个用户只操作自己的用户目录,所以 chown命令并不常用

1
chown # change owner

可执行脚本#

脚本 script ,一种解释执行的程序

Linux 下常见的三种脚本程序

  • Shell 脚本 *.sh
  • Perl 脚本 *.pl
  • Python 脚本 *.py

脚本程序,本质是一个文本文件,这些程序都是由解释器来执行的

如果要执行文件就直接 hello.py

  1. 他是一个文本文件
  2. 它具有可执行的权限

类似于这个:

image-20240530195512927

Shell 脚本#

Shell,是Linux自带的脚本语言

他其实可以做循环,判断,每一行都是一个命令

1
2
3
touch xx.sh
chmod +x xx.sh
./xx.sh

下面是我运行的图片

1
2
#!/bin/sh
echo "hello,world"

image-20240530200818619

  1. 发现第一次创建hello.sh的时候这个文件并没有权限执行,所以需要添加权限
  2. 使用nano文本编辑器进行编辑,因为我没有其他的,这个是自带的
  3. 编辑好了以后ctrl + x 退出
  4. 很多时候可以看颜色判断是否可以执行,白色就是不行

Python 脚本#

Python脚本比Shell更加强大

1
2
3
touch xx.py
chmod +x hello.py
./hello.py

下面看示例(具体过程和shell一样):

1
2
#!/usr/bin/env python3
print("Hello, World!")

image-20240530202301490

环境变量#

作用域

  • 可以在当前终端中使用
  • 可以在shell脚本中调用

在命令行中定义的环境变量,只对当前的SHELL终端有效

当关闭终端后,重启后就消失了

分类:

  • 系统环境变量
  • 用户环境变量
  • PATH环境变量(比较特殊,所以特地拿出来讲)

- 创建/修改环境变量#

这个内容后面都会提到,这里不需要太执着

注意这个=要和旁边两个东西紧密相连

1
export VARIABLE_NAME=VALUE

设置path变量

1
export PATH=$PATH:/additional/path

- 显示所有环境变量#

1
env

- 刷新环境变量#

如果你不使用下面这个命令,那么每次修改完环境变量都需要注销登录

1
source /etc/profile.d/myprofile.sh

用户环境变量#

“用户环境变量”和”环境变量”这两个术语在很多情况下可以互换使用

环境变量是操作系统中的一个变量

用户环境变量是特定于某个用户的环境变量,每个用户都有自己的配置文件

定义在 ~/.profile的脚本文件之中,而这个脚本文件存在于主目录之中

主目录根目录 的区别:

主目录是在 /home/username 之下的目录

根目录是 /开头的目录

在主目录下使用:ls -la

在Linux下,以开头的文件为隐藏文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@i:/home/echin# ls -la
total 52
drwxr-x--- 3 echin echin 4096 May 30 20:22 .
drwxr-xr-x 9 root root 4096 May 30 18:13 ..
-rw-rw-r-- 1 echin echin 264 May 30 13:09 aaa.tar.gz
-rw------- 1 echin echin 967 May 30 13:44 .bash_history
-rw-r--r-- 1 echin echin 220 May 29 16:37 .bash_logout
-rw-r--r-- 1 echin echin 3771 May 29 16:37 .bashrc
-rwxr-xr-x 1 root root 46 May 30 20:22 hello.py
-rwxr-xr-x 1 root root 29 May 30 20:07 hello.sh
lrwxrwxrwx 1 echin echin 5 May 30 17:17 link -> world
-rw-r--r-- 1 echin echin 807 May 29 16:37 .profile # 这里
drwxrwxr-x 4 echin echin 4096 May 30 13:03 world
-rw-rw-r-- 1 echin echin 10240 May 30 12:56 xxx.tar

通过 nano .profile 进入编辑

image-20240530210747336

然后进入编辑…..

编辑好后一定要注销用户后才能生效

系统环境变量#

定义在 /etc/profile 的脚本文件中,这里的环境变量对 所有用户 有效

touch /etc/profile.d/myprofile.sh

nano /etc/profile.d/myprofile.sh

写一点命令就行了

但是 , 一般来说不直接修改 ``/etc/profile`

而是在 /etc/profile.d/创建一个自定义的脚本,因为ect/profile中会嵌套调用前者

系统配置文件和初始化脚本都是放在etc目录下面的,且这个目录必须需要超级用户修改

PATH 环境变量#

PATH 一定要大写; 修改PATH的时候与等号要贴贴,结构为 PATH=$PATH:

先看一段代码:

为什么会找不到``hello.sh`这个脚本文件,明明他是存在的

或者说我们是根据什么来找的

1
2
3
4
5
6
7
8
9
10
11
@i:/home/echin# cd /home/echin
root@i:/home/echin# ls -l
total 28
-rw-rw-r-- 1 echin echin 264 May 30 13:09 aaa.tar.gz
-rwxr-xr-x 1 root root 46 May 30 20:22 hello.py
-rwxr-xr-x 1 root root 29 May 30 20:07 hello.sh
lrwxrwxrwx 1 echin echin 5 May 30 17:17 link -> world
drwxrwxr-x 4 echin echin 4096 May 30 13:03 world
-rw-rw-r-- 1 echin echin 10240 May 30 12:56 xxx.tar
root@i:/home/echin# hello.sh
hello.sh: command not found

PATH 环境变量 是用来描述 可执行程序的搜索路径 (注意要全大写)

就是执行一个程序的是否,系统会从一个路径下面来搜索

显示PATH 环境变量

1
echo $path
1
2
root@i:/# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bi

同时多个路径之间用冒号分隔

usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin

usr/bin是普通用户,usr/sbin是超级用户

所以,我们可以明白,当我们使用hello.sh的时候会从PATH的一堆目录中寻找,但是这堆目录中并没有找到我们要的脚本文件,所以我们需要写路径才能执行

解决方案:

1
root@iZbp19bvr4g3vqr24ft07rZ:/# nano /etc/profile.d/myprofile.sh

编辑环境变量

xx

再注销后登录:

1
2
root@i:~# hello.sh
hello,world

完成了❤️

小事故#

因为我一开始并没有创建 myprofile.sh 这个文件,所以我刚刚在添加路径的时候好像直接把命令修改在了 .profile 文件里了,导致我直接所有路径都没有了,哈哈哈

解决方法是:

  1. 设置临时 PATH

    1
    export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/opt/bin
  2. 编辑相应的文件

    1
    nano ~/.profile
  3. 添加之前的路径

    1
    export PATH=$PATH=export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/opt/bin
  4. 最后测试是否成功

    1
    echo $PATH
  5. 再来进行我们的修改路径的操作:

    image-20240530220730566

  6. 成功啦💕💕💕💕💕

总结#

  1. 不同的环境变量的路径不一样

    • 用户环境变量: ~/.profile
    • 系统环境变量:
      • 如果要自定义: /etc/prfile.d/myprofile.sh
      • 总的系统环境变量: /etc/profile
  2. PATH 环境变量其实是属于前面两个环境变量之中的,所以不要把他独立出来,要处理PATH环境变量的时候也需要再对应的文件中处理,不过如果只是临时设置的话就无所谓,直接export PATH..

  3. PATH 一定要大写