apt-get -f install=apt-get install -f ,
是修复依赖关系(depends)的命令,就是假如你的系统上有某个package不满足依赖条件,这个命令就会自动修复,安装那个package依赖的package。
.deb:
安装 sudo dpkg -i XXX.deb
查看已安装的软件: sudo dpkg -l
卸载: sudo dpkg -r
按向上箭头键,便 可以在命令行上逐次显示各条命令。同样,按向下箭头键可以在命令列表中向下移动
在输入命令的任何时刻,可以按键,当这样做时,系统将试图补齐此时已输入的命令
ctrl + c
终止shell命令
环境变量:
使用 env 或者 printenv 命令可以查看系统全部的环境变量设置
使用 echo 命令可以查看某个具体环境变量的值
修改环境变量:
1.临时修改:
$ 变量=$变量:新增加变量值
或
$ export 变量=$变量:新增加变量值
vmuser@Linux-host: ~$ export PATH=$PATH:/opt/usr/bin
2.永久修改:修改配置文件
修改/etc/profile 文件会影响使用本机的全部用户;
修改~/.bashrc 则仅仅影响当前用户;
常见shell 命令
1.ls:空,列出所有非隐藏文件
-a 列出所有文件包括隐藏文件
-l 列出所有文件包括长度,拥有者,权限和时间戳等信息
-t 按文件最后修改时间列出文件
-F 按类型列出所有文件 /表示目录 *表示可执行文件 @表示链接文件
2.改变当前目录(cd):
cd [目的目录名]
/ 根目录 (.)当前目录 (..)上一层目录 ~ 用户主目录 - 上一次工作目录
显示当前所在目录(pwd):
linux@ubuntu:~$ pwd
3.创建目录/文件(mkdir):
mkdir [新目录名]
-m 同时设置文件权限 -p 设置多级目录
文件:
touch file.txt
echo "some line" > file.txt
fallocate -l 1G file.txt 分配大小
查看文件类型:file
cat >file.txt cat file.txt 查看文件内容
-n 对内容进行编号输出 -b编号但忽略空白行
(>)重定向符:标准输出到文件,文件不存在会创建文件
(>>)定向追加到文件末尾,文件不存在会创建文件
4.删除一个目录/文件(rm):
-r:完全删除目录,就其下的目录和文件也一并删除
-i:在删除目录之前需要确认
-f:强制删除
5.拷贝文件/目录(cp):
-r:此参数是用来将一目录下的所有文件都复制到另一个指定目录中
-p:保留权限模式和更改时间
-i:采用-i 选项时,当指定目录下已存在被复制的文件时,会在复制之前要求确认是否要覆盖,如使用者的回答是 y(yes)才执行复制的动作
6.建立文件的符号链接(ln):
ln [-s] [源文件] [目标文件] 相当于快捷方式,同步变化
7.改变文件/目录访问权限(chmod):
chmod [XYZ] 文件 X、Y、Z 分别表示 User(用户)、Group(同组用户)及 Other (其他用户)对 于该文件的使用权限,一个文件有可读(r=4)、可写(w=2)、可执行(x=1)3 种模 式
linux@ubuntu:~$ chmod 751 /home/linux/test
改变文件/目录的所有权:
chown [-R] 用户名 文件/目录
7.添加/删除用户:
# adduser user1,由具有 root 权限的用户添加用户 user1;
# userdel user2,由具有 root 权限的用户删除用户 user2;
设置用户口令
sudo passwd root
进入root:su
8.文件的打包和压缩(tar):
打包:
将/home/tmp 目录下的文件打包为 test.tar:
linux@ubuntu:~$ tar -cf test.tar /home/tmp
将所有的 jpg 文件添加到 test.tar 包里面去:
linux@ubuntu:~$ tar -rf test.tar *.jpg
列出包文件的所有内容:
linux@ubuntu:~$ tar -tf test.tar
从 tar 包文件中恢复所有文件,解包:
linux@ubuntu:~$ tar -xf test.tar
压缩:
linux@ubuntu:~$ tar –czf test.tar.gz *.jpg 将所有jpg文件打包并用gzip压缩
linux@ubuntu:~$ tar –xzf test.tar.gz 解压
linux@ubuntu:~$ tar -cjf test.tar.bz2 *.jpg 将所有jpg文件打包并用bzip2压缩
linux@ubuntu:~$ tar -xjf test.tar.bz2 解压
9.文件移动改名:
$mv 源文件/目录 目的文件/目录
$ mv other/ nwedir 改名
10.安装和卸载文件系统:
文件挂载:
# mount [-参数] [设备名称] [挂载点]
-w 可写方式挂载(默认) -r 可读 -v显示详细安装信息 -t<文件系统类型>
root@EasyARM-iMX28x ~# mount -t nfs 192.168.1.138:/home/chenxibing/lpc3250 /mnt -o nolock #将远程共享目录挂载到嵌入式系统本地
nolock 表示禁用文件锁,当连接到一个旧版本的 NFS 服务器时常加该选项
文件卸载:
#umount 挂载点
11.文件搜索:
$ find 路径 –选项其它
vmuser@Linux-host: ~$ find arch/arm/ -name mux*.c #-name 按文件名搜索 mux*通用符模糊搜索
字符串搜索:grep
vmuser@Linux-host: ~$ grep “pcf8563” -R arch/arm
“-R”表示进行递归查找,而不是仅仅在指定的目录下查找
diff 命令:生成源代码补丁
diff [命令行选项] 源文件 新文件
linux@ubuntu:~$ diff -ruN test1.txt test2.txt > test.patch
比较两个文件的不同生成patch文件
patch 命令:打补丁
patch [命令行选项] [patch 文件 ]
linux@ubuntu:~$ patch -p1 test2.txt test.patch
-pn 表示patch文件名左边目录的层数,-p1表示patch文件放在要被打补丁目录下
ps 显示当前进程的状态:
ps -A 列出所有的进程
ps -ef //显示所有命令,连带命令行
ps -ef | grep 进程关键字 grep查找文件中符合条件的字符串
配置、编译、安装源码包软件:
linux@ubuntu:~$ ./configure --prefix=/home/tmp //指定文件目录
linux@ubuntu:~$ make
linux@ubuntu:~$ make install
往内核加载/卸载模块:
insmod(添加模块)指令:
insmod [-fkmpsvxX] [-o<模块名称>] [模块文件]
rmmod(卸载模块)指令:
rmmod [-as] [模块名称…]
lsmod 查看已经加载的模块
# modprobe [选项] 模块 [符号=值]
modprobe 命令集加载/卸载功能于一身,并且可以自动解决模块的依赖关系
创建设备节点:
# mknod 设备名 设备类型 主设备号 次设备号
# mknod /dev/led c 231 0
重启:reboot 关机:poweroff
文件同步:sync
网络操作命令:
ifconfig:
选项/参数 | 说明 | 示例 |
---|---|---|
-a | 查看系统拥有的全部网络接口 | ifconfig -a |
网络接口 | 指定操作某个网口 | ifconfig eth0 192.168.1.136 |
broadcast | 设置网口的广播地址 | ifconfig eth0 broadcast 192.168.1.255 |
netmask | 设置网口的子网掩码 | ifconfig eth0 netmask 255.255.255.0 |
hw ether | 设置网卡物理地址(如果驱动不支持则无效) | ifconfig eth0 hw ether 00:11:00:00:11:22 |
up | 激活指定网卡 | ifconfig eth0 up |
down | 关闭指定的网卡 | ifconfig eth0 down |
ping:
通常情况下只能 ping 同网段的主机,不能跨网段ping操作。
shell脚本的编写
shell脚本的执行:
(1)设置好脚本的执行权限之后再执行脚本:
linux@ubuntu:~$chmod +x MyScript [u+x]:只有自己可以执行 [ug+x]:自己和群组内 [x]:都可执行
linux@ubuntu:~$./Myscript
(2)使用 Bash 内部指令"source":
linux@ubuntu:~$ source Myscript
(3)直接使用 sh 命令来执行:
linux@ubuntu:~$ sh Myscript
#!/bin/bash #! 告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell
echo "Hello World !" 输出
注释:
行注释:#
多行注释:
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
EOF可以用'或!代替
shell变量:
your_name="qinjx" 变量名和等号之间不能有空格;
只能使用英文字母,数字和下划线,首个字符不能以数字开头;
echo $your_name 在变量前面加美元符号使用变量
echo ${your_name} 花括号可省,用来区分变量边界
readonly your_name 使变量只读
unset variable_name 删除变量
字符串:单引号或双引号
your_name="runoob"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2 $greeting_3
hello, runoob ! hello, runoob !
hello, runoob ! hello, ${your_name} !
双引号中可以出现变量,单引号中不可以出现变量
获取字符串长度:
string="abcd"
echo ${#string} #输出 4
提取子字符串:
string="runoob is a great site"
echo ${string:1:4} # 输出 unoo
数组:
bash支持一维数组(不支持多维数组),没有限制大小;数组元素的下标由 0 开始编号
定义数组:
用括号来表示数组,数组元素用"空格"符号分割开
array_name=(value0 value1 value2 value3)
或者
array_name=(
value0
value1
value2
value3
)
array_name[n]=valuen #单独定义
读取数组:
valuen=${array_name[n]}
使用 @ 或*符号可以获取数组中的所有元素:
echo ${array_name[@]}
获取数组的长度:
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
传递参数:
echo "example"
echo "$0" 执行的文件名
echo "$3" 第三个参数
echo "$1" 第一个参数
echo "$#" 参数个数
echo "$*" 引出所有参数 "1 2 6"
echo "$@" 引出所有参数 "1" "2" "6"
echo "$?" 最后命令的退出状态。0表示没有错误
echo "$$" 脚本运行的当前进程ID号
echo "$!" 后台运行的最后一个进程的ID号
echo "$-" 显示Shell使用的当前选项,与set命令功能相同
运算符:
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr最常用
val=`expr 2 + 2` #注意使用的是反引号 ` 而不是单引号 '
#表达式和运算符之间要有空格
val=`expr $a \* $b` #乘号(*)前边必须加反斜杠(\)才能实现乘法运算
if [ $a == $b ] #必须空格
then
fi
假设a=10,b=20
关系运算符: 只支持数字,除非字符串的值是数字
-eq 两个数是否相等
-ne 两个数是否不相等
-gt 左边大于右边?
-lt 左边小于右边?
-ge 左边大于等于右边?
-le 左边小于等于右边?
布尔运算符:
! -非 [ ! false ]
-o -或 [ $a -lt 20 -o $b -gt 100 ]
-a -与 [ $a -lt 20 -a $b -gt 100 ]
逻辑运算符:
&& -AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| -OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true
字符串运算符:
= 检测两个字符串是否相等,相等返回 true
!= 检测两个字符串是否不相等,不相等返回 true
-z 检测字符串长度是否为0,为0返回 true
-n 检测字符串长度是否不为 0,不为 0 返回 true
$ 检测字符串是否为空,不为空返回 true
文件检测运算符:
-b file -c file -d file ......
echo:
echo "\"It is a test\""
输出结果:
"It is a test"
echo -e "OK! \n" # -e 开启转义
echo "It is a test"
输出结果
OK!
It is a test
echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test"
输出结果:
OK! It is a test
echo "It is a test" > myfile #显示结果定向至文件
echo `date` #显示命令执行结果
printf
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
if条件语句:
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
写成一行:
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
case...esac条件语句:
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
for循环:
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
写成一行:
for var in item1 item2 ... itemN; do command1; command2… done;
while循环:
while condition
do
command
done
until循环:
until condition
do
command
done
break continue
函数:shell函数要在文件前面被定义
fun(){
echo "输入第一个数字:"
read Num1
echo "第一个参数$1"
echo "第十个参数$10"
echo "第十个参数${10}" #从10开始的参数要加{}
return $(($Num1+$1))
}
fun 5 4 2 3 4 8 5 2 4 3 4
echo "输入两数之和为$?" #$?获取函数返回值,只对上面一行生效
输入/输出重定向:
command < infile > outfile 表示重定向到file,内容被替换
command << infile >> outfile 追加重定向到file
0 是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)
$ command > file 2>&1 #将 stdout 和 stderr 合并后重定向到 file
$ command > /dev/null #/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃,禁止输出
command << delimiter
document
delimiter
将两个 delimiter 之间的内容(document) 作为输入传递给 command
$ wc -l << EOF
欢迎来到
菜鸟教程
www.runoob.com
EOF
3 # 输出结果为 3 行