私のOpenWrtルーターは、Public
私のSamba共有のいくつかの基本的なパラメータで構成されています/etc/samba/smb.conf
。これで、この共有にいくつかの追加パラメータを追加する必要があるので、設定の共有セクションのPublic
最後の行に追加したいと思います。
そのセクションの後にテキストを追加する方法を見つけましたが、これを行うと、テキストが最初の行に表示されます。
[Public]
path = /srv/public
create mask = 0700
directory mask = 0700
read only = yes
guest ok = yes
sed -i '/\[Public\]/a hello world' /tmp/sed.sh
出力
[Public]
hello world <--
path = /srv/public
create mask = 0700
directory mask = 0700
read only = yes
guest ok = yes
しかし、セクションの最後の行の後にテキストを配置したいと思います。
希望の出力
[Public]
path = /srv/public
create mask = 0700
directory mask = 0700
read only = yes
guest ok = yes
hello world <--
また、すべてのコードを1行に追加せずに複数行を追加できるようにheredoc(EOF)を追加する方法はありますか?
全体構成
[global]
netbios name = OpenWrt-AP1
interfaces = br-lan
server string = Samba on OpenWRT
unix charset = UTF-8
workgroup = WORKGROUP
## This global parameter allows the Samba admin to limit what interfaces on a machine will serve SMB requests.
bind interfaces only = yes
## time for inactive connections to-be closed in minutes
deadtime = 15
## disable core dumps
enable core files = no
## set security (auto, user, domain, ads)
security = user
## This parameter controls whether a remote client is allowed or required to use SMB encryption.
## It has different effects depending on whether the connection uses SMB1 or SMB2 and newer:
## If the connection uses SMB1, then this option controls the use of a Samba-specific extension to the SMB protocol introduced in Samba 3.2 that makes use of the Unix extensions.
## If the connection uses SMB2 or newer, then this option controls the use of the SMB-level encryption that is supported in SMB version 3.0 and above and available in Windows 8 and newer.
## (default/auto,desired,required,off)
#smb encrypt = default
## set invalid users
invalid users = root
## map unknow users to guest
map to guest = Bad User
## allow client access to accounts that have null passwords.
null passwords = yes
## The old plaintext passdb backend. Some Samba features will not work if this passdb backend is used. (NOTE: enabled for size reasons)
## (tdbsam,smbpasswd,ldapsam)
passdb backend = smbpasswd
## Set location of smbpasswd ('smbd -b' will show default compiled location)
#smb passwd file = /etc/samba/smbpasswd
## LAN (IPTOS_LOWDELAY TCP_NODELAY) WAN (IPTOS_THROUGHPUT) WiFi (SO_KEEPALIVE) try&error for buffer sizes (SO_RCVBUF=65536 SO_SNDBUF=65536)
socket options = IPTOS_LOWDELAY TCP_NODELAY
## If this integer parameter is set to a non-zero value, Samba will read from files asynchronously when the request size is bigger than this value.
## Note that it happens only for non-chained and non-chaining reads and when not using write cache.
## The only reasonable values for this parameter are 0 (no async I/O) and 1 (always do async I/O).
## (1/0)
#aio read size = 0
#aio write size = 0
## If Samba has been built with asynchronous I/O support, Samba will not wait until write requests are finished before returning the result to the client for files listed in this parameter.
## Instead, Samba will immediately return that the write request has been finished successfully, no matter if the operation will succeed or not.
## This might speed up clients without aio support, but is really dangerous, because data could be lost and files could be damaged.
#aio write behind = /*.tmp/
## lower CPU useage if supported and aio is disabled (aio read size = 0 ; aio write size = 0)
## is this still broken? issue is from 2019 (NOTE: see https://bugzilla.samba.org/show_bug.cgi?id=14095 )
## (no, yes)
#use sendfile = yes
## samba will behave as previous versions of Samba would and will fail the lock request immediately if the lock range cannot be obtained.
#blocking locks = No
## disable loading of all printcap printers by default (iprint, cups, lpstat)
load printers = No
printcap name = /dev/null
## Enabling this parameter will disable Samba's support for the SPOOLSS set of MS-RPC's.
disable spoolss = yes
## This parameters controls how printer status information is interpreted on your system.
## (BSD, AIX, LPRNG, PLP, SYSV, HPUX, QNX, SOFTQ)
printing = bsd
## Disable that nmbd is acting as a WINS server for unknow netbios names
#dns proxy = No
## win/unix user mapping backend
#idmap config * : backend = tdb
## Allows the server name that is advertised through MDNS to be set to the hostname rather than the Samba NETBIOS name.
## This allows an administrator to make Samba registered MDNS records match the case of the hostname rather than being in all capitals.
## (netbios, mdns)
mdns name = mdns
## Clients that only support netbios won't be able to see your samba server when netbios support is disabled.
#disable netbios = Yes
## Setting this value to no will cause nmbd never to become a local master browser.
#local master = no
## (auto, yes) If this is set to yes, on startup, nmbd will force an election, and it will have a slight advantage in winning the election. It is recommended that this parameter is used in conjunction with domain master = yes, so that nmbd can guarantee becoming a domain master.
#preferred master = yes
## (445 139) Specifies which ports the server should listen on for SMB traffic.
## 139 is netbios/nmbd
#smb ports = 445 139
## This is a list of files and directories that are neither visible nor accessible.
## Each entry in the list must be separated by a '/', which allows spaces to be included in the entry. '*' and '?' can be used to specify multiple files or directories as in DOS wildcards.
veto files = /Thumbs.db/.DS_Store/._.DS_Store/.apdisk/
## If a directory that is to be deleted contains nothing but veto files this deletion will fail unless you also set the delete veto files parameter to yes.
delete veto files = yes
################ Filesystem and creation rules ################
## reported filesystem type (NTFS,Samba,FAT)
#fstype = FAT
## Allows a user who has write access to the file (by whatever means, including an ACL permission) to modify the permissions (including ACL) on it.
#dos filemode = Yes
## file/dir creating rules
#create mask = 0666
#directory mask = 0777
#force group = root
#force user = root
#inherit owner = windows and unix
################################################################
######### Dynamic written config options #########
[Public]
path = /srv/public
create mask = 0700
directory mask = 0700
read only = yes
guest ok = yes
[Multimedia]
path = /srv/multimedia
create mask = 0700
directory mask = 0700
read only = yes
guest ok = yes
答え1
構成ファイルに追加する行を含むheredocでgnu sedを使用します。
add=$(sed -e 's:^:\t:;s:\\:&&:g;$!s:$:\\:' <<!
---> Hello, world! <---
---> ok tata by by <---
!
)
sed -e '
/^\[Public]/,/^$/!b
/./{
$a\
'"$add"'
}
//!i\
'"$add"'
' /etc/samba/smb.conf
- インデントレベルはタブです。
答え2
awk
私はこれを使用します
awk '/^\[Public\]/ {toggle=1} toggle && $0=="" {toggle=0; printf "\t%s\n", "hello world <--"} 1' /tmp/sed
一致する場合は、[Public]
トグルを設定し、長さ0の最初の行でトグルをリセットし、目的のテキストを挿入します。
awk '
/^\[Public\]/ {toggle=1} # or: $0=="[Public]"
toggle && $0=="" {toggle=0; printf "\t%s\n", "hello world <--"}
1
' /tmp/sed
答え3
いくつかのトリックを使用すると、次のawk
ブロックがこのブロックの後に始まり、レコード区切り文字として機能すると想定されます\n[
。最後のレコード区切り記号のために最後の行を削除しますhead
。
awk 'BEGIN {RS="\n\\[";ORS="\n["}
/Block 1/ {$0 = $0"\toption3 = value3\n"} {print}' 1 |
head -n-2
ネペレ
other config
#and a comment
[Block 1]
option1 = value1
option2 = value2
[Block 2]
option1 = value1
option2 = value2
出力
other config
#and a comment
[Block 1]
option1 = value1
option2 = value2
option3 = value3
[Block 2]
option1 = value1
option2 = value2