一、文件基本操作
1.批量重命名
- rename ‘s/.txt/.c/’ *.txt
- rename ‘y/a-z/A-Z/’ .c
sed命令?
对于所有*.txt文件,用第一个参数提供的正则表达式将.txt替换为.c
2.查看文件内容:
- cat -n
- tac ????
- nl = cat -n
- -b a\b
- -n ln/rn/rz
三者区别
- mort /less filename
- enter\space
- h\q
- tail
-n 10
-f 不停读取文件最后某部分内容并显示,用于动态查看日志。
查看文件类型:file ,如file test.txt
包括编码格式
二、环境变量
3.环境变量与文件查找
变量类型:
- 当前shell进程的私有【用户自定义变量】 如temp=abc
- shell内建变量
- 环境变量:可直接定义,也可从用户自定义变量导入:export temp。常用大写表示
- 子进程可以继承父进程的环境变量
- 关机、关shell会丢失,除非将环境变量设置为永久生效。
- 变量按生命周期分类:
- 永久:需要修改配置文件,变量永久生效;
- /etc/bashrc 存放shell变量
- /etc/profile 存放环境变量
-.profile:
- 临时:使用 export 命令行声明即可,变量在关闭 shell 时失效。
- 两个重要文件:
- /etc/bashrc 存放shell变量
- /etc/profile 存放环境变量
-.profile:只对当前用户永久生效。而写在 /etc/profile 里面的是对所有用户永久生效,所以如果想要添加一个永久生效的环境变量,只需要打开 /etc/profile,在最后加上你想添加的环境变量就好啦。
相关命令:
set
env
export
如何查看某几个文件区别?/如何查看三个变量的区别:
export | sort > export.txt
env | sort >env.txt
set | sort >set.txt
vim diff env.txt export.txt set.txt
4.命令的查找路径与顺序
shell中执行一个命令,会先去PATH变量中查找,如能查到到,则执行。
PATH环境变量:存储要执行的文件所在路径/目录
如:在某个目录下创建abc.sh脚本,只有在该目录下可运行,若想在任意地方运行,需要配置PATH变量,添加该路径。
PATH=$PATH:/home/shiyanlou/mybin
但是这样存在问题:一旦关闭shell,该环境变量会失效。
解决方法:
让添加的环境变量全局有效,即永久--修改配置文件profile
-
每次shell启动,自动执行配置
- 用户目录下会有个shell启动时的自动执行文件:zsh是.zshrc,bash是 .bashrc把环境变量的配置添加到.zshrc中: echo "PATH=$PATH:/home/shiyanlou/bin" >> .zshrc
注意:> 将标准输出以覆盖方式重定向到一个文件
>> 追加方式
5. 修改、删除环境变量
变量删除:
unset temp 删除环境变量temp
6.环境变量生效
- source .zshrc
- . ./.zshrc 点为 source缩写,此时后面的文件必须指定完整的绝对或相对路径名,source 则不需要。
7.搜索文件
- whereis 简单快速
只能搜索二进制文件(-b),man 帮助文件(-m)和源代码文件(-s) - locate 快而全
locate /home/my 列出home及子目录中所有以my开头文件
locate /home/usr/share/*.jpg share下所有jpg文件,*要加\转义- -c仅计数 -i忽略大小写 -m man文件 -b二进制文件 -s源代码文件
通过“ /var/lib/mlocate/mlocate.db ”数据库查找,不过这个数据库也不是实时更新的,系统会使用定时任务每天自动执行 updatedb 命令更新一次,所以有时候你刚添加的文件,它可能会找不到,需要手动执行一次 updatedb 命令
- which 小而精
which python,常用来查看是否安装某软件,shell内建命令。 - find 精而细
sudo find /etc/ -name interfaces ,去 /etc/ 目录下面 ,搜索名字叫做 interfaces 的文件或者目录(模糊匹配需要用正则表达式)
基本命令格式为 find [path] [option] [action]
$ find ~ -newer /home/shiyanlou/Code
列出用户家目录下比 Code 文件夹新的文件
实验:
chown :更改文件所属用户/群组
chmod rwx 读写执行,依次:所有者、群组、其他用户
8.打包、压缩
常见格式:
文件后缀名 说明
*.zip zip 程序打包压缩的文件
*.rar rar 程序压缩的文件
*.7z 7zip 程序压缩的文件
*.tar tar 程序打包,未压缩的文件
*.gz gzip 程序(GNU zip)压缩的文件
*.xz xz 程序压缩的文件
*.bz2 bzip2 程序压缩的文件
*.tar.gz tar 打包,gzip 程序压缩的文件
*.tar.xz tar 打包,xz 程序压缩的文件
*tar.bz2 tar 打包,bzip2 程序压缩的文件
*.tar.7z tar 打包,7z 程序压缩的文件
8.1 zip
- 打包
zip -r -q -[1-9] -e -l -o test.zip /home/shiyanlou
zip -r -9 -q -o shiyanlou_9.zip /home/shiyanlou -x ~/*.zip- -r 递归打包,如不写,则目录下全为空文件夹,子目录下的文件无法被打包进去
- -q 安静模式不向屏幕输出打包信息
- -o 表示输出文件,需在其后紧跟打包输出文件名
- -9体积最小时间最久,-1体积最大时间最短。
- -e 加密
-l 将 linux中的LF 转换为win中的 CR+LF,防止不兼容 - -x 排除之前创建的 zip 文件,否则又会被打包进这一次的压缩文件中,注意:这里只能使用绝对路径,否则不起作用。
关于 zip 命令,因为 Windows 系统与 Linux/Unix 在文本文件格式上的一些兼容问题,比如换行符(为不可见字符),在 Windows 为 CR+LF(Carriage-Return+Line-Feed:回车加换行),而在 Linux/Unix 上为 LF(换行),所以如果在不加处理的情况下,在 Linux 上编辑的文本,在 Windows 系统上打开可能看起来是没有换行的。如果你想让你在 Linux 创建的 zip 压缩文件在 Windows 上解压后没有任何问题,那么你还需要对命令做一些修改:
du -h test.zip 查看文件大小
- h, --human-readable(顾名思义,你可以试试不加的情况)
- d, --max-depth(所查看文件的深度)
file test.zip
- 解压
unzip -q [-O GBK] shiyanlou.zip -d ziptest- -O GBK 指定编码类型
- -d指定目录
使用 unzip 解压文件时我们同样应该注意兼容问题,不过这里我们关心的不再是上面的问题,而是中文编码的问题,通常 Windows 系统上面创建的压缩文件,如果有有包含中文的文档或以中文作为文件名的文件时默认会采用 GBK 或其它编码,而 Linux 上面默认使用的是 UTF-8 编码,如果不加任何处理,直接解压的话可能会出现中文乱码的问题(有时候它会自动帮你处理),为了解决这个问题,我们可以在解压时指定编码类型。
- 查看
unzip -l shiyanlou.zip
-r 指定目录
-d 指定路径
8.2 rar
rar shiyanlou.rar . 创建压缩包
rar d shiyanlou.rar .zshrc 从指定压缩包删除某文件
rar l shiyanlou.rar 查看不解压文件
$ unrar x shiyanlou.rar 全路径解压
unrar e shiyanlou.rar tmp/
8.3
tar -cvf shiyanlou.tar shiyanlou/----需要压缩的文件夹
- c 创建一个tar包
- f 指定文件名,其后要紧跟文件名
- v 以可视的方式输出打包的文件
tar -xf shiyanlou.tar -C tardir 把包解压到tardir文件夹中 - x 解压
- C 指定目录
tar -tf shi.tar 只查看不解压
创建不同压缩格式的文件:
tar -czf shiyanlou.tar.gz~
- xzf 参数不区分先后
压缩文件格式 参数
*.tar.gz -z
*.tar.xz -J
*tar.bz2 -j
tar 排除多个目录
- 我们以tomcat 为例,打包的时候我们要排除 tomcat/logs 目录,命令如下:
tar -zcvf tomcat.tar.gz --exclude=tomcat/logs tomcat
- 如果要排除多个目录,增加 --exclude 即可,如下命令排除logs和libs两个目录及文件xiaoshan.txt:
tar -zcvf tomcat.tar.gz --exclude=tomcat/logs --exclude=tomcat/libs --exclude=tomcat/xiaoshan.txt tomcat
常用命令:
zip:
打包 :zip something.zip something (目录请加 -r 参数)
解包:unzip something
指定路径:-d 参数
tar:
打包:tar -zcvf something.tar something
解包:tar -zxvf something.tar(应该去掉z)
ps: z参数--解压gzip格式的。
指定路径:-C 参数
三、基本操作命令
1、cd
(1)命令
ls [选项] [目录名]
(2)常用参数
参数描述
-a :–all 列出目录下的所有文件,包括以 . 开头的隐含文件
-l : 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来
-d :–directory 将目录象文件一样显示,而不是显示其下的文件
-h :–human-readable 以容易理解的格式列出文件大小 (例如 1K 234M 2G)
-t :以文件修改时间排序
备注:
列出当前目录中所有以d开头的文件目录的详细内容: ls -d d*
2、cd
进入系统根目录 : cd /
进入当前目录的父目录:cd ..
进入当前用户的跟目录 : cd ~
进入上次目录所在目录: cd -
3、mkdir
(1)命令格式
mkdir [选项] 目录
(2)常用参数
参数 描述
-m --mode=模式 设定权限<模式>
-p --parents 可以是一个路径名称。若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录
-v --verbose 每次创建新目录都显示信息
ps:连续创建多个文件夹:
mkdir -vp {test/, test2/, test3/{tt1/, tt2/ }} 同时又在test3下创建了两个子目录
4、mv 移动/重命名
(1)命令格式
mv [选项] 源文件或目录 目标文件或目录
当目的文件/目录不存在是才为重命名;
(2)常用参数
参数 描述
-b --back 若需覆盖文件,则覆盖前先行备份
-f --force 如果目标文件已经存在,不会询问而直接覆盖
-i --interactive 若目标文件已经存在时,就会询问是否覆盖
-u --update 若目标文件已经存在,且源文件比较新,才会更新
-t --target 该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后
5、cp
(1)命令格式
cp [选项] 源文件/目录 目的文件/目录
(2)常用参数
参数 描述
-t --target-directory 指定目标目录
-i --interactive 覆盖前询问(使前面的 -n 选项失效)
-n --no-clobber 不要覆盖已存在的文件(使前面的 -i 选项失效)
-s --symbolic-link 对源文件建立符号链接,而非复制文件
-f --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
-u --update 使用这项参数之后,只会在源文件的修改时间较目的文件更新时,或是对应的目的文件并不存在,才复制文件
例:将test1下最近更新的文件复制到test2下,覆盖前询问:
cp -iu test1/* test2/
6、cat
(1)命令格式
cat [选项] [文件]
(2)常用参数
参数 描述
-A --show-all 等价于 -vET
-b --number-nonblank 对非空输出行编号
-e 等价于 -vE
-E --show-ends 在每行结束处显示 $
-n --number 对输出的所有行编号,由 1 开始对所有输出的行数编号
-s --squeeze-blank 有连续两行以上的空白行,就代换为一行的空白行
-t 与 -vT 等价
-T --show-tabs 将跳格字符显示为 ^I
-u (被忽略)
-v --show-nonprinting 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外
ps:
cat总是与重定向符搭配使用 >;
tac 与cat相反,从最后一行开始显示。
7、nl
将文件加行号显示,与cat -n的区别是它可以有更多的显示方法;
(1)命令格式
nl [选项] [文件]
(2)常用参数
参数 描述
-b 指定行号指定的方式,主要有两种:
-b a 表示不论是否为空行,也同样列出行号(类似 cat -n)
-b t 如果有空行,空的那一行不要列出行号(默认值)
-n 列出行号表示的方法,主要有三种:
-n ln 行号在屏幕的最左方显示
-n rn 行号在自己栏位的最右方显示,且不加 0
-n rz 行号在自己栏位的最右方显示,且加 0
-w 行号栏位的占用的位数