linux常用命令学习
shell操作命令
reboot 重启
poweroff 关机 shutdown
apt-get install 用apt工具安装
man 命令名 查看命令参数
命令名 --help 查看命令参数
which file3 指令which查看指令的绝对路径
ps 看进程 -e a A u l x h f
cat /proc/version 看系统型号
cat /proc/partitions 看系统分区
df -h / -T 看挂载与每个分区大小
du -sh 看当前目录下文件占用大小
uname -a 查看发行版本
lsb_release -a,即可列出所有版本信息
watch -n x
&和&&,|和||:
& 表示任务在后台执行,如要在后台运行redis-server,则有 redis-server &
bg %N 使第N个任务在后台运行(%前有空格)
fg %N 使第N个任务在前台运行,默认最后一个
jobs 查看后台的任务数
kill 杀掉后台某个任务
ctrl+z 任务暂停在后台
nohup bash ./test.sh & 这样可以后台运行脚本,且用户可以切换
&& 表示前一条命令执行成功时,才执行后一条命令 ,如 echo '1‘ && echo '2'
| 表示管道,上一条命令的输出,作为下一条命令参数,如 echo 'yes' | wc -l
|| 表示上一条命令执行失败后,才执行下一条命令,如 cat nofile || echo "fail"
快捷键
tab 键快速补全,双击列出可选选项
ctrl+c 任务停止
ctrl+z 任务暂停在后台
bg %N 使第N个任务在后台运行(%前有空格)
fg %N 使第N个任务在前台运行,默认最后一个
jobs 查看后台的任务数
kill 杀掉后台某个任务
ctrl+l 清屏
ctrl+s 停止输出到终端
ctrl+q 继续输出到终端
ctrl+a 移动到行首 ctrl+k 从后往前清除到光标
ctrl+e 移动到行尾 ctrl+u 从前往后清除到光标
ctrl+f 右移一个字符 ctrl+b 左移一个字符
(alt+f=ctrl+→ 右移一个单词 alt+b=ctrl+←左移一个单词)不一定能用
ctrl+w 左删除一个单词
ctrl+y 粘贴删除的内容
内容、文件搜索
find /xxx -name a.file 在/xxx目录下查找名字是a.file的文件 -name是operation
find /xxx -name a*.file 查找以a开头的.file文件,星号是linux中的通配符
使用grep(global regular expression print,全局正则表达式输出)命令
原文1
grep name /directory/file1 /directory/file2 在文件12中搜索“name”并列出
grep -lr name /directory/ 在文件夹中搜索“name”并列出包含它的文件名
-r 参数,递归搜索,即可以在文件夹中搜索
-l 参数,只列出文件名
-n 参数,显示行号
-c 参数,计算次数
-i 参数,忽略大小写
-w 参数,全词匹配
-v 选项,显示不包含name的行
grep -rni name ./ --exclude-dir=".svn" //目录名可以不用引号包含,特殊字符根据配置有时要使用‘\’转义
grep -rni name ./ --exclude-dir=.svn
grep -rni name ./ --exclude-dir=\.svn
grep -rni name ./ --exclude-dir={_log,".svn",\.git} //只能排除一级目录,只有排除多个目录时,需要大括号+逗号
输入输出、文件查看、创建、删除
Linux 2>&1 >&- 这种的含义是IO重定向 关闭标准输入和错误输出
>&n 使用系统调用 dup (2) 复制文件描述符 n 并把结果用作标准输出;
<&n 标准输入复制自文件描述符 n;
<&- 关闭标准输入(键盘);
>&- 关闭标准输出;
n<&- 表示将 n 号输入关闭;
n>&- 表示将 n 号输出关闭;
exec 1>outfilename # 打开文件outfilename作为stdout。
exec 2>errfilename # 打开文件errfilename作为 stderr。
exec 0<&- # 关闭 标准输入。
exec 1>&- # 关闭 标准输出。
exec 2>&- # 关闭 错误输出。
2>&1 |tee build.log //输出到日志 build.log
echo hi > name.file //echo功能很多
//输出到文件;
//可以通过-e达到字符控制,如echo -e "\x31" > name.file 就是输出字符'1'到文件;
// >> 追加到末尾
cat build.log
查看日志
cat -n build.log
带行号查看
head -5 build.log
查询日志的前5行
tail -5 build.log
查询日志的最新5行
sed -n '5,10p' build.log
查询日志的5到10行
cat build.log |head -n 10 |tail -n +5
先显示前10行,再只显示5行之后的
touch file.c
创建文件
mkdir filedir
创建目录
mkdir -p filedir
递归创建目录
ln -s
[源文件或目录] [文件或目录的链接名]
rm file.c
删除文件
rm -r filedir=rmdir filedir
删除目录
cp file1.c file2.c
复制文件
mv ~/filedir1/file1 ~/filedir2/file2
移动文件或目录
mv file1 file3
重命名文件或目录
mv /usr/* .
移动user下文件到当前目录
vi/vim filename
编辑文件,如果没有就创建新文件
↑键、ctrl+p、!!
快速执行上一条命令
!$
快速使用上一条命令的参数,如cat 1.txt,然后vi !$
ls:
-a 查看所有文件
-d 限制在当前目录,加上 .* 只查看隐藏文件
-l 详细信息
文件类型 权限 链接的节点数 owner group 大小 创建时间 名字
-R 递归显示
-lh 以M\K\B等形式显示大小
du -sh [指定文件或目录]: 查看当前目录总共占的容量。而不单独列出各子项占用的容量
du -ah 递归显示其下目录和文件占用磁盘空间的大小
du -lh --max-depth=1 : 查看当前目录下一级子文件和子目录占用的磁盘容量。--max-depth 选项控制深度(从0、1...开始)
chmod 777 file
修改file的权限,所有人可rwx 4+2+1 。
chmod u=rwx,g=rx,o=r file
直观修改权限
chown/chgrp 账户 file
修改owner/group
scp传文件
从本地上传文件到远程计算机的user根目录下,先进入要传输的文件所在目录下,然后运行如下命令:
scp file.zip user@192.168.1.104:~/
从远程主机复制文件到本地主机(下载)的命令如下:(假如远程文件是about.zip)
先进入本地目录下,然后运行如下命令:
scp user@192.168.1.104:/usr/local/nginx/html/webs/about.zip .
压缩解压
tar
把目录打包成一个文件,后缀名是 .tar,打包后,可以再压缩,就是 .tar.gz
-c 创建打包文件 必选项 create
-x 解包
-z 打包同时压缩成.gz 如果是 -j 则是打包压缩成.bz2
-v 显示详细信息
-f 指定压缩后的文件名 必选项
tar 选项 [压缩后文件名] [目录]
tar -czvf a.tar.gz abc
tar -xzvf a.tar.gz 解压到当前目录下 -C 到指定目录
tar -cvf a.tar abc 只打包(归档)
gzip a.tar 只压缩,压缩后自动变为a.tar.gz
多任务
ctrl z 使正在执行的任务暂停到后台
bg number 使第n个任务到后台执行
fg num 到前台执行
shell.sh & 后台执行
shell.sh && 2.sh 第一条命令执行正确后执行第二个
shell.sh || 2.sh 第一条命令执行错误后执行第二个
shell.sh | 2.sh 第一天命令的输出作为第二个的输入,例:getprop | grep "abc"
dd命令
作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。可以用于测试磁盘命令、数据备份或恢复。
if=file 输入文件名,缺省为标准输入。 从file读取,如if=/dev/zero,该设备无穷尽地提供0,(不产生读磁盘IO)
of=file 输出文件名,缺省为标准输出。 向file写出,可以写文件,可以写裸设备。如of=/dev/null,"黑洞",它等价于一个只写文件. 所有写入它的内容都会永远丢失. (不产生写磁盘IO)
ibs=bytes 一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。
obs=bytes 一次写 bytes 个字节(即一个块大小为 bytes 个字节)。
bs=bytes 同时设置读写块的大小为 bytes ,可代替 ibs 和 obs。如bs=8k 每次读或写的大小,即一个块的大小为8K。
cbs=bytes 一次转换 bytes 个字节,即转换缓冲区大小。
skip=blocks 从输入文件开头跳过 blocks 个块后再开始复制。
seek=blocks 从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)。
count=blocks 仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。
iflag=FLAGS 指定读的方式FLAGS,参见“FLAGS参数说明”
oflag=FLAGS 指定写的方式FLAGS,参见“FLAGS参数说明”
conv=conversion:用指定的参数转换文件。
ascii:转换ebcdic为ascii ebcdic:转换ascii为ebcdic ibm:转换ascii为alternate ebcdic block:把每一行转换为长度为cbs,不足部分用空格填充 unblock:使每一行的长度都为cbs,不足部分用空格填充 lcase:把大写字符转换为小写字符 ucase:把小写字符转换为大写字符 swab:交换输入的每对字节 noerror:出错时不停止 notrunc:不截短输出文件 sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
dd if=/dev/mmcblk0p1 of=/dev/mmcblk0p3 conv=fsync
//将mmc0的第1分区内容写入3分区,写完后会自动sync落盘,用于备份
dd bs=8k count=40k if=/dev/zero of=/dev/mmcblk0p3 oflag=dsync
//测试从zero中读取0,写入mmc0的第3个分区,dsync代表读完就写,不使用写缓存,因此测试速度比较准确。
查看挂载与占用空间
df -h //-T是全部显示
du -sh//显示文件占用空间 -s显示全部,-h以G为单位
将o文件打包a文件
使用ar
命令,其实.a 通过 -archive 参数打包就是将o文件直接打包到一起,不像elf文件有格式。
并且(用SCons调用Greenhills的ccarm.exe)生成的.a中如果和参加编译的源文件有重复的函数-例如weak的函数-会优先使用外部.o中的函数,次优先使用.a中打包时靠前的函数,即使有__attribute__((weak))声明,会导致一些功能无效。
ar r lib.a ./*.o //将当前目录下所有o文件打包成静态库
ar x lib.a ./* //将静态库a文件拆成o文件
ar -d lib.a del.o //把lib.a中的del.o删掉,不影响其他o文件