balabalabala
linux是一个多任务,多用户系统。多用户就带来了权限的问题,文件和文件夹都有明确的所有者和相应的读写权限。
文件的所有者分为三类:
文件的权限分为三类
r:read 读
w: write 写
x:execute 执行
文件/文件夹的权限可以以字rwx来表示,因为只有这三种状态,因此也可以用3位二进制的数字来表示或者用八进制来表示。同时文件的权限不会是单一的一个用户的权限,而是所有三种权限的组合,所以可以看到类似下面表格中的权限表示方式:
user/group/other | 八进制数字 | 二进制数字 |
---|---|---|
rwxrwxrwx | 777 | 111/111/111 |
rw-rw-r– | 664 | 110/110/100 |
rw-r–r-- | 644 | 110/100/100 |
需要注意的是,目录不是文件,目录是不可执行的,目录的可执行代表这个目录可以被查看。
看一个例子
% ls -l
总用量 0
总用量 0
drwxr-xr-x 1 root root 0 3月 15 16:41 testdir # 属于root,但是所有用户都可以列举目录内容
-r--r--rw- 1 david david 0 3月 15 16:41 testfile # 属于david,所有用户可读,其他用户可写,david和本组用户不可写
-rw-r--r-- 1 david david 0 3月 15 16:41 testfile1 # 属于david,所有用户可读,只有david可写
-rw-rwxr-- 1 david david 0 3月 15 16:41 testfile2 # 属于david,david可读写,group可读写执行,其他用户只读
也就是安装系统的那个硬盘,是整个系统的最高目录,通常只有root权限用户才有权操作这个目录
这个目录是root用户的目录,跟系统里面的其他用户的目录是分开的,一般用户使用不到这个目录
/home/user 目录的名称跟用户名相同,是一般用户的目录,如果没有特别的设置,所有非root用户的home目录都在/home下面
一般存放一些临时文件,比如linux的socket文件,cache之类的东西,这里的数据重启之后不保证存在,重要的东西不要放在这里
一些运行的时候需要改变的东西放在这里,例如web服务器的网页文件等等
这个目录一般用来挂载可移动存储设备,如光盘,移动硬盘,u盘等等
大部分配置文件都放在这里
启动目录,也是linux内核等存放的地方
非系统自带的软件会被安装在这里,也就是用户自己安装的软件一般放在这里
系统的一些命令会安装在这里
系统的一些库在这里
早期一些软件会安装在这里,目前这个目录基本没什么用
系统内核信息查询目录,本身在磁盘上不存在,每次运行的时候,由内核在内存中创建,里面的文件保存了系统的各种运行信息
系统设备目录,所有设备都可以在这里找到
系统设备和信息目录,一个比较新的目录,里面也是包含了系统所有的设备和信息
系统运行目录,存放一些只有运行的时候才会存在的信息,这个目录重启的时候一定会被重新创建。
在linux下面以点开头的文件/目录为隐藏文件/目录,需要使用特定的参数才能列举出来,这种文件/目录大量出现在用户的home目录下,一般是用做存储配置信息,临时文件等等。
linux下的命令一般都自带help,直接在命令行中以 --help参数执行即可看到。也可以通过man命令查看某个命令的手册:
ls --help
man ls
当命令输出过长的时候,可以用来分页查看
man ls | less
列举文件或者目录的时候使用,可以用来查看文件的基本信息
ls
ls -l # 显示文件的所有参数
ls -a # 显示包括隐藏文件在内的所有文件
ls -lah # 以人类可读的方式显示当前目录下所有文件的信息
切换目录的时候使用
cd # 不带任何参数表示切换到home目录下
cd /path/to/dest # 切换到/path/to/dest目录下
cd - # 只带一个短线代表切换到上一个目录
用于显示当前目录,在需要输入目录参数的时候非常有用
显示命令,用于将文件的内容打印到命令行上面
cat file
需要注意的是,cat可以打印任何文件的内容,甚至是二进制文件,但是二进制文件一般命令行上无法显示,如果要打印的文件过大(几个MB以上)命令行一般会卡住一会儿
打包解包命令,这个命令比较复杂,而且可以组合多个命令实现非常复杂的功能,包括文件分卷压缩等等,请自行666
tar -vxf file.tar|.xz|.gz # 解压几乎所有格式的压缩文件 rar除外
tar -cvzf file.gz dir # 以gz压缩dir目录的所有文件
进程信息查询命令,可以用来查询系统中运行的所有进程的信息
ps -ef # 查询所有进程的信息
杀进程命令,可以用来杀掉某些不想要的进程
kill 1111 ## 杀掉进程id为1111的进程
使用kill方式杀掉的进程一般不会有机会执行退出动作,所以并不安全。kill方式并不那么常用
过滤命令,一般配合其他命令使用,用于对其他命令的输出进行过滤。egrep为其正则表达式版本,功能更加强大,但是一般不常用
ps -ef |grep python # 在所有进程信息里查找所有的带python字样的进程
字数统计命令,一般用来统计文件的行数,经常和其他命令配合使用
cat file | wc
cat file | wc -l # 只输出文件行数
以root权限执行命令
sudo apt-get install terminator # 安装终结者程序
复制目录或文件
cp src dst # 把src复制为dst
cp -Rvf src dst # 把src目录递归复制到dst,如果dst存在且为目录,则dst下面会出现一个跟src一样结构和内容的目录,如果dst不存在,则出现一个dst目录,其结构和内容与src一样
移动目录或文件
mv src dst # 把src移动到dst
删除目录或文件
rm file # 删除file文件
rm -Rvf dir # 递归的删除dir下面的所有文件
rm删除的文件是真的被从文件系统里面删掉了,不是放到回收站里面了,除非通过特殊手段,一般无法回复,所以rm需要谨慎操作
文件权限操作命令,这个命令一般用来给文件添加可执行权限
chmod a+x file # 给file文件user/group/other添加可执行权限
chmod o+w file # 给file文件other添加可写权限
chmod g-w file # 给file文件group去掉可写权限
chmod 666 file # 将file设置为user/group/other可读写,不可执行
修改文件的权限所有者
chown user file # 将file的所有者改为user
执行这个命令需要用户有足够的权限,可以操控被修改的所有者,一般是root用户使用
查看文件的内容
head file # 将文件的前10行打印出来
head file -n 20 # 将文件的前20行打印出来
tail file # 将文件的后10行打印出来
tail file -n 20 # 将文件的后20行打印出来
tail -f file # 持续监控文件并将后面新增的行打印出来
查看目录的结构
tree dir # 显示dir目录中所有的目录和文件的结构
tree dir -d # 只显示dir目录中所有的目录结构
这个命令一般不包含在系统内,需要apt进行安装
后台执行命令。在linux中执行命令的时候,如果命令行窗口关掉的话,会直接也干掉命令行窗口里面开的所有进程,远程执行命令的话,很多时候无法保证命令行窗口一直开启,这种时候就需要nohup命令。
nohup python3 train_model.py > train.log 2>&1 & # 后台启动train_model.py并将标准输出和错误输出重定向到train.log文件
同样能够实现后台运行的工具还有screen,tmux等等。但是一般装完系统之后,nohup系统都会带着,其他命令基本都需要自己安装
ssh登录命令
ssh [email protected] # 以用户user登录ip为192.168.1.123的主机
ssh [email protected] -p 1234 # 以用户user登录ip为192.168.1.123,ssh端口为1234的主机
这个命令只是一个客户端,想要使用的话,还需要被登录的主机上安装ssh服务器,一般使用openssh-server。
ssh默认端口是22,但是为了安全起见,很多服务器都会改变默认的ssh端口
同步命令,这个命令一般用来在不同的文件夹之间同步文件,同步动作能保证两个文件夹内容一致,不管原来改动了什么。这个命令也经常被用来做备份,因为可以实现增量的备份。
rsync -avp src dst # 将src目录的所有内容都同步到dst下面,保持所有标签和权限
rsync -avpe ssh src [email protected]:/path/to/dst # 将src目录的所有内容都同步到192.168.1.123的dst下面,保持所有标签和权限,这个命令可以用ssh协议,跨机器复制文件
执行某个脚本的时候用的命令
source file.sh # 将file.sh中的内容用bash执行
这个命令和直接执行脚本文件是一样的,区别在于这个命令不要去文件具有可执行权限
目前各大linux发行系统中已经使用dash替换bash,这两个是兼容的,由系统自动处理,用户基本不需要关心
apt命令家族,主要用于系统软件的管理
sudo apt-get update # 更新软件仓库信息
sudo apt-get install terminator # 安装终结者程序
sudo apt-get purge terminator # 卸载终结者程序
apt-cache search terminator # 查找终结者程序
文本编辑器,功能比vi弱一些,但是比较方便,学习曲线没有那么陡峭。而且nano编辑器底部自己带着各个快捷键的提示,足以满足日常编辑的需要。写代码肯定不好用,但是ssh到服务器,编辑配置文件足够了。
命令行上的下载工具
以下介绍一些linux上我认为比较好用的工具或者软件,不详细展开,具体内容请自行666.
命令行中的终端会话管理软件,具体内容请666
终结者程序,也是一个终端会话管理软件,用于GUI环境中
bash的替代品,zsh本身功能强大,可配置项极其丰富。oh-my-zsh是zsh的一个配置文件套装,包含了命令行自动补充,语法高亮,git仓库信息提示等等
nautilus右键菜单自定义软件,可以很方便的自定义nautilus的右键菜单
金山wps的linux版本,虽然好多年没更新了,但是文档标准也一直没变化,看文档肯定是可以用的
一个GUI的带断点续传功能的下载软件,软件后端是aria或者wget
github官方出品的全功能文本编辑器,插件丰富功能强大,通过安装各种插件可以实现几乎任何你想到的功能,缺点是太占资源
查看系统内资源占用情况的工具,top一般系统都自带了,htop需要额外安装但是界面看着比较舒服
GUI下面的便签软件,平时拿来记东西用的
所见即所得的markdown编辑器,功能强大
GUI的git仓库管理软件
截屏软件,像qq截屏一样,可以添加各种批注
gnome调节软件,可以优化gnome的各项功能,主题修改等等
类似于windows下的beyondcompare的文本比较软件