Linux基本命令
快捷键
Tab : 命令补全,当你忘记某个命令的全称时可以只输入它的开头的一部分,然后按下 Tab 键就可以得到提示或者帮助完成。
Ctrl+c : 强行终止当前程序。
Ctrl+d : 键盘输入结束或退出终端。
Ctrl+s : 暂停当前程序,暂停后按下任意键恢复运行。
Ctrl+z : 将当前程序放到后台运行,恢复到前台为命令fg。
Ctrl+a : 将光标移至输入行头,相当于Home键。
Ctrl+e : 将光标移至输入行末,相当于End键。
Ctrl+k : 删除从光标所在位置到行末。
Alt+Backspace : 向前删除一个单词。
Shift+PgUp : 将终端显示向上滚动。
Shift+PgDn : 将终端显示向下滚动。
使用帮助手册
直接输入man man
软件安装、更新、删除
在安装前确认是否软件库有这个软件:
sudo apt-cache search somesoftware
安装只需要执行这样的命令即可:
sudo apt-get install htop
在软件被破坏时重新安装:
sudo apt-get --reinstall install htop
更新软件源:
sudo apt-get update
更新软件包:
sudo apt-get upgrade
卸载一个软件也很简单:
sudo apt-get remove htop
如果连配置文件也想一并删除:
sudo apt-get purge htop
用户
查看用户:
whoami
使用adduser命令创建用户并设置密码:
$ sudo adduser <用户名>
su,su- 与 sudo
$ su 切换到用户 user,执行时需要输入目标用户的密码。
$ sudo 以特权级别运行 cmd 命令,要求当前用户属于 sudo 组,且需要输入当前用户的密码。
$ su - 切换用户,同时环境变量也会跟着改变成目标用户的环境变量
查看用户组
groups user
删除用户
sudo deluser user --remove-home
文件权限管理
变更文件所有者
$ sudo chown new_owner file
修改文件权限
有两种方式对文件权限进行修改:
-
第一种方式:二进制数字表示。每个文件的三组权限对应一个 “rwx”,每一位可以用 0 或 1 表示是否有权限,例如只有读和写权限的话就是 “rw-” - “110”,所以"rwx"对应的二进制"111"就是十进制的7。
所以将 file 文件权限改为 “rwx------” 的命令是:
$ chmod 700 file -
第二种方式:加减赋值表示。假设一开始 file 文件的权限是 “rwxr–r–” 完成上述同样的效果,还可以:
$ chmod go-rr file
g、o 还有 u 分别表示 group、others 和 user,+ 和 - 分别表示增加和去掉相应的权限。
搜索文件
which
which只从环境变量指定的路径中去搜索文件,所以我们常常使用which来判断是否安装了某个软件。
例如:
$ which nano
whereis
一个比较简单的搜索命令,它直接从数据库而不是硬盘查询,而且只能搜索特定的文件。所以,它的搜索很快。
locate
在这里要先介绍" /var/lib/mlocate/mlocate.db "数据库,因为 locate 命令就是通过这个数据库查找的。这个数据库由系统每天定时维护更新,所以有时候需要手动执行 updatedb 命令来更新数据库。
例如,查找 /usr 及其子目录下所有以 a 开头的文件:
$ locate /usr/a
find
find命令是一个功能非常强大的命令,它可以根据文件的各个属性来搜索,在此只介绍其简单的搜索。其基本命令格式为:
find [path] [option] [action]
例如,在 chen 目录下搜索名字为 myfile 的文件或目录:
$ sudo find chen -name myfile
文件解压缩
rar
创建压缩文件:
创建一个文件名为files.rar的压缩包,压缩内容为名为myfiles的目录(或者文件)
rar a files.rar myfiles
使用 a 参数添加文件进压缩包:
rar a files.rar 文件名
使用 d 参数删除文件:
rar d files.rar 文件名
zip
创建压缩包
zip -r -o ehpc.zip ./Desktop
其中,-r 参数表示递归,所以上面命令是打包ehpc目录进压缩包;-o 参数表示输出到ehpc.zip压缩文件。
使用 -e 参数进行加密
zip -r -e -o ehpc.zip ./Desktop
需要注意的是,由于编码问题linux下和windows下的文本文件可能会不同,如果希望在linux压缩的文件在windows下正常解压,可以加上 -l 参数。
查看与解压
解压很简单:
unzip ehpc.zip
查看只需加上 -l 参数:
unzip -l ehpc.zip
tar
实际上,在linux中用得更多的是tar工具。tar 原本只是一个打包工具,没有压缩功能,需要配合其他具有压缩功能而没有打包功能的工具进行打包压缩。
创建一个 tar 包
tar -cf ehpc.tar ./Desktop
其中,-c 参数表示创建,-f 参数表示指定文件名,必须跟在文件名之前。
可以发现这个tar包和原大小相同。
查看一个 tar 包
tar -tf ehpc.tar
解包一个 tar 包到指定目录
tar -xf ehpc.tar -C ehpcdir
上面我们说了tar需要配合其他工具进行压缩,其实一般只需要加一个参数就可以了。这里以gzip为例:
tar -czf ehpc.tar.gz ./
解压缩:
tar -xzf ehpc.tar.gz
管道与一些文本命令
&&与||
与C语言相同
管道
管道
通常我们在命令行中使用匿名管道,由分隔符 | 表示,而命名管道更常出现在源代码中。
例如:
ls -a | grep mysql
这个命令就是先执行 ls -a 命令,然后将输出结果作为输入执行grep mysql命令在其中查找包含mysql的文件。
grep :
在上面我们已经有一个使用 grep 命令的例子了,实际上我们还可以直接使用:
grep -r “ehpc” ~
搜索 ~ 目录下所有包含"ehpc"的文件。
wc :
统计并输出一个文件中行、字节等数据的数目。其中,-l 参数表示行数,-c 参数表示字节数。
结合管道使用,统计文件的个数:
ls -a | wc -l
ls -a | wc -c
ls -a | wc -lc
uniq :
在上面的统计中,我们可能会想要除去一些重复行以免影响结果,这时候我们可以使用 uniq 命令:
cat words | uniq
值得注意的是,uniq只除去连续重复的的行,如果希望全文达到同样的效果我们往往会先使用 sort 命令进行排序,即:
cat words | sort | uniq
文本处理
sort
默认为字典排序:
ls -a | sort
反转排序:
ls -a | sort -r
col
相信许多程序员在实际中都会遇到类似于将程序代码中的tab转空格的需要,而linux提供了tab和空格相互转换的命令 col。
在这里,-x 参数表示将 tab 转换成空格,而 -h 参数则相反。
例如:
cat myFile | col -x | cat -A
tr
替换操作(删除操作也可以视为一种替换操作)也是文本处理常用的操作之一。
如果是要删除,可以使用 -d 参数:
echo “Hello world!” | tr -d “el”
这样会删除"Hello world!"中所有的“e”和“l”。
再例如将小写转换成大写:
echo “Hello world!” | tr ‘[a-z]’ ‘[A-Z]’
paste
这个命令可以简单地合并文件。
例如将数据以 ‘;’ 为分隔符合并(默认的分隔符为Tab):
paste -d ‘;’ data1 data2 data3
重定向
重定向
重定向是通过 ‘>’ 和 ‘>>’ 等操作符完成的,(当然也有’<‘和’<<’,前者是导向,后者是追加),其实将标准输出看作一个文件的话,将命令输出导向到另一个文件自然也是没问题的。
例如:
echo “Hello world!” > output
结合管道:
cat words | sort | uniq >> output
文件描述符
除了标准输出,我们还经常需要重定向标准错误,在此就必须提到标准输入、标准输出和标准错误的文件描述符。在linux中,它们的文件描述符分别是0、1、2,我们可以通过这几个描述符来完成我们想要的操作。
我们可以这样来将标准输出和标准错误重定向到同一个文件:
cat words | sort | uniq > output 2>&1
其中,&表示后面的是标准输出而不是一个文件名为1的文件,而这里的重定向顺序也是不能改变的。
也可以这么做:
cat words | sort | uniq &> output
永久重定向以及“丢弃”输出
我们很容易想到如果我们想不断将标准输出重定向到某个文件,难道需要在每一个命令后面加上重定向命令?当然是不需要的,linux提供了永久重定向的方法。当然,这里的永久也并不是那么永久。
我们可以这样做:
exec 1> output
其中 exec 命令的作用是用新的进程去替换旧的进程,或者指定重定向。
有时候我们仅仅希望执行命令而不想要其输出,这时候我们可以将输出重定向到空设备 /dev/null :
cat words | sort | uniq 1>/dev/null 2>&1
这样输出结果就没有啦。
进程的基本操作
前台/后台切换
终止一个在前台运行的进程的快捷键是 ctrl + c 。将当前进程停止并转到后台的快捷键是 ctrl + z。
那么,如何让我们的进程在前台与后台之间切换呢?
通过 & 这个符号,让我们的命令在后台中运行。
例如:
ls &
这样命令就会在后台自己运行了。
查看在后台的工作可以使用:
jobs
这时我们可以看到每行是这样的格式:
[1] + suspended …(command)
其中,第一列的数字表示job编号,也就是转到后台的工作的编号,第二列如果是 ‘+’ 表示的是这是最后一个被转入后台的工作, ‘-’ 的话则是倒数第二个,其他的话在这列没有符号。第三列表示状态,而后面则是命令本身。
把工作从后台拿回前台可以使用:
fg %jobid
例如, fg %1
如果只是希望其在后台运行的话,可以:
bg %jobid
终止
终止命令比较简单,但是在参数上我们可以通过选择信号值来决定以何种方式终止程序,信号值可以这样查看:
kill -l
所以可以这样终止程序:
kill -signal pid
或者
kill -signal %jobid
进程管理
top
实时查看系统的一些关键信息的变化。
top详解
ps
配合 grep 和正则表达式使用。
例如:
ps aux | grep slurm
打印出的信息:
- F:进程的标志(process flags),当 flags 值为 1 则表示此子程序只是 fork 但没有执行 exec,为 4 表示此程序使用 root 权限
- USER:进程拥有者
- PID:进程ID
- PPID:父进程的PID
- SID:session 的ID
- TPGID:前台进程组的ID
- %CPU:进程占用的CPU百分比
- %MEM:占用内存的百分比
- NI:进程的 NICE 值
- VSZ:进程使用虚拟内存大小
- RSS:驻留内存中页的大小
- TTY:终端ID
- S or STAT:进程状态
- WCHAN:正在等待的进程资源
- START :启动进程的时间
- TIME:进程消耗CPU的时间
- COMMAND:命令的名称和参数
查看进程树:
pstree