《Linux从小白到高手》理论篇:文件权限控制及文件操作相关的命令
- List item
本篇介绍Linux文件权限控制及文件操作相关的命令,看完本文,有关Linux文件权限控制及文件操作相关的常用命令你就掌握了99%了。
文件权限
在介绍文件权限之前先来复习下Linux的文件类型,始终记住那句话:Linux系统下,一切皆文件。
文件类型
Linux 文件类型常见的有:普通文件、目录、字符设备文件、块设备文件、符号链接文件等;
- 普通文件:
用 ls -lh 来查看某个文件的属性,可以看到有类似 -rw-r–r-- ,第一个符号是 - ,这样的文件在 Linux 中就是普通文件。这些文件一般是用一些相关的应用程序创建,比如图像工具、文档工具、归档工具… … 或 cp 工具等。这类文件的删除方式是用 rm 命令; - 目录文件:
drwxr-xr-x ,这样的文件就是目录,目录在 Linux 是一个比较特殊的文件。注意它的第一个字符是 d。创建目录的命令可以用 mkdir 命令,或 cp 命令,cp 可以把一个目录复制为另一个目录。删除用 rm 或 rmdir 命令。 - 字符设备或块设备文件
crw-rw-rw- ,注意前面第一个字符是 c ,这表示字符设备文件,比如猫等串口设备.
brw-r----- ,注意前面的第一个字符是 b,这表示块设备,比如硬盘,光驱等设备;
这些种类的文件,是用 mknode 来创建,用 rm 来删除。目前在最新的 Linux 发行版本中,我们一般不用自己来创建设备文件。因为这些文件是和内核相关联的。 - 套接口文件
srwxrwxrwx,注意这个文件的属性的第一个字符是 s。 - 符号链接文件
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 smartindentset tabstop=4set shiftwidth=4set expandtabset softtabstop=4set noautoindentset nosmartindentset pasteset clipboard=unnamedgconf-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 # 查看gztar xvf 1.tar -C dir # 解包tar 放到指定目录tar -cvf 1.tar * # 打包tartar tvf 1.tar # 查看tartar -rvf 1.tar filename # 给tar追加文件tar --exclude=/home/dmtsai --exclude=*.tar -zcvf myfile.tar.gz /home/* /etc # 打包/home, /etc ,但排除 /home/dmtsaitar -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 # 解压bzip2bzip2 -v 1.tar # bzip2压缩bzcat # 查看bzip2gzip file # 直接压缩文件 # 压缩后源文件消失gunzip file.gz # 直接解压文件 # 解压后源文件消失gzip -r dir/ # 递归压缩目录gzip -r -d dir/ # 递归解压目录gzip -dv 1.tar.gz # 解压gzip到targzip -v 1.tar # 压缩tar到gzunzip zip.zip # 解压zipzip zip.zip * # 压缩ziprar 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(工作树) statusgit 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 #67git tag -l dev-v-0.11.54 # 查看tag(dev-v-0.11.5)git push origin --tags # 提交taggit 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.gitgit 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-mailgit config --global --edit # 编辑~/.gitconfig(User-specific)配置文件, 值优先级高于/etc/gitconfig(System-wide)git config --edit # 编辑.git/config(Repository specific)配置文件, 值优先级高于~/.gitconfiggit cherry-pick <commit id> # 用于把另一个本地分支的commit修改应用到当前分支 需要push到远程git log --pretty=format:'%h: %s' 9378b62..HEAD # 查看指定范围更新操作 commit idgit 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/mastergit reset --hard origin/master}删除远程分支并新建{git checkout mastergit branch -r -d origin/test # 删除远程分支 但有时候并没有删除 可以尝试使用下面的语句git push origin :test # 推送一个空分支到远程分支,相当于删除远程分支git branch -d test # 删除本地test分支, -D 强制git branch -a |grep testgit checkout -b testgit push origin testgit reset --hard origin/test }迁移git项目{git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; donegit fetch --allgit pull --allgit remote set-url origin git@git.github.cn:server/gw.gitgit push --all}
}恢复rm删除的文件{# debugfs针对 ext2 # ext3grep针对 ext3 # extundelete针对 ext4df -T # 首先查看磁盘分区格式umount /data/ # 卸载挂载,数据丢失请首先卸载挂载,或重新挂载只读ext3grep /dev/sdb1 --ls --inode 2 # 记录信息继续查找目录下文件inode信息ext3grep /dev/sdb1 --ls --inode 131081 # 此处是inodeext3grep /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 # 解密文档}
}
本篇完结。
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者。
相关文章:

《Linux从小白到高手》理论篇:文件权限控制及文件操作相关的命令
List item 本篇介绍Linux文件权限控制及文件操作相关的命令,看完本文,有关Linux文件权限控制及文件操作相关的常用命令你就掌握了99%了。 文件权限 在介绍文件权限之前先来复习下Linux的文件类型,始终记住那句话:Linux系统下&a…...

前端框架React的详细的学习方法和过程
学习React作为前端架构的一部分,是一个系统且逐步深入的过程。以下是一个详细的学习方法和过程,可以帮助你有效地掌握React: 1. 理解React的基础知识 首先,你需要了解React的基本概念,包括它是什么、为什么使用它以及…...

linux中缓存,在kafka上应用总结
linux中的缓存 页缓存 pagecatch(读缓存用于提供快速读)块缓存(用于提供其他设备快速写)当对读缓存读的时候,修改了读的数据,页缓存就会被标记为脏数据,等到写的时候它会向块缓存同步数据&…...

前端练习小项目 —— 让图片变得更 “色”
前言:相信读者在学习完了HTML、CSS和JavaScript之后已经想要迫不及待的想找一个小型的项目来练练手,那么这篇文章就正好能满足你的 “需求”。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 在开始学习…...

时间卷积网络(TCN)原理+代码详解
目录 一、TCN原理1.1 因果卷积(Causal Convolution)1.2 扩张卷积(Dilated Convolution) 二、代码实现2.1 Chomp1d 模块2.2 TemporalBlock 模块2.3 TemporalConvNet 模块2.4 完整代码示例 参考文献 在理解 TCN 的原理之前ÿ…...

零散的知识
1.物化 在SQL中,物化(Materialization)是指将查询结果保存为物理数据结构以供后续使用的过程。这与普通的视图或查询不同,物化视图会存储查询的结果,而不是每次查询时都动态地重新计算数据。 ①物化视图 物化视图是一…...

Python读取pdf中的文字与表格
一、PyPDF2包安装 在Python中安装PyPDF2库,您可以使用pip包管理器。打开您的命令行工具(例如CMD、Terminal或Anaconda Prompt),然后输入以下命令: pip install PyPDF2 如果您使用的是Python 3,并且系统中…...

【MySQL 08】复合查询
目录 1.准备工作 2.多表查询 笛卡尔积 多表查询案例 3. 自连接 4.子查询 1.单行子查询 2.多行子查询 3.多列子查询 4.在from子句中使用子查询 5.合并查询 1.union 2.union all 1.准备工作 如下三个表,将作为示例,理解复合查询 EMP员工表…...

求1000以内的完数
题目:一个数如果恰好等于他的因子之和(包括1,但不包括这个数),这个数就是完数。编写算法找出1000之内的所有完数,并按下面格式输出其因子:28 its factors are 1,2,4,7,14 代码如下:…...

sqli-labs less-16 post提交dnslog注入
post提交DNSlog注入 第十六关和和十五关大差不大,可以使用布尔注入,时间盲注等,只不过闭合方式不一样,但是用布尔和时间盲太过于消耗时间,本次测试我将使用dnslog注入。 使用在线平台http://www.dnslog.cn/ 闭合方式…...

nginx报错|xquic|xqc_engine_create: fail|
一.问题描述 nginx使用xquic协议一切安装正常,nginx -s reload也正常,但就是访问不了网页 [emerg] 12342#0: |xquic|xqc_engine_create: fail| [emerg] 12342#0: |xquic|ngx_xquic_process_init|engine_init fail| [emerg] 12341#0: |xquic|xqc_engine_create: fai…...

Java虚拟机(JVM)
目录 内存区域划分堆(Heap)方法区(Method Area)程序计数器(Program Counter Register)虚拟机栈(VM Stack)本地方法栈(Native Method Stack) 类加载的过程类加…...

MQ 架构设计原理与消息中间件详解(三)
RabbitMQ实战解决方案 RabbitMQ死信队列 死信队列产生的背景 RabbitMQ死信队列俗称,备胎队列;消息中间件因为某种原因拒收该消息后,可以转移到死信队列中存放,死信队列也可以有交换机和路由key等。 产生死信队列的原因 消息投…...

大数据新视界 --大数据大厂之 Alluxio 数据缓存系统在大数据中的应用与配置
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

PHP基本语法总结
目录 输出语句 注释 数据类型(变量) 局部和全局作用域 类型比较(松散比较与严格比较) 常量 运算符 并置运算符 不等于 逻辑运算符 条件语句 数组 关联数组 数组排序 一般数组 关联数组 循环 函数 变量函数 魔…...

尚硅谷rabbitmq 2024第30-33节 死信队列 答疑
Virtual host: Type: Name: Durabiity: Arguments: Default for virtual host w ququt.normal.video Durable x-dead-letter-exchange x-dead-1etter-routing-xey x-mAx-1ength X-m在88点0也-6E1 exchange.dead.letter.vide zouting.key.dead.ietter.v 10 String String Number…...

解锁空间距离计算的多种方式-含前端、空间数据库、后端
目录 前言 一、空间数据库求解 1、PostGIS实现 二、GIS前端组件求解 1、Leaflet.js距离测算 2、Turf.js前端计算 三、后台距离计算生成 1、欧式距离 2、Haversice球面距离 3、GeoTools距离计算 4、Gdal距离生成 5、geodesy距离计算 四、成果与生成对比 1、Java不…...

Windows 开发工具使用技巧 QT使用安装和使用技巧 QT快捷键
一、QT配置 1. 安装 Qt 开发框架 1、下载 1、进入下载地址 下载地址1 (官方, 需注册账号): https://www.qt.io/download下载地址2(推荐): http://download.qt.io/http://download.qt.io/archive/qt/ (或更直接的…...

【实战教程】SpringBoot全面指南:快速上手到项目实战(SpringBoot)
文章目录 【实战教程】SpringBoot全面指南:快速上手到项目实战(SpringBoot)1. SpringBoot介绍1.1 SpringBoot简介1.2系统要求1.3 SpringBoot和SpringMVC区别1.4 SpringBoot和SpringCloud区别 2.快速入门3. Web开发3.1 静态资源访问3.2 渲染Web页面3.3 YML与Properti…...

LeetCode讲解篇之1043. 分隔数组以得到最大和
文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 对于这题我们这么考虑,我们选择以数字的第i个元素做为分隔子数组的右边界,我们需要计算当前分隔子数组的长度为多少时能让数组[0, i]进行分隔数组的和最大 我们用数组f表示[0, i)区间内的…...

Python知识点:结合Python工具,如何使用TfidfVectorizer进行文本特征提取
开篇,先说一个好消息,截止到2025年1月1日前,翻到文末找到我,赠送定制版的开题报告和任务书,先到先得!过期不候! 如何使用Python的TfidfVectorizer进行文本特征提取 在自然语言处理(…...

Diffusion models(扩散模型) 是怎么工作的
前言 给一个提示词, Midjourney, Stable Diffusion 和 DALL-E 可以生成很好看的图片,那么它们是怎么工作的呢?它们都用了 Diffusion models(扩散模型) 这项技术。 Diffusion models 正在成为生命科学等领域的一项尖端技术&…...

查找回收站里隐藏的文件
在Windows里,每个磁盘分区都有一个隐藏的回收站Recycle, 回收站里保存着用户删除的文件、图片、视频等数据,比如,C盘的回收站为C:\RECYCLE.BIN\,D盘的的回收站为D:\RECYCLE.BIN\,E盘的的回收站为E:\RECYCLE…...

[运维]2.elasticsearch-svc连接问题
Serverless 与容器决战在即?有了弹性伸缩就不一样了 - 阿里云云原生 - 博客园 当我部署好elasticsearch的服务后,由于个人习惯,一般服务会在name里带上svc,所以我elasticsearch服务的名字是elasticsearch-svc: [root…...

Ajax面试题:(第一天)
目录 1.说一下网络模型 2.在浏览器地址栏键入URL,按下回车之后会经历以下流程: 3.什么是三次握手和四次挥手? 4.http协议和https协议的区别 1.说一下网络模型 注:各层含义按自己理解即可 2.在浏览器地址栏键入URL,…...

数据仓库拉链表
数仓拉链表是数据仓库中常用的一种数据结构,用于记录维度表中某个属性的历史变化情况。在实际应用中,数仓拉链表可以帮助企业更好地进行数据分析和决策。 数仓拉链表(Slowly Changing Dimension, SCD)是一种用于处理维表中数据变化…...

【JVM】实战篇
1、内存调优 1.1 内存溢出和内存泄漏 内存泄漏(memory leak):在Java中如果不再使用一个对象,但是该对象依然在GC ROOT的引用链上,这个对象就不会被垃圾回收器回收,这种情况就称之为内存泄漏。 内存泄漏绝…...

2024年9月30日--10月6日(ue5肉鸽结束)
按照月计划,本周把ue肉鸽游戏完成,然后进行ue5太阳系 , 剩余14节,218分钟,如果按照10分钟的视频教程1小时进行完的话,则需要22小时,分布在10月2日-10月6日之间,每天44分钟的视频教程…...

【Python游戏开发】贪吃蛇游戏demo
准备步骤 项目开发使用【Mu 编辑器】 1.新建项目,并导入游戏图片 游戏编写 1.创建场景 SIZE 15 # 每个格子的大小 WIDTH SIZE * 30 # 游戏场景总宽度 HEIGHT SIZE * 30 # 游戏场景总高度def draw():screen…...

pytorch张量基础
引言张量的基础知识 张量的概念张量的属性张量的创建张量的操作 基本运算索引和切片形状变换自动微分 基本概念停止梯度传播张量的设备管理 检查和移动张量CUDA 张量高级操作 张量的视图广播机制分块和拼接张量的复制内存优化和管理 稀疏张量内存释放应用实例 线性回归神经网络…...