贡献者: addis
man <命令> 会给出命令的帮助 (manual)
clear 清空命令行(其实是向下滚动一页)
^ 代表 Ctrl 键
目录/文件名 执行.如果在当前目录就用 ./文件名 执行
#! 开头,如 #!/bin/bash(默认)或者 #!/usr/bin/python
ls -l -h 可以写成 ls -lh. 有些段选项有对应的长选项,如 ls -l 相当于 ls --human-readable.
ls -1 可以将文件名列成一列,ls -v 可以按照数字的大小排序(否则是逐位排序,如 1,10,100,2,10,200),ls *.md 可以只列出 md 文件
Ctrl-D 可以关闭当前 terminal, 安装 bash-completion 软件可以让该功能更完善
$<var> 表示变量的值,自定义变量可以用 <var>=<val>, 注意等号两边不能有空格.
env 命令可以查看环境变量
etc/profile 文件的底部定义变量可以让所有人登录后都获得该变量.如果要只对一个用户创建该变量,在其 home 目录创建 .profile 文件即可.
/etc/bashrc 和 ~/.bashrc 文件都会被执行
!<number> 可以重新输入第 <number> 条历史命令
/etc/passwd 文件中记录了系统的所有 user
clear 命令
df 用于查看磁盘空间, -h 选项可以显示 Mb, Gb 等.
du /some/path 用于查看指定目录中所有子文件夹的大小, -a 选项可以显示文件夹和文件. --max-depth=N is used to control the level of subfolders to display, -h is for human readable file size (Mb, Gb, etc)
du -hd 0 用于查看当前目录的大小(不会跟随 symlink,但是会包括 mount).-h 是 human readable,-d 是 depth
ctrl+u 可以删除光标前面的所有内容
ctrl+c 可以放弃当前输入直接开始新的一行
pwd (present working directory)
pwd -P 可以显示当前的绝对目录,即不含 ~ 等符号以及 symbolic link
cd (change directory) / (硬盘根目录) ~ (缩写 /home/parallels) (用户的 home 文件夹)
cd 相当于 cd ~
./ 表示当前目录,常用于执行可执行文件或者 .sh
~/Documents , ~/Desktop, /usr/bin (gfortran 安装在这里)
cd <文件夹名> 只能用于当前目录中的文件夹
cd .. 返回上层目录
cd - 返回刚才所在的目录
cd `pwd -P`, 两个 `(backtick)内的东西会先展开
rm <filename> 或者 rm /<dir>/<filename> 删除文件 (注意是永久删除!)
mv <filename> /<dir> 可以移动文件, mv <filename> <newname> 可以重命名.注意 mv 会覆盖文件,但是不会覆盖文件夹(只要目标的同名文件夹非空就不行,即使里面没有同名文件).此时可以用 rsync.
cp <filename> /<dir> 复制文件 cp <filename> <newname> 复制到当前目录且重命名. 复制多个文件用 cp <file1> <file2> <dir>,也可以在 <dir> 前面加 -t.注意 cp 会覆盖目标文件以及文件夹.
cp 会默认拷贝 symlink 指向的文件而不是 symlink 本身.-d 选项可以只拷贝 link.
cp 会默认覆盖目标的同名文件,cp -n 可以不覆盖且跳过(但不会提示).如果要提示且手动逐个选择是否覆盖,用 -i 选项.
<program_name> <filename.extension>
/mnt 目录下
sudo fdisk -l 显示所有的外接硬盘的路径名
sudo mount <硬盘地址> <新建文件夹路径>
sudo umount <硬盘地址> 断开连接
sudo mount -a 把 /etc/fstab 中的设置全部 mount 一次
ln -s /path/to/file /path/to/symlink
mkdir 新建文件夹, rmdir 删除空文件夹, rmdir -r (recursive) 删除所包含的文件夹 (其实不用 rmdir 用 rm 也可以!),-P 选项可以一次创建多层目录
dd 命令可以直接在当前位置生成一个大小为 100 MB 的文件,内容为随机,还会显示写入速度
dd if=/dev/urandom of=./dump.txt bs=1048576 count=1024 写 1024Mb 随机文件
locate ??? 命令可以从数据库中寻找计算机上所有文件名包含 ??? 的文件,但刚创建的文件可能找不到
sudo updatedb 可以将刚创建的文件加到数据库中,让 locate 可以找到(-v 选项显示哪些文件夹被更新)
locate 比 find 要快得多,因为数据库已经是 index 过的 -c 选项可以显示匹配结果的个数,-i 选项可以不区分大小写
plocate 是一个比较快的实现,mlocate 是一个比较安全的实现,命令都是 locate,/etc/updatedb.conf 中可以设置 updatedb 的一些选项,例如忽略挂载到某个目录的硬盘,忽略 .git 文件夹等,忽略某些文件系统等.
rename 's/老名字/新名字/' *.-n 选项显示重命名的预览,不真的重命名
sudo swapoff -a 不使用 swap file,sudo swapon -a 恢复使用.可能还需要在 /etc/fstab 里面注释掉相应的行.
split -b 500000000 -d file path/to/file-
-d 拓展名用数字而不是字母
-b 10 划分成 10 字节的小块
-l 4 划分成每个文件 4 行
-n 10 把文件 (几乎) 等分为 10 份
-a 4 拓展名位数为 4
cat file-* > file
find /path1/ path2/ -name '<filename>' 可以搜索该目录下的文件. 加上 -iname 选项可以不区分大小写. 也可以用 '*<filename>*' 来表示含该文字的文件名. 加 -user <name> 选项用于查找某个用户的文件,加 -size +100M 可以查找大于 100M 的文件.-type d 选项搜索目录,默认是只搜索文件
find ... -exec xxxx {} \; 可以将找到的每个结果分别用程序 xxxx 执行,find ... -exec xxxx {} + 将找到的结果用 xxxx 一次执行.其中 {} 可以重复使用
-execdir ... {} ... \; 相当于先 cd 到每个文件所在目录然后执行命令
find . -empty -type d -delete 删除空文件 find . -empty -type f -delete
sudo apt-get install <appname> 安装程序(99%的程序都可以这样安装)(需要联网)
sudo apt-get remove <appname> 卸载程序
sudo apt-get upgrade <appname> 升级程序
apt-get(和 apt-cash,如果听说过)中常用的功能都在 apt 中有同样的,所以大部分情况下只需要 apt 就可以了,例如 apt install,apt purge.apt 对新手更友好,例如会默认显示进度条,更新的 package 数等.
apt show <packagename> 可以显示某个包的信息
libblas,libgsl 等 library,用 dpkg -L <packagename> 可以查看头文件和库文件(.a,.so)的位置.
-dev 结尾,通常意味着这个包提供头文件和库文件,可以让你在写程序时调用
-dbg 解为,通常意味着这个包的二进制中有调试信息,可以在 debugger 里面分析
apt list --installed 列出所有安装了的包
dpkg 用于手动(通过安装包文件)安装和卸载指定的包,不会自动安装或者卸载 dependency,也不会从网上下载包.apt 会调用 dpkg.
aptitude 是比 apt 更高级的包管理器,还有 GUI 界面.
touch <filename> 命令可以生成一个空的文本文件
nano 是一个命令行应用, 可以编辑文本文件. 打开文件命令: nano <filename.txt>
head 和 tail 命令可以预览一个文件的前几行和后几行
echo <text> 可以在命令行显示该文字,也就是把命令的 params 输出到 stdout
echo <text> > <filename> 可以把文件中的文本替换 >> 可以附加在文本最后. 如果用双引号, 甚至还可以换行.
> 是 output redirect 操作, 类似, < 是 input redirection 操作, 可以把文档中的内容输入到命令行.
> 只用于将 stdout 输出到文件, 如果也要输出 stderr 有三种办法: 1.<command> > file1.out 2 > file2.out, 2. <command> > file.out 2 > &1, 3. <command> &> file.out 其中后两种将 stdout 和 stderr 输出到同一文件.
./program.x < <inputfile> > <outputfile> 2>&1
> 的输出文件如果不存在, 就会新建一个.
cat 文件 把文件的内容输出到 stdout
cat 把 stdin 的内容输出到 stdout
<命令> | less 可以用键盘滚动输出结果(用于长输出以及没有滚动条的情况), 按 q 键退出
| 的作用相当于把前面一个命令的输出放到后面一个命令的输入中.
<命令> > <文件名.txt> 可以把命令行的输出写入文件中 !! 例如: date > time.txt , cal > calander.txt
grep <string> < <filename> 可以在文档中高亮标出指定字符串
cat <filename> | grep <string> 可以达到同样的效果
grep -iRl "文字" [path] 可以搜索当前目录或者指定目录下所有子文件夹中文件的内容,并列出文件名.i 选项不区分大小写,R 搜索子文件夹,l 仅列出文件名.要列出每一个 match,用 grep -iR 即可
sudo, 否则有可能编辑了保存不了(例如一些 configuration file). 甚至要首先用 chown 把文件所有权变成自己的.
# 在文件中起标注的作用 (如果文件中有 linux 代码), 在命令行, # 后面的代码同样会被忽略.
iconv -f [encoding] -t [encoding] -o [newfilename] [filename].微软的 ANSI 格式其实叫做 iso-8859-1, 例如 `iconv -f iso-8859-1 -t utf-8 -o out.txt in.txt`.
sed 命令可以用来处理文件或 standard input 中的文字, 并输出到文件或者 standard out. 在 SCID_TDSE 的 makefile 中遇见, 命令是
sed -e 's/^!\*nq/ /' inputfile.f90 > outputfile.f90
其中 -e 是将后面的命令作用到 inputfile.f90 上. s/str1/str2 是将文本中的 str1 替换成 str2, \* 转义为 * (直接用 * 就是通配符),^ 大概是要求 str1 出现在行首.
sudo find . -name "*.h" | xargs sudo sed -i -e 's/\r//g'.选项 -i 直接修改源文件,-e 用于指定后面的 s/旧内容/新内容/g
xarg 用于使用 piping 构建新命令,即将 find 输出的东西放到 sudo sed -i -e 's/\r//g' 的后面
sudo (super user do) 加在命令前可以获得管理员权限, su (super user) 可以把以下所有操作改为管理员权限 (不建议常用).
su <usr_name> 可以临时改变登录的身份,sudo -i 或者 su 可以持续管理员身份.
sudo 以后,命令的执行者就会临时变为 root,一些 config 文件也会使用 /root/ 文件夹中的而不是 /home/用户名 中的,例如 /root/.ssh/config.
sudo 的密码是用户密码, 而 su 的密码是 root 密码, 后者的权限更高
useradd -m (给新用户创建 home 目录) -g users (设置用户组为 users) <username>
passwd <username> 可以修改密码
userdel <username> 删除账户
users 命令显示目前所有登录的用户, who 命令可以显示更详细的信息
ls -l 最左边第一列是 owner 的权限, 第二列是 group 的权限, 第三列是其他人的权限, r (read) w (write) x (execute)
ls 选项:-a (all)(显示隐藏) -m (挤到一起) -1 显示为一列 -v 按照数字大小排序
chown <user> <files> 修改文件的所有者,-R 对文件夹 recursive
chmod <权限> <file> 修改文件的权限. <权限> 是三位 8 进制数, 每一位是 x(1),w(2),r(4)之和.
groups 或者 groups <user> 可以查看用户所在的组
id 可以查看用户的信息 uid (user id) gid (group id)
groupadd <groupname> 新建用户组
groupdel <groupname> 移除用户组
gpasswd -a <username> <groupname> 可以在组内新增用户
vim /etc/group 可以查看记录 group 信息的文件
gpasswd -d <username> <groupname> 可以在组中移除用户
hostname 可以显示当前主机的名字. $(hostname) 是一个环境变量,可以试试 echo $(hostname)
sudo hostname 新名字 可以改变 hostname
top, 会显示实时进程.
K <PID> 会结束对应编号的进程. 系统的关键进程是杀不掉的.
last -数字 可以查看最近若干次登录的记录
ps aux 会显示当前所有进程 (processes), PID 是 process ID, 用于终止进程
ps aux | grep <name> 会搜索当前进程中包含 <name> 的内容
dd if=/dev/zero of=/dev/null &
其中 & 表示在后台运行,按回车后会输出 PID(进程号)
连续输入这个进程 4 次,然后用 top 命令打开进程管理
NI 就是 nice value
r (renice) 可以调整进程的 nice value(优先级,越小越优先)按 ESC 可以退出
k 可以杀进程,输入进程的 PID,两次回车即可
pstree 可以看到哪些进程生成了哪些子进程,例如 shell 里面运行 .sh 文件会生成一个子进程用于运行一个新的 shell
kill -STOP 进程号 可以暂停程序
kill -CONT 可以继续暂停的程序
tar -czvf <path/name.tar.gz> <some/path/or/file> 是常见的压缩命令. 其中 -c 是 create, -v 是 verbose, -f 指定目标文件(一定要紧接文件名), -z 使用 gzip 压缩. 如果不需要压缩就用 -cvf <path/name.tar>.
-c 换成 -x(extract)即可, 如 tar -xzvf <path/name.tar.gz> -C <some/path/> 如果省略 -C 选项就解压到当前文件夹.
openssl aes-256-cbc -nosalt -in 文件名 -out 加密文件名 -pass pass:密码
openssl aes-256-cbc -nosalt -d -in 加密文件名 -out 文件名 -pass pass:密码
注意:文件加密得到的结果的 hash 是不稳定的!
echo '需要加密的字符串' | openssl enc -base64 -e -aes-256-cbc -nosalt -pass pass:密码
echo "需要解密的字符串" | openssl enc -base64 -d -aes-256-cbc -nosalt -pass pass:密码
-salt 和 -nosalt 是什么?
-base64 是什么?
cat 文件名 | openssl enc -base64 -e -aes-256-cbc -pass pass:密码 > 加密文件名
sftp [usr@][url] 就和 ssh [usr@][url] 一样.成功以后会出现提示符 sftp>,可以进行下一步操作
sftp> 环境下同样可以用 cd, ls, pwd 等命令
get /path/to/file 可以传输某个文件到本地(进入 sftp 时的目录)
get /remote/file /local/file 可以传输某个文件到本地指定的目录和文件名,但该目录必须存在
get -r 文件夹 可以传送整个文件夹
sftp -oPort=xxx xxx@xxx.xxx.xxx.xxx
for ((i=275;i<=294;++i)); do rsync -zvh addis1@headnode.beocat.ksu.edu:/homes/addis1/github/FEDVR-TDSE/data/${i}/analysis/* ./${i}/analysis/; done
rsync -avzh file1 file2 folder3 file4 dest_path 其中 file1 到 file4 等文件或文件夹会自动同步到 dest_path 文件夹中(例如生成 dest_path/file1,dest_path/folder3).如果 dest_path 不存在,会自动用 mkdir 生成,但只能生成一层.file, folder 和 dest_path 都可以是远程或者本地
-a 是 archive (包括所有子文件夹,文件的 permission 和 symlink),-v 是 verbose(显示详情),-z 是 zip(传输过程压缩)-h 人可读
rsync -avzh source/ dest/ --delete 会把 dest 文件夹中多余的文件删除
\ 的字符,例如 \(...\),需要用三次,例如 \\\(...\\\).本地的 shell 会先把 \\ 变为 \, \( 变为 (
--remove-source-files
--delete
curl 是 client URL 的意思,用于通过 url 从服务器接受或发送信息.
curl "网址" -so 文件 可以把某个 url 返回的字符串(如 html 和 json)保存到文件中,其中 -s 是 silent,-o 是 output file.这大概相当于在浏览器中输入 网址 然后复制 html 源码等.
curl --header "<HeaderName>: 123" www.example.com.可以发送一个 header 的 url,也可以用 -H
curl -u 用户名:密码 www.example.com 使用 Basic Auth 进行用户登录
sudo tasksel 快速安装某一类型的服务器需要所有的软件 (email server , file server, ...). 进入界面以后, 用空格选择想要的项目然按空格确认安装.
sudo /etc/init.d/<aptname> start 或者 stop 或者 restart 可以进行对某个软件的 service 进行操作, 而不需要重启 linux 系统.
echo $VAR 显示环境变量或任何变量
export VAR=XXX 修改环境变量
export VAR=~/opt/bin:$VAR 可以 append 某个变量(如 PATH)
PWD 是当前路径,修改该变量相当于 cd
PATH 是命令搜索路径,只有这里面的目录中的执行文件才不指定路径
HOME 是用户的 ~ 文件夹
LD_LIBRARY_PATH 是动态链接库的默认搜索地址,见这里.
LD_RUN_PATH 编译的链接阶段,如果没有指定 rpath,就用该变量中的 path 替代.
alias 可以给一个长命令设置别名,例如 alias abcde='echo hello',仅限于当前 terminal,可以添加到 ~/.bashrc 中每次 login 都定义.
 
 
 
 
 
 
 
 
 
 
 
友情链接: 超理论坛 | ©小时科技 保留一切权利