目录
使用
文件
1. 每种交互式shell脚本下会有一个独立的启动文件.bashrc,可在.bashrc文件里保存个性化设置,如命名别名、路径等,可用来提供工作效率。变动.bashrc是很直接又低风险的,如果不小心配错了,可以删掉这个文件重新配一遍。配置完后,如果想要立刻生效,可以在终端运行~/.bashrc,这样就不必为了生效而重启终端了。
规则
1. 命令后面若接组合可选项,如果可选项之间含意不冲突,则会按从左到右顺序执行。如果含意起冲突,则后面的可选项会覆盖前面的可选项。
2. /表示根目录,~表示用户目录。root用户目录是/root,用户a的用户目录则会是/home/a。
3. 在Linux系统中,目录的默认权限为755,而文件的默认权限是644。如果想创建一个别人看不到内容的目录,只需要将其权限设置为740。
改进
1. 建议使用mv命令代替rm,并使原来的rm命令失效。
示例步骤:
(1). 终端运行vim ~/.bashrc。
(2). 复制粘贴如下内容到打开的文件里。
mkdir -p ~/.trash # 在用户目录下创建一个.trash文件夹
alias rm=del # 使用别名del代替rm
del() # del函数用于将rm命令修改为mv命令
{
mv $@ ~/.trash/
}
cleardel() # cleardel函数用于清空回收站.trash文件夹,y或Y表示确认,n表示取消
{
read -p "clear sure?[Input 'y' or 'Y' to confirm. && Input 'n' to cancel.]" confirm
[ $confirm == 'y' ] || [ $confirm == 'Y' ] && /bin/rm -rf ~/.trash/*
}
(3). 终端运行 source ~/.bashrc。然后就可以使用del 【文件名】删除单个文件【移动到回收站】了。
(4). 如果想清空回收站【~/.trash/】,则需要运行cleardel。但要注意cleardel里运行的其实是用rm -rf命令删除回收站目录内文件,删除前会有确认提示,但还是要注意慎用【先看看有哪些文件】。
文件
目录操作
cd 进入目录。
pwd 显示当前目录。
ls 列出文件目录。
ls [-ald] [路径]
-a 列出项目中包含隐藏目录或文件。
-l 列出文件的详细信息,ll命令等同于ls -l。
-i 显示inode,可查看到硬链接。
-d 只列出目录。
mkdir 创建目录。
mkdir [-mp][目录名称]
-m指定要创建目录的权限。
-p递归创建目录。
rmdir 删除空目录。
-p 递归删除目录。
rm 【慎用,建议用mv命令代替rm】删除目录或文件。
-f 强制删除,否则删除不存在的文件时会报错。
-i 确认删除。
-r 删除目录,不加此选项删除目录时会报错。
-rf 删除文件和目录。一定不要运行 rm -rf /,这会删掉所有系统文件。
-ir 在删除文件或目录前会给出确认提示。
cp 复制目录或文件。
cp [-driu][来源文件][目的文件]
-d 只拷贝一个软连接【类似于快捷方式】。
-r 拷贝一个目录。
-i 会询问是否覆盖已存在文件。Redhat/CentOS中cp等同cp -i
-u 更新文件,如果目标文件不存在则不更新。
实例:
cp test1/f1 test2/ 将test1目录下的f1移动到目录test2下。
mv 移动目录或文件,源文件和目标文件须同为文件或目录。
mv [-iu等][源文件][目标文件]
-i 会询问是否覆盖已存在文件。
-u 更新文件,如果目标文件不存在则不更新。
讲解:
若目标文件不存在,则会重命名源文件。
若目标文件和源文件都是文件,则会覆盖。
文件操作
touch 创建文件,如果文件已存在则更新其访问时间。
touch [文件名]
echo 写入文件。
echo "A">B :将内容A写入到文件B当中。B文件原内容会被删除。
echo "A">>B :将内容A追加写入文件B当中。
cat 显示文件内容。
cat [文件名]
-n 显示行号。
-A 显示所有内容。
tac 反向显示文件内容。
more 查看文件完整内容,按空格键看下一屏,按q键提前退出。
按/【或?】键,输入关键词后,则向下【或向上】查找。按n键下一个。
less 多功能查看文件完整内容,可以上翻、下翻。
按空格键看下一屏,按j键向下移行,按k键向上移行。
按/【或?】键,输入关键词后,则向下【或向上】查找。按n键下一个。
head 显示文件的前num【默认为10】行。
head [-n num] [文件名]
tail 显示文件的后num【默认为10】行。
tail [-n num] [文件名]
-f 动态显示文件的后num【默认为10】行。
-f [-n num] [文件名]
du 查看文件或目录磁盘使用的空间。
du [选项][文件]
-a 显示目录及子目录、子文件的大小。
-b 以byte为单位。
-k 以KB为单位。
-m 以MB为单位。
-h 以K,M,G为单位,提高信息的可读性。
-c 显示每个文件或目录大小,也显示总计。
-s 仅显示总计。
--exclude=<目录或文件> 略过指定的目录或文件。
ln 建立硬连接【默认】或软连接。
ln [-s] [来源文件] [目标文件]
-s 建立软连接。
whereis在文件列表库去查找文件。
whereis [-bmsu] [文件名称]
-b: 只找binary文件
-m: 只找在说明文件manual路径下的文件
-s: 只找source来源文件
-u: 没有说明档的文件
grep 使用正则表达式搜索文本,并把匹配的行【标红】打印出来。grep可用于shell脚本,因为 grep可通过一个返回值来说明搜索的状态【0搜索成功,1搜索不成功,2搜索文件不存在】, 所以可以用grep的返回值进行一些自动化文本处理工作。
grep [options] pattern file
-e: 显示多个选项的逻辑或【or】关系。
-E: 拓展的正则表达式。
-v: 显示不被pattern匹配到的行。
-A<显示行数n>: 显示匹配到的内容所在的行及之后n行的内容。
-B<显示行数n>: 显示匹配到的内容所在的行及之前n行的内容。
-C<显示行数n>: 显示匹配到的内容所在的行及之前、之后各n行的内容。
-c: 统计匹配到的行数。
-f File: 从File文件里获取模式【pattern】匹配。
-i --ignore-case: 忽略字符大小写的差别。
-n: 显示匹配到的行号。
-o: 仅显示匹配到的字符串。
-s: 不显示错误信息。
-w: 匹配整个单词。
sed 流编辑器,一次处理一行内容,用来自动编辑一个或多个文件,简化对文件的反复操作。
sed [options] '[地址定界] command' file(s)
-n: 只打印匹配到的行。
-e: 多点编辑,对每行处理时,可以有多个Script。
-f: 把Script写到文件里,如果是多个Script。则换行写。
-r: 支持拓展的正则表达式。
-i: 直接把处理的结果写入文件。
-i.bak: 在将处理结果写入文件前备份一份。
文件权限
chgrp 更改文件的所属组。
chgrp [组名] [文件名]
chown 更改文件的所属账户。
chown [-R] 账户名[:组名] 文件名
-R 只作用于目录,作用是级联更改子目录、子文件的所属账户。
chmod 更改用户对文件的操作权限【r:4 w:2 x:1 -:0】。
chmod [-R] 权限值数字 文件名
chmod还支持u表示主权限【user】,g表示组权限【group】,o表示非本群组【others】的权限,a【all】表示三群全部权限【ugo】。另外,还可以针对u,g,o,a增加(+)、减少(-)、设定(=)某个权限(读r,写w,执行x)。
例如:
一个文件test/test2的权限设置为755:
chmod u=rwx,og=rx test/test2
减少主权限的执行权限:
chmod u-x test/test2
三群权限中全部去掉执行权限:
chmod a-x test/test2
linux下有两个特殊的权限s和t。
s权限只能应用在二进制的可执行文件上,是为了让一般使用者临时具有该文件所属主/组的执行权限【如修改密码时临时拥有root的权限】。s权限。
t权限只针对目录生效,它表示只能让所属主以及root可以删除 (重命名/移动) 该目录下的文件。
例如:
如果不想让普通用户修改自己的密码,只需要运行:
[root@localhost ~]# chmod u-s /usr/bin/passwd
或者
[root@localhost ~]# chmod 0755 /usr/bin/passwd
0755最前面的0表示不适用任何特殊权限,该位上的数字可以是0,1(--t),2(-s-),3(-st),4(s--),5(s-t),6(ss-),7(sst)
umask 设置文件掩码。
umask 三群权限数字
若用户建立普通文件,且预设“没有可执行权限”,只有rw两个权限。最大为666(-rw-rw-rw-)。
若用户建立为目录,则预设所有权限开放,即777(drwxrwxrwx)。
umask后数值代表的含义就是上面两条规则中的默认值(普通文件为666,目录为777)需要减掉的权限。umask可以在/etc/bashrc里面更改。
预设情况下,root的umask为022,而一般使用者为002,因为可写权限非常重要,所以预设会去掉写权限。
文件属性
chattr 修改文件的特殊属性。
chattr [+-=][ASaci] [文件或者目录名]
+-=: 分别为增加、减少、设定。
A:文件或目录的访问时间(atime)不可被修改。
S:将数据同步写入磁盘中。
a:只能追加不能删除,非root用户不能设定该属性。
c:自动压缩该文件,读取时会自动解压。
i:文件不能被删除、重命名、设定连接、写入、新增数据。目录内不能新建文件。
lsattr 列出文件/目录的特殊属性。
lsattr [-aR] [文件/目录名]
-a: 连同隐藏文件一同列出。
-R: 连同子目录的数据一同列出。
find 查找文件。
find [路径] [参数]
-name filename: 按文件名查找文件。
-type type: 通过文件类型【f,d等】查找。f表示一般文件,d表示目录。
-atime n: 在过去n天内被读取的文件。
-ctime n: 在过去n天内被修改的文件。
-amin n: 在过去n分钟内被读取的文件。
-cmin n: 在过去n分钟内被读取的文件。
-empty: 空的文件。
用户管理
用户账号
添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。刚添加的账号是被锁定的,无法使用。
useradd 添加新的用户账号。
useradd 选项 用户名
-c <备注> :添加备注文字。
-e <有效期限> :指定账号的有效期限。
-f <缓冲天数> :指定在密码过期多少天后关闭该账号。
-g <群组> :指定用户所属的群组。
-G <群组> :指定用户所属的附加群组。
-d <登入目录> :指定用户登入时的起始目录。
-m :自动建立用户的登入目录。
-r :建立系统账号。
-s <shell> :指定用户登入后所使用的shell。
-u <uid> :指定用户ID。
usermod 修改用户账号。
usermod 选项 用户名
常用的选项同useradd选项。
passwd 修改用户口令。
passwd 选项 用户名
-l 锁定口令,即禁用账号。
-u 口令解锁
-d 使账号无口令
-f 强迫用户下次登录时修改口令
如果设置用户名,则默认修改当前用户的口令。
userdel 删除用户账号。
userdel 选项 用户名
-r,它的作用是把用户的主目录一起删除。
用户组
每个用户都有一个用户组,一个用户可以同时属于多个用户组。组的增加、删除和修改实际上就是对/etc/group文件的更新。不同Linux系统对用户组的规定有所不同。
groupadd 增加一个新的用户组。
groupadd 选项 用户组
-g GID: 指定新用户组的组标志号【GID】。
-o : 允许添加组标志号重复的工作组。
groupmod 修改用户组的属性。
groupmod 选项 用户组
-g <组标志号> :设置要使用的组标志号。
-o :重复使用组标志号。
-n <新群组名称>:设置要使用的群组名称。
groupdel 删除一个已有的用户组。
groupdel 用户组名称
newgrp 切换到其它用户组。
newgrp 用户组名称
指令
which 查找一个命令的绝对路径。
alias 设置指令的别名。
alias [别名]=[指令名称]
注意:
使用alias给指令命名别名后,仍然可以用指令的绝对路径来调用原指令。