Linux 常用命令及文件操作笔记

    科技2025-06-24  7

    文章目录

    初级Shell命令查看当前用户基本信息命令别名查看磁盘空间过滤文件数据压缩数据实现数据归档 - tar查看进程信息挂载设备相关命令将任务放到后台模式运行 Linux 环境变量全局变量与局部变量全局变量局部变量 设置用户自定义变量设置局部用户自定义变量设置全局变量删除环境变量设置PATH环境变量bash shell 的启动方式环境变量持久化 Linux文件权限Linux的安全性/etc/passwd文件/etc/shadow文件添加新用户删除用户修改用户 Linux用户组查看系统所有用户组创建用户属组修改用户属组增加、删除用户属组理解用户权限修改文件权限改变文件用户属组共享文件 持续更新。。。

    初级Shell命令

    查看当前用户基本信息

    finger <username>

    命令别名

    查看当前shell可以别名

    alias -p

    创建用户别名

    eg: alias li='ls -li' alias属于shell内建命令,默认情况下,一个别名仅在它所被定义的shell进程才有效type <shell command> 可以查看命令是否是内建命令(相对于shell而言,shell自带的为内建,系统命令/bin,/usr/bin等为外建命令)使用外建命令会调用子shell,需要创建子shell环境,速度慢

    查看磁盘空间

    查看某个设备上面还有多少磁盘空间(查看的是已挂载磁盘的使用情况)df -h h表示按照用户易读的形式显示 查看当前目录各文件大小,并按照降序排列du -sh * | sort -nr du表示查看当前目录文件大小,-s表示显示每个输出参数的统计信息-h表示按照用户易读方式输出* 表示对当前目录下的每个目录文件都统计sort表示对上面目录大小排序,-n表示当作数字排序,-r表示降序排列

    过滤文件数据

    搜索过滤数据grep [options pattern] [file] eg: grep [A-Z] -n file1.txt (在file1.txt中查找包含A-Z字符的行,-n表示显示行号) grep H -v file1.txt (-v表示反向搜索,在file1.txt中查找不包含H的行) grep H -c file1.txt (-c表示统计包含字符H的总行数)

    压缩数据

    GNU 压缩工具 gzip

    压缩gzip 查看压缩文件gzcat 解压文件gunzip 可以使用通配符 * 实现批量压缩

    实现数据归档 - tar

    tar 实现数据归档

    创建归档文件

    tar -cvf test.tar test/ test2/ 上面命令创建了名为test.tar的归档文件,含有test和test2目录内容-c 创建一个新的tar归档文件-v 处理时候显示文件信息-f 输出结果到文件或设备

    列出文件test.tar内容(不提取内容)

    tar -tf test.tar -t 表示列出tar归档文件内容

    提取test.tar归档文件内容

    tar -xvf test.tar -x 表示从已有归档文件提取文件

    从.tgz压缩文件提取(.tgz指的是被gzip压缩过的tar文件)

    tar -zxvf filename.tgz -z 表示把输出重定向给gzip命令来解压缩内容

    查看进程信息

    查看进程信息(Unix风格的ps命令)ps -ef ps -l ps --forest -e 表示查看所有进程-f 表示显示完整格式信息-l 可以获得更多信息–forest 可以按父shell和子shell层级展示各进程使用的cmd 实时监测进程信息top 结束进程1(根据pid结束进程)kill -9 <pid> (pid表示进程号) kill -s KILL <pid> 上面两者等价 结束进程2(可以根据进程名结束进程)eg: killall http* 上例表示结束所有以http开头的进程

    挂载设备相关命令

    查看当前系统挂载设备列表mount 输出结果中,每行表示一个设备挂载信息,如下:媒体设备文件名 on 媒体设备挂载到虚拟目录的挂载点 文件系统类型 已挂载媒体的访问状态 eg: /dev/sda1 on /boot type ext3 (rw) 为当前设备以新的权限挂载到 / 虚拟目录 mount –o remount,rw / -o 表示给文件系统添加特定的选项这种方式通常用于忘记密码进入recovery mode 修改密码使用,因为recovery mode中,默认挂载方式是只读权限,需要通过这种方式重新以读写权限方式挂载到 / 上,然后修改密码 从 Linux系统上移除一个可移动设备时,不能直接从系统移除,而应先卸载 umount [directory | device] eg: umount /home/rich/mnt

    将任务放到后台模式运行

    在shell 命令后加 ‘&’ 就可以进入后台命令运行 <shell command> & eg: sleep 3000& sleep 3000表示休眠3000秒,后面的&表示后台运行查看后台运行的程序 jobs jobs -l eg result: [1]+ 2369 Running sleep 3000& [1] 表示作业号Runing表示进程正在执行Done表示进程执行完毕最后显示运行的cmd-l 能够显示进程(作业)的PID

    Linux 环境变量

    全局变量与局部变量

    全局变量
    ``` 全局环境变量对于shell会话和所有生成的子shell都是可见的。局部变量则只对创建它们的shell可见 ``` * 查看所有全局变量 ``` env printenv ``` * 查看特定局部变量(以HOME为例) ``` printenv HOME echo $HOME ls $HOME #变量如果是目录可以直接使用 ```
    局部变量
    局部环境变量只能在定义它们的进程中可见

    设置用户自定义变量

    设置局部用户自定义变量
    echo $my_variable # 定义变量 my_variable=Hello # 赋值 echo $my_variable # 查看变量 离开当前shell,定义的局部变量就不可被访问如果要给变量赋一个含有空格的字符串值,必须用单引号来界定字符串的首和尾。所有的系统环境变量名均使用大写字母,这是bash shell的标准惯例。如果是你自己创建的局部变量或是shell脚本,请使用小写字母变量名、等号和值之间没有空格,这一点非常重要。如果在赋值表达式中加上了空格,bash shell就会把值当成 一个单独的命令
    设置全局变量
    var='Hello world' #给变量赋值 export var #声明为全局变量 echo $var #查看全局变量 子shell中不能修改父shell中定义的全局变量(修改值只在子shell有效)
    删除环境变量
    unset var #删除变量var,注意不需要写$ 在子进程中删除了一个全局环境变量,这只对子进程有效。该全局环境变量在父进程中依然可用
    设置PATH环境变量
    当你在shell命令行界面中输入一个外部命令时,shell必须搜索系统来找到对应的程序。PATH环境变量定义了用于进行命令和程序查找的目录 添加搜索目录 PATH=$PATH:/home/zhangw 对PATH变量的修改只能持续到退出或重启系统
    bash shell 的启动方式
    在你登入Linux系统启动一个bash shell时,默认情况下bash会在几个文件中查找命令。这些文件叫作**启动文件或环境文件

    启动bash shell 的三种方式

    登陆时作为默认登录shell作为非登录shell的交互式shell作为运行脚本的非交互shell

    登陆时作为默认登录shell

    1、当你登录Linux系统时,bash shell会作为登录shell启动。登录shell会从5个不同的启动文件里读取命令: 2、/etc/profile文件是系统上默认的bash shell的主启动文件。系统上的每个用户登录时都会执行这个启动文件。

    /etc/profile

    /etc/profile文件是bash shell默认的的主启动文件。只要你登录了Linux系统,bash就会执行/etc/profile启动文件中的命令。

    下面的启动文件都起着同一个作用,提供一个用户专属的启动文件来定义该用户所用到的环境变量。大多数Linux发行版只用这四个启动文件中的一到两个

    $HOME/.bash_profile$HOME/.bashrc$HOME/.bash_login$HOME/.profile

    作为非登录shell的交互式shell

    如果你的bash shell不是登录系统时启动的(比如是在命令行提示符下敲入bash时启动),那么你启动的shell叫作交互式shell。交互式shell不会像登录shell一样运行,但它依然提供了命令行提示符来输入命令。如果bash是作为交互式shell启动的,它就不会访问/etc/profile文件,只会检查用户HOME目录中的.bashrc文件。

    非交互式shell

    系统执行shell脚本时用的就是这种shell。不同的地方在于它没有命令行提示符当你在系统上运行脚本时,也许希望能够运行一些特定启动的命令 为了处理这种情况,bash shell提供了BASH_ENV环境变量。当shell启动一个非交互式shell进程时,它会检查这个环境变量来查看要执行的启动文件。如果有指定的文件,shell会执行该文件里的命令,这通常包括shell脚本变量设置。这个环境变量在默认情况下并未设置,此时shell脚本可以使用继承自父shell导出过的变量举例来说,如果父shell是登录shell,在/etc/profile、/etc profile.d/*.sh和$HOME/.bashrc文件中设置并导出了变量,用于执行脚本的子shell就能够继承这些变量。由父shell设置但并未导出的变量都是局部变量。子shell无法继承局部变量。
    环境变量持久化
    在大多数发行版中,存储个人用户永久性bash shell变量的地方是$HOME/.bashrc文件。这一点适用于所有类型的shell进程Linux系统中所有用户都需要使用的变量,最好不要放在/etc/profile文件,因为升级发行版这个文件也会随之更新,最好是在/etc/profile.d目录中创建一个以.sh结尾的文件。把所有新的或修改过的全局环境变量设置放在这个文件中

    Linux文件权限

    Linux的安全性

    /etc/passwd文件
    Linux系统使用一个专门的文件来将用户的登录名匹配到对应的UID值。这个文件就是 /etc/passwd文件,它包含了一些与用户有关的信息: 登录用户名 用户密码 用户账户的UID(数字形式) 用户账户的组ID(GID,数字形式) 用户账户的文本描述(备注字段) 用户HOME目录的位置 用户的默认shell root用户账户是Linux系统的管理员,固定分配给它的UID是0Linux为系统账户预留了500以下的UID值。有些服务甚至要用特定的UID才能正常工作普通用户创建账户时,大多数Linux系统会从500开始,将第一个可用UID分配给这个账户(并非所有的Linux发行版都是这样)/etc/passwd文件中的密码字段都被设置成了x,这并不是说所有的用户账户都用相同的密码,绝大多数Linux系统都将用户密码保存在另一个单独的文件中(叫作shadow文件,位置在/etc/shadow)。只有特定的程序(比如登录程序)才能访问这个文件。/etc/shadow文件可以随意编辑(root用户),但是不推荐这样做,可能会导致用户无法登录。推荐用标准的Linux用户管理工具管理用户。
    /etc/shadow文件
    /etc/shadow文件为系统上的每个用户账户都保存了一条记录,如下: rich:$1$.FfcK0ns$f1UgiyHQ25wrB/hykCn020:11627:0:99999:7:::
    添加新用户
    查看新用户默认设置useradd -D eg: # useradd -D GROUP=100 # 默认组 HOME=/home # 默认目录 INACTIVE=-1 EXPIRE= #账户过期时间,以及账户密码过期后会不会被禁用。默认为空未设置过期时间 SHELL=/bin/bash #默认shell SKEL=/etc/skel # 新用户默认配置存放目录(有.bashrc等文件),新用户会从/etc/skel拷贝一份放到新用户目录下 CREATE_MAIL_SPOOL=yes 修改系统默认值 useradd -D -s /bin/bash 可以在-D选项后跟上一个指定的值来修改系统默认的新用户设置: 参数 描述 -b default_home 更改默认的创建用户HOME目录的位置 -e expiration_date 更改默认的新账户的过期日期 -f inactive 更改默认的新用户从密码过期到账户被禁用的天数 -g group 更改默认的组名称或GID -s shell 更改默认的登录shell 创建用户useradd -m <username> 默认情况下,useradd命令不会创建HOME目录,但是-m命令行选项会使其创建HOME目录。 你能在此例中看到,useradd命令创建了新HOME目录,并将/etc/skel目录中的文件复制了过来。 -d 可以设置不同于用户名的用户目录: sudo useradd -m test3 -d /home/test3_dir
    删除用户
    默认情况下,userdel命令会只删除/etc/passwd文件中的用户信息,而不会删除系统中属于该账户的任何文件如果加上-r参数,userdel会删除用户的HOME目录以及邮件目录。然而,系统上仍可能存有已删除用户的其他文件。这在有些环境中会造成问题。在删除用户的HOME目录之前一定要检查清楚!你永远不知道用户是否在其HOME目录下存放了其他用户或其他程序要使用的重要文件 userdel -r test
    修改用户
    修改密码 passwd sudo passwd <username> 接着根据提示输入密码 sudo passwd -e <username> 强制用户下次登录修改密码 chpasswd 可以批量修改密码 chpasswd命令能从 标准输入自动读取登录名和密码对(由冒号分割)列表,给密码加密,然后为用户账户设置。你也可以用重定向命令来将含有userid:passwd对的文件重定向给该命令 chpasswd < users.txt 修改备注信息 sudo chfn <username> 全能命令usermod usermod [options] <gid|gname> <username> eg: usermod -g 0 test #设置test的默认用户组为root所在的用户组 usermod -u 1008 test #更改test的UID为1008 usermod -aG my_group test #把test追加到my_group用户组 <br>

    Linux用户组

    每个用户组有唯一的GID,每个组还有唯一的组名 和UID一样,GID在分配时也采用了特定的格式。系统账户用的组通常会分配低于500的GID值,而用户组的GID则会从500开始分配 /etc/group文件有4个字段: 组名 组密码 GID 属于该组的用户列表
    查看系统所有用户组
    sudo cat /etc/group sudo tail /etc/group 你会发现,在列表中,有些组并没有列出用户。这并不是说这些组没有成员,当一个用户在/etc/passwd文件中指定某个组作为默认组时,用户账户不会作为该组成员再出现在/etc/group文件中 。通过usermod -G <GID> <username>可以添加。
    创建用户属组
    sudo groupadd <group_name> # 创建用户组,默认没有用户被分配到该组 sudo usermod -G <group_name> <username> #添加用户组 eg : sudo usermod -G shared test # 把test加入shared用户组 如果更改了已登录系统账户所属的用户组,该用户必须登出系统后再登录,组关系的更 改才能生效-G 选项则将该组添加到用户的属组的列表里,不会影响默认组。
    修改用户属组
    sudo groupmod -n sharing shared # 修改用户组名为 sharing sudo groupmod -g <GID> sharing # 修改用户组GID 修改组名时,GID和组成员不会变,只有组名改变。由于所有的安全权限都是基于GID的,你可以随意改变组名而不会影响文件的安全性。
    增加、删除用户属组
    gpasswd [option] group eg: sudo gpasswd -a test sharing #把test添加到sharing用户组 sudo gpasswd -d test sharing #把test从sharing组中删除
    理解用户权限
    默认文件权限 umask 查看系统默认文件权限掩码,例如我的机器是0002,第一位为粘着位表示特殊性质 剩下的002为掩码: 对文件来说,全权限为 666,减去掩码,最终创建文件默认权限为664 即 110,110,100 -> rw-,rw-,r-- 对目录来说,全权限为 777,减去掩码。最终创建的目录默认权限为775 即 111,111,101 -> rwx,rwx,r-x 三组二进制分别表示该文件的 属主、同组用户、不同组其他用户对该文件的权限  -代表文件  d代表目录  l代表链接  c代表字符型设备  b代表块设备  n代表网络设备 之后有3组三字符的编码。每一组定义了3种访问权限:  r代表对象是可读的  w代表对象是可写的  x代表对象是可执行的 若没有某种权限,在该权限位会出现单破折线  对象的属主  对象的属组  系统其他用户
    修改文件权限
    通过八进制模式修改权限 chmod [options] mode eg: chmod 760 a.txt # 这里没有加入options,optins可以通过 man chmod 查看 chmod -R 760 test/ #递归的给test/及其子目录(文件)添加权限 通过符号模式修改权限 chmod [options] [ugoa] [[+-=]][rwxXstugo] chmod 和 [options]同上八进制模式 其中 [ugoa] [[+-=]][rwxXstugo]: 第一部分 [ugoa]: u 文件所属用户 g 文件用户所属组 o 非该文件用户所属组的其他用户组 a 代表上述所有 第二部分 +-=: + 表示现有基础上增加权限 - 现有基础上移除权限 = 将权限值设置为后面的值 第三部分: r 读权限 w 写权限 x 执行权限 X 如果对象是目录或者它已有执行权限,赋予执行权限 s 运行时重新设置UID或GID t 保留文件或目录 u 将权限设置跟属主一样 g 将权限设置为跟属组一样 o 将权限设置为跟其他用户一样 最常用的就是rwx eg: chmod ug+x a.sh #给a.sh的属主和属组添加执行权限(x) chmod u+rwx b.txt #给b.txt的属主添加读写执行权限 chmod o-x b.txt #给b.txt的其他组用户移除执行权限 chmod -R u+w test/ #递归的给test/及其子目录(文件)属主添加写权限 chmod o=r a.txt #把a.txt的其他组用户权限设置为只读
    改变文件用户属组

    chown命令

    chown options owner[.group] file #[]内部表示可选项 common options: -R 递归改变子目录和文件的属组、属主 -h 改变该文件的所有符号链接文件的所属关系(部分系统支持) eg: chown test a.txt #更改a.txt文件的属主为test chown test.zhangw a.txt #更改a.txt文件的属主为test,同时更改其属组为zhangw chown .sharing a.txt #只更改a.txt的属组为sharing不更改属主 chown test. newfile #系统采用和用户登录名匹配的组名,可以只用一个条目就改变二者。 如果你的Linux系统采用和用户登录名匹配的组名,可以只用一个条目就改变二者只有root用户能够改变文件的属主。任何属主都可以改变文件的属组,但前提是属主必须是原属组和目标属组的成员。

    chgrp 更改文件、目录的默认属组

    chgrp <group> <newfile> #更改newfile的默认属组为group eg: chgrp sharing newfile #更改newfile的默认属组为sharing
    共享文件
    ``` mkdir testdir #创建一个共享目录,使目录里的新文件都能沿用目录的属组,只需将该目录的SGID位置位。 chgrp shared testdir #更改目录的默认属组为shared chmod g+s testdir #设置目录属组组ID(SGID) umask 002 #所有组成员都需把他们的umask值设置成文件对属组成员可写 ``` 要创建一个共享目录,使目录里的新文件都能沿用目录的属组,只需将该目录的SGID位置位设置SGID:对文件来说,程序会以文件属组的权限运行;对目录来说,目录中创建的新文件会以目录的默认属组作为默认属组。新文件会沿用目录的属组,而不是用户的默认属组。现在shared组的所有用户都能访问这个文件了

    持续更新。。。

    Processed: 0.011, SQL: 8