千万不要随意删除系统自带的文件
千万不要随意删除系统自带的文件
千万不要随意删除系统自带的文件
根目录的结构与用途
/usr
:(unix software resource)与软件安装/执行有关
/var
:(variable)与系统运作过程有关
/etc
:系统主要的配置文件目录
/lib
:系统的函式库
/opt
:第三方协力软件放置的目录
/proc
:一个虚拟文件系统,系统运行的每一个进程都会自动在这个目录下面创建一个进程目录。
/tmp
:一个临时文件夹,系统的一些临时文件会放在这里。
/lost+found
:系统发生错误时(比如非法关机),可以在这里找回一些丢失文件。
/media
:多媒体挂载点,像U盘、移动硬盘、windons分区等都会自动挂载到这个目录下。
/mnt
:临时挂载点,可以自己挂载一些文件系统到这里。
/run
:系统从启动以来产生的一些信息文件。
/home
:用户家目录,存放用户个人文件和应用程序。
/boot
:和系统启动相关的文件,像grub相关文件都放在这里
路径与环境变量
以/
开头的即为绝对路径,/
为根目录;其余的为相对路径,“相对"指的是相对于当前目录。
.
代表当前目录(./
),..
代表上一层目录(../
),-
代表前一个工作目录。
区分是目录还是文件通过/
标志,a
表示文件,a/
表示目录。(本质上目录和文件没有区别)
./*.sh
表示在当前目录下执行*.sh
文件。
~
表示目前用户身份所在的家目录,~
=/home/[用户名]/
$
表示现在的身份不是root
用户
export
设置或显示环境变量 export [-参数] 环境变量 [=变量值]
-p
列出所有环境变量。
环境变量就是系统预定的参数,如系统操作和程序执⾏时,默认设定的参数,比如path
路径变量,分为系统变量(全局变量)和用户变量(局部变量)。
全局变量:sudo gedit ~/.bashrc
打开配置文件,export PATH=...
在配置文件中输入要改变的变量或者在终端输入 echo "export PATH=..."
,source ~/.bashrc
刷新一下配置文件。
局部变量:直接在终端输入 export PATH=...
在重启系统之前,一直生效。
快捷键
终端
Ctrl + l清屏, Ctrl + h删除上一个字符,Ctrl + w删除上一个单词
Ctrl + u删除光标前当前行所有字符,Ctrl + d 清除光标后的字符 或 关闭终端(需要先清空命令行的字符)
Ctrl + a移动到开头,Ctrl + e移动到结尾,Ctrl + b往前移动一个字符,Ctrl + f往后移动一个字符
Ctrl + p上一个命令,Ctrl + n上几个命令中的下一个命令
Ctrl + j 输入信息,就是回车
Ctrl + Tab 切换同一终端下的另一个窗口
Ctrl + r (reverse-i-search)
是一种用于搜索命令历史的功能。继续按 Ctrl + r
进行下一次匹配;按下左右箭头键退出搜索模式,然后进行编辑;退出搜索模式而不选择任何命令,可以按下 Ctrl + g
或 Ctrl + c
键。
文件夹
Ctrl + l显示当前的目录下的绝对路径
Conda
Conda
和Anaconda
的主要异同点
特性 | Conda | Anaconda |
---|---|---|
定义 | 开源的包管理器和环境管理系统。 | 开源的Python发行版,包含Conda、Python以及超过150个科学包及其依赖。 |
主要用途 | 管理包和环境。 | 为科学计算、数据科学、机器学习提供一站式解决方案。 |
包含内容 | 不包括任何预装包,只有管理工具。 | 包含Conda、Python和大量预装的科学计算包。 |
适用范围 | 不限于Python,也可以管理其他语言的软件包,如R、Ruby、Lua。 | 主要针对Python社区,尤其是需要大量科学计算包的用户。 |
安装大小 | 较小,因为只安装必要的管理工具和用户指定的包。 | 较大,因为包括了大量的科学计算和数据分析包。 |
独立使用 | 可以独立使用,不需要Anaconda。 | 包含Conda,因此可以使用Conda的功能,但其自身作为一个整体发行版。 |
目标用户 | 需要精简安装或具体控制环境和包的高级用户。 | 需要大量预装包以便立即开始工作的初学者和专业人士。 |
跨语言支持 | 支持。 | 通过Conda支持,但Anaconda发行版主要集中在Python及其科学包上。 |
用来管理python环境,便于切换。
查看已安装的conda:conda info -e
创建新环境env_name,并在该环境下安装名为package_name的包:conda create -n env_name package_name
,如conda create -n python2 python=python2.7 numpy pandas
表示创建了python2环境,python版本为2.7,同时还安装了numpy pandas的包。
进入环境 conda activate env_name
退出conda已进入的环境 conda deactivate
删除conda环境或者环境中对应的包 conda remove -n env_ name package_name/--all
切换环境时,需要先进入base
环境,通过在~/.bashrc
设置
alias enterbase=". /home/tvoid/anaconda3/bin/activate"
alias entergpt=". /home/tvoid/anaconda3/bin/activate;conda activate gptac"
来手动进入anaconda创建的环境,而不是开启每个终端都是自动进入该环境。
环境
export PATH="/home/tvoid/anaconda3/bin:$PATH"
该环境修改在~/.bashrc
之后,在终端所有的运行的python库,都会默认选择anaconda
中的环境库。因此,找不到python库时,记得在anaconde
的默认环境中下载所需库。不要直接使用sudo apt install xxx
直接下载。
指令
cat
对文件进行链接以及输出导向符号的使用:cat [-参] 文件
cat -n
:对输出文本进行编号
cat
只接一个文件时,只对该文件在终端显示。
cat -E
:每一行的末尾以$
结束
cat a1.txt a2.txt > a3.txt
链接a1 a2文件到a3,若a3不存在,则自动创建。
cat a2.txt a1.txt >> a3.txt
把a2 a1按照此顺序追加到a3中,若a3不存在,则自动创建。
上式区别在于>
是建立新的包含a1a2的a3,而>>
是在原有的基础上,追加的a2a1到a3。若先>
再>>
,则a3显示a1a2a2a1;但若先>>
再>
,则只有a2a1,因为>
相当于刷新了a3文件。
chmod
改变文件或目录的权限 chmod [-参] [<权限范围> +/-/= <权限设置>] 文件/目录
权限范围:u
user,g
group,o
other,a
all
读[r]=4
,写[w]=2
,执行[x]=1
,无权限[-]=0
-R
recursion目录以及子目录所有文件
+
添加目录或文件拥有指定权限,-
目录或文件删除指定权限,=
设置目录或文件拥有唯一指定权限
chmod 775 a.txt
就是说赋予a.txt
u=7=4+2+1
g=7=4+2+1
o=5=4+0+1
的权限
chmod ug+rwx a.txt && chmod o+rx a.txt
同上
root
不受权限影响,可随意操作,linux中程序是否可执行与扩展名无关,只与x
权限有关。
chgrp改变所属组群权限,chown改变所属拥有者权限
cd
进入目录,进入根目录cd /
,进入家目录cd
或者cd ~
,进入上一级目录cd ..
,回到之前目录cd -
。cd
后不加/
的话,相当于进入当前目录下的文件,比如你现在在家目录 /home/XXX
,输入 cd pictures
那就是进入/home/XXX/pictures
目录。
apt-get
安装卸载等,
其中apt-get update
从服务器更新可用的软件包列表;
apt-get upgrade
根据列表,更新已安装的软件包。upgrade 不会删除在列表中已经没有的软件包,也不会安装有依赖需求但尚未安装的软件包;
apt-get full-upgrade
根据列表,更新已安装的软件包。full-upgrade 可能会为了解决软件包冲突而删除一些已安装的软件包;
apt-get dist-upgrade
根据列表,更新已安装的软件包。dist-upgrade 可能会为了解决软件包冲突而删除一些已安装的软件包,也可能会为了解决软件包依赖问题安装新的软件包。
apt update --fix-missing
apt install -f
修复依赖关系,-f是–fix-broken的缩写
apt-get install -s xxx
仿真,调试xxx的安装,并非真正的安装。
apt-get install -y xxx
有选项选择时,直接为yes
apt-get search xxx
查找某些库
aptitude
aptitude
是一个用于包管理的命令行工具。它类似于 apt-get
和 apt
,但提供了更多的功能和用户界面。
sudo aptitude install xxx
可以解决apt
的依赖问题
sed
sed
是一个流式文本编辑器。
可以打开列表中指定位置的文件,有 vim $(ls | sed -n '5p')
使用vim
打开ls
中第5
个文件,注意,文件索引是从1
开始。
dpkg
安装卸载*.deb
软件
sudo dpkg -i *.deb
安装软件 sudo dpkg -r package_name
卸载软件
dpkg -l/--list
查看安装版本号
less
比more
更方便
随意浏览文件 less [-参] 文件
-e
当文件显示结束后,自动离开
Ctrl + F
- 向下移动一屏,Ctrl + B
- 向上移动一屏,Ctrl + D
- 向下移动半屏,Ctrl + U
- 向上移动半屏,j
- 向下移动一行,k
- 向上移动一行,G
- 移动到最后一行,g
- 移动到第一行,q / ZZ
- 退出 less 命令,v
- 使用配置的编辑器编辑当前文件,h
- 显示 less 的帮助文档
当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置:
ma
- 使用 a
标记文本的当前位置 (m:mark,a随便一个标记符号)
'a
- 导航到标记 a
处
当终端内容过多时一整个屏幕装不下,如ls /usr/bin/
,可以通过shift+PgUp/PgDn
实现翻页;更大的内容,可以ls /usr/bin/ | less
切换less显示。
mkdir
建立目录 make directory mkdir [-参] 目录名
-p/--parents
确保每个目录名都存在,若不存在,则创建。
-m
创建具有权限的目录,如mkdir -m 711 */
如果想要给文件命名为带空格的名称,需要使用转义符\
或者使用单引号或双引号表示。mkdir text\ 1
或者mkdir 'text 1'
touch
修改文件或者目录的时间属性,包括存取时间和更改时间。(ls -l
可以显示档案的时间记录。)若文件不存在,系统会建立一个新的文件。
创建文件在新文件夹内
mkdir B && touch B/myfile.txt
或者创建一个函数mkfile() { mkdir -p -- "$1" && touch -- "$1"/"$2" }
加入到~/.bashrc
中
echo 'mkfile() { mkdir -p "$(dirname "$1")" && touch "$1" ; }' >> ~/.bashrc
source ~/.bashrc
mkfile ./fldr1/fldr2/file.txt
mv
文件/目录改名、或将文件/目录移入其它位置。
mv source_file/dir dest_file/dir
对于s_f
和d_f
来说,就是把s_f
重命名为d_f
对于s_f
和d_d
来说,就是把s_f
移动到d_d
中去
对于s_d
和d_f
来说,指令错误
对于s_d
和d_d
来说,若d_d
已存在,则将s_d
作为子目录移动到d_d
中去,如若d_d
不存在,则重命名为s_d
为d_d
。
rm
删除目录或文件 remove
-f
强制删除;-r
删除指定目录下的所有文件及子目录
pwd
显示当前位置,pwd (print wording directory)
默认打开终端进入的目录是你的用户目录,即输出pwd显示的是/home/你的用户名
。
whereis & locate & which & find
用来查找文件,其中whereis
和locate
是利用数据库来搜寻数据的,所以速度很快
whereis
是用来查找可执行程序或指令
locate
适用范围比whereis
大的多,且支持模糊查询,还可以使用-r
启用正则表达式
find
find [path] [option] [action]
遍历在当前工作目录及其子目录,非常消耗硬盘资源,效率极低
which
查找在PATH
变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果
grep
grep [-acinv] '搜寻字符串' filename
查找文件里符合条件的字符串,若改行有关键字,则将整行列出来。
-n
输出行号-i
忽略大小写的不同,所以大小写视为相同-v
反向选择,输出没有'搜寻字符串'
的那一行
ps
ps [options] [--help]
显示当前进程的状态,类似Windows
的任务管理器
-A
列出所有进程-a
显示所有线程,包括其他用户的进程-au
显示较为详细的咨询-aux
显示进程用BSD格式-e
显示所有进程-f
全格式
查看程序进程ps aux | grep file
,查看线程的命令ps -aL | grep file
,查看主线程和子线程之间的关系pstree -p 主线程的id
help&man
help
是内部指令的帮助,man
是外部指令的帮助
nm
用于显示二进制目标文件的符号表
nm *.cpp.o
可以罗列出*.cpp.o所有外部链接
head
用于显示文件的前几行 head [options] [file]
-n Num
指定显示Num
行[file]
要显示前几行的文件名。如果不提供文件名,则会从标准输入读取数据
sort
用于对文本排序 sort [options] [file]
-r
表示逆序排序(从大到小)-n
以数值大小进行排序,而不是按照字母顺序-f
忽略大小写进行排序[file]
是要排序的文件名。如果不提供文件名,则从标准输入读取数据
sort -rh
对文件进行逆序排序。
du
du
代表disk usage,它能够递归地扫描指定目录并显示目录或文件的磁盘使用情况。
- 查看当前目录下所有文件和子目录的空间使用情况:
du -h
,-h
为可读的格式显示文件大小。 - 查看指定目录的空间使用情况:
du -h /path/to/directory
- 仅显示目录的总空间使用情况,而不显示目录下的每个文件和子目录:
du -sh /path/to/directory
,-s
选项用于只显示目录的总大小。
大小单位及参数:KB-k
、MB -m
、GB-g
du -h --max-depth=1 | sort -rh | head -n 10
读取当前目录中的所有目录,按照大小逆序输出前10个
重定向
>
表示输出重定向,<
表示输入重定向
command1 > file1
表示将执行command1然后将输出的内容存入file1,注意任何file1内的已经存在的内容将被新内容替代。如果要将新内容添加在文件末尾,请使用>>
操作符
cat < hello.txt > hello2.txt
表示将hello.txt
内容传递给cat
的标准输入,cat
命令会显示hello.txt
文件的内容
> hello2.txt
表示将cat
命令的标准输出写到文件hello2.txt
中。既将cat
命令显示的hello.txt
的内容保存到hello2.txt
新的文件中
等价于cat hello.txt > hello2.txt
command 1 > file
标准输出文件stdout
的文件表述符为1
command 2 > file
标准输出文件stderr
的文件表述符为2
使用管道符可以更好的进行重定向。|
为管道符(pipe),将左侧的输出作为右侧的输入。
压缩
tar
打包同时压缩/解压缩文件
参数:-c
建立新的文件.tar
,-f
指定备份文件(所谓备份文件指的是压缩或解压出具有相同文件的*.tar
),-j
使用bzip2
处理备份文件,-x
从备份中还原文件,-z
使用gzip
处理文件.gz
,-v
显示详细信息。
例:打包文件 tar -c a1.txt a2.txt > s1.tar
打包为s1.tar
将该目录下的所有txt
文件打包为a5.tar
:tar -cf a5.tar *.txt
将该目录下的所有txt
文件打包为a6.tar.gz
:tar -zcf a6.tar.gz *.txt
解压文件 tar -zxvf s1.tar.gz
rar
解压:rar x FileName.rar
压缩:rar a FileName.rar DirNam
zip
zip -r filename.zip filesdir
在这个例子里,filename.zip
代表你创建的文件,filesdir
代表你想放置新 zip 文件的目录。-r
选项指定你想递归地(recursively)包括所有包括在 filesdir
目录中的文件。
要抽取 zip 文件的内容,键入以下命令:
unzip filename.zip
bash通配符
通配符(wildcard)
*
代表0到无穷多个任意字符?
代表一定有一个任意字符[ ]
代表一定有一个在括号内的字符(非任意字符)。如[abcd]
表示一定有一个字符,可能是a,b,c,d
任意一个。[ - ]
若有减号在括号内,代表在编码序列内的所有字符。如[0-9]
代表0
到9
之间的所有数字,如[a-z]
代表a
-z
之间的所有小写字母,因为ASCII
编码是连着的,如果是大写英文/小写英文/数字等等,[a-zA-Z0-9]
[^ ]
若在括号内第一个字符为^
,那表示反向选择。如[^abc]
代表一定有一个字符,只要是非a,b,c
的其他字符都可以
[root@www ~]# LANG=C <==由于与编码有关,先配置语系一下
范例一:找出 /etc/ 底下以 cron 为开头的档名
[root@www ~]# ll -d /etc/cron* <==加上 -d 是为了仅显示目录而已
范例二:找出 /etc/ 底下文件名『刚好是五个字母』的文件名
[root@www ~]# ll -d /etc/????? <==由于 ? 一定有一个,所以五个 ? 就对了
范例三:找出 /etc/ 底下文件名含有数字的文件名
[root@www ~]# ll -d /etc/*[0-9]* <==记得中括号左右两边均需 *
范例四:找出 /etc/ 底下,档名开头非为小写字母的文件名:
[root@www ~]# ll -d /etc/[^a-z]* <==注意中括号左边没有 *
范例五:将范例四找到的文件复制到 /tmp 中
[root@www ~]# cp -a /etc/[^a-z]* /tmp
正则表示法
正则表示法(Regular Expression),简单的说就是处理字符串的方法,是以行为单位来进行字符串的处理行为,通过一些特殊符号的辅助,可以让使用者轻易的达到搜寻、删除、取代特定字符串的处理程序。如,只想找到VBird
(前面两个大写字符)或Vbrid
(仅有一个大写字符)这个字样,但不需要其他的字符串,如VBIRD
、vbird
等都不需要。如果没有正则表示法的环境中,或许要使用忽略大小写的办法,但会搜索到不需要的字符串,再或者分别以VBird
和Vbird
搜索两遍。
正则表示法基本上是一种表示法,只要工具程序支持这种表示法,那么该工具程序就可以用来作为正则表示法的字符串处理之用。如vi,grep,awk,sed
等工具支持正则表示法,但cp,ls
等指令不支持正则表示法,只能使用bash自身的通配符而已。
系统其实记录的仅有0和1,我们看到的字符文字与数字都是通过编码表转化来的。不同语系编码表不同,因此语系会影响到正则表示法的输出结果。如
LANG = C
时,0 1 2 3 4 ... A B C D ... Z a b c d ... z
LANG = zh_TW
时,0 1 2 3 4 ... a A b B c C ... z Z
由于两个语系输出结构不同,要截取大写字符使用[A-Z]
不一定是正确的。因此,使用正则表示法时,需要特别留意当时环境语系是什么。
为了避免因为语系的不同而特别留意的操作,有如下特殊意义的符号
特殊符号 | 代表意义 |
---|---|
[:alnum:] | 代表英文大小写字符及数字,亦 0-9, A-Z, a-z |
[:alpha:] | 代表任何英文大小写字符,亦A-Z, a-z |
[:blank:] | 代表空格键与 [Tab] 按键两者 |
[:cntrl:] | 代表键盘上面的控制按键,亦包括 CR, LF, Tab, Del… 等等 |
[:digit:] | 代表数字而已,亦 0-9 |
[:graph:] | 除了空格符 (空格键与 [Tab] 按键) 外的其他所有按键 |
[:lower:] | 代表小写字符,亦 a-z |
[:print:] | 代表任何可以被打印出来的字符 |
[:punct:] | 代表标点符号 (punctuation symbol),亦: " ’ ? ! ; : # $… |
[:upper:] | 代表大写字符,亦 A-Z |
[:space:] | 任何会产生空白的字符,包括空格键, [Tab], CR 等等 |
[:xdigit:] | 代表 16 进位的数字类型,因此包括: 0-9, A-F, a-f 的数字与字符 |
用中括号[ ]
搜索集合字符,无论括号里有几个字符都代表一个字符。
行首与行尾字符^
$
,注意区分于[^ ]
。小数点.
有其他特殊意义,因此与行首行尾结合使用时,需要使用逃脱字符\
来加以解除特殊意义。\.
以上特殊符号引用的时候要括在[ ]
内(因为代表的是一个字符),里面的[ ]
是特殊符号的一部分。如grep -n '^[[:lower:]]' filename
.
代表一定有一个任意字符,不同于通配符
*
代表重复前一个0到无穷多次的意思,为组合形态,不同于通配符。如o*
表示拥有空字符或者一个以上的字符
限定连续字符范围{}
,由于shell中{
}
有特殊含义,因此需要结合逃脱字符\{
\}
。如grep -n 'go\{2\}' filename
表示寻找两个o
的字符串,grep -n 'go\{2,5\}' filename
表示寻找2-5个o
的字符串,grep -n 'go\{2,\}' filename
表示寻找2个以上o
的字符串
正则表示法与通配符是完全不一样的。通配符代表的是 bash 操作接口的一个功能,但正则表示法则是一种字符串处理的表示方式。