《Linux从小白到高手》理论篇:文件权限控制及文件操作相关的命令

news2024/10/6 3:10:42

本篇介绍Linux文件权限控制及文件操作相关的命令,看完本文,有关Linux文件权限控制及文件操作相关的常用命令你就掌握了99%了。

文件权限

在介绍文件权限之前先来复习下Linux的文件类型,始终记住那句话:Linux系统下,一切皆文件。

文件类型

Linux 文件类型常见的有:普通文件、目录、字符设备文件、块设备文件、符号链接文件等;

  1. 普通文件:
    用 ls -lh 来查看某个文件的属性,可以看到有类似 -rw-r–r-- ,第一个符号是 - ,这样的文件在 Linux 中就是普通文件。这些文件一般是用一些相关的应用程序创建,比如图像工具、文档工具、归档工具… … 或 cp 工具等。这类文件的删除方式是用 rm 命令;
  2. 目录文件:
    drwxr-xr-x ,这样的文件就是目录,目录在 Linux 是一个比较特殊的文件。注意它的第一个字符是 d。创建目录的命令可以用 mkdir 命令,或 cp 命令,cp 可以把一个目录复制为另一个目录。删除用 rm 或 rmdir 命令。
  3. 字符设备或块设备文件
    crw-rw-rw- ,注意前面第一个字符是 c ,这表示字符设备文件,比如猫等串口设备.
    brw-r----- ,注意前面的第一个字符是 b,这表示块设备,比如硬盘,光驱等设备;
    这些种类的文件,是用 mknode 来创建,用 rm 来删除。目前在最新的 Linux 发行版本中,我们一般不用自己来创建设备文件。因为这些文件是和内核相关联的。
  4. 套接口文件
    srwxrwxrwx,注意这个文件的属性的第一个字符是 s。
  5. 符号链接文件
    lrwxrwxrwx,注意第一个字符是 l,这类文件是链接文件。是通过ln -s 源文件名 新文件名。和 Windows 操作系统中的快捷方式有点相似。

文件权限

Linux的文件权限分为一般文件权限(RWX)和特殊文件权限(SUID,SGID,Stick bit)

一般文件权限

Linux 系统是一个典型的多用户系统,不同的用户处于不同的地位。为了保护系统的安全性,Linux系统对不同用户访问同一文件的权限做了不同的规定。
对于一个 Linux 系统中的文件来说,它的权限可以分为三种:读的权限、写的权限和执行的权限,分别用 r、w 和 x 表示。不同的用户具有不同的读、写和执行的权限。
对于一个文件来说,它都有一个特定的所有者,也就是对文件具有所有权的用户。同时,由于在Linux 系统中,用户是按组分类的,一个用户属于一个或多个组。文件所有者以外的用户又可以分为文件所有者的同组用户和其它用户。因此,Linux 系统按文件所有者、文件所有者同组用户和其它用户三类规定不同的文件访问权限。

 [root@localhost ~]# ls -lh kernel* 
 -rw-r--r-- 1 root root 14M 03-16 07:53 kernel-6.15-1.2025_FC5.i686.rpm 
 lrwxrwxrwx 1 root root 33 04-19 11:27 kernel.rpm -> kernel-6.15-1.2025_FC5

-rw-r–r–
这些符号用来描述文件的访问权限类别,也就是常说的文件权限。这些访问权限指导 Linux 根据文件的用户和组所有权来处理所有访问文件的用户请求。总共有 10 种权限属性,因此一个权限列表总是10 个字符的长度。它的格式遵循下列规则:
◆ 第 1 个字符表示一种特殊的文件类型。其中字符可为 d(表示该文件是一个目录)、b(表示该文件是一个系统设备,使用块输入/输出与外界交互,通常为一个磁盘)、c(表示该文件是一个系统设备,使用连续的字符输入/输出与外界交互,如串口和声音设备),“.”表示该文件是一个普通文件,没有特殊属性。
◆ 2~4 个字符用来确定文件的用户(user)权限,5~7 个字符用来确定文件的组(group)权限,8~10个字符用来确定文件的其它用户(other user,既不是文件所有者,也不是组成员的用户)的权限。其中,2、5、8 个字符是用来控制文件的读权限的,该位字符为 r 表示允许用户、组成员或其它人可从该文件中读取数据。短线“-”则表示不允许该成员读取数据。与此类似,3、6、9 位的字符控制文件的写权限,该位若为 w 表示允许写,若为“-”表示不允许写。4、7、10 位的字符用来控制文件的制造权限,该位若为 x 表示允许执行,若为“-”表示不允许执行。
如: drwxrwxr-- 2 root root 4096 9 月 29 17:00 test
因为test 的第 1 个位置的字符是 d,所以由此知道 test 是一个目录。第 2 至 4 位置上的属性是 rwx,表示用户 root 拥有权限列表显示 test 中所有的文件、创建新文件或者删除 test 中现有的文件,或者将test 作为当前工作目录。第 5 至 7 个位置上的权限是 rwx,表示 root 组的成员拥有和 root 一样的权限。第 8 至 10 位上的权限仅是 r–,表示不是 root 的用户及不属于 root 组的成员只有对 test 目录列表的权限。这些用户不能创建或者删除test 中的文件、执行 test 中的可执行文件,或者将 test 作为他们的当前工作目录.
再比如:-rwxr-xr-- 1 user admin 20480 9 月 29 17:20 Readme.txt
在该项中,第 1 个位置是短线“-”,表示该文件是一个普通文件,没有特殊属性。该文件对任何人都可读,只对 user 可写,user 和 admin 的组成员可以执行该文件。 另外需要注意的是,当用户访问一个文件时,权限检查是从左到右的。假设上述的 readme.txt 文件具有以下权限:-r–rw-r–,那么即使 user 是属于 admin 组的一个成员,也不能对该文件进行写操作,因为已经被左边的写权限设置拒绝了。

特殊文件权限(SUID,SGID,Stick bit)

特殊文件权限 SUID、SGID、Stick bit 是 Linux 系统中用于增强文件和目录权限管理的特殊设置。
SUID(Set User ID):
作用:当一个可执行文件被设置了 SUID 权限后,无论谁执行这个文件,在执行过程中该程序将以文件所有者的身份运行,从而获得文件所有者的权限。这意味着普通用户可以通过执行具有 SUID 权限的程序,临时获得程序所有者的特权。例如,passwd命令就是一个具有 SUID 权限的程序,普通用户执行passwd时可以修改/etc/passwd文件(该文件通常只有 root 用户才有写权限),因为执行passwd程序时,用户临时获得了 root 用户的权限。
表示方法:在ls -l命令显示的文件权限中,如果一个文件的所有者权限的可执行位(x)变为了s,就表示该文件设置了 SUID 权限。例如:-rwsr-xr-x,其中的s就代表了 SUID 权限已设置。
设置与取消:
使用符号法设置,命令为chmod u+s filename;取消 SUID 权限的命令为chmod u-s filename。
使用八进制法设置,将文件权限的八进制数字的第一位设为 4(若原本权限的八进制表示为xxx,设置 SUID 后变为4xxx)。例如,原本文件权限为755,设置 SUID 后变为4755。
SGID(Set Group ID):
对可执行文件的作用:当可执行文件设置了 SGID 权限后,执行该文件的用户将临时获得文件所属组的权限。这使得用户在执行程序时,可以访问该组所能使用的系统资源。例如,某个程序需要访问一个只有特定组才能访问的资源,通过设置该程序的 SGID 权限,属于该组的用户执行此程序时就可以顺利访问该资源。
对目录的作用:如果一个目录设置了 SGID 权限,那么在该目录下创建的新文件的所属组将自动变为该目录的所属组,而非创建文件的用户的默认所属组。这对于需要多个用户在一个共享目录下协作,且希望所有文件都属于同一个组的场景非常有用。
表示方法:在ls -l命令显示的文件权限中,如果一个文件的同组用户权限的可执行位(x)变为了s,就表示该文件设置了 SGID 权限(如果同组用户原本没有可执行权限,这里会显示为大写S)。对于目录来说,如果设置了 SGID 权限,在权限表示的最后一位会出现s(如果目录原本没有其他用户的执行权限,这里会显示为大写S)。例如:-rwxr-sr-x表示文件设置了 SGID 权限;drwxrwsr-x表示目录设置了 SGID 权限。
设置与取消:
符号法设置命令为chmod g+s filename(针对文件)或chmod g+s dirname(针对目录);取消 SGID 权限的命令为chmod g-s filename或chmod g-s dirname。
八进制法设置,将文件权限的八进制数字的第一位设为 2(若原本权限的八进制表示为xxx,设置 SGID 后变为2xxx);对于目录,设置 SGID 后权限的八进制表示通常为27xx(xx为原本目录的其他权限位数字)。
Stick bit(粘滞位):
作用:Stick bit 主要应用于目录。当一个目录设置了粘滞位后,该目录下的文件只能由文件的所有者、目录的所有者以及超级用户(root)删除或移动。即使其他用户对该目录具有写权限,也不能删除或移动其他用户创建的文件。这在一些公共目录,如/tmp目录中非常重要,可以防止用户误删或恶意删除其他用户的文件。
表示方法:在ls -l命令显示的目录权限中,如果其他用户权限的可执行位(x)变为了t,就表示该目录设置了粘滞位。例如:drwxrwxrwt。
设置与取消:
符号法设置命令为chmod o+t dirname;取消粘滞位的命令为chmod o-t dirname。
八进制法设置,将目录权限的八进制数字的第一位设为 1(设置粘滞位后目录权限的八进制表示通常为17xx,xx为原本目录的其他权限位数字)。

权限设置常用命令

chmod

chmod命令用于改变文件或目录的访问权限。以常用用法:
1、基本用法
符号表示法:
使用字母和符号来表示权限的变化。权限分为用户(u)、组(g)、其他用户(o)和所有用户(a),权限类型包括读(r)、写(w)、执行(x)。
例如,chmod u+rwx,g+rw,o+r filename将文件 “filename” 的权限设置为用户具有读写执行权限,组具有读写权限,其他用户具有读权限。
还可以使用 “+” 表示添加权限,“-” 表示删除权限,“=” 表示设置权限。例如,chmod u-x filename将删除用户对文件 “filename” 的执行权限。
八进制表示法:
将权限用三位八进制数字表示,分别对应用户、组和其他用户的权限。读权限用数字 4 表示,写权限用数字 2 表示,执行权限用数字 1 表示。
例如,chmod 754 filename将文件 “filename” 的权限设置为用户具有读写执行权限(7 = 4 + 2 + 1),组具有读和执行权限(5 = 4 + 1),其他用户具有读权限(4)。
2、常用选项
-R:递归地改变目录及其子目录和文件的权限。
例如,chmod -R 777 directory将目录 “directory” 及其所有子目录和文件的权限设置为所有用户都具有读写执行权限。
3、注意事项
–在设置文件权限时,要确保权限的设置是合理的,以避免安全风险。例如,不要将敏感文件的权限设置得过于宽松。
–如果不确定权限的具体设置,可以使用ls -l命令查看文件或目录的当前权限,以便进行正确的权限调整。
–对于可执行文件,执行权限是关键。如果没有执行权限,即使文件具有读和写权限,也无法直接运行该文件。

umask

umask命令用于设置创建文件和目录时的默认权限掩码。常用用法:
1、基本用法
查看当前的umask值:

umask

输出通常是一个三位八进制数字,例如 “0022”。
设置umask值:

umask value

其中 “value” 是一个三位八进制数字。例如,umask 0027将设置新的umask值为 “0027”。
2、权限计算
umask值决定了创建文件和目录时的默认权限。计算方法如下:
对于文件:
默认最大权限是666(rw-rw-rw-)。
用最大权限减去umask值得到实际创建文件的权限。例如,如果umask值是 “0022”,则创建的文件权限为666 - 0022 = 644(rw-r–r–)。
对于目录:
默认最大权限是777(rwxrwxrwx)。
用最大权限减去umask值得到实际创建目录的权限。例如,如果umask值是 “0022”,则创建的目录权限为777 - 0022 = 755(rwxr-xr-x)。
3、注意事项
–umask值通常在系统启动时由登录 shell 或系统配置文件设置。不同的发行版和系统配置可能会有不同的默认umask值。
–谨慎设置umask值,确保创建的文件和目录具有适当的权限,以满足安全性和功能性的要求。如果设置的umask值过于严格,可能会导致创建的文件和目录权限不足,影响用户的正常使用;如果设置的umask值过于宽松,可能会带来安全风险。
–在设置umask值时,可以根据具体的用户需求和系统安全策略进行调整。例如,对于多用户系统,可能需要设置较为严格的umask值,以防止用户之间的文件权限冲突和安全问题。

chown

chown命令用于改变文件或目录的所有者和所属组。常用用法:
1、基本用法
改变文件的所有者:

 chown new_owner filename

例如,chown user2 file.txt将文件 “file.txt” 的所有者改为 “user2”。
同时改变文件的所有者和所属组:

 chown new_owner:new_group filename

例如,chown user2:group2 file.txt将文件 “file.txt” 的所有者改为 “user2”,所属组改为 “group2”。
2、常用选项
-R:递归地改变目录及其子目录和文件的所有者和所属组。

 chown -R new_owner:new_group directory

例如,chown -R user3:group3 /home/directory将目录 “/home/directory” 及其所有子目录和文件的所有者改为 “user3”,所属组改为 “group3”。
3、注意事项
–只有超级用户(root)或文件的当前所有者才能改变文件的所有者。
–在改变文件的所有者和所属组时,要确保新的所有者和所属组具有适当的权限和访问控制,以避免安全风险。
–如果不确定文件的当前所有者和所属组,可以使用ls -l命令查看文件的详细信息,包括所有者、所属组和权限等。

chgrp

chgrp命令用于改变文件或目录的所属组。常用用法:
1、基本用法
改变文件的所属组:

 chgrp new_group filename

例如,chgrp group2 file.txt将文件 “file.txt” 的所属组改为 “group2”。
2、常用选项
-R:递归地改变目录及其子目录和文件的所属组。

 chgrp -R new_group directory

例如,chgrp -R group3 /home/directory将目录 “/home/directory” 及其所有子目录和文件的所属组改为 “group3”。
3、注意事项
–只有超级用户(root)或文件的当前所有者可以改变文件的所属组(如果当前用户属于目标组且具有适当权限也可能可以进行此操作)。
–在改变文件的所属组时,要确保新的所属组具有适当的权限和访问控制,以避免安全风险。
–如果不确定文件的当前所属组,可以使用ls -l命令查看文件的详细信息,其中包括所属组信息。

文件操作相关的命令

{

ls -rtl                                    # 按时间倒叙列出所有目录和文件 ll -rt
touch file                                 # 创建空白文件
rm -rf dirname                             # 不提示删除非空目录(-r:递归删除 -f强制)
dos2unix                                   # windows文本转linux文本
unix2dos                                   # linux文本转windows文本
enca filename                              # 查看编码  安装 yum install -y enca
md5sum                                     # 查看md5值
ln sourcefile newfile                      # 硬链接
ln -s sourcefile newfile                   # 符号连接
readlink -f /data                          # 查看连接真实目录
cat file | nl |less                        # 查看上下翻页且显示行号  q退出
head                                       # 查看文件开头内容
head -c 10m                                # 截取文件中10M内容
split -C 10M                               # 将文件切割大小为10M -C按行
tail -f file                               # 查看结尾 监视日志文件
tail -F file                               # 监视日志并重试, 针对文件被mv的情况可以持续读取
file                                       # 检查文件类型
umask                                      # 更改默认权限
uniq                                       # 删除重复的行
uniq -c                                    # 重复的行出现次数
uniq -u                                    # 只显示不重复行
paste a b                                  # 将两个文件合并用tab键分隔开
paste -d'+' a b                            # 将两个文件合并指定'+'符号隔开
paste -s a                                 # 将多行数据合并到一行用tab键隔开
chattr +i /etc/passwd                      # 不得任意改变文件或目录 -i去掉锁 -R递归
more                                       # 向下分面器
locate aaa                                 # 搜索
wc -l file                                 # 查看行数
cp filename{,.bak}                         # 快速备份一个文件
\cp a b                                    # 拷贝不提示 既不使用别名 cp -i
rev                                        # 将行中的字符逆序排列
comm -12 2 3                               # 行和行比较匹配
echo "10.45aa" |cksum                      # 字符串转数字编码,可做校验,也可用于文件校验
iconv -f gbk -t utf8 source.txt > new.txt  # 转换编码
xxd /boot/grub/stage1                      # 16进制查看
hexdump -C /boot/grub/stage1               # 16进制查看
rename source new file                     # 重命名 可正则
watch -d -n 1 'df; ls -FlAt /path'         # 实时某个目录下查看最新改动过的文件
cp -v  /dev/dvd  /rhel4.6.iso9660          # 制作镜像
diff suzu.c suzu2.c  > sz.patch            # 制作补丁
patch suzu.c < sz.patch                    # 安装补丁

sort排序{

    -t                                     # 指定排序时所用的栏位分隔字符
    -n                                     # 依照数值的大小排序
    -r                                     # 以相反的顺序来排序
    -f                                     # 排序时,将小写字母视为大写字母
    -d                                     # 排序时,处理英文字母、数字及空格字符外,忽略其他的字符
    -c                                     # 检查文件是否已经按照顺序排序
    -b                                     # 忽略每行前面开始处的空格字符
    -M                                     # 前面3个字母依照月份的缩写进行排序
    -k                                     # 指定域
    -m                                     # 将几个排序好的文件进行合并
    -T                                     # 指定临时文件目录,默认在/tmp
    -o                                     # 将排序后的结果存入指定的文        

    sort -n                                # 按数字排序
    sort -nr                               # 按数字倒叙
    sort -u                                # 过滤重复行
    sort -m a.txt c.txt                    # 将两个文件内容整合到一起
    sort -n -t' ' -k 2 -k 3 a.txt          # 第二域相同,将从第三域进行升降处理
    sort -n -t':' -k 3r a.txt              # 以:为分割域的第三域进行倒叙排列
    sort -k 1.3 a.txt                      # 从第三个字母起进行排序
    sort -t" " -k 2n -u  a.txt             # 以第二域进行排序,如果遇到重复的,就删除

}

find查找{

    # linux文件无创建时间
    # Access 使用时间
    # Modify 内容修改时间
    # Change 状态改变时间(权限、属主)
    # 时间默认以24小时为单位,当前时间到向前24小时为0天,向前48-72小时为2天
    # -and 且 匹配两个条件 参数可以确定时间范围 -mtime +2 -and -mtime -4
    # -or 或 匹配任意一个条件

    find /etc -name "*http*"                                # 按文件名查找
    find . -type f                                          # 查找某一类型文件
    find / -perm                                            # 按照文件权限查找
    find / -user                                            # 按照文件属主查找
    find / -group                                           # 按照文件所属的组来查找文件
    find / -atime -n                                        # 文件使用时间在N天以内
    find / -atime +n                                        # 文件使用时间在N天以前
    find / -mtime +n                                        # 文件内容改变时间在N天以前
    find / -ctime +n                                        # 文件状态改变时间在N天前
    find / -mmin +30                                        # 按分钟查找内容改变
    find / -size +1000000c -print                           # 查找文件长度大于1M字节的文件
    find /etc -name "*passwd*" -exec grep "xuesong" {} \;   # 按名字查找文件传递给-exec后命令
    find . -name 't*' -exec basename {} \;                  # 查找文件名,不取路径
    find . -type f -name "err*" -exec  rename err ERR {} \; # 批量改名(查找err 替换为 ERR {}文件
    find path -name *name1* -or -name *name2*               # 查找任意一个关键字

}

vim编辑器{

    # 常用配置
    set smartindent
    set tabstop=4
    set shiftwidth=4
    set expandtab
    set softtabstop=4
    set noautoindent
    set nosmartindent
    set paste
    set clipboard=unnamed

    gconf-editor           # 配置编辑器
    /etc/vimrc             # 配置文件路径
    vim +24 file           # 打开文件定位到指定行
    vim file1 file2        # 打开多个文件
    vim  -r file           # 恢复上次异常关闭的文件 .file.swp 
    vim -O2 file1 file2    # 垂直分屏
    vim -on file1 file2    # 水平分屏
    Ctrl+ U                # 向前翻页
    Ctrl+ D                # 向后翻页
    Ctrl+ww                # 在窗口间切换
    Ctrl+w +or-or=         # 增减高度
    :sp filename           # 上下分割打开新文件
    :vs filename           # 左右分割打开新文件
    :set nu                # 打开行号
    :set nonu              # 取消行号
    :nohl                  # 取消高亮
    :set paste             # 取消缩进
    :set autoindent        # 设置自动缩进
    :set ff                # 查看文本格式
    :set binary            # 改为unix格式
    :%s/str/newstr/g       # 全部替换
    :200                   # 跳转到200  1 文件头
    G                      # 跳到行尾
    dd                     # 删除当前行 并复制 可直接p粘贴
    11111dd                # 删除11111行,可用来清空文件
    r                      # 替换单个字符
    R                      # 替换多个字符
    u                      # 撤销上次操作
    *                      # 全文匹配当前光标所在字符串
    $                      # 行尾
    0                      # 行首
    X                      # 文档加密
    v =                    # 自动格式化代码
    Ctrl+v                 # 可视模式
    Ctrl+v I ESC           # 多行操作
    Ctrl+v s ESC           # 批量取消注释

}

归档解压缩{

    tar zxvpf gz.tar.gz  dir                         # 解包指定tar.gz中的内容  不指定目录则全解压
    tar zcvpf /$path/gz.tar.gz *                     # 打包gz 注意*最好用相对路径
    tar zcf /$path/gz.tar.gz *                       # 打包正确不提示
    tar ztvpf gz.tar.gz                              # 查看gz
    tar xvf 1.tar -C dir                             # 解包tar 放到指定目录
    tar -cvf 1.tar *                                 # 打包tar
    tar tvf 1.tar                                    # 查看tar
    tar -rvf 1.tar filename                          # 给tar追加文件
    tar --exclude=/home/dmtsai --exclude=*.tar -zcvf myfile.tar.gz /home/* /etc      # 打包/home, /etc ,但排除 /home/dmtsai
    tar -N "2005/06/01" -zcvf home.tar.gz /home      # 在 /home 当中,比 2005/06/01 新的文件才备份
    tar -zcvfh home.tar.gz /home                     # 打包目录中包括连接目录
    tar zcf - ./ | ssh root@IP "tar zxf - -C /xxxx"  # 一边压缩一边解压
    zgrep str 1.gz                                   # 查看压缩包中文件字符行
    bzip2  -dv 1.tar.bz2                             # 解压bzip2
    bzip2 -v 1.tar                                   # bzip2压缩
    bzcat                                            # 查看bzip2
    gzip file                                        # 直接压缩文件 # 压缩后源文件消失
    gunzip file.gz                                   # 直接解压文件 # 解压后源文件消失
    gzip -r dir/                                     # 递归压缩目录
    gzip  -r -d dir/                                 # 递归解压目录
    gzip -dv 1.tar.gz                                # 解压gzip到tar
    gzip -v 1.tar                                    # 压缩tar到gz
    unzip zip.zip                                    # 解压zip
    zip zip.zip *                                    # 压缩zip
    rar a rar.rar *.jpg                              # 压缩文件为rar包
    unrar x rar.rar                                  # 解压rar包

}

文件ACL权限控制{

    getfacl 1.test                      # 查看文件ACL权限
    setfacl -R -m u:xuesong:rw- 1.test  # 对文件增加用户的读写权限 -R 递归

}

svn{

    --force # 强制覆盖
    /usr/bin/svn --username user --password passwd co  $Code  ${SvnPath}src/                 # 检出整个项目
    /usr/bin/svn --username user --password passwd up  $Code  ${SvnPath}src/                 # 更新项目
    /usr/bin/svn --username user --password passwd export  $Code$File ${SvnPath}src/$File    # 导出个别文件
    /usr/bin/svn --username user --password passwd export -r 版本号 svn路径 本地路径 --force   # 导出指定版本

}

git{

    git clone git@10.10.10.10:gittest.git  ./gittest/  # 克隆项目到指定目录
    git clone  -b develop --depth=1 http://git.a.com/d.git   # 克隆指定分支 克隆一层
    git status                                         # Show the working tree(工作树) status
    git log -n 1 --stat                                # 查看最后一次日志文件
    git branch -a                                      # 列出远程跟踪分支(remote-tracking branches)和本地分支
    git checkout developing                            # 切换到developing分支
    git checkout -b release                            # 切换分支没有从当前分支创建
    git checkout -b release origin/master              # 从远程分支创建本地镜像分支
    git push origin --delete release                   # 从远端删除分区,服务端有可能设置保护不允许删除
    git push origin release                            # 把本地分支提交到远程
    git pull                                           # 更新项目 需要cd到项目目录中
    git fetch -f -p                                    # 抓取远端代码但不合并到当前
    git reset --hard origin/master                     # 和远端同步分支
    git add .                                          # 更新所有文件
    git commit -m "gittest up"                         # 提交操作并添加备注
    git push                                           # 正式提交到远程git服务器
    git push [-u origin master]                        # 正式提交到远程git服务器(master分支)
    git tag [-a] dev-v-0.11.54 [-m 'fix #67']          # 创建tag,名为dev-v-0.11.54,备注fix #67
    git tag -l dev-v-0.11.54                           # 查看tag(dev-v-0.11.5)
    git push origin --tags                             # 提交tag
    git reset --hard                                   # 本地恢复整个项目
    git rm -r -n --cached  ./img                       # -n执行命令时,不会删除任何文件,而是展示此命令要删除的文件列表预览
    git rm -r --cached  ./img                          # 执行删除命令 需要commit和push让远程生效
    git init --bare smc-content-check.git              # 初始化新git项目  需要手动创建此目录并给git用户权限 chown -R git:git smc-content-check.git
    git config --global credential.helper store        # 记住密码
    git config [--global] user.name "your name"        # 设置你的用户名, 希望在一个特定的项目中使用不同的用户或e-mail地址, 不要--global选项
    git config [--global] user.email "your email"      # 设置你的e-mail地址, 每次Git提交都会使用该信息
    git config [--global] user.name                    # 查看用户名
    git config [--global] user.email                   # 查看用户e-mail
    git config --global --edit                         # 编辑~/.gitconfig(User-specific)配置文件, 值优先级高于/etc/gitconfig(System-wide)
    git config --edit                                  # 编辑.git/config(Repository specific)配置文件, 值优先级高于~/.gitconfig
    git cherry-pick  <commit id>                       # 用于把另一个本地分支的commit修改应用到当前分支 需要push到远程
    git log --pretty=format:'%h: %s' 9378b62..HEAD     # 查看指定范围更新操作 commit id
    git config --global core.ignorecase false          # 设置全局大小写敏感
    git ls-remote --heads origin refs/heads/test       # 查看

    从远端拉一份新的{
        # You have not concluded your merge (MERGE_HEAD exists)  git拉取失败
        git fetch --hard origin/master
        git reset --hard origin/master
    }

    删除远程分支并新建{
        git checkout master
        git branch -r -d origin/test       # 删除远程分支  但有时候并没有删除 可以尝试使用下面的语句
        git push origin :test              # 推送一个空分支到远程分支,相当于删除远程分支
        git branch -d test                 # 删除本地test分支, -D 强制
        git branch -a |grep test
        git checkout -b test
        git push origin test

        git reset --hard origin/test 
    }

    迁移git项目{
        git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
        git fetch --all
        git pull --all
        git remote set-url origin git@git.github.cn:server/gw.git
        git push --all
    }
}

恢复rm删除的文件{

    # debugfs针对 ext2   # ext3grep针对 ext3   # extundelete针对 ext4
    df -T   # 首先查看磁盘分区格式
    umount /data/     # 卸载挂载,数据丢失请首先卸载挂载,或重新挂载只读
    ext3grep /dev/sdb1 --ls --inode 2         # 记录信息继续查找目录下文件inode信息
    ext3grep /dev/sdb1 --ls --inode 131081    # 此处是inode
    ext3grep /dev/sdb1 --restore-inode 49153  # 记录下inode信息开始恢复目录

}

openssl{

    openssl rand 15 -base64            # 口令生成
    openssl sha1 filename              # 哈希算法校验文件
    openssl md5 filename               # MD5校验文件
    openssl base64   filename.txt      # base64编码/解码文件(发送邮件附件之类功能会可以使用)
    openssl base64 -d   filename.bin   # base64编码/解码二进制文件
    openssl enc -aes-128-cbc   filename.aes-128-cbc                  # 加密文档
    # 推荐使用的加密算法是bf(Blowfish)和-aes-128-cbc(运行在CBC模式的128位密匙AES加密算法),加密强度有保障
    openssl enc -d -aes-128-cbc -in filename.aes-128-cbc > filename  # 解密文档

}

}

本篇完结。
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2191018.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

I/O多路转接

目录 一、select 1.1、select概念 1.2、select 函数原型 1.3、理解 select 执行过程 1.4、select就绪条件 1.4.1、读就绪 1.4.2、写就绪 1.4.3、异常就绪&#xff08;了解&#xff09; 1.5、select 基本工作流程 1.6、select服务器 1.6.1、Sock.hpp 1.6.2、selectS…

python实战四:输入一个年份,判断是否是闰年

问题&#xff1a; 从键盘获取一个四位的整数年份&#xff0c;判断其是否是闰年。闰年的判断条件为︰能被4整除但不能被100整除&#xff0c;或者能被400整除。 需求方法&#xff1a; 使用 input() 函数从键盘获取输入。输入的年份是一个字符串。检查输入是否为四位数&#xf…

Elasticsearch学习笔记(四) Elasticsearch集群安全配置一

继续我们的实验。先谈一下我对Elasticsearch粗浅的一些认识&#xff0c;首先Elasticsearch是一个非常宏大的技术栈&#xff0c;发展到今天围绕着Elasticsearch已经产生了更多的组件、套件。因此在看官方文档或者别人的一些教程的时候经常会遇到ELK,elastic stack等。elastic st…

如何在电脑上浏览手机界面

联想浏览器中&#xff0c;点击右键-》检查&#xff0c;进入开发者工具&#xff1a; 点击如上&#xff0c;红色框框选中的手机浏览模式即可。

【微服务】服务注册与发现、分布式配置管理 - Nacos

概述 Nacos是阿里巴巴旗下的一个开源产品&#xff0c;目前市场使用率还是比较高的。在最初开源时&#xff0c;Nacos选择内部三个产品合并并统一开源&#xff0c;这三个产品分别是&#xff1a;非持久化注册中心&#xff08;Configserver&#xff09;、持久化注册中心&#xff0…

InnoDB 事务模型

文章目录 InnoDB 事务模型事务ACID特性事务隔离级别 事务操作事务并发问题事务数据读写类型Consistent Nonlocking Reads 快照读Locking Reads 加锁读 MVCC 并发控制实现原理InnoDB 隐藏列Read ViewUndo log实现过程 MVCC与隔离级别MVCC和辅助索引 幻读可重复读MVCC会出现幻读的…

腾讯自研Git客户端,助力每个人都可以轻松使用Git

工具介绍 UGit是一款腾讯自研的Git客户端&#xff0c;为了让每个人都可以轻松使用Git&#xff0c;从而提高开发效率和团队协作的流畅性。支持工蜂MR/CR&#xff0c;工蜂议题管理&#xff0c;另外对于Git的原生特性有着深度支持。 支持的系统 支持macOS 10.11、Apple Silicon和…

【数据结构】什么是哈希表(散列表)?

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 &#x1f4cc;哈希表的概念 &#x1f4cc;哈希函数的构造方法 &#x1f38f;直接定址法 &#x1f38f;除留余数法 &#x1f38f;平方取中法 &#x1f38f;折叠法 &#x…

自动驾驶的技术实现及原理

自动驾驶技术是现代科技领域中一项引人注目的创新&#xff0c;它具有变革运输行业并提升道路安全的潜力。随着人工智能、传感器技术以及数据处理能力的不断提升&#xff0c;自动驾驶车辆已经从实验室研究逐渐走向现实应用。 自动驾驶的技术实现及原理 1. 自动驾驶技术的核心…

【深度学习】— 多层感知机介绍、 隐藏层、从线性到非线性、线性模型的局限性

【深度学习】— 多层感知机介绍 4.1 多层感知机4.1.1 隐藏层线性模型的局限性引入隐藏层 4.2 从线性到非线性线性组合的局限性引入非线性堆叠更多隐藏层 4.1 多层感知机 在第 3 节中&#xff0c;我们介绍了 softmax 回归&#xff0c;并实现了其从零开始的实现和基于高级 API 的…

UART通信协议

什么是UART UART ( Universal Asynchronous Receiver/Transmitter&#xff0c; 通用异步收发器) 是一种常用的串行通信协议&#xff0c;用于在 计算机和外部设备之间传输数据。它是一种异步通信协议&#xff0c;也就是说数据的传输不需要事先建立好同步时钟信号。 UART&#xf…

Unity MVC框架演示 1-1 理论分析

本文仅作学习笔记分享与交流&#xff0c;不做任何商业用途&#xff0c;该课程资源来源于唐老狮 1.一般的图解MVC 什么是MVC我就不说了&#xff0c;老生常谈&#xff0c;网上有大量的介绍&#xff0c;想看看这三层都起到什么职责&#xff1f;那就直接上图吧 2.我举一个栗子 我有…

深入理解 JavaScript 事件循环机制:单线程中的异步处理核心

深入理解 JavaScript 事件循环机制&#xff1a;单线程中的异步处理核心 JavaScript 是一门单线程的编程语言&#xff0c;也就是说它在同一时间只能执行一个任务。然而&#xff0c;现代 Web 应用经常需要处理大量的异步操作&#xff0c;如用户输入、网络请求、定时器等。为了确…

Vue的基本用法及模板语法

Vue.js使用了基于 HTML 的模板语法&#xff0c;允许开发者声明式地将 DOM 绑定至底层 Vue实例的数据。所有 Vue.js的模板都是合法的 HTML&#xff0c;所以能被遵循规范的浏览器和 HTML 解析器解析。 在底层的实现上&#xff0c;Vue将模板编译成虚拟 DOM 渲染函数。结合响应系…

实现Xshell与虚拟机中Linux服务器的连接(附常见错误解决)

前言 Xshell是一个强大的安全终端模拟软件&#xff0c;它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。 本文将介绍Xshell与虚拟机中Linux服务器连接…

前缀线性基——关于目前的理解以及一些样题

怎么说呢&#xff1f;在前几天我总结了了有关线性基的一篇博客&#xff0c;线性基用来去求整个区间的异或最值问题 前缀线性基——用于统计一个区间内的异或最值问题 那么我们如何去统计呢&#xff1f;那么就要去存储一个区间的异或空间线性基&#xff0c;因此我们的思路就是用…

【python】追加写入excel

输出文件运行前&#xff08;有两张表&#xff0c;“表1”和“Sheet1”&#xff09;&#xff1a; 目录 一&#xff1a;写入单表&#xff08;删除所有旧工作表&#xff0c;写入新表&#xff09;二&#xff1a;写入多表&#xff08;删除所有旧工作表&#xff0c;写入新表&#x…

平衡二叉搜索树之 AVL 树的模拟实现【C++】

文章目录 AVL树的简单介绍全部的实现代码放在了文章末尾准备工作包含头文件类的成员变量 构造函数和拷贝构造swap和赋值运算符重载析构函数findinsert[重要]当parent的平衡因子为1/-1时&#xff0c;如何向上更新祖先节点的平衡因子呢&#xff1f;怎么旋转&#xff1f;左单旋右单…

Windows Ubuntu下搭建深度学习Pytorch训练框架与转换环境TensorRT

Windows Ubuntu下搭建深度学习Pytorch训练框架与转换环境TensorRT JetBrains2024&#xff08;IntelliJ IDEA、PhpStorm、RubyMine、Rider……&#xff09;安装包Anaconda Miniconda安装.condarc 文件配置镜像源查看conda的配置和源(channel)自定义conda虚拟环境路径conda常用命…

Chromium 中JavaScript Screen API接口c++代码实现

Screen - Web API | MDN (mozilla.org) Screen Screen 接口表示一个屏幕窗口&#xff0c;往往指的是当前正在被渲染的 window 对象&#xff0c;可以使用 window.screen 获取它。 请注意&#xff1a;由浏览器决定提供屏幕对象&#xff0c;此对象一般通过当前浏览器窗口活动状…