一、关于terminal
1. 启动terminal快捷键:Ctrl+Alt+T
在同一terminal开启多标签:Ctrl+Shift+T
普通用户:新启动的terminal的默认为普通用户,显示 "用户名@主机名: ~$",其中“~”代表当前用户路径,默认路径为/home/your_login_name/ ;"$"代表普通用户。
如果进入root超级用户,则显示”root@主机名: ~# ",其中“~"代表超级用户路径/root;"#"代表超级用户。
进入root权限:
sudo su -
其中,”-"表示进入root的主目录,如省略则保持之前的路径不变。
退出:
exit
注意:~/ 与 / 不是同一目录,
- ~/为当前用户的主目录路径;
- / 为computer的根目录,其下包括home、usr、root、lib、bin等文件夹。
Ubuntu系统下的目录介绍可参考:Linux各目录及每个目录的详细介绍 - lin_zone - 博客园
2. 在terminal中搜索历史命令:
Ctrl+r : 进入reverse-i-search模式,输入命令关键字即可显示相关命令
二、路径:
1. 路径跳转:
cd 路径
./ 表示当前目录; 直接写名字也表示当前目录下的操作;
../ 表示上一级目录;
PS:在文件夹下,使用Ctrl + L快捷键显示当前路径;ESC键还原到文件多级路径。
2. 显示当前路径
pwd
3. 列出目录下的文件
列出文件名:
ls /usr/share/cmake-3.5/Modules/
列出详细信息(创建时间、可读写状态等):
ll /usr/share/cmake-3.5/Modules/
或者
ls -lh /usr/share/cmake-3.5/Modules/
4. 统计目录下的文件数:
ls ./ | wc -l
“| ”为管道符,其作用是将上一条命令的输出作为下一条命令的参数。 连续使用管道符则将第一个命令的输出作为第二个命令的输入,再将第二个命令的输出作为第三个命令的输入,依此类推。
wc -l filename
表示统计文件的行数。
- 查看当前目录下的文件数量(包含子目录中的文件,但不包含子文件夹数目)
ls -lR|grep "^-"| wc -l
ls的-R参数代表包含子目录; grep "^-"表示仅匹配行首的“-”字符。
- 查看某文件夹下文件夹的个数,包括子文件夹里的:
ls -lR|grep "^d"|wc -l
grep "^d"表示仅匹配行首的“d”字符,ls -l出来的文件夹行首为"d"字符。
5. 建文件夹:
例如创建名为build的文件夹
mkdir build //只能建一级;
如果需要建多级文件夹:
mkdir -p ./test/build
6. 查看文件大小
使用du (disk usage)命令查看文件大小
du test_file
查看指定文件夹大小:
du -sh folder_name #-s, --summarize
当前文件夹大小:
du -h --max-depth=0 # -h表示以human-readable形式显示,即添加单位K M G
当前文件夹下一级子目录文件夹大小:
du -h --max-depth=1
7. 查看硬盘使用量:
df -h #disk file system
8. 打开文件夹窗口:
nautilus ~/
9. 使用系统默认方式打开文件夹、文件或网页(输入网页地址):
xdg-open your_path_or_file_or_web
三、文件管理
1. find查找文件
注意:在shell中输入的ubuntu系统的命令以及安装的软件的命令都在bin中存储的可执行文件,因此都可以使用find命令查找
find ./ -name rostopic #在当前文件夹及其子目录下查找rostopic文件
find ./ -iame rostopic #不区分名称rostopic的大小写
find / -name *rostopic* #模糊查找
find / -name rostopic #在根目录下查找
查看当前路径下24小时内修改过的regular file文件:
find ./ -mtime 1 -type f -print
查看当前路径下48小时内修改过的regular file文件:
find ./ -mtime 2 -type f -print
删除指定日期修改过的文件:
find ./ -maxdepth 1 -name "*" -ctime 5 -exec rm -rfv {} \;
查看所有文件:
find ./ -type d #查找当前路径下的所有子文件夹
find ./ -type f #查找当前路径下所有文件(包括子文件夹下的文件)
多条件查找:
find ./ -name *png -o -name *jpg | wc -l #查找满足png或者jpg匹配的文件,并统计找到的文件数目
2. grep查找文件内的关键字
grep -rin "world_to_search" ./
r:递归查找文件夹下所有文件
i:忽略大小写
n:显示查找到的行号
"world_to_search" :需要查找的文本
"./" : 查找的目录
3. 查看文件,特别是不断刷新的日志
将文件最后几行显示在terminal中,如果文件增加了内容,实时地将文件增加的内容显示在terminal中。
tail your_file_name
将整个文本打印在terminal上:
cat your_file_name
4、解压 & 压缩文件
4.1 tar
tar压缩格式及对应文件后缀名:
flag | 压缩格式 | 文件后缀名 |
-z | gzip | .gz |
-j | bzip2 | .bz |
-J | xz |
4.1.1 tar.gz
查看压缩文件内的信息:
tar -tf test.tar.gz //-t : list the contents of an archive, -f: use archive file
解压缩文件(解压到当前目录):
tar -xzvf test.tar.gz //-z为gzip, -v: verbosely list files processed
解压到指定目录:
tar -xzvf test.tar.gz -C your_destination_file //your_destination_file目录必须存在,若不存在并不会新建
-z 表示解压gzip格式压缩的文件夹。如果显示:
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
则可能是以其他格式压缩,但是压缩命名时没有按照相应规范命名,而是使用gz后缀命名了。此时只能尝试不同解压格式了,运行:
tar -xjvf test.tar.gz //-j表示使用bzip2
如果显示:
bzip2: (stdin) is not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
则运行:
tar -xvf test.tar.gz
4.1.2 tar.xz是两级压缩文件(压缩后文件非常小)
压缩:
tar -cJvf target.tar.xz ./file1 ./file2 //如果需要压缩多个文件,只需要在后面依次写出即可
可分两级解压:
先 xz -d *.tar.xz 将 *.tar.xz解压成 *.tar ; 再用 tar xvf.tar解包。
如果一步解压,命令如下:
tar -xJvf *.tar.xz
4.2 unzip
压缩文件夹:
zip -r test.zip test
解压到指定文件夹
unzip test.zip -d /home/yly/test
4.3 unrar
unrar x test.rar
5、比较两个文本文件差别
diff file1.txt file2.txt
输出结果:
45c45
< context in file1.txt;
------------------------------------
> context in file2.txt;
9a14,15
> #include <thread>
> #include <iostream>
20,23d19
< std::thread thread1(fun1);
< std::thread thread2(fun2);
< std::thread thread3(fun3);
这里不要把<和>按照大于和小于号理解,按照表示diff参数中<表示前面文件的内容,>表示后面文件的内容。
45c45 表示file1.txt和file2.txt中第45行不同;
9a14,15表示file2.txt相对于file1.txt增加了file2.txt中第14-15行的内容;
20,23d19表示file2.txt相对于file1.txt缺少file1.txt中的第20-23行的内容。
6. 查看可执行文件的硬件架构
file your_binary_file
7. 查看可执行文件依赖的库命令
ldd your_binary_file
8. 查看二进制文件(包括可执行文件和库) 的信息
readelf -a your_elf_file
查看动态链接库所依赖的动态链接库:
readelf -d your_dynamic_link_lib
备注: 查看readelf参数手册:
man readelf
四、进程&服务管理
查看进程状态:
ps -ef #process status
或者
ps aux #process status
查看进程占用资源:
top
对于top显示的资源占用信息解读可参见:Linux top命令详解 - 牛奔 - 博客园
杀死程序:
kill -9 PIDnumber
或者
pkill process_name
查看内存和swap使用情况:
free -h
调整进程优先级(CPU等资源分配优先级):
nice -n -20 ./your_bash.sh
nice,"友善度、谦让度",在Linux系统中,nice值的范围从-20到+19,正值表示低优先级,负值表示高优先级。
重定向:
>/dev/null
/dev/null
代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”。这条命令的作用是将标准输出1重定向到/dev/null
中,那么执行了>/dev/null
之后,标准输出就会不再存在。
>表示输出重定向
>>输出重定向来向文件尾部增加输出记录
查看服务启动状态:
service --status-all
五、查看计算机信息:
查看本机系统架构(x86, arm等):
uname -a
查看MAC, IP, DNS等信息 (Ubuntu 16.04):
nmcli dev show
查看IP等:
ifconfig
查看网关:
netstat -rn
查看cpu信息:
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq
# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l
查询时间:
date
Unix时间戳:
date +%s
备注:Unix time, POSIXme 或 Unix timestamp,是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数:
更详细的关于时间查询和设定可参考:linux使用date命令获取系统时间_tinysakura的博客-优快云博客_linux 获取时间
六、修改打开文件的默认程序
/etc/gnome/defaults.list 中定义了打开各种类型的文件所对应的默认应用程序
例如:
text/x-c++hdr=gedit.desktop
text/x-c++src=gedit.desktop
text/x-xsrc=gedit.desktop
则使用gedit打开cpp格式文件。但是如果安装了vim,这三项被修改为ubuntusdk.desktop, 并默认使用vim打开cpp后缀的文件。如果想还原使用gedit打开,
sudo gedit /etc/gnome/defaults.list
并将以上三项中ubuntusdk.desktop修改回gedit.desktop,并重启电脑即可。