Linux 操作
前言
记录Linux相关操作命令和学习过程、心得。学习网站:蓝桥云课程
基本操作
1 | # 创建一个名为 file 的文件,touch是一个命令 |
用户及文件权限管理
1 | # 创建新用户 |
1 | # 查看用户所在组 |
查看文件权限
1 | # 使用较长格式列出文件 |
读权限,表示你可以使用 cat <file name> 之类的命令来读取某个文件的内容;写权限,表示你可以编辑和修改某个文件的内容;
执行权限,通常指可以运行的二进制程序文件或者脚本文件,如同 Windows 上的 exe 后缀的文件,不过 Linux 上不是通过文件后缀名来区分文件的类型。你需要注意的一点是,一个目录同时具有读权限和执行权限才可以打开并查看内部文件,而一个目录要有写权限才允许在其中创建其它文件,这是因为目录文件实际保存着该目录里面的文件的列表等信息。
- 变更文件所有者
1 | # 需要切换到 xiao 用户执行以下操作 |
- 更改文件权限
每个文件有三组固定的权限,分别对应拥有者,所属用户组,其他用户,记住这个顺序是固定的。文件的读写执行对应字母 rwx,以二进制表示就是 111,用十进制表示就是 7,对进制转换不熟悉的同学可以看看 进制转换。例如我们刚刚新建的文件 iphone11 的权限是 rw-rw-rw-,换成对应的十进制表示就是 666,这就表示这个文件的拥有者,所属用户组和其他用户具有读写权限,不具有执行权限。
如果我要将文件 iphone11 的权限改为只有我自己可以用那么就可以用这个方法更改它的权限
1 | # 修改权限 |
Linux 目录结构及文件基本操作
文件目录
FHS(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准),多数 Linux 版本采用这种文件组织形式,FHS 定义了系统中每个区域的用途、所需要的最小构成的文件和目录同时还给出了例外处理与矛盾处理。
FHS 定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该放置设置文件,/bin 与 /sbin 则应该放置可执行文件等等。
第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如 /var/log 放置系统日志文件,/usr/share 放置共享数据等等。
~目录位于/目录之下。例如进入/之后,再进入home,再进入用户,也就进入了~目录。
/目录下除了存放home以外还存放了一些系统文件夹,例如etc,bin,lib等等。
~目录下则存放了Desktop,~更像是我们熟悉的 Windows。在使用绝对路径时,路径的起点是
/目录。例如使用绝对路径进入~时:cd /home/xiao
home 前要加 ‘/’
文件基本操作
-
创建空白文件
1
touch test
若当前目录存在一个 test 文件夹,则 touch 命令,则会更改该文件夹的时间戳而不是新建文件。
-
创建目录
1
mkdir mydir
-
同时创建父目录(多级目录)
1
mkdir -p father/son/grandson
-
复制文件
1
cp test father/son/grandson
要成功复制目录需要加上
-r或者-R参数,表示递归复制,就是说有点“株连九族”的意思。
-
复制整个文件夹和其内文件
1
cp -r father family
若
family文件夹不存在,则生成father副本,并重命名为family。若family存在,则在family下得到father副本。
-
删除文件
1
2
3
4
5
6
7
8rm test
# 若文件为只读文件,-f 参数忽视只读权限之间删除
rm -f test
# 删除目录
rm -r family
rm -rf family -
移动文件、重命名
1
2
3
4mv file1 dir1
# mv 还有重命名的作用
mv file1_oldname file1_newname -
查看文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15cat file1
# 显示行号
cat -n passwd
# 更专业的行号打印
nl -b a file1
# 分页查看
more file1
less file1
# 查看文件头几行或尾几行
head -n 5 file1 # 头5行
tail -n 5 file1 # 尾5行 -
查看文件类型
1
file filename
查找文件
1 | find /etc/(文件目录) -name file.sh(文件名,有后缀则加后缀) |
如开头加 sudo 表示使用管理员权限。可解决一些权限不足的问题。
-name不能乱丢此外还有
locate,which,whereis等查找命令,不细说了
文件压缩与解压
-
zip 解压
1
2
3
4zip -r -q -o dir.zip(要生成的压缩文件命) /home/Desktop(要压缩的文件或文件夹)
# 把多个文件压缩在一起
zip dir.zip file1 file2 file3-r表示递归打包子目录内容。不加-r则无法把文件夹内其他东西压缩在一起-p表示安静模式,不向屏幕输出信息-o表示输出文件zip /dir1/dir2/name.zip file1用这种方式将文件压缩到指定文件夹
-
查看文件大小
1
du -h file1
-h表示人类可读的形式
-
zip 解压
1
2
3
4unzip dir.zip
# 使用安静模式,将文件解压到指定目录
unzip -q file1.zip -d dir_zip若上述指定目录
dir_zip不存在,将会自动创建
-
仅查看压缩包内容
1
unzip -l file1.zip
注意: 使用 unzip 解压文件时我们同样应该注意兼容问题,不过这里我们关心的不再是上面的问题,而是中文编码的问题,通常 Windows 系统上面创建的压缩文件,如果有有包含中文的文档或以中文作为文件名的文件时默认会采用 GBK 或其它编码,而 Linux 上面默认使用的是 UTF-8 编码,如果不加任何处理,直接解压的话可能会出现中文乱码的问题(有时候它会自动帮你处理),为了解决这个问题,我们可以在解压时指定编码类型。
使用
-O(英文字母,大写 o)参数指定编码类型:unzip -O GBK 中文压缩文件.zip
-
tar 压缩
1
tar -P -cd file1.tar /home/Desktop
tar命令压缩可直接将整个文件夹内容压缩进去。不需要像zip命令那样添加-r进行递归-P保留绝对路径符-c表示创建一个 tar 包文件-f用于指定创建的文件名,注意文件名必须紧跟在-f参数之后,比如不能写成tar -fc shiyanlou.tar,可以写成tar -f shiyanlou.tar -c ~。你还可以加上-v参数以可视的的方式输出打包的文件。
-
tar 解压
1
tar -xf fil1.tar -C tardir
解压目录
tardir必须存在。目前还没找到解压到不存在的目录的方法。
-
仅查看压缩包内容
1
tar -tf file1.tar
-
总结
1
2
3
4
5
6
7
8
9# zip:
zip something.zip something # 打包
unzip something.zip # 解包
# 指定路径:-d 参数
# tar:
tar -cf something.tar something # 打包
tar -xf something.tar # 解包
# 指定路径:-C 参数
运行程序
后台运行脚本 CMAhgt.py 把结果(包括报错信息) 输出到 CMAhgt.out 里
1 | nohup python CMAhgt.py > CMAhgt.out 2>&1 & |
查看内存、储存
1 | 查看当前内存(运行内存) |
查找文件
1 | find / -name 'libnetcdf.so.19*' |
slurm调度系统
1 | # 查看任务信息 |
实用bash命令
date输出当前时间, 利用 +%m-%d-%Y 格式化为月-日-年
1 | BACKUPFILE=backup-$(date +%m-%d-%Y) |
:-给参数以默认值。$1表示运行脚本时的输入参数。当运行脚本不输入参数时,:-将提供默认值$BACKUPFILE
1 | archive=${1:-$BACKUPFILE} |
从命令行传递到脚本的参数:$0,$1,$2,$3…
$0 就是脚本文件自身的名字,$1 是第一个参数,$2 是第二个参数,$3 是第三个参数,然后是第四个。$9 之后的位置参数就必须用大括号括起来了,比如,${10},${11},${12}。
-
$#: 传递到脚本的参数个数 -
$*: 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过 9 个 -
$$: 脚本运行的当前进程 ID 号 -
$!: 后台运行的最后一个进程的进程 ID 号 -
$@: 与$*相同,但是使用时加引号,并在引号中返回每个参数 -
$: 显示 shell 使用的当前选项,与 set 命令功能相同 -
$?: 显示最后命令的退出状态。 0 表示没有错误,其他任何值表明有错误。 -
tr可将小写字母转为大写字母。但需要配合重定向
1 | echo "hello" | tr 'a-z' 'A-Z' |
- 数学运算,
expr只能用于整数计算
1 |
|
- 测试运算符











