您的位置:首页 > 运维架构 > Shell

【Linux基础】基础shell命令

2017-03-13 18:25 337 查看

1:apt

APT(Advanced Packaging Tool)是Ubuntu Linux中功能最强大的命令行软件包管理工具,用于获取、安装、编译、卸载和查询Deb软件包,以及检查软件包依赖关系

三个重要的文件:
1: 软件源配置文件 /etc/apt/sources.list : 列出最合适访问的镜像站点地址
2:  索引文件/var/lib/apt/lists/  :列出了每一个服务器上软件的名称
sudo  apt-get update :刷新索引列表。
3:  下载的软件包存放地址:  /var/cache/apt/archives/

重点:
--: APT并不是某个具体的命令,应该说是一组命令
--: apt-get:用于管理软件包,包括安装、卸载、升级等操作
apt-get  subcommands  [ -d | -f | -m | -q | --purge | --reinstall | - b | - s | - y | - u | - h | -v ]  pkg
--:安装命令:
sudo  apt-get install  软件名
sudo  apt-get install  sl: 下载软件sl
--:更新软件包列表索引文件/var/lib/apt/lists/
sudo  apt-get  update
--:将系统中所有软件包升级到最新的版本
sudo  apt-get update
sudo   apt-get upgrade

安装软件的四个步骤:
使用“apt-get install”下载软件包大体分为四步:
STEP1,扫描本地存放的软件包更新列表(/var/lib/apt/lists)(由apt-get update命令刷新更新列表),找到最新版本的软件包;
STEP2,进行软件包依赖关系检查,找到支持该软件正常运行的所有软件包;
STEP3,从软件源所指的镜像站点中,下载相关软件包;
STEP4 ,解压软件包,并自动完成应用程序的安装和配置。
重点:
问题1: 加入下载软件xxx。但是下载不成功怎么办
1:检查是否可以上网,(必须要能上网)
2:先要确定服务器域名地址是否在软件源配置文件中(/etc/apt/sources.list),如果没有要添加。
3:刷新软件源索引文件(sudo apt-get update)
--重新安装软件包
apt-get --reinstall install  软件名
--:卸载软件包
apt-get remove  软件名: 卸载软件并同时卸载它所依赖的软件。
--:apt-cache:用于查询软件包信息
apt-cache  subcommands  [ -p | -s | - q | - i | - c | -h ]  pkg
查询软件包的详细信息
apt-cache show  软件名。
获取软件包安装状态
apt-cache  policy  软件名
查询指定软件依赖关系
apt-cache  depedns  软件名(xx): 列出与软件xx相关联的软件
查询指定软件被那些软件所依赖:
apt-cache  rdepends  软件(xx) : 列出依赖软件xx的软件。


2:shell的基本命令

2-1:命令提示符:
linux@ubuntu:~/my/teach/linuxC/17022/linuxc2$
linux:用户名,(whoami)
Ubuntu:主机名 (hostname)
~/my/teach/linuxC/17022/linuxc2:目录名显示当前的工作路径(pwd)(print work directory)
--两个特殊的表示目录的符号
“/": 代表根目录,
“~”: 代表家目录,
--:家目录:用户登录到系统时的初始目录。
2-2:命令格式
$ Command [-Options] Argument1 Argument2 …
指令      选项     参数1      参数2…
选项: 以“-”开头,命令执行什么操作。
参数: 对谁操作,
注意: 选项和参数可以没有。
两个特殊的提示符:
“$": 代表用户是普通用户
“#”:代表用户是superuser
三个注意点:
1: 一条命令的三要素之间用空格隔开;
2: 若将多个命令在一行书写,用分号(;)将各命令隔开;
3:如果一条命令不能在一行写完,在行尾使用反斜杠(\)标明该条命令未结束
2-3:命令行的编辑
ctrl-u: 取消光标前的指令,
home:跳到指令开头
end:跳到指令结尾。
上下箭头: 列出以前的命令
命令行补全: tab自动补全


3:history:列出历史命令

history: 默认列出n条历史命令,n由环境变量HISTSIZE决定。
更改默认值: 修改HISTSIZE变量的值。
如何更改:
1:暂时更改(只在当前shell中有效)
HISTSIZE=newnumber
2: 永久更改(修改~/.bashrc)
cd :进入家目录
vi .bashrc:打开文件
HISTSIZE=10 :将默认值改为10
保存退出:wq(:x)
执行更改过的文件使其生效
source ./bashrc (或者重新打开一个窗口)
补充: echo: 向终端输出指定内容。

history  number: 列出number条历史命令

-c:清除内存中保存的历史信息。
history -c :
-w:将历史信息保存到硬盘上(~/.bash_history)


4:shell中的特殊字符

touch  filename: 新建一个文件filename。
4-1:通配符:
*: 匹配任意长度的字符串(o~n)
例如:
linux@ubuntu:~/my/teach/linuxC/17022/linuxc2$ ls *
file0  file10  file12  file2  file5  file7  file9
file1  file11  file13  file3  file6  file8  touch.sh
?: 匹配一个长度的字符(1)
例如:
linux@ubuntu:~/my/teach/linuxC/17022/linuxc2$ ls file?
file0  file1  file2  file3  file5  file6  file7  file8  file9
linux@ubuntu:~/my/teach/linuxC/17022/linuxc2$ ls file??
file10  file11  file12  file13
[]:匹配其中指定的一个字符
[12345]:从1,2,3,4,5中匹配。
linux@ubuntu:~/my/teach/linuxC/17022/linuxc2$ ls file[13]
file1  file3
[1-6]:从1,2,3,4,5,6,中匹配
linux@ubuntu:~/my/teach/linuxC/17022/linuxc2$ ls file[1-4]
file1  file2  file3
[^123]:从除了123以外的所有字符中匹配(除了其中指定的字符,均可匹配)
linux@ubuntu:~/my/teach/linuxC/17022/linuxc2$ ls file[1-2][0-9]
file10  file11  file12  file13  file21

4-2:管道“|”: 可以将前一个命令的输出,作为后一个命令的输入。这样将多个命令连接起来实现一些功能。
ls: 列出当前目录下的文件
wc:统计指定文件的内容(行数,单词个数,字符个数)
-l(小写L):统计出指定文件中的行数
-w(word):统计出指定文件中的单词数
-c():统计出指定文件中的字符数

如果想统计当前目录下有几个文件?
ls | wc -w : shell将ls的结果保存到内存中的一个文件在(buffer)中,然后wc 对buffer文件统计
4-3:输入、输出重定向
默认的输入:键盘
默认的输出:屏幕终端窗口。
可以通过输入,输出重定向符改变默认的输入输出方向。
--:输出重定向符:
> filename : 将正确的输出结果保存在filename文件中, 新建模式(如果filename文件不存在则创建,如果存在则清空原来的内容。)
>> filename: 将正确的输出结果保存在filename文件中, 追加模式 ( 如果filename文件不存在则创建,如果存在则将新的内容添加到原来的内容之后。)

2> filename:将命令产生的错误信息保存在filename文件中, 新建模式(如果filename文件不存在则创建,如果存在则清空原来的内容。)
2>> filename:将命令产生的错误信息保存在filename文件中,  追加模式  如果filename文件不存在则创建,如果存在则将新的内容添加到原来的内容之后。)

将正确的输出结果和错误信息保存在文件中:
&>
&>>

--:输入重定向
< filename: 从文件filename中获取内容。
4-4: cat: 在标准输出上显示文件
cat file1: 将file1的内容打印到终端

思考:如何将file1和fil2的内容追加到file3文件中?
cat  file[12]>> file3
如何将file1的内容追加到file2中?
cat file1 >> file2
4-5:命令置换(``)(esc键下面):取出命令的执行结果。
``==$()
echo  "user name is `whoami`"
echo  "hostname is $(hostname)"


5:linux基本命令

5-1: man:进入命令的说明/操作手册
man - an interface to the on-line reference manuals

man  commandname
5-2:passwd:修改密码
--:普通用户只能修改自己的密码
--:超级用户可以修改所有用户的密码
passwd  username :修改username的密码。
5-3: su :切换用户
su: 切换到root用户
su - username: 完完全全切换到username用户。
su -m username: 切换到username后保留原来用户的环境信息,

exit 退出(Ctrl+d)
例如: HOME: 此环境变量存放当前用户的家目录路径
5-4: echo:
用于在标准输出(终端)上显示一段文字,一般起到提示作用

--:  echo  string: 向终端打印string。
echo   "heoo      kkkk": 代表heoo      kkkk是一个带空格字符串,heoo      kkkk是同一参数
echo    heoo         kkkk:  代表两个字符串heoo  kkkk。代表echo有两个参数heoo 和 kkkk。
--: echo 默认换行
-n:不换行
5-5: date:显示和设置系统日期和时间
-d, --date=STRING
display time described by STRING, not `now'
根据string来显示时间。
linux@ubuntu:~/my/teach/linuxC/17022/linuxc2$ date -d "tomorrow"
Fri Mar 10 14:09:13 CST 2017
linux@ubuntu:~/my/teach/linuxC/17022/linuxc2$ date -d "next year"
Fri Mar  9 14:09:26 CST 2018
-u: 显示utc时区时间
+format:
format:
%Y: 年
%m:  月
%d: 天
linux@ubuntu:~/my/teach/linuxC/17022/linuxc2$ date +%Y:%m:%d
2017:03:09
linux@ubuntu:~/my/teach/linuxC/17022/linuxc2$ echo "today is `date +%Y-%m-%d`"
today is 2017-03-09

%H:小时
%M:分钟
%S:秒

linux@ubuntu:~/my/teach/linuxC/17022/linuxc2$ date +"%Y-%m-%d %H:%M:%S"
2017-03-09 14:16:40

设置时间:
-s, --set=STRING
set time described by STRING

date  -s “1999/7/1 14:30:00”
修改时区:修改/etc/localtime
cp  /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime
5-6: 清屏clear(ctrl+l)
5-7: df - report file system disk space usage:查看磁盘空间的使用情况

-T:显示文件格式
-h:大小以G、M,K单位显示(以人性化方式显示)
5-8:du:列出目录和文件所使用的磁盘块数


6:用户管理

adduser:添加用户
例如添加 delep1,delep2
sudo  adduser  delep1
添加用户的过程:
Adding user `delep1' ...
step1: Adding new group `delep1' (1003) ...:创建一个组(gid为1003)用于存放新创建的用户,
step2:  Adding new user `delep1' (1003) with group `delep1' ...:创建一个新的用户,用户id(1003)
step3: Creating home directory `/home/delep1' ... : 在目录/home下创建用户的家目录/home/delep1.
step4:  Copying files from `/etc/skel' ... : 将/etc/skel目录下的文件copy到用户的家目录下(/home/delep1)
step5: 输入密码:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
step6:登记 用户的一些信息
Changing the user information for delep1

Enter the new value, or press ENTER for the default
Full Name []: xiaowang
Room Number []: 1001
Work Phone []: 110
Home Phone []: 1
Other []: 1
Is the information correct? [Y/n] y

几个重要的文件
1: /etc/passwd: 存放用户的属性信息,当用户登录的时候os去读取此文件。
linux:x:1000:1000:linux,,,:/home/linux:/bin/bash
每个属性之间用“:”隔开。
linux: 登陆名
x:     经过加密的口令 时间密码在/etc/shadow文件中
1000:  UID
1000:  默认的GID
linux,,,: 个人信息
/home/linux: 主目录
/bin/bash : 登陆shell
2: /etc/group : 包含了UNIX组的名称和每个组中成员列表
每一行代表一个组,包括4个字段:
组名
加密的口令
GID号
成员列表,彼此用逗号隔开
我们新创建的用户不能使用sudo ,如何改?
vi /etc/group
在sudo一行添加用户名。
sudo:x:27:linux,autor1,delep1
重点命令:
1:添加用户命令
addusr  usrname:
--:修改用户属性:usermod

选项:
usermod -g  gid/groupname  usrname: 将用户加入指定的组中,
usermod  -d  /home/dd -m  -l dd  delep1: 将原来用户名为delep1的用户名字更改为dd,同时家目录也更改为/home/dd.
--:删除用户:deluser
1:deluser  username: 删除用户但是不删除用户的家目录。
deluser  dd :
2: deluser   --remove-home  user1: 删除用户user1的同时删除用户的工作目录
如果说一个组里面只有一个用户,那么在删除这个用户的同时也会将这个组删除掉,前提是组名和用户名相同。
--添加组: addgroup
addgroup   newgroup
--:往组中添加成员。
usermod  -g  gid   usrname:
--: delgroup:删除组
delgroup   newgroup:当组中有用户时,不能删除组。


7:进程管理

进程的概念
程序的一次执行就是一个进程 :
进程包括pcb(进程控制块):包含进程的属性信息。

操作系统通过PID来区分进程。

重点:
1: ps:ps - report a snapshot of the current processes:显示进程信息。
ps axj: 来查看当前进程的详细信息

2: kill:向进程传递一个信号。
   kill  -l:查看信号列表,
kill  信号编号  pid: 给进程号为pid的进程发送一个信号。
信号9:杀死一个进程,
kill  -9  pid: kill 进程号为pid的进程。
3: top:动态显示内存信息和进程信息。

8:文件系统:
8-1:  linux下一切都是文件。 用于管理文件的方式或机制称为文件系统。

8-2: 文件系统的分类:
磁盘文件系统(本地文件系统): 本地主机中实际可以访问到的文件系统,有很多种包括:ext,fat等。

网络文件系统: 是可以远程访问的文件系统,存在于网络上的服务器中,

(重点)虚拟文件系统: 存在于内存中,将内核信息映射到此文件中。
/proc:


8:其它

补充:
/dev/null: 空文件,所有写入此文件的内容都会被丢弃,不占用磁盘空间。
--1: 2>  /dev/null  : 将错误信息丢弃。
--2:  cp  /dev/null   1.txt: 清空文件1.txt
vi:
u:撤销上一步操作
ctrl+r:反撤销。

作业:1:创建两个组delep and mang
sudo  addgroup  delep
sudo  addgroup  mang
2:创建3个用户d1,d2,d3并且将这三个用户添加到组delep中,
(补充) id: 列出当前用户的uid和gid等信息
sudo  adduser  --gid  1001  d1:create a user d1 并且添加到组id为1001的组中。
sudo  adduser  --gid  1001  d2:create a user d2 并且添加到组id为1001的组中。
sudo  adduser  d3: 创建一个组d3和一个用户d3,并把用户d3放到组d3中,
sudo  usermod  -g  1001  d3: 将用户d3放到gid为1001的组中。原来的组d3并没有被删除。
3:创建3个用户:m1,m2,m3并且将这三个用户添加到组mang中,
(补充) id: 列出当前用户的uid和gid等信息
sudo  adduser  --gid  1002  m1:create a user m1 并且添加到组id为1002的组中。
sudo  adduser  --gid  1002  m2:create a user m2 并且添加到组id为1002的组中。
sudo  adduser  m3: 创建一个组m3和一个用户m3,并把用户m3放到组m3中,
sudo  usermod  -g  1002  m3: 将用户m3放到gid为1002的组中。原来的组m3并没有被删除。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 基础 教程