Linux学习笔记(一):从shell开始
一、从shell开始
shell是一个程序,把输入的命令传递给操作系统去执行。(shell既是命令行语言、也是程序设计语言)
shell 脚本(shell script)是一种为 shell 编写的脚本程序,是由shell命令组成的执行文件。
sh(Bourne Shell)是一个早期的重要shell,同Version 7 Unix一起发布。
bash(Bourne-Again Shell)是一个为GNU计划编写的Unix shell。
bash的目标是与POSIX标准保持一致,同时兼顾对sh的兼容,是各种Linux发行版标准配置的Shell。
在Linux系统上/bin/sh往往是指向/bin/bash的符号链接。
shell是一个概念,其内容是指一种应用程序,这个应用程序提供了一个可供用户访问操作系统内核的界面。
而sh、bash之类的是实现shell这个概念的具体的应用程序。
cat /etc/shells #查看可以使用的shell
usermod -s /bin/bash ‘chanwill’ #修改用户的shell
grep ‘chanwill’ /etc/passwd #查看对应用户使用的shel
usermod -s 为用户指定新的shell
二、文件管理
cp
复制文件或目录
cp item1 item2 //复制item1到item2,item2会被重写或者新建,使用 -i 命令提示确认信息
cp item1 item2 dir1 //可以复制多个项目到结尾的目录,目录必须存在
cp dir1/* dir2/* dir3/* dir4 //将目录中的所有内容复制到最后的目录中,可以选择多个项目,默认不覆盖
mv
将文件或目录改名或者移入其他位置
mv 1.txt 2.txt //将原文件名1.txt改为2.txt
mv 1.txt dir //将文件1.txt移动到目录dir下(目录不存在则文件1.txt改名为dir)
mv dir1 dir2 //将目录dir1移动到目录dir2中,dir2目录不存在则dir1目录名改为dir2
-b 目标文件或目录存在时,覆盖时创建备份
-i 显示详细信息
-n 不覆盖存在的文件和目录
-f 强制移动
rm
rm命令删除之后无法恢复
rm -i -f 1 //-i在删除前逐一确认,-f强制删除无需确认,同时设定这两个参数时删除无需确认
rm -r 1 //递归,目录及子目录内容都删除
ln(软链接和硬链接)
ln(link file)为一个文件在另外一个位置建立一个同步的链接
软链接:
- 以路径的形式存在,类似于快捷方式
- 可以跨文件系统对一个不存在的文件名或者目录进行链接
ln -s 1.txt 1 //设置软链接(符号链接)
硬链接:
- 以文件副本的形式存在不占用实际空间
- 只在同一个文件系统中才能创建且不允许给目录创建
- 给文件创建硬链接,各项属性相同
ln -i -v 1.txt 1 //设置硬链接,-i为交互模式,-v显示具体信息
chattr
chattr命令用于改变文件或目录的属性(ext2下的文件和目录)
chattr +i //文件和目录不得任意更动(防止被修改)
chattr +u //防止文件或者目录意外被删除
chattr +A //不会更新文件的最后访问时间
chattr +a //文件或者目录仅可以加内容,不能删除(适用于日志文件)
+<属性> 开启属性。
-<属性> 关闭属性。
=<属性> 指定属性。
chattr -R -V [+/-/=]属性 [文件或目录] //-R递归处理,-V显示命令执行过程,属性可多个添加
touch 3.txt | xargs chattr -R -V +i 3.txt //配合之前的文件和xargs命令设置文件属性
lsattr
查看文件的属性
lsattr -a //显示所有文件和目录(隐藏文件)
lsattr -d //仅显示目录名称。
lsattr -R //递归处理(所有文件及子目录)
-v 显示文件或目录版本。
-V 显示版本信息。
三、创建文件的几种姿势
mkdir
mkdir 文件夹名 //创建文件夹
touch
touch 1.txt 2.txt //同时创建两个文件
touch test{0001..2000}.txt //批量创建文件
touch 1.txt //更新文件的时间为当前时间(文件已存在)
>、>>
使用> //创建文件,直接覆盖原文件内容(没有提示)
使用>> //创建文件,追加在文件末尾不会覆盖
cat
cat > 文件名 //创建文件,并直接进入编辑,ctrl+z退出
cat >> 文件名 //创建文件,并直接进入编辑,ctrl+z退出
分界符(eof、exit)
cat >> 文件名 <<eof //eof可以作为一个分界符,遇到下一个分界符时停止
youchanwill
chanwillyou
eof
cat >> 文件名 <<exit //跟eof同理
youchanwill
chanwillyou
exit
echo、vim
echo 内容 > 文件名
echo 内容 >> 文件名
vi/vim 文件名 //创建后直接进入vim编辑界面
四、管道符和xargs
管道符可以理解为:前一个命令的输出作为下一个命令的输入
xargs
很多命令不支持|管道来传递参数,因此需要xargs来代替管道符的作用(强制传递参数)
somecommand |xargs -item command
xargs 用作替换工具,读取输入数据重新格式化后输出。
cat 1.txt | xargs //xargs命令可以将输入内容以单行输出
cat 1.txt | xargs -n6 //xargs命令中的-n参数可以进行指定多行输出,后面的数字为每行的个数
这里多行输出的前提是内容间有空格分隔,如果是一串连续的字符,命令无作用。
cat 1.txt | xargs -I {} ./test.sh d {} b
//使用 -I 指定一个替换字符串,这个字符串在 xargs 扩展时会被替换掉。将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
使用xargs去避免用 rm 删除太多的文件时候,可能得到的错误信息:/bin/rm Argument list too long.
find . -type f -name "*.log" -print0 | xargs -0 rm -f
可以将需要下载的url链接放入同一个文件中,能够使用 xargs下载所有链接
cat url-list.txt | xargs wget -c
五、扩展(GNU计划)
GNU计划,有译为“革奴计划”,是由理查德·斯托曼在1983年9月27日公开发起的自由软件集体协作计划。它的目标是创建一套完全自由的操作系统GNU。
GNU是一个自由的操作系统,其内容软件完全以GPL方式发布。这个操作系统是GNU计划的主要目标,名称来自GNU’s Not Unix!的递归缩写,因为GNU的设计类似Unix,但它不包含具著作权的Unix代码。GNU的创始人,理查德·马修·斯托曼,将GNU视为“达成社会目的技术方法”。
GNU通用公共许可证简称为GPL,是由自由软件基金会发行的用于计算机软件的协议证书,使用该证书的软件被称为自由软件。大多数的GNU程序和超过半数的自由软件使用它。(来源百度百科)