《Linux从小白到高手》理论篇(五):文件权限控制及文件操作相关的命令
本篇介绍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从小白到高手》理论篇(五):文件权限控制及文件操作相关的命令
本篇介绍Linux文件权限控制及文件操作相关的命令,看完本文,有关Linux文件权限控制及文件操作相关的常用命令你就掌握了99%了。 文件权限 在介绍文件权限之前先来复习下Linux的文件类型,始终记住那句话:Linux系统下,一…...
异常场景分析
优质博文:IT-BLOG-CN 为了防止黑客从前台异常信息,对系统进行攻击。同时,为了提高用户体验,我们都会都抛出的异常进行拦截处理。 一、异常处理类 Java把异常当做是破坏正常流程的一个事件,当事件发生后,…...
Leetcode: 0001-0010题速览
Leetcode: 0001-0010题速览 本文材料来自于LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解 遵从开源协议为知识共享 版权归属-相同方式…...
计算机的错误计算(一百一十二)
摘要 计算机的错误计算(六十三)与(六十八)以及(六十九)分别探讨了大数与 附近数以及 附近数 的余切函数的计算精度问题。本节讨论余切序列(即迭代 )的计算精度问题。 余切序列是指…...
C++基础(7)——STL简介及string类
目录 1.STL简介 1.1什么是 1.2STL的历史版本 1.3STL的六大组件 编辑 1.4有用的网址 2.string类 2.1string的多种定义方式 2.2string的插入 2.2.1尾插(push_back) 2.2.2insert插入 2.3拼接(append) 2.4删除 2.4.1尾…...
配置Nginx以支持通过HTTPS回源到CDN
要配置Nginx以支持通过HTTPS回源到CDN,你需要确保Nginx已正确配置SSL,并且能够处理来自CDN的HTTPS请求。以下是一个简化的Nginx配置示例,它配置了SSL并设置了代理服务器参数以回源到CDN: server {listen 443 ssl;server_name you…...
yolov10+strongsort的目标跟踪实现
此次yolov10deepsort不论是准确率还是稳定性,再次超越了之前的yolodeepsort系列。 yolov10介绍——实时端到端物体检测 YOLOv10 是清华大学研究人员在 UltralyticsPython 清华大学的研究人员在 YOLOv10软件包的基础上,引入了一种新的实时目标检测…...
C# 字符与字符串
本课要点: 1、字符类Char的使用 2、字符串类String的使用 3、可变字符串****StringBuilder 4、常见错误 一 何时用到字符与字符串 问题: 输出C#**课考试最高分:**98.5 输出最高分学生姓名:张三 输出最高分学生性别&#x…...
在Ubuntu 16.04上使用LEMP安装WordPress的方法
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 WordPress 是互联网上最流行的 CMS(内容管理系统)。它允许您在 MySQL 后端和 PHP 处理的基础上轻松设置灵…...
显示器放大后,大漠识图识色坐标偏移解决方法
原因分析: 显示器分辨率较高,DPI设置放大125% or 150% or 200%,游戏打开时也会默认会根据显示器的放大比例自行放大,但是大漠综合管理工具抓图不会放大; 解决方法: 1、大漠综合管理…...
C++容器之list基本使用
目录 前言 一、list的介绍? 二、使用 1.list的构造 2.list iterator的使用 3.list capacity 🥇 empty 🥇size 4.list element access 🥇 front 🥇 back 5.list modifiers 🥇 push_front 🥇 po…...
Redis-哨兵
概念 Redis Sentinel 相关名词解释 注意: 哨兵机制不负责存储数据,只是对其它的redis-server进程起到监控的作用哨兵节点,也会搞一个集合,防止一个挂了 ⼈⼯恢复主节点故障 用户监控: 实际开发中,对于服务器后端开发,监控程序,是很重要的 服务器长期运行,总会有一些意外,…...
Pikachu-Sql-Inject - 基于时间的盲注
基于时间的盲注: 就是前端的基于time 的盲注,什么错误信息都看不到,但是还可以通过特定的输入,判断后台的执行时间,从而确定注入。 mysql 里函数sleep() 是延时的意思,sleep(10)就是数据库延时10 秒返回内…...
JAVA开源项目 旅游管理系统 计算机毕业设计
本文项目编号 T 063 ,文末自助获取源码 \color{red}{T063,文末自助获取源码} T063,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计 六、核…...
景联文科技入选《2024中国AI大模型产业图谱2.0版》数据集代表厂商
近日,大数据产业领域头部媒体数据猿携手上海大数据联盟联合发布了备受瞩目的《2024中国AI大模型产业图谱2.0版》。以大数据与AI为代表的智能技术为主要视角,聚焦全产业链,为业内提供更为专业直观的行业指导。 景联文科技凭借高质量数据集&…...
【C语言】内存函数的使用和模拟实现
文章目录 一、memcpy的使用和模拟实现二、memmove的使用和模拟实现三、memset的使用四、memcmp的使用 一、memcpy的使用和模拟实现 在之前我们学习了使用和模拟实现strncpy函数,它是一个字符串函数,用来按照给定的字节个数来拷贝字符串,那么问…...
在WPF中实现多语言切换的四种方式
在WPF中有多种方式可以实现多语言,这里提供几种常用的方式。 一、使用XML实现多语言切换 使用XML实现多语言的思路就是使用XML作为绑定的数据源。主要用到XmlDataProvider类. 使用XmlDataProvider.Source属性指定XML文件的路径或通过XmlDataProvider.Document指定…...
30min 的OpenCV learning Note
1.安装python和pycharm与环境搭配 打开Windows终端:(winR)(一般使用清华镜像网站安装库比较快) pip install opencv-contrib-python -i https://pypi.mirrors.ustc.edu.cn/simple 或者 python -m pip install open…...
C--编译和链接见解
欢迎各位看官!如果您觉得这篇文章对您有帮助的话 欢迎您分享给更多人哦 感谢大家的点赞收藏评论 感谢各位看官的支持!!! 一:翻译环境和运行环境 在ANSIIC的任何一种实现中,存在两个不同的环境1,…...
【QT Quick】基础语法:基础类与控件
QML 的基础类和控件中,我们可以看到主要的几个分类:基础控件类、窗口类以及组件类。以下是对这些控件及其属性、继承关系等的详细讲解: 控件关系总结 QtObject 是所有 QML 对象的基类。它定义了基础属性,主要用于逻辑和数据封装…...
使用 SSH 连接 Docker 服务器:IntelliJ IDEA 高效配置与操作指南
使用 SSH 连接 Docker 服务器:IntelliJ IDEA 高效配置与操作指南 本文详细介绍了如何在 2375 端口未开放的情况下,通过 SSH 连接 Docker 服务器并在 Idea 中进行开发。通过修改用户权限、生成密钥对以及配置 SSH 访问,用户可以安全地远程操作…...
Gas费用是什么?
Gas费用是什么? 每5个Byte 需要1个GasGasLimit 用来限制合约最多执行多少次运算GasPrice 每次计算需要支付的费用在Web3的语境中,尤其是在以太坊(Ethereum)这样的区块链平台上,Gas费是一个核心概念。以下是关于Gas费的详细解释: 1. 定义 Gas是以太坊网络上的计算单位,…...
大语言模型(LLM)的子模块拆拆分进行联邦学习;大语言模型按照多头(Multi-Head)拆分进行联邦学习
目录 大语言模型(LLM)的子模块拆拆分进行联邦学习 方式概述 简单示例 大语言模型按照多头(Multi-Head)拆分进行联邦学习 场景设定 多头拆分与联邦学习 示例说明 大语言模型(LLM)的子模块拆拆分进行联邦学习 大语言模型(LLM)的子模块拆分进行联邦学习,主要涉及…...
Qt 概述
1. Qlabel HelloWorld 程序 使用纯代码实现 // widget.cpp Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);// 给当前这个lable对象,指定一个父对象QLabel* label new QLabel(this);// C语言风格的字符串可以直接…...
移动应用的界面配置-手机银行APP
设置登录界面为线性布局,组件垂直居中排列设置主页为滚动模式,包括布局、添加背景图片设置按钮样式,包括形状、边框线的宽度和颜色 设置登录界面 设置界面为线性布局,组件垂直居中排列 --android:gravity"center_vertical…...
微服务nginx解析部署使用全流程
目录 1、nginx介绍 1、简介 2、反向代理 3、负载均衡 2、安装nginx 1、下载nginx 2、解压nginx安装包 3、安装nginx编辑 1、执行configure命令 2、执行make命令 4、启动nginx 1、查找nginx位置并启动 2、常用命令 3、反向代理 1、介绍反向代理配置 1、基础配置…...
华硕天选笔记本外接音箱没有声音
系列文章目录 文章目录 系列文章目录一.前言二.解决方法第一种方法第二种方法 一.前言 华硕天选笔记本外接音箱没有声音,在插上外接音箱时,系统会自动弹出下图窗口 二.解决方法 第一种方法 在我的电脑上选择 Headphone Speaker Out Headset 这三个选项…...
Unity中Socket_TCP异步连接,加入断线检测以及重连功能
1、服务端 using System; using System.Collections.Generic; using System.Text; #region 命名空间 using System.Net; using System.Net.Sockets; using System.Threading; using UnityEngine; #endregionnamespace AsynServerConsole {/// <summary>/// Tcp协议异步通…...
Android build子系统(01)Ninja构建系统解读
说明:本文将解读Ninja构建系统,这是当前Android Framework中广泛使用的构建工具。我们将从Ninja的起源和背景信息开始,逐步解读Ninja的优势和核心原理,并探讨其一般使用场景。然后介绍其在Android Framework中的应用及相关工具&am…...
徐老师的吉祥数
题目背景 文件读写 输入文件avoid.in 输出文件avoid.out 限制 1000ms 512MB 题目描述 众所周知, 3这个数字在有些时候不是很吉利,因为它谐音为 “散” 所以徐老师认为只要是 3的整数次幂的数字就不吉利 现在徐老师想知道,在某个范围[l,r] …...
梁平区高点击量网站建设哪家好/拉新推广怎么做代理
破除android手势密码: (这部分看雪论坛里的截图。) 进入shell命令,将/data/system/gesture.key删除后,任意手势密码均可进入。Root掉的手机,直接删除/data/system/gesture.key应该也是可以的吧。进入shell命…...
国内外画画做的好网站/友情链接怎么连
按CtrlAltT键,调出终端窗口 在窗口中输入【free -m】按enter键执行然后会在下面第一行的【mem:】后面的【total】下面显示你的内存总大小。 硬盘信息 那么我们需要先在终端输入【df】,显示的sd1就是我当前的磁盘。后面的第一个数据就是磁盘大小。 查看c…...
云梦网站建设/做网站的公司有哪些
(一)委托模式简介委托模式是基本的设计模式之一。委托,即是让另一个对象帮你做事情。许多其他的模式,如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式。委托模式使得我们可以用聚合来替代继承,java-组合优于继承。最简…...
网络促销分类 网站促销/怎么在百度上推广
设计模式学习笔记十:单例模式(Singleton Pattern) 1.概述 单例模式(Singleton Pattern)又称单件模式,单例模式保证一个类仅有一个实例,并提供一个访问的他的全局访问点。通常我们可以让一个…...
那个网站上找工程造价私活做/广东公司搜索seo哪家强
1、Android模拟器介绍 Android中提供了一个模拟器来模拟ARM核的移动设备。Android的模拟器是基于QEMU开发的,QEMU是一个有名的开源虚拟机项目(详见http://bellard.org/qemu/),它可以提供一个虚拟的ARM移动设备。Android模拟器被命…...
wordpress数据库设置密码/竞价排名什么意思
前言 期末到了,上课老师讲的云里雾里,很慌某些老师给一些所谓复习题其实是考试题的题,害人害己,白交学费。想学东西找不到途径?MOOC所谓的没有围墙,除了精品课程其他大都在念PPT,并未深入浅出的…...